[Reproducible-commits] [doxygen] 03/04: Imported Upstream version 1.8.9.1

Mattia Rizzolo mattia at mapreri.org
Sat Apr 11 16:20:07 UTC 2015


This is an automated email from the git hooks/post-receive script.

mapreri-guest pushed a commit to branch master
in repository doxygen.

commit a450a08e1a5d1bd62d9f9ad685f186d0c767c4a3
Author: Mattia Rizzolo <mattia at mapreri.org>
Date:   Sat Apr 11 17:49:11 2015 +0200

    Imported Upstream version 1.8.9.1
---
 Makefile.in                                        |    5 +-
 README.md                                          |    4 +
 VERSION                                            |    1 -
 addon/doxmlparser/examples/metrics/Makefile        |   37 -
 .../doxmlparser/examples/metrics/Makefile.metrics  |   77 -
 addon/doxmlparser/examples/metrics/metrics.pro     |   27 -
 addon/doxmlparser/src/Makefile                     |   37 -
 addon/doxmlparser/src/Makefile.doxmlparser         |  224 --
 addon/doxmlparser/src/doxmlparser.pro              |   34 -
 addon/doxmlparser/test/Makefile                    |   37 -
 addon/doxmlparser/test/Makefile.xmlparse           |   77 -
 addon/doxmlparser/test/xmlparse.pro                |   27 -
 addon/doxysearch/doxyindexer.cpp                   |   21 +-
 addon/doxysearch/doxysearch.cpp                    |    8 +-
 addon/doxywizard/Makefile                          |   62 -
 addon/doxywizard/Makefile.doxywizard               |  436 ---
 addon/doxywizard/doxywizard.cpp                    |    6 +-
 addon/doxywizard/doxywizard.pro                    |   48 -
 addon/doxywizard/doxywizard.pro.in                 |    3 +-
 addon/doxywizard/expert.cpp                        |    2 +-
 configure                                          |   13 +-
 debian/README.jquery                               |   82 -
 debian/TODO                                        |    1 -
 debian/changelog                                   |  986 -----
 debian/compat                                      |    1 -
 debian/control                                     |  113 -
 debian/copyright                                   |  286 --
 debian/dh-doxygen/dh_doxygen                       |  162 -
 debian/dh-doxygen/dh_doxygen.1                     |  175 -
 debian/dh-doxygen/doxygen.pm                       |    8 -
 debian/doxygen-doc.doc-base                        |   18 -
 debian/doxygen-doc.files                           |    1 -
 debian/doxygen-doc.lintian-overrides               |    5 -
 debian/doxygen-gui.menu                            |    6 -
 debian/doxygen.NEWS                                |    6 -
 debian/doxygen.docs                                |    1 -
 debian/doxygen.install                             |    1 -
 debian/doxygen.manpages                            |    1 -
 debian/patches/clang-configure.diff                |   27 -
 debian/patches/dot-config.diff                     |   37 -
 debian/patches/dot_num_threads.diff                |   55 -
 debian/patches/doxygen-jquery.patch                |   12 -
 debian/patches/doxygen_direct_dot_run.diff         |   39 -
 debian/patches/fix-760700.diff                     |   67 -
 debian/patches/fix-762272.diff                     |   76 -
 debian/patches/fix_676423_segfault.patch           |   25 -
 debian/patches/gcc-g.diff                          |   26 -
 debian/patches/manpages.diff                       |   11 -
 debian/patches/qt4.diff                            |   22 -
 debian/patches/series                              |   13 -
 debian/patches/sqlite3-configure.diff              |   13 -
 debian/patches/system_tmake.patch                  |   20 -
 debian/qmake                                       |    2 -
 debian/rules                                       |  162 -
 debian/source/format                               |    1 -
 debian/tests/control                               |    2 -
 debian/tests/run                                   |   12 -
 debian/tmake                                       |    2 -
 debian/watch                                       |    2 -
 doc/.gitignore                                     |    1 -
 doc/Makefile                                       |   61 -
 doc/changelog.doc                                  |  201 +
 doc/commands.doc                                   |  113 +-
 doc/config.doc                                     |  186 +-
 doc/customize.doc                                  |    4 +-
 doc/language.doc                                   |   10 +-
 doc/mailto.txt                                     |    8 +
 doc/translator_report.txt                          |   70 +-
 examples/Makefile                                  |  151 -
 examples/example.cfg                               |    2 +-
 jquery/Makefile                                    |   25 +-
 jquery/README                                      |    5 +-
 jquery/split_jquery.pl                             |   25 -
 libmd5/Makefile                                    |   40 -
 libmd5/Makefile.libmd5                             |   82 -
 libmd5/libmd5.pro                                  |   17 -
 packages/rpm/doxygen.spec                          |    2 +-
 qtools/Doxyfile                                    |    2 +-
 qtools/Makefile                                    |   52 -
 qtools/Makefile.in                                 |    1 +
 qtools/qcstring.cpp                                |  630 ++--
 qtools/qcstring.h                                  |  820 +++--
 qtools/qfeatures.h                                 |    2 +-
 qtools/qfile_unix.cpp                              |    1 +
 qtools/qglobal.h                                   |    5 +-
 qtools/qgstring.cpp                                |    2 +-
 qtools/qstring.cpp                                 |   10 +-
 qtools/qtextcodec.cpp                              |    4 +-
 qtools/qtextstream.cpp                             |    6 +-
 qtools/qthread.cpp                                 |    1 +
 qtools/qtools.pro                                  |  109 -
 qtools/qtools.pro.in                               |    3 +-
 qtools/qutfcodec.cpp                               |    6 +-
 qtools/scstring.cpp                                |  798 ----
 qtools/scstring.h                                  |  155 -
 src/Makefile                                       |   75 -
 src/Makefile.libdoxycfg                            |  137 -
 src/cite.cpp                                       |   65 +-
 src/classdef.cpp                                   |  257 +-
 src/classdef.h                                     |    3 +-
 src/cmdmapper.cpp                                  |   11 +
 src/cmdmapper.h                                    |    4 +-
 src/code.l                                         |    1 -
 src/commentcnv.l                                   |   13 +-
 src/commentscan.l                                  |    6 +-
 src/condparser.h                                   |   19 +-
 src/config.h                                       |    1 +
 src/config.l                                       |   18 +-
 src/config.xml                                     |  184 +-
 src/configgen.py                                   |    1 +
 src/context.cpp                                    |  600 +--
 src/context.h                                      |   30 +-
 src/dbusxmlscanner.cpp                             |    2 +-
 src/declinfo.l                                     |    1 -
 src/define.cpp                                     |    2 +-
 src/definition.cpp                                 |  132 +-
 src/definition.h                                   |    3 +-
 src/diagram.cpp                                    |    2 +-
 src/dirdef.cpp                                     |   76 +-
 src/dirdef.h                                       |    3 +-
 src/docbookgen.cpp                                 |  258 +-
 src/docbookvisitor.cpp                             |  262 +-
 src/docbookvisitor.h                               |    8 +-
 src/docparser.cpp                                  |  591 ++-
 src/docparser.h                                    |   17 +-
 src/doctokenizer.h                                 |    2 +
 src/doctokenizer.l                                 |  115 +-
 src/dot.cpp                                        |  261 +-
 src/dot.h                                          |   16 +-
 src/doxygen.cpp                                    |  400 +-
 src/doxygen.h                                      |    1 -
 src/doxygen.pro                                    |   47 -
 src/entry.cpp                                      |   18 +-
 src/entry.h                                        |    2 +-
 src/filedef.cpp                                    |  174 +-
 src/filedef.h                                      |    4 +-
 src/filename.cpp                                   |   44 +-
 src/fortrancode.l                                  |  102 +-
 src/fortranscanner.l                               |  247 +-
 src/ftvhelp.cpp                                    |  578 +--
 src/groupdef.cpp                                   |  244 +-
 src/groupdef.h                                     |    4 +-
 src/htags.cpp                                      |    5 +-
 src/htmldocvisitor.cpp                             |   77 +-
 src/htmlentity.cpp                                 |    4 +-
 src/htmlgen.cpp                                    | 1068 +-----
 src/htmlhelp.cpp                                   |    5 +-
 src/index.cpp                                      |   36 +-
 src/jquery_fx.js                                   |    1 -
 src/jquery_p1.js                                   |   18 -
 src/jquery_p2.js                                   |   10 -
 src/jquery_p3.js                                   |    3 -
 src/jquery_pt.js                                   |    8 -
 src/jquery_ui.js                                   |   40 -
 src/lang_cfg.py                                    |    0
 src/latexdocvisitor.cpp                            |  319 +-
 src/latexdocvisitor.h                              |    6 +-
 src/latexgen.cpp                                   |   76 +-
 src/latexgen.h                                     |    2 +
 src/layout.cpp                                     |    2 +-
 src/layout_default.h                               |  194 -
 src/libdoxycfg.pro                                 |   34 -
 src/libdoxycfg.t                                   |   53 -
 src/libdoxygen.pro                                 |  245 --
 src/libdoxygen.pro.in                              |    8 +-
 src/libdoxygen.t                                   |  208 --
 src/libdoxygen.t.in                                |   92 +-
 src/lodepng.cpp                                    |   34 +-
 src/mangen.cpp                                     |   10 +-
 src/markdown.cpp                                   |    9 +-
 src/marshal.cpp                                    |    2 +-
 src/memberdef.cpp                                  |  229 +-
 src/memberdef.h                                    |    8 +-
 src/membergroup.cpp                                |   16 +-
 src/membergroup.h                                  |    4 +-
 src/memberlist.cpp                                 |   65 +-
 src/memberlist.h                                   |    6 +-
 src/message.cpp                                    |    9 +-
 src/msc.cpp                                        |    3 +-
 src/namespacedef.cpp                               |  107 +-
 src/namespacedef.h                                 |    2 +
 src/pagedef.cpp                                    |   48 +-
 src/pagedef.h                                      |    2 +
 src/parserintf.h                                   |    4 +
 src/perlmodgen.cpp                                 |    1 -
 src/plantuml.cpp                                   |   37 +-
 src/portable.cpp                                   |   13 +-
 src/pre.l                                          |   13 +-
 src/printdocvisitor.h                              |    2 +-
 src/pycode.l                                       |    1 -
 src/pyscanner.l                                    |   17 +-
 src/qhp.cpp                                        |   12 +-
 src/qhp.h                                          |    3 +-
 src/reflist.cpp                                    |    8 +
 src/reflist.h                                      |    5 +-
 src/res2cc_cmd.py                                  |  118 +
 src/resize_js.h                                    |   93 -
 src/resourcemgr.cpp                                |  183 +
 src/resourcemgr.h                                  |   63 +
 src/rtfdocvisitor.cpp                              |   16 +-
 src/rtfgen.cpp                                     |   34 +-
 src/rtfgen.h                                       |    3 +-
 src/rtfstyle.h                                     |    2 +-
 src/scanner.l                                      |   14 +-
 src/searchindex.cpp                                |   55 +-
 src/searchindex.h                                  |    1 -
 src/store.cpp                                      |    4 +-
 src/tagreader.cpp                                  |   37 +-
 src/tclscanner.l                                   |   23 +-
 src/template.cpp                                   |  316 +-
 src/tooltip.cpp                                    |    2 +-
 src/translator_br.h                                |  218 +-
 src/translator_hr.h                                |    4 +-
 src/translator_kr.h                                |   54 +-
 src/translator_lt.h                                |    2 +-
 src/translator_pt.h                                |  190 +-
 src/translator_ru.h                                |    2 +-
 src/translator_sr.h                                |   16 +-
 src/translator_tw.h                                |   13 +-
 src/translator_ua.h                                |    2 +-
 src/translator_vi.h                                |    8 +-
 src/util.cpp                                       |  112 +-
 src/util.h                                         |   10 +-
 src/version.cpp                                    |    2 +-
 src/vhdlcode.l                                     |   10 +-
 src/vhdldocgen.cpp                                 |  150 +-
 src/vhdldocgen.h                                   |    1 +
 src/vhdljjparser.cpp                               |  105 +-
 src/xmldocvisitor.cpp                              |  105 +-
 src/xmlgen.cpp                                     |  132 +-
 templates/html/arrowdown.luma                      |   49 +
 templates/html/arrowright.luma                     |   49 +
 templates/html/bc_s.luma                           |   66 +
 templates/html/bdwn.luma                           |   21 +
 {src => templates/html}/bib2xhtml.pl               |    0
 templates/html/close.png                           |  Bin 0 -> 273 bytes
 templates/html/closed.luma                         |   23 +
 templates/html/doc.luma                            |   50 +
 {src => templates/html}/doxygen.bst                |    0
 {src => templates/html}/doxygen.css                |   17 +-
 templates/html/doxygen.luma                        |   68 +
 {src => templates/html}/dynsections.js             |    0
 {src => templates/html}/extsearch.js               |    2 +-
 templates/html/folderclosed.luma                   |   49 +
 templates/html/folderopen.luma                     |   49 +
 {src => templates/html}/footer.html                |    0
 {src => templates/html}/header.html                |    0
 templates/html/htmlallmembers.tpl                  |   22 +
 templates/html/htmlannotated.tpl                   |   15 +
 templates/html/htmlbase.tpl                        |  216 ++
 templates/html/htmlclass.tpl                       |  452 +++
 templates/html/htmlclasses.tpl                     |   49 +
 templates/html/htmlclmembers.tpl                   |   20 +
 templates/html/htmlclmembersindex.tpl              |   26 +
 templates/html/htmldeclcomp.tpl                    |   32 +
 templates/html/htmldir.tpl                         |   78 +
 templates/html/htmldirtree.tpl                     |   46 +
 templates/html/htmldyncontents.tpl                 |    7 +
 templates/html/htmldynheader.tpl                   |    7 +
 templates/html/htmlfile.tpl                        |  256 ++
 templates/html/htmlfiles.tpl                       |   15 +
 templates/html/htmlflmembers.tpl                   |   20 +
 templates/html/htmlgraphhierarchy.tpl              |   13 +
 templates/html/htmlhierarchy.tpl                   |   17 +
 templates/html/htmlinclude.tpl                     |   27 +
 templates/html/htmlindexpages.tpl                  |   19 +
 templates/html/htmljsnavindex.tpl                  |    7 +
 templates/html/htmljsnavtree.tpl                   |   20 +
 templates/html/htmllayout.tpl                      |  237 ++
 templates/html/htmlmemberindex.tpl                 |   37 +
 templates/html/htmlmembersindex.tpl                |   81 +
 templates/html/htmlmembertabs.tpl                  |   48 +
 templates/html/htmlmemdecl.tpl                     |  214 ++
 templates/html/htmlmemdecls.tpl                    |   38 +
 templates/html/htmlmemdef.tpl                      |  284 ++
 templates/html/htmlmeminherit.tpl                  |   20 +
 templates/html/htmlmemlist.tpl                     |   15 +
 templates/html/htmlmemsummary.tpl                  |    7 +
 templates/html/htmlmodule.tpl                      |  310 ++
 templates/html/htmlmodules.tpl                     |   15 +
 templates/html/htmlnamespace.tpl                   |  206 ++
 templates/html/htmlnamespaces.tpl                  |   15 +
 templates/html/htmlnavpath.tpl                     |   14 +
 templates/html/htmlnavtree.tpl                     |   22 +
 templates/html/htmlnsmembers.tpl                   |   20 +
 templates/html/htmlnsmembersindex.tpl              |   26 +
 templates/html/htmlobjlink.tpl                     |    6 +
 templates/html/htmlpage.tpl                        |   58 +
 templates/html/htmlpages.tpl                       |   15 +
 templates/html/htmlsource.tpl                      |   37 +
 templates/html/htmltabs.tpl                        |   96 +
 templates/html/htmltypeconstraints.tpl             |   13 +
 templates/html/jquery.js                           |   68 +
 templates/html/mag.png                             |  Bin 0 -> 524 bytes
 templates/html/mag_sel.png                         |  Bin 0 -> 563 bytes
 templates/html/nav_f.lum                           |   11 +
 templates/html/nav_g.png                           |  Bin 0 -> 95 bytes
 templates/html/nav_h.lum                           |    6 +
 {src => templates/html}/navtree.css                |    2 +-
 {src => templates/html}/navtree.js                 |   16 +-
 templates/html/open.luma                           |   23 +
 {src => templates/html}/resize.js                  |    0
 {src => templates/html}/search.css                 |    0
 {src => templates/html}/search.js                  |   65 +-
 {src => templates/html}/search_functions.php       |    2 +-
 templates/html/search_l.png                        |  Bin 0 -> 604 bytes
 templates/html/search_m.png                        |  Bin 0 -> 158 bytes
 src/search.css => templates/html/search_noidx.css  |    2 +-
 {src => templates/html}/search_opensearch.php      |    6 +-
 templates/html/search_r.png                        |  Bin 0 -> 612 bytes
 templates/html/splitbar.lum                        | 1028 ++++++
 {src => templates/html}/svgpan.js                  |    0
 templates/html/sync_off.luma                       |   54 +
 templates/html/sync_on.luma                        |   54 +
 templates/html/tab_a.lum                           |    8 +
 templates/html/tab_b.lum                           |    8 +
 templates/html/tab_h.lum                           |    8 +
 templates/html/tab_s.lum                           |    8 +
 templates/html/tabs.css                            |   60 +
 {src => templates/latex}/doxygen.sty               |    2 +
 {src => templates/xml}/compound.xsd                |   21 +
 {src => templates/xml}/index.xsd                   |    0
 testing/008/008__brief_8c.xml                      |    2 +-
 testing/009/class_bug.xml                          |    2 +-
 testing/009/class_deprecated.xml                   |    2 +-
 testing/009/class_reminder.xml                     |    2 +-
 testing/009/class_test.xml                         |    2 +-
 testing/009/class_todo.xml                         |    2 +-
 testing/011/category_integer_07_arithmetic_08.xml  |    2 +-
 testing/011/interface_integer.xml                  |    2 +-
 testing/013/class_t1.xml                           |    2 +-
 testing/013/class_t2.xml                           |    2 +-
 testing/013/class_t3.xml                           |    2 +-
 testing/013/class_t4.xml                           |    2 +-
 testing/015/015__cond_8c.xml                       |    2 +-
 testing/016/016__copydoc_8c.xml                    |    2 +-
 testing/018/018__def_8c.xml                        |    2 +-
 testing/022/indexpage.xml                          |    5 +-
 testing/025/class_test.xml                         |    2 +-
 testing/026/class_test.xml                         |    2 +-
 testing/027/struct_car.xml                         |    2 +-
 testing/027/struct_object.xml                      |    2 +-
 testing/027/struct_truck.xml                       |    2 +-
 testing/027/struct_vehicle.xml                     |    2 +-
 testing/029/029__hideinit_8c.xml                   |    2 +-
 testing/035/035__invariant_8c.xml                  |    2 +-
 testing/036/036__link_8c.xml                       |    2 +-
 testing/037/class_receiver.xml                     |    7 +-
 testing/037/class_sender.xml                       |    7 +-
 testing/039/class_test.xml                         |    2 +-
 testing/040/namespace_n_s.xml                      |    2 +-
 testing/041/class_test.xml                         |    2 +-
 testing/042/namespaceorg_1_1doxygen_1_1_test.xml   |    2 +-
 testing/044/struct_s.xml                           |    2 +-
 testing/046/046__related_8cpp.xml                  |    2 +-
 testing/046/class_test.xml                         |    2 +-
 testing/047/047__return_8cpp.xml                   |    2 +-
 testing/048/048__showinit_8c.xml                   |    2 +-
 testing/054/054__parblock_8cpp.xml                 |    2 +-
 testing/057/057__caller__graphs_8tcl.xml           |    2 +-
 testing/057/__057__caller__graphs_8tcl.xml         |    2 +-
 testing/057/namespace1.xml                         |    2 +-
 testing/057/namespace1_1_11.xml                    |    2 +-
 testing/057/namespace1_1_11_1_11.xml               |    2 +-
 testing/057/namespace2.xml                         |    2 +-
 testing/057/namespace2_1_12.xml                    |    2 +-
 testing/057/namespace2_1_12_1_12.xml               |    2 +-
 testing/057/namespace2_1_12_1_12_1_12.xml          |    2 +-
 testing/057/namespace2_1_12_1_12_1_12_1_12.xml     |    2 +-
 testing/057/namespacebar.xml                       |    2 +-
 testing/057/namespacefoo.xml                       |    2 +-
 testing/058/058__bracket__recursion_8tcl.xml       |    2 +-
 testing/059/059__command__catch_8tcl.xml           |    2 +-
 testing/060/060__command__switch_8tcl.xml          |    2 +-
 testing/061/class_test.xml                         |    2 +-
 testing/062/namespacen1.xml                        |    2 +-
 testing/062/namespacen2.xml                        |    2 +-
 testing/062/namespacen3.xml                        |    2 +-
 testing/063/namespaceoo.xml                        |    2 +-
 testing/063/namespaceoo_1_1_helpers.xml            |    2 +-
 testing/063/namespaceoo_1_1define.xml              |    2 +-
 testing/064/struct_foo.xml                         |  112 +
 testing/064_castoperator.cpp                       |   25 +
 testing/{022 => 065}/indexpage.xml                 |    9 +-
 testing/065_tilde.dox                              |   12 +
 testing/html/063__bug__729092_8tcl.html            |   13 +-
 testing/html/arrowdown.png                         |  Bin 0 -> 246 bytes
 testing/html/arrowright.png                        |  Bin 0 -> 229 bytes
 testing/html/doc.png                               |  Bin 0 -> 746 bytes
 testing/html/doxygen.css                           |   19 +-
 testing/html/files.html                            |   13 +-
 testing/html/folderclosed.png                      |  Bin 0 -> 616 bytes
 testing/html/folderopen.png                        |  Bin 0 -> 597 bytes
 testing/html/index.html                            |   13 +-
 testing/html/jquery.js                             |   57 +-
 testing/html/namespacemembers.html                 |   13 +-
 testing/html/namespacemembers_func.html            |   13 +-
 testing/html/namespaceoo.html                      |   13 +-
 testing/html/namespaceoo_1_1_helpers.html          |   13 +-
 testing/html/namespaceoo_1_1define.html            |   13 +-
 testing/html/namespaces.html                       |   13 +-
 testing/html/search/all_0.html                     |    2 +-
 testing/html/search/all_1.html                     |    2 +-
 testing/html/search/all_2.html                     |    2 +-
 testing/html/search/files_0.html                   |    2 +-
 testing/html/search/functions_0.html               |    2 +-
 testing/html/search/namespaces_0.html              |    2 +-
 testing/html/search/search.js                      |   88 +-
 testing/html/search/searchdata.js                  |   24 +
 testing/html/splitbar.png                          |  Bin 0 -> 314 bytes
 testing/runtests.pl                                |    2 +-
 tmake/lib/linux-g++/tmake.conf                     |    2 +-
 tmake/lib/macosx-c++/tmake.conf                    |    2 +-
 vhdlparser/CharStream.cc                           |    4 +-
 vhdlparser/CharStream.h                            |  190 +-
 vhdlparser/ErrorHandler.h                          |   21 +-
 vhdlparser/JavaCC.h                                |   25 +-
 vhdlparser/JavaCC.h.in                             |   25 +-
 vhdlparser/Makefile                                |   62 -
 vhdlparser/Makefile.in                             |    3 +-
 vhdlparser/Makefile.vhdlparser                     |  165 -
 vhdlparser/ParseException.cc                       |    6 +-
 vhdlparser/ParseException.h                        |    4 +-
 vhdlparser/Token.cc                                |    4 +-
 vhdlparser/Token.h                                 |    7 +-
 vhdlparser/TokenManager.h                          |   13 +-
 vhdlparser/TokenMgrError.cc                        |    7 +-
 vhdlparser/TokenMgrError.h                         |   23 +-
 vhdlparser/VhdlParser.cc                           |  478 ++-
 vhdlparser/VhdlParser.h                            | 3822 ++++++++++----------
 vhdlparser/VhdlParserConstants.h                   |    7 +-
 vhdlparser/VhdlParserIF.cpp                        |    1 +
 vhdlparser/VhdlParserTokenManager.cc               |   90 +-
 vhdlparser/VhdlParserTokenManager.h                |   27 +-
 vhdlparser/vhdlparser.jj                           | 1149 +++---
 vhdlparser/vhdlparser.patch                        |   10 -
 vhdlparser/vhdlparser.pro                          |   40 -
 vhdlparser/vhdlstring.h                            |    6 +-
 winbuild/.gitignore                                |    7 -
 winbuild/Doxygen.vcproj                            | 3763 ++++++++++++++-----
 winbuild/GenResources.rules                        |   19 +
 winbuild/qtools.vcproj                             |    6 +-
 442 files changed, 17397 insertions(+), 15892 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index a83f08b..af7a76f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -35,6 +35,7 @@ distclean: clean
 	-cd src ; $(MAKE) distclean
 	-cd libmd5 ; $(MAKE) distclean
 	-cd vhdlparser ; $(MAKE) distclean
+	-cd qtools ; $(MAKE) distclean
 	-cd addon/doxywizard ; $(MAKE) distclean
 	-cd addon/doxysearch ; $(MAKE) distclean
 	-cd addon/doxyapp ; $(MAKE) distclean
@@ -101,7 +102,7 @@ pdf: docs
 DISTFILES =  Doxyfile vhdlparser libmd5 addon tmake doc examples bin lib objects testing \
              qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
              Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
-             VERSION README.md packages winbuild jquery
+             VERSION README.md packages winbuild jquery templates
 
 archive: clean
 	tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
@@ -111,7 +112,7 @@ DISTDIR = doxygen-`echo $(VERSION) | tr - _`
 dist: clean
 	rm -rf $(DISTDIR)
 	mkdir $(DISTDIR)
-	cp -a $(DISTFILES) README $(DISTDIR)
+	cp -a $(DISTFILES) $(DISTDIR)
 	find $(DISTDIR) \( -name ".svn" \) -print0 | xargs -0 rm -rf
 	tar zcvf $(DISTDIR).src.tar.gz $(DISTDIR)
 	rm -rf $(DISTDIR)
diff --git a/README.md b/README.md
index eb0e103..3360bf9 100644
--- a/README.md
+++ b/README.md
@@ -31,10 +31,14 @@ Developers
 ---------
 * Build Status: <a href="https://travis-ci.org/doxygen/doxygen"><img src="https://secure.travis-ci.org/doxygen/doxygen.png?branch=master"/></a>
 
+* Coverity Scan Build Status: <a href="https://scan.coverity.com/projects/2860"> <img alt="Coverity Scan Build Status" src="https://scan.coverity.com/projects/2860/badge.svg"/> </a>
+
 * Install
   * Quick install see (./INSTALL) 
   * else http://www.doxygen.org/manual/install.html
 
+* Project stats: https://www.openhub.net/p/doxygen
+
 Issues, bugs, requests, ideas
 ----------------------------------
 Use the bug tracker to report bugs:
diff --git a/VERSION b/VERSION
deleted file mode 100644
index 1790d35..0000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.8.8
diff --git a/addon/doxmlparser/examples/metrics/Makefile b/addon/doxmlparser/examples/metrics/Makefile
deleted file mode 100644
index 5282f9b..0000000
--- a/addon/doxmlparser/examples/metrics/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-all clean depend: Makefile.metrics 
-	$(MAKE) -f Makefile.metrics $@
-
-distclean: clean
-	$(RM) -rf Makefile.metrics metrics.pro Makefile obj
-
-realclean: distclean
-
-tmake:
-	$(ENV) $(PERL) $(TMAKE) metrics.pro >Makefile.metrics
-
-Makefile.metrics: metrics.pro
-	$(ENV) $(PERL) $(TMAKE) metrics.pro >Makefile.metrics
-
-install:
diff --git a/addon/doxmlparser/examples/metrics/Makefile.metrics b/addon/doxmlparser/examples/metrics/Makefile.metrics
deleted file mode 100644
index 90e4cb6..0000000
--- a/addon/doxmlparser/examples/metrics/Makefile.metrics
+++ /dev/null
@@ -1,77 +0,0 @@
-#############################################################################
-# Makefile for building ../../../../bin/metrics
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: metrics
-#    Template: app.t
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I../../../../qtools -I../../include -I/opt/local/include
-LINK	=	c++
-LFLAGS	=	-Wl,-search_paths_first
-LIBS	=	-L../../../../lib -ldoxmlparser -lqtools -L/opt/local/lib -liconv -framework CoreServices
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	
-SOURCES =	main.cpp
-OBJECTS =	../../../../objects/doxmlparer/metrics/main.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../../../../bin/metrics
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) ../../../../lib/libdoxmlparser.a
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake metrics.pro
-
-dist:
-	$(TAR) metrics.tar metrics.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) metrics.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../../../../objects/doxmlparer/metrics/main.o: main.cpp \
-		../../include/doxmlintf.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../../objects/doxmlparer/metrics/main.o main.cpp
-
diff --git a/addon/doxmlparser/examples/metrics/metrics.pro b/addon/doxmlparser/examples/metrics/metrics.pro
deleted file mode 100644
index 5eeac94..0000000
--- a/addon/doxmlparser/examples/metrics/metrics.pro
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# This file was generated from metrics.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE     =	app.t
-CONFIG       =	console warn_on debug
-HEADERS      =	
-SOURCES      =	main.cpp
-unix:LIBS                   += -L../../../../lib -ldoxmlparser -lqtools
-win32:INCLUDEPATH           += .
-win32-mingw:LIBS            += -L../../../../lib -ldoxmlparser -lqtools
-win32-msvc:LIBS             += doxmlparser.lib qtools.lib shell32.lib 
-win32-msvc:TMAKE_LFLAGS     += /LIBPATH:..\..\..\..\lib;
-win32-borland:LIBS          += doxmlparser.lib qtools.lib shell32.lib
-win32-borland:TMAKE_LFLAGS  += -L..\..\..\..\lib
-win32:TMAKE_CXXFLAGS        += -DQT_NODLL
-DESTDIR                     = ../../../../bin
-OBJECTS_DIR                 = ../../../../objects/doxmlparer/metrics
-TARGET                      = metrics
-DEPENDPATH                  = ../../include
-INCLUDEPATH                += ../../../../qtools ../../include
-unix:TARGETDEPS             = ../../../../lib/libdoxmlparser.a
-win32:TARGETDEPS            = ..\..\..\..\lib\doxmlparser.lib
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/addon/doxmlparser/src/Makefile b/addon/doxmlparser/src/Makefile
deleted file mode 100644
index 9cb684b..0000000
--- a/addon/doxmlparser/src/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-all clean depend: Makefile.doxmlparser 
-	$(MAKE) -f Makefile.doxmlparser $@
-
-distclean: clean
-	$(RM) -rf Makefile.doxmlparser doxmlparser.pro Makefile obj
-
-realclean: distclean
-
-tmake:
-	$(ENV) $(PERL) $(TMAKE) doxmlparser.pro >Makefile.doxmlparser
-
-Makefile.doxmlparser: doxmlparser.pro
-	$(ENV) $(PERL) $(TMAKE) doxmlparser.pro >Makefile.doxmlparser
-
-install:
diff --git a/addon/doxmlparser/src/Makefile.doxmlparser b/addon/doxmlparser/src/Makefile.doxmlparser
deleted file mode 100644
index ce9f0d5..0000000
--- a/addon/doxmlparser/src/Makefile.doxmlparser
+++ /dev/null
@@ -1,224 +0,0 @@
-#############################################################################
-# Makefile for building ../../../lib/libdoxmlparser.a
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: doxmlparser
-#    Template: lib.t
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I../../../qtools -I../include -I/opt/local/include
-AR	=	ar cq
-RANLIB	=	ranlib
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	basehandler.h \
-		mainhandler.h \
-		compoundhandler.h \
-		sectionhandler.h \
-		memberhandler.h \
-		paramhandler.h \
-		dochandler.h \
-		linkedtexthandler.h \
-		debug.h \
-		graphhandler.h \
-		stringimpl.h \
-		loamhandler.h
-SOURCES =	mainhandler.cpp \
-		compoundhandler.cpp \
-		sectionhandler.cpp \
-		memberhandler.cpp \
-		paramhandler.cpp \
-		dochandler.cpp \
-		linkedtexthandler.cpp \
-		basehandler.cpp \
-		debug.cpp \
-		graphhandler.cpp \
-		loamhandler.cpp
-OBJECTS =	../../../objects/doxmlparser/mainhandler.o \
-		../../../objects/doxmlparser/compoundhandler.o \
-		../../../objects/doxmlparser/sectionhandler.o \
-		../../../objects/doxmlparser/memberhandler.o \
-		../../../objects/doxmlparser/paramhandler.o \
-		../../../objects/doxmlparser/dochandler.o \
-		../../../objects/doxmlparser/linkedtexthandler.o \
-		../../../objects/doxmlparser/basehandler.o \
-		../../../objects/doxmlparser/debug.o \
-		../../../objects/doxmlparser/graphhandler.o \
-		../../../objects/doxmlparser/loamhandler.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../../../lib/libdoxmlparser.a
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-staticlib: $(TARGET)
-
-$(TARGET): $(OBJECTS) $(OBJMOC) 
-	-rm -f $(TARGET)
-	$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)
-	ranlib $(TARGET)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake doxmlparser.pro
-
-dist:
-	$(TAR) doxmlparser.tar doxmlparser.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) doxmlparser.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../../../objects/doxmlparser/mainhandler.o: mainhandler.cpp \
-		mainhandler.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		compoundhandler.h \
-		stringimpl.h \
-		baseiterator.h \
-		sectionhandler.h \
-		graphhandler.h \
-		dochandler.h \
-		memberhandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/mainhandler.o mainhandler.cpp
-
-../../../objects/doxmlparser/compoundhandler.o: compoundhandler.cpp \
-		mainhandler.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		compoundhandler.h \
-		stringimpl.h \
-		baseiterator.h \
-		dochandler.h \
-		graphhandler.h \
-		sectionhandler.h \
-		paramhandler.h \
-		loamhandler.h \
-		memberhandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/compoundhandler.o compoundhandler.cpp
-
-../../../objects/doxmlparser/sectionhandler.o: sectionhandler.cpp \
-		mainhandler.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		compoundhandler.h \
-		stringimpl.h \
-		baseiterator.h \
-		sectionhandler.h \
-		memberhandler.h \
-		dochandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/sectionhandler.o sectionhandler.cpp
-
-../../../objects/doxmlparser/memberhandler.o: memberhandler.cpp \
-		memberhandler.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		baseiterator.h \
-		stringimpl.h \
-		sectionhandler.h \
-		dochandler.h \
-		mainhandler.h \
-		linkedtexthandler.h \
-		paramhandler.h \
-		compoundhandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/memberhandler.o memberhandler.cpp
-
-../../../objects/doxmlparser/paramhandler.o: paramhandler.cpp \
-		paramhandler.h \
-		doxmlintf.h \
-		stringimpl.h \
-		basehandler.h \
-		debug.h \
-		baseiterator.h \
-		memberhandler.h \
-		linkedtexthandler.h \
-		dochandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/paramhandler.o paramhandler.cpp
-
-../../../objects/doxmlparser/dochandler.o: dochandler.cpp \
-		dochandler.h \
-		doxmlintf.h \
-		stringimpl.h \
-		basehandler.h \
-		debug.h \
-		baseiterator.h \
-		linkedtexthandler.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/dochandler.o dochandler.cpp
-
-../../../objects/doxmlparser/linkedtexthandler.o: linkedtexthandler.cpp \
-		linkedtexthandler.h \
-		baseiterator.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		stringimpl.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/linkedtexthandler.o linkedtexthandler.cpp
-
-../../../objects/doxmlparser/basehandler.o: basehandler.cpp \
-		basehandler.h \
-		debug.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/basehandler.o basehandler.cpp
-
-../../../objects/doxmlparser/debug.o: debug.cpp \
-		debug.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/debug.o debug.cpp
-
-../../../objects/doxmlparser/graphhandler.o: graphhandler.cpp \
-		graphhandler.h \
-		stringimpl.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		baseiterator.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/graphhandler.o graphhandler.cpp
-
-../../../objects/doxmlparser/loamhandler.o: loamhandler.cpp \
-		loamhandler.h \
-		doxmlintf.h \
-		basehandler.h \
-		debug.h \
-		memberhandler.h \
-		baseiterator.h \
-		stringimpl.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/loamhandler.o loamhandler.cpp
-
diff --git a/addon/doxmlparser/src/doxmlparser.pro b/addon/doxmlparser/src/doxmlparser.pro
deleted file mode 100644
index 42230de..0000000
--- a/addon/doxmlparser/src/doxmlparser.pro
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# This file was generated from doxmlparser.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE     =	lib.t
-CONFIG       =	console staticlib warn_on debug
-HEADERS      =	basehandler.h mainhandler.h \
-                compoundhandler.h sectionhandler.h \
-                memberhandler.h paramhandler.h \
-                dochandler.h linkedtexthandler.h \
-                debug.h graphhandler.h stringimpl.h \
-                loamhandler.h
-SOURCES      =	mainhandler.cpp \
-                compoundhandler.cpp sectionhandler.cpp \
-                memberhandler.cpp paramhandler.cpp \
-                dochandler.cpp linkedtexthandler.cpp \
-                basehandler.cpp debug.cpp graphhandler.cpp \
-                loamhandler.cpp
-unix:LIBS                  += -L../../../lib -lqtools 
-win32:INCLUDEPATH          += .
-win32-mingw:LIBS           += -L../../../lib -lqtools 
-win32-msvc:LIBS            += qtools.lib shell32.lib 
-win32-msvc:TMAKE_LFLAGS    += /LIBPATH:....\\..\lib
-win32-borland:LIBS         += qtools.lib doxycfg.lib shell32.lib
-win32-borland:TMAKE_LFLAGS += -L..\..\..\lib
-win32:TMAKE_CXXFLAGS       += -DQT_NODLL
-DESTDIR                     = ../../../lib
-OBJECTS_DIR                 = ../../../objects/doxmlparser
-TARGET                      = doxmlparser
-INCLUDEPATH                += ../../../qtools ../include
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/addon/doxmlparser/test/Makefile b/addon/doxmlparser/test/Makefile
deleted file mode 100644
index ec3c5ba..0000000
--- a/addon/doxmlparser/test/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-all clean depend: Makefile.xmlparse 
-	$(MAKE) -f Makefile.xmlparse $@
-
-distclean: clean
-	$(RM) -rf Makefile.xmlparse xmlparse.pro Makefile obj
-
-realclean: distclean
-
-tmake:
-	$(ENV) $(PERL) $(TMAKE) xmlparse.pro >Makefile.xmlparse
-
-Makefile.xmlparse: xmlparse.pro
-	$(ENV) $(PERL) $(TMAKE) xmlparse.pro >Makefile.xmlparse
-
-install:
diff --git a/addon/doxmlparser/test/Makefile.xmlparse b/addon/doxmlparser/test/Makefile.xmlparse
deleted file mode 100644
index b219a97..0000000
--- a/addon/doxmlparser/test/Makefile.xmlparse
+++ /dev/null
@@ -1,77 +0,0 @@
-#############################################################################
-# Makefile for building ../../../bin/xmlparse
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: xmlparse
-#    Template: app.t
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I../../../qtools -I../include -I/opt/local/include
-LINK	=	c++
-LFLAGS	=	-Wl,-search_paths_first
-LIBS	=	-L../../../lib -ldoxmlparser -lqtools -L/opt/local/lib -liconv -framework CoreServices
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	
-SOURCES =	main.cpp
-OBJECTS =	../../../objects/doxmlparser/test/main.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../../../bin/xmlparse
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) ../../../lib/libdoxmlparser.a
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake xmlparse.pro
-
-dist:
-	$(TAR) xmlparse.tar xmlparse.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) xmlparse.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../../../objects/doxmlparser/test/main.o: main.cpp \
-		../include/doxmlintf.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../../objects/doxmlparser/test/main.o main.cpp
-
diff --git a/addon/doxmlparser/test/xmlparse.pro b/addon/doxmlparser/test/xmlparse.pro
deleted file mode 100644
index 9849c9b..0000000
--- a/addon/doxmlparser/test/xmlparse.pro
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# This file was generated from xmlparse.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE     =	app.t
-CONFIG       =	console warn_on debug
-HEADERS      =	
-SOURCES      =	main.cpp
-unix:LIBS                   += -L../../../lib -ldoxmlparser -lqtools
-win32:INCLUDEPATH           += .
-win32-mingw:LIBS            += -L../../../lib -ldoxmlparser -lqtools
-win32-msvc:LIBS             += doxmlparser.lib qtools.lib shell32.lib 
-win32-msvc:TMAKE_LFLAGS     += /LIBPATH:..\..\..\lib;..\lib
-win32-borland:LIBS          += doxmlparser.lib qtools.lib shell32.lib
-win32-borland:TMAKE_LFLAGS  += -L..\..\..\lib
-win32:TMAKE_CXXFLAGS        += -DQT_NODLL
-DESTDIR                     = ../../../bin
-OBJECTS_DIR                 = ../../../objects/doxmlparser/test
-TARGET                      = xmlparse
-INCLUDEPATH                += ../../../qtools ../include
-DEPENDPATH                 += ../include
-unix:TARGETDEPS             = ../../../lib/libdoxmlparser.a
-win32:TARGETDEPS            = ..\..\..\lib\doxmlparser.lib
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/addon/doxysearch/doxyindexer.cpp b/addon/doxysearch/doxyindexer.cpp
index b44a940..e1006be 100644
--- a/addon/doxysearch/doxyindexer.cpp
+++ b/addon/doxysearch/doxyindexer.cpp
@@ -30,12 +30,19 @@
 // Xapian include
 #include <xapian.h>
 
+#define MAX_TERM_LENGTH 245
+
 #if defined(_WIN32) && !defined(__CYGWIN__)
 static char pathSep = '\\';
 #else
 static char pathSep = '/';
 #endif
 
+static void safeAddTerm(const std::string &term,Xapian::Document &doc,int wfd)
+{
+  if (term.length()<=MAX_TERM_LENGTH) doc.add_term(term,wfd);
+}
+
 /** trims \a whitespace characters from the start and end of string \a str. */
 static std::string trim(const std::string& str,
                         const std::string& whitespace = " \t")
@@ -86,10 +93,10 @@ static void addWords(const std::string &s,Xapian::Document &doc,int wfd)
     std::string word = *it;
     std::string lword = word;
     std::transform(lword.begin(), lword.end(), lword.begin(), ::tolower);
-    doc.add_term(word,wfd);
+    safeAddTerm(word,doc,wfd);
     if (lword!=word)
     {
-      doc.add_term(lword,wfd);
+      safeAddTerm(lword,doc,wfd);
     }
   }
 }
@@ -102,7 +109,7 @@ static void addIdentifiers(const std::string &s,Xapian::Document &doc,int wfd)
   QCString qs = s.c_str();
   while ((i=re.match(qs,p,&l))!=-1)
   {
-    doc.add_term(qs.mid(p,i-p).data(),wfd);
+    safeAddTerm(qs.mid(p,i-p).data(),doc,wfd);
     p=i+l;
   }
 }
@@ -201,18 +208,18 @@ class XMLContentHandler : public QXmlDefaultHandler
             m_doc.get_value(TypeField)=="file" || 
             m_doc.get_value(TypeField)=="namespace") // containers get highest prio
         {
-          m_doc.add_term(term,1000);
+          safeAddTerm(term,m_doc,1000);
           if (!partTerm.empty())
           {
-            m_doc.add_term(partTerm,500);
+            safeAddTerm(partTerm,m_doc,500);
           }
         }
         else // members and others get lower prio
         {
-          m_doc.add_term(m_doc.get_value(NameField),100);
+          safeAddTerm(m_doc.get_value(NameField),m_doc,100);
           if (!partTerm.empty())
           {
-            m_doc.add_term(partTerm,50);
+            safeAddTerm(partTerm,m_doc,50);
           }
         }
         m_db.add_document(m_doc);
diff --git a/addon/doxysearch/doxysearch.cpp b/addon/doxysearch/doxysearch.cpp
index 11af8e3..f6946ef 100644
--- a/addon/doxysearch/doxysearch.cpp
+++ b/addon/doxysearch/doxysearch.cpp
@@ -116,7 +116,7 @@ static std::string uriDecode(const std::string & sSrc)
 }
 
 /** return list of strings that result when splitting \a s using 
- *  delimeter \a delim 
+ *  delimiter \a delim 
  */
 static std::vector<std::string> split(const std::string &s, char delim) 
 {
@@ -137,7 +137,7 @@ T fromString(const std::string& s)
   return t;
 }
 
-/** Class that holds the startin position of a word */
+/** Class that holds the starting position of a word */
 struct WordPosition
 {
   WordPosition(int s,int i) : start(s), index(i) {}
@@ -196,7 +196,7 @@ static bool insideRange(const std::vector<Range> &ranges,int start,int len)
 }
 
 /** Returns a list of text \a fragments from \a s containing one or
- *  more \a words. The list is sorted occording to the 
+ *  more \a words. The list is sorted according to the 
  *  number of occurrences of words within the fragment.
  */ 
 static void highlighter(const std::string &s,
@@ -401,7 +401,7 @@ int main(int argc,char **argv)
       Xapian::Document doc = i.get_document();
       highlighter(doc.get_value(FIELD_DOC),words,hl);
       std::cout << "  {\"type\": \"" << doc.get_value(FIELD_TYPE) << "\"," << std::endl
-                << "   \"name\": \"" << doc.get_value(FIELD_NAME) << doc.get_value(FIELD_ARGS) << "\"," << std::endl
+                << "   \"name\": \"" << doc.get_value(FIELD_NAME) << escapeString(doc.get_value(FIELD_ARGS)) << "\"," << std::endl
                 << "   \"tag\": \""  << doc.get_value(FIELD_TAG) << "\"," << std::endl
                 << "   \"url\": \""  << doc.get_value(FIELD_URL) << "\"," << std::endl;
       std::cout << "   \"fragments\":[" << std::endl;
diff --git a/addon/doxywizard/Makefile b/addon/doxywizard/Makefile
deleted file mode 100644
index 8c9a218..0000000
--- a/addon/doxywizard/Makefile
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-# 
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-# 
-
-QMAKE=$(QTDIR)/bin/qmake $(MKSPECS)
-INCBUFSIZE=$(PYTHON) ../../src/increasebuffer.py
-
-all: Makefile.doxywizard  
-	$(MAKE) -f Makefile.doxywizard LEX=$(LEX) PYTHON=$(PYTHON) INCBUFSIZE="$(INCBUFSIZE)"
-
-Makefile.doxywizard: doxywizard.pro
-	$(QMAKE) doxywizard.pro -o Makefile.doxywizard
-
-qmake: 
-	$(QMAKE) doxywizard.pro -o Makefile.doxywizard
-
-clean: Makefile.doxywizard 
-	$(MAKE) -f Makefile.doxywizard clean 
-
-distclean: Makefile.doxywizard
-	$(MAKE) -f Makefile.doxywizard distclean 
-	$(RM) Makefile.doxywizard
-
-install:
-	$(INSTTOOL) -d $(INSTALL)/bin	
-	$(INSTTOOL) -m 755 ../../bin/doxywizard $(INSTALL)/bin	
-	$(INSTTOOL) -d $(INSTALL)/$(MAN1DIR)
-	cat ../../doc/doxywizard.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxywizard.1
-	$(INSTTOOL) -m 644 doxywizard.1 $(INSTALL)/$(MAN1DIR)/doxywizard.1
-	rm doxywizard.1
-
-FORCE:
diff --git a/addon/doxywizard/Makefile.doxywizard b/addon/doxywizard/Makefile.doxywizard
deleted file mode 100644
index e5e1a23..0000000
--- a/addon/doxywizard/Makefile.doxywizard
+++ /dev/null
@@ -1,436 +0,0 @@
-#############################################################################
-# Makefile for building: ../../bin/doxywizard.app/Contents/MacOS/doxywizard
-# Generated by qmake (2.01a) (Qt 4.8.6) on: Thu Aug 21 10:48:38 2014
-# Project:  doxywizard.pro
-# Template: app
-# Command: /usr/bin/qmake -spec /usr/mkspecs/macx-g++ -o Makefile.doxywizard doxywizard.pro
-#############################################################################
-
-####### Compiler, tools and options
-
-CC            = gcc
-CXX           = g++
-DEFINES       = -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
-CFLAGS        = -pipe -g -arch x86_64 -mmacosx-version-min=10.5 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 -mmacosx-version-min=10.5 -Wall -W $(DEFINES)
-CXXFLAGS      = -pipe -g -arch x86_64 -mmacosx-version-min=10.5 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 -mmacosx-version-min=10.5 -Wall -W $(DEFINES)
-INCPATH       = -I/usr/mkspecs/macx-g++ -I. -I/usr/lib/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/usr/lib/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/lib/QtXml.framework/Versions/4/Headers -I/usr/include/QtXml -I/usr/include -I. -I../../generated_src/doxywizard -I/opt/local/include -I../../moc/doxywizard -F/usr/lib
-LINK          = g++
-LFLAGS        = -headerpad_max_install_names -arch x86_64 -mmacosx-version-min=10.5 -arch i386 -mmacosx-version-min=10.5 -Xarch_x86_64 -mmacosx-version-min=10.5
-LIBS          = $(SUBLIBS) -F/usr/lib -L/usr/lib -L/opt/local/lib -framework QtXml -L/usr/lib -F/usr/lib -framework QtCore -framework QtGui 
-AR            = ar cq
-RANLIB        = ranlib -s
-QMAKE         = /usr/bin/qmake
-TAR           = tar -cf
-COMPRESS      = gzip -9f
-COPY          = cp -f
-SED           = sed
-COPY_FILE     = cp -f
-COPY_DIR      = cp -f -R
-STRIP         = 
-INSTALL_FILE  = $(COPY_FILE)
-INSTALL_DIR   = $(COPY_DIR)
-INSTALL_PROGRAM = $(COPY_FILE)
-DEL_FILE      = rm -f
-SYMLINK       = ln -f -s
-DEL_DIR       = rmdir
-MOVE          = mv -f
-CHK_DIR_EXISTS= test -d
-MKDIR         = mkdir -p
-export MACOSX_DEPLOYMENT_TARGET = 10.4
-
-####### Output directory
-
-OBJECTS_DIR   = ../../objects/doxywizard/
-
-####### Files
-
-SOURCES       = doxywizard.cpp \
-		expert.cpp \
-		wizard.cpp \
-		inputbool.cpp \
-		inputstring.cpp \
-		inputint.cpp \
-		inputstrlist.cpp ../../generated_src/doxywizard/configdoc.cpp \
-		../../generated_src/doxywizard/config_doxyw.cpp \
-		../../generated_src/doxywizard/version.cpp \
-		../../moc/doxywizard/moc_doxywizard.cpp \
-		../../moc/doxywizard/moc_expert.cpp \
-		../../moc/doxywizard/moc_helplabel.cpp \
-		../../moc/doxywizard/moc_inputbool.cpp \
-		../../moc/doxywizard/moc_inputstring.cpp \
-		../../moc/doxywizard/moc_inputint.cpp \
-		../../moc/doxywizard/moc_inputstrlist.cpp \
-		../../moc/doxywizard/moc_wizard.cpp \
-		../../rcc/doxywizard/qrc_doxywizard.cpp
-OBJECTS       = ../../objects/doxywizard/doxywizard.o \
-		../../objects/doxywizard/expert.o \
-		../../objects/doxywizard/wizard.o \
-		../../objects/doxywizard/inputbool.o \
-		../../objects/doxywizard/inputstring.o \
-		../../objects/doxywizard/inputint.o \
-		../../objects/doxywizard/inputstrlist.o \
-		../../objects/doxywizard/configdoc.o \
-		../../objects/doxywizard/config_doxyw.o \
-		../../objects/doxywizard/version.o \
-		../../objects/doxywizard/moc_doxywizard.o \
-		../../objects/doxywizard/moc_expert.o \
-		../../objects/doxywizard/moc_helplabel.o \
-		../../objects/doxywizard/moc_inputbool.o \
-		../../objects/doxywizard/moc_inputstring.o \
-		../../objects/doxywizard/moc_inputint.o \
-		../../objects/doxywizard/moc_inputstrlist.o \
-		../../objects/doxywizard/moc_wizard.o \
-		../../objects/doxywizard/qrc_doxywizard.o
-DIST          = /usr/mkspecs/common/unix.conf \
-		/usr/mkspecs/common/mac.conf \
-		/usr/mkspecs/common/gcc-base.conf \
-		/usr/mkspecs/common/gcc-base-macx.conf \
-		/usr/mkspecs/common/g++-base.conf \
-		/usr/mkspecs/common/g++-macx.conf \
-		/usr/mkspecs/qconfig.pri \
-		/usr/mkspecs/modules/qt_webkit_version.pri \
-		/usr/mkspecs/features/qt_functions.prf \
-		/usr/mkspecs/features/qt_config.prf \
-		/usr/mkspecs/features/exclusive_builds.prf \
-		/usr/mkspecs/features/default_pre.prf \
-		/usr/mkspecs/features/mac/default_pre.prf \
-		/usr/mkspecs/features/debug.prf \
-		/usr/mkspecs/features/default_post.prf \
-		/usr/mkspecs/features/mac/default_post.prf \
-		/usr/mkspecs/features/mac/objective_c.prf \
-		/usr/mkspecs/features/mac/x86_64.prf \
-		/usr/mkspecs/features/mac/x86.prf \
-		/usr/mkspecs/features/shared.prf \
-		/usr/mkspecs/features/warn_on.prf \
-		/usr/mkspecs/features/qt.prf \
-		/usr/mkspecs/features/unix/thread.prf \
-		/usr/mkspecs/features/moc.prf \
-		/usr/mkspecs/features/mac/rez.prf \
-		/usr/mkspecs/features/mac/sdk.prf \
-		/usr/mkspecs/features/resources.prf \
-		/usr/mkspecs/features/uic.prf \
-		/usr/mkspecs/features/yacc.prf \
-		/usr/mkspecs/features/lex.prf \
-		/usr/mkspecs/features/include_source_dir.prf \
-		doxywizard.pro
-QMAKE_TARGET  = doxywizard
-DESTDIR       = ../../bin/
-TARGET        = ../../bin/doxywizard.app/Contents/MacOS/doxywizard
-
-####### Custom Compiler Variables
-QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS = -pipe \
-		-g \
-		-arch \
-		x86_64 \
-		-mmacosx-version-min=10.5 \
-		-Xarch_x86_64 \
-		-mmacosx-version-min=10.5 \
-		-arch \
-		i386 \
-		-mmacosx-version-min=10.5 \
-		-Wall \
-		-W
-
-
-first: all
-####### Implicit rules
-
-.SUFFIXES: .o .c .cpp .cc .cxx .C
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
-
-####### Build rules
-
-all: Makefile.doxywizard ../../bin/doxywizard.app/Contents/PkgInfo ../../bin/doxywizard.app/Contents/Resources/empty.lproj ../../bin/doxywizard.app/Contents/Info.plist $(TARGET)
-
-$(TARGET):  $(OBJECTS)  
-	@$(CHK_DIR_EXISTS) ../../bin/doxywizard.app/Contents/MacOS/ || $(MKDIR) ../../bin/doxywizard.app/Contents/MacOS/ 
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
-
-Makefile.doxywizard: doxywizard.pro  /usr/mkspecs/macx-g++/qmake.conf /usr/mkspecs/common/unix.conf \
-		/usr/mkspecs/common/mac.conf \
-		/usr/mkspecs/common/gcc-base.conf \
-		/usr/mkspecs/common/gcc-base-macx.conf \
-		/usr/mkspecs/common/g++-base.conf \
-		/usr/mkspecs/common/g++-macx.conf \
-		/usr/mkspecs/qconfig.pri \
-		/usr/mkspecs/modules/qt_webkit_version.pri \
-		/usr/mkspecs/features/qt_functions.prf \
-		/usr/mkspecs/features/qt_config.prf \
-		/usr/mkspecs/features/exclusive_builds.prf \
-		/usr/mkspecs/features/default_pre.prf \
-		/usr/mkspecs/features/mac/default_pre.prf \
-		/usr/mkspecs/features/debug.prf \
-		/usr/mkspecs/features/default_post.prf \
-		/usr/mkspecs/features/mac/default_post.prf \
-		/usr/mkspecs/features/mac/objective_c.prf \
-		/usr/mkspecs/features/mac/x86_64.prf \
-		/usr/mkspecs/features/mac/x86.prf \
-		/usr/mkspecs/features/shared.prf \
-		/usr/mkspecs/features/warn_on.prf \
-		/usr/mkspecs/features/qt.prf \
-		/usr/mkspecs/features/unix/thread.prf \
-		/usr/mkspecs/features/moc.prf \
-		/usr/mkspecs/features/mac/rez.prf \
-		/usr/mkspecs/features/mac/sdk.prf \
-		/usr/mkspecs/features/resources.prf \
-		/usr/mkspecs/features/uic.prf \
-		/usr/mkspecs/features/yacc.prf \
-		/usr/mkspecs/features/lex.prf \
-		/usr/mkspecs/features/include_source_dir.prf \
-		/usr/lib/QtXml.framework/QtXml.prl \
-		/usr/lib/QtCore.framework/QtCore.prl \
-		/usr/lib/QtGui.framework/QtGui.prl
-	$(QMAKE) -spec /usr/mkspecs/macx-g++ -o Makefile.doxywizard doxywizard.pro
-/usr/mkspecs/common/unix.conf:
-/usr/mkspecs/common/mac.conf:
-/usr/mkspecs/common/gcc-base.conf:
-/usr/mkspecs/common/gcc-base-macx.conf:
-/usr/mkspecs/common/g++-base.conf:
-/usr/mkspecs/common/g++-macx.conf:
-/usr/mkspecs/qconfig.pri:
-/usr/mkspecs/modules/qt_webkit_version.pri:
-/usr/mkspecs/features/qt_functions.prf:
-/usr/mkspecs/features/qt_config.prf:
-/usr/mkspecs/features/exclusive_builds.prf:
-/usr/mkspecs/features/default_pre.prf:
-/usr/mkspecs/features/mac/default_pre.prf:
-/usr/mkspecs/features/debug.prf:
-/usr/mkspecs/features/default_post.prf:
-/usr/mkspecs/features/mac/default_post.prf:
-/usr/mkspecs/features/mac/objective_c.prf:
-/usr/mkspecs/features/mac/x86_64.prf:
-/usr/mkspecs/features/mac/x86.prf:
-/usr/mkspecs/features/shared.prf:
-/usr/mkspecs/features/warn_on.prf:
-/usr/mkspecs/features/qt.prf:
-/usr/mkspecs/features/unix/thread.prf:
-/usr/mkspecs/features/moc.prf:
-/usr/mkspecs/features/mac/rez.prf:
-/usr/mkspecs/features/mac/sdk.prf:
-/usr/mkspecs/features/resources.prf:
-/usr/mkspecs/features/uic.prf:
-/usr/mkspecs/features/yacc.prf:
-/usr/mkspecs/features/lex.prf:
-/usr/mkspecs/features/include_source_dir.prf:
-/usr/lib/QtXml.framework/QtXml.prl:
-/usr/lib/QtCore.framework/QtCore.prl:
-/usr/lib/QtGui.framework/QtGui.prl:
-qmake:  FORCE
-	@$(QMAKE) -spec /usr/mkspecs/macx-g++ -o Makefile.doxywizard doxywizard.pro
-
-../../bin/doxywizard.app/Contents/PkgInfo: 
-	@$(CHK_DIR_EXISTS) ../../bin/doxywizard.app/Contents || $(MKDIR) ../../bin/doxywizard.app/Contents 
-	@$(DEL_FILE) ../../bin/doxywizard.app/Contents/PkgInfo
-	@echo "APPL????" >../../bin/doxywizard.app/Contents/PkgInfo
-../../bin/doxywizard.app/Contents/Resources/empty.lproj: 
-	@$(CHK_DIR_EXISTS) ../../bin/doxywizard.app/Contents/Resources || $(MKDIR) ../../bin/doxywizard.app/Contents/Resources 
-	@touch ../../bin/doxywizard.app/Contents/Resources/empty.lproj
-	
-../../bin/doxywizard.app/Contents/Info.plist: 
-	@$(CHK_DIR_EXISTS) ../../bin/doxywizard.app/Contents || $(MKDIR) ../../bin/doxywizard.app/Contents 
-	@$(DEL_FILE) ../../bin/doxywizard.app/Contents/Info.plist
-	@sed -e "s, at SHORT_VERSION@,1.0,g" -e "s, at TYPEINFO@,????,g" -e "s, at ICON@,,g" -e "s, at EXECUTABLE@,doxywizard,g" -e "s, at TYPEINFO@,????,g" /usr/mkspecs/macx-g++/Info.plist.app >../../bin/doxywizard.app/Contents/Info.plist
-dist: 
-	@$(CHK_DIR_EXISTS) ../../objects/doxywizard/doxywizard1.0.0 || $(MKDIR) ../../objects/doxywizard/doxywizard1.0.0 
-	$(COPY_FILE) --parents $(SOURCES) $(DIST) ../../objects/doxywizard/doxywizard1.0.0/ && $(COPY_FILE) --parents doxywizard.h version.h expert.h config.h helplabel.h inputbool.h inputstring.h inputint.h inputstrlist.h wizard.h docintf.h ../../objects/doxywizard/doxywizard1.0.0/ && $(COPY_FILE) --parents doxywizard.qrc ../../objects/doxywizard/doxywizard1.0.0/ && $(COPY_FILE) --parents doxywizard.cpp expert.cpp wizard.cpp inputbool.cpp inputstring.cpp inputint.cpp inputstrlist.cpp ../../obj [...]
-
-
-clean:compiler_clean 
-	-$(DEL_FILE) $(OBJECTS)
-	-$(DEL_FILE) *~ core *.core
-
-
-####### Sub-libraries
-
-distclean: clean
-	-$(DEL_FILE) -r ../../bin/doxywizard.app
-	-$(DEL_FILE) Makefile.doxywizard
-
-
-../../generated_src/doxywizard/configdoc.cpp: ../../src/config.xml ../../src/configgen.py
-	$(PYTHON) ../../src/configgen.py -wiz ../../src/config.xml > ../../generated_src/doxywizard/configdoc.cpp
-
-../../generated_src/doxywizard/config_doxyw.cpp: ../../addon/doxywizard/config_doxyw.l ../../src/increasebuffer.py
-	$(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(INCBUFSIZE) >../../generated_src/doxywizard/$*.cpp
-
-../../generated_src/doxywizard/version.cpp: ../../configure
-	cd ../../src;$(PYTHON) version.py
-
-check: first
-
-mocclean: compiler_moc_header_clean compiler_moc_source_clean
-
-mocables: compiler_moc_header_make_all compiler_moc_source_make_all
-
-compiler_objective_c_make_all:
-compiler_objective_c_clean:
-compiler_moc_header_make_all: ../../moc/doxywizard/moc_doxywizard.cpp ../../moc/doxywizard/moc_expert.cpp ../../moc/doxywizard/moc_helplabel.cpp ../../moc/doxywizard/moc_inputbool.cpp ../../moc/doxywizard/moc_inputstring.cpp ../../moc/doxywizard/moc_inputint.cpp ../../moc/doxywizard/moc_inputstrlist.cpp ../../moc/doxywizard/moc_wizard.cpp
-compiler_moc_header_clean:
-	-$(DEL_FILE) ../../moc/doxywizard/moc_doxywizard.cpp ../../moc/doxywizard/moc_expert.cpp ../../moc/doxywizard/moc_helplabel.cpp ../../moc/doxywizard/moc_inputbool.cpp ../../moc/doxywizard/moc_inputstring.cpp ../../moc/doxywizard/moc_inputint.cpp ../../moc/doxywizard/moc_inputstrlist.cpp ../../moc/doxywizard/moc_wizard.cpp
-../../moc/doxywizard/moc_doxywizard.cpp: doxywizard.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ doxywizard.h -o ../../moc/doxywizard/moc_doxywizard.cpp
-
-../../moc/doxywizard/moc_expert.cpp: docintf.h \
-		expert.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ expert.h -o ../../moc/doxywizard/moc_expert.cpp
-
-../../moc/doxywizard/moc_helplabel.cpp: helplabel.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ helplabel.h -o ../../moc/doxywizard/moc_helplabel.cpp
-
-../../moc/doxywizard/moc_inputbool.cpp: input.h \
-		inputbool.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ inputbool.h -o ../../moc/doxywizard/moc_inputbool.cpp
-
-../../moc/doxywizard/moc_inputstring.cpp: input.h \
-		inputstring.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ inputstring.h -o ../../moc/doxywizard/moc_inputstring.cpp
-
-../../moc/doxywizard/moc_inputint.cpp: input.h \
-		inputint.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ inputint.h -o ../../moc/doxywizard/moc_inputint.cpp
-
-../../moc/doxywizard/moc_inputstrlist.cpp: input.h \
-		inputstrlist.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ inputstrlist.h -o ../../moc/doxywizard/moc_inputstrlist.cpp
-
-../../moc/doxywizard/moc_wizard.cpp: wizard.h
-	/usr/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ wizard.h -o ../../moc/doxywizard/moc_wizard.cpp
-
-compiler_rcc_make_all: ../../rcc/doxywizard/qrc_doxywizard.cpp
-compiler_rcc_clean:
-	-$(DEL_FILE) ../../rcc/doxywizard/qrc_doxywizard.cpp
-../../rcc/doxywizard/qrc_doxywizard.cpp: doxywizard.qrc \
-		../../src/config.xml \
-		images/file.png \
-		images/add.png \
-		images/folder.png \
-		images/refresh.png \
-		images/tunecolor.png \
-		images/del.png
-	/usr/bin/rcc -name doxywizard doxywizard.qrc -o ../../rcc/doxywizard/qrc_doxywizard.cpp
-
-compiler_image_collection_make_all: qmake_image_collection.cpp
-compiler_image_collection_clean:
-	-$(DEL_FILE) qmake_image_collection.cpp
-compiler_moc_source_make_all:
-compiler_moc_source_clean:
-compiler_rez_source_make_all:
-compiler_rez_source_clean:
-compiler_uic_make_all:
-compiler_uic_clean:
-compiler_yacc_decl_make_all:
-compiler_yacc_decl_clean:
-compiler_yacc_impl_make_all:
-compiler_yacc_impl_clean:
-compiler_lex_make_all:
-compiler_lex_clean:
-compiler_clean: compiler_moc_header_clean compiler_rcc_clean 
-
-####### Compile
-
-../../objects/doxywizard/doxywizard.o: doxywizard.cpp doxywizard.h \
-		version.h \
-		expert.h \
-		docintf.h \
-		wizard.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/doxywizard.o doxywizard.cpp
-
-../../objects/doxywizard/expert.o: expert.cpp expert.h \
-		docintf.h \
-		inputbool.h \
-		input.h \
-		inputstring.h \
-		inputint.h \
-		inputstrlist.h \
-		config.h \
-		version.h \
-		configdoc.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/expert.o expert.cpp
-
-../../objects/doxywizard/wizard.o: wizard.cpp wizard.h \
-		input.h \
-		doxywizard.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/wizard.o wizard.cpp
-
-../../objects/doxywizard/inputbool.o: inputbool.cpp inputbool.h \
-		input.h \
-		helplabel.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/inputbool.o inputbool.cpp
-
-../../objects/doxywizard/inputstring.o: inputstring.cpp inputstring.h \
-		input.h \
-		helplabel.h \
-		doxywizard.h \
-		config.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/inputstring.o inputstring.cpp
-
-../../objects/doxywizard/inputint.o: inputint.cpp inputint.h \
-		input.h \
-		helplabel.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/inputint.o inputint.cpp
-
-../../objects/doxywizard/inputstrlist.o: inputstrlist.cpp inputstrlist.h \
-		input.h \
-		helplabel.h \
-		doxywizard.h \
-		config.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/inputstrlist.o inputstrlist.cpp
-
-../../objects/doxywizard/configdoc.o: ../../generated_src/doxywizard/configdoc.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/configdoc.o ../../generated_src/doxywizard/configdoc.cpp
-
-../../objects/doxywizard/config_doxyw.o: ../../generated_src/doxywizard/config_doxyw.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/config_doxyw.o ../../generated_src/doxywizard/config_doxyw.cpp
-
-../../objects/doxywizard/version.o: ../../generated_src/doxywizard/version.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/version.o ../../generated_src/doxywizard/version.cpp
-
-../../objects/doxywizard/moc_doxywizard.o: ../../moc/doxywizard/moc_doxywizard.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_doxywizard.o ../../moc/doxywizard/moc_doxywizard.cpp
-
-../../objects/doxywizard/moc_expert.o: ../../moc/doxywizard/moc_expert.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_expert.o ../../moc/doxywizard/moc_expert.cpp
-
-../../objects/doxywizard/moc_helplabel.o: ../../moc/doxywizard/moc_helplabel.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_helplabel.o ../../moc/doxywizard/moc_helplabel.cpp
-
-../../objects/doxywizard/moc_inputbool.o: ../../moc/doxywizard/moc_inputbool.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_inputbool.o ../../moc/doxywizard/moc_inputbool.cpp
-
-../../objects/doxywizard/moc_inputstring.o: ../../moc/doxywizard/moc_inputstring.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_inputstring.o ../../moc/doxywizard/moc_inputstring.cpp
-
-../../objects/doxywizard/moc_inputint.o: ../../moc/doxywizard/moc_inputint.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_inputint.o ../../moc/doxywizard/moc_inputint.cpp
-
-../../objects/doxywizard/moc_inputstrlist.o: ../../moc/doxywizard/moc_inputstrlist.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_inputstrlist.o ../../moc/doxywizard/moc_inputstrlist.cpp
-
-../../objects/doxywizard/moc_wizard.o: ../../moc/doxywizard/moc_wizard.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/moc_wizard.o ../../moc/doxywizard/moc_wizard.cpp
-
-../../objects/doxywizard/qrc_doxywizard.o: ../../rcc/doxywizard/qrc_doxywizard.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../../objects/doxywizard/qrc_doxywizard.o ../../rcc/doxywizard/qrc_doxywizard.cpp
-
-####### Install
-
-install:   FORCE
-
-uninstall:   FORCE
-
-FORCE:
-
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 26df065..d0728ae 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -10,7 +10,7 @@
 
 #define MAX_RECENT_FILES 10
 
-const int messageTimeout = 5000; //!< status bar message timeout in millisec.
+const int messageTimeout = 5000; //!< status bar message timeout in milliseconds.
 
 MainWindow &MainWindow::instance()
 {
@@ -78,7 +78,7 @@ MainWindow::MainWindow()
   runLayout->addWidget(showSettings);
   runLayout->addWidget(m_saveLog);
 
-  // output produced by doxygen
+  // output produced by Doxygen
   runTabLayout->addLayout(runLayout);
   runTabLayout->addWidget(new QLabel(tr("Output produced by doxygen")));
   QGridLayout *grid = new QGridLayout;
@@ -427,7 +427,7 @@ void MainWindow::runDoxygen()
     qDebug() << tr("Doxygen path: ") << doxygenPath;
     if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() ) 
     {
-      // No doygen binary in the resources, if there is a system doxygen binary, use that instead
+      // No Doxygen binary in the resources, if there is a system Doxygen binary, use that instead
       if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() )
       {
         doxygenPath = QString::fromAscii("/usr/local/bin/");
diff --git a/addon/doxywizard/doxywizard.pro b/addon/doxywizard/doxywizard.pro
deleted file mode 100644
index 0e071db..0000000
--- a/addon/doxywizard/doxywizard.pro
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# This file was generated from doxywizard.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-######################################################################
-# Automatically generated by qmake (2.01a) zo okt 19 12:50:02 2008
-######################################################################
-
-TEMPLATE     = app
-DESTDIR      = ../../bin
-TARGET       = 
-DEPENDPATH  += .
-INCLUDEPATH += . ../../generated_src/doxywizard
-QT          += xml
-CONFIG      += debug
-OBJECTS_DIR  = ../../objects/doxywizard
-MOC_DIR      = ../../moc/doxywizard
-RCC_DIR      = ../../rcc/doxywizard
-DEFINES     += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-macx-g++ {
-  CONFIG += x86 x86_64
-}
-
-# Input
-HEADERS     += doxywizard.h version.h expert.h config.h helplabel.h \
-               inputbool.h inputstring.h inputint.h inputstrlist.h wizard.h docintf.h
-SOURCES     += doxywizard.cpp expert.cpp wizard.cpp \
-               inputbool.cpp inputstring.cpp inputint.cpp inputstrlist.cpp 
-RESOURCES   += doxywizard.qrc
-INCBUFSIZE=$(PYTHON)  ../../src/increasebuffer.py
-win32:RC_FILE += doxywizard.rc
-
-config.target = ../../generated_src/doxywizard/config_doxyw.cpp
-config.commands = $(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(INCBUFSIZE) >../../generated_src/doxywizard/$*.cpp
-config.depends = ../../addon/doxywizard/config_doxyw.l  ../../src/increasebuffer.py
-configdoc.target = ../../generated_src/doxywizard/configdoc.cpp
-configdoc.commands = $(PYTHON) ../../src/configgen.py -wiz ../../src/config.xml > ../../generated_src/doxywizard/configdoc.cpp
-configdoc.depends = ../../src/config.xml ../../src/configgen.py
-version.target = ../../generated_src/doxywizard/version.cpp
-version.commands = cd ../../src;$(PYTHON) version.py
-version.depends = ../../configure
-QMAKE_EXTRA_TARGETS += configdoc config version
-GENERATED_SOURCES += $$configdoc.target $$config.target $$version.target
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in
index d5c0cab..1ad36a9 100644
--- a/addon/doxywizard/doxywizard.pro.in
+++ b/addon/doxywizard/doxywizard.pro.in
@@ -24,11 +24,10 @@ HEADERS     += doxywizard.h version.h expert.h config.h helplabel.h \
 SOURCES     += doxywizard.cpp expert.cpp wizard.cpp \
                inputbool.cpp inputstring.cpp inputint.cpp inputstrlist.cpp 
 RESOURCES   += doxywizard.qrc
-INCBUFSIZE=$(PYTHON)  ../../src/increasebuffer.py
 win32:RC_FILE += doxywizard.rc
 
 config.target = ../../generated_src/doxywizard/config_doxyw.cpp
-config.commands = $(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(INCBUFSIZE) >../../generated_src/doxywizard/$*.cpp
+config.commands = $(LEX) -Pconfig_doxywYY -t ../../addon/doxywizard/config_doxyw.l | $(PYTHON) ../../src/increasebuffer.py >../../generated_src/doxywizard/$*.cpp
 config.depends = ../../addon/doxywizard/config_doxyw.l  ../../src/increasebuffer.py
 configdoc.target = ../../generated_src/doxywizard/configdoc.cpp
 configdoc.commands = $(PYTHON) ../../src/configgen.py -wiz ../../src/config.xml > ../../generated_src/doxywizard/configdoc.cpp
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 1cc5d15..3a03c69 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -452,7 +452,7 @@ static QString getDocsForNode(const QDomElement &child)
   // LaTeX name as formula -> LaTeX
   regexp.setPattern(SA("\\\\f\\$\\\\mbox\\{\\\\LaTeX\\}\\\\f\\$"));
   docs.replace(regexp,SA("LaTeX"));
-  // Other forula's (now just 2) so explicitely mentioned.
+  // Other formula's (now just 2) so explicitly mentioned.
   regexp.setPattern(SA("\\\\f\\$2\\^\\{\\(16\\+\\\\mbox\\{LOOKUP\\\\_CACHE\\\\_SIZE\\}\\)\\}\\\\f\\$"));
   docs.replace(regexp,SA("2^(16+LOOKUP_CACHE_SIZE)"));
   regexp.setPattern(SA("\\\\f\\$2\\^\\{16\\} = 65536\\\\f\\$"));
diff --git a/configure b/configure
index 5c01af0..544d06a 100755
--- a/configure
+++ b/configure
@@ -17,7 +17,7 @@
 
 doxygen_version_major=1
 doxygen_version_minor=8
-doxygen_version_revision=8
+doxygen_version_revision=9.1
 
 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
 doxygen_version_mmn=NO
@@ -554,8 +554,13 @@ fi
 
 if test "$f_libclang" = YES; then
   printf "  Checking for libclang ... "
-  libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
-  libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
+  if llvm-config --version > /dev/null 2>&1; then
+    libclang_hdr_dir=`llvm-config --includedir`
+    libclang_lib_dir=`llvm-config --libdir`
+  else
+    libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
+    libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
+  fi
   if test "$f_libclangstatic" = NO; then
     libclang_lib_name="libclang.so libclang.dylib libclang.a libclang.dll.a"
   else
@@ -952,7 +957,7 @@ EOF
      #if test "$f_thread" = YES; then
      #  realopts="$realopts thread"
      #fi
-     cat $SRC .tmakeconfig | sed -e "s/\$extraopts/$realopts/g" -e "s;%%SQLITE3_INC%%;$sqlite3_hdr_dir;g" -e "s;%%SQLITE3_LIBS%%;$sqlite3_link;g" -e "s;%%LIBCLANG_LIBS%%;$libclang_link;g" >> $DST
+     cat $SRC .tmakeconfig | sed -e "s/\$extraopts/$realopts/g" -e "s;%%SQLITE3_INC%%;$sqlite3_hdr_dir;g" -e "s;%%SQLITE3_LIBS%%;$sqlite3_link;g" -e "s;%%LIBCLANG_INC%%;$libclang_hdr_dir;g" -e "s;%%LIBCLANG_LIBS%%;$libclang_link;g" >> $DST
      echo "  Created $DST from $SRC..."
 done
 
diff --git a/debian/README.jquery b/debian/README.jquery
deleted file mode 100644
index 09bbd54..0000000
--- a/debian/README.jquery
+++ /dev/null
@@ -1,82 +0,0 @@
-Doxygen embeds jquery
-=====================
-
-This document describes how and why Doxygen embeds jquery. It serves as an
-explanation of what problems need to be addressed before removing these
-embeddings. If you are not interested in the reasons, skip to consequences.
-
-Where?
-======
-
- 1. The Doxygen source contains jquery library sources in the `jquery/` folder.
- 2. These are minified at release time by the Doxygen upstream and stored as
-    `src/*.js`. See `jquery/Makefile`.
- 3. They are then converted to C header files and stored as
-    `generated_src/doxygen/*_js.h`.  See `src/libdoxygen.t`.
- 4. At build-time these headers are compiled into the `doxygen` binary and
-    installed as `usr/bin/doxygen` into the `doxygen` binary package.
- 5. When running Doxygen the jquery libraries are embedded into the generated
-    documentation.
- 6. Packages using Doxygen as a build-dependency for creating their
-    documentation therefore also embed these jquery libraries.
-
-Why?
-====
-
-While it would be nice to remove the need for any of these embedding, it is
-practically difficult to do so.
-
- 6. It was considered to introduce a `doxygen-common` package that pulls in the
-    relevant jquery libraries and provides them at a canonical location for
-    usage with symbolic links. When doing this the question of how to handle
-    upgrades of Doxygen arises. [Upstream indicated] that the documentation
-    generated with one version of Doxygen will not necessarily work with the
-    jquery libraries from a different version of Doxygen. This leaves two
-    options:
-
-    * Ship all previous versions of jquery libraries in the `doxygen-common`
-      package.
-    * Rebuild all reverse build dependencies of Doxygen whenever uploading a
-      new version of Doxygen.
-
-    Both options were deemed infeasible. The first option simply is
-    unmaintainable. The second option requires architecture independent
-    binNMUs. Since the archive does not do any architecture independent
-    auto-building this is not available either. (This was discussed with the
-    buildd maintainers during DebConf13.)
-
- 5. This is simply how Doxygen is designed to operate. The generated
-    documentation should be usable as is without dependencies on external
-    files.
-
- 4. To facilitate embedding 5 the `doxygen` binary needs some kind of access
-    to the jquery libraries. Changing this aspect would require significant
-    modification of the Doxygen source.
-
- 3. These files are regenerated during a regular build.
-
- 2. The Debian package recreates these artifacts from step 1 by running `make
-    -C jquery install` before the build.
-
- 1. This is an aspect of the upstream source and build system. Each doxygen
-    release ships a tightly coupled conglomerate of various javascript
-    libraries. Replacing them with system copies is simply unmaintainable,
-    because it is not mechanically testable.
-
-One of the major reasons behind removing embedded copies of code is to be able
-to do security updates. Arguably there are little options to exploit a
-vulnerable jquery library as embedded by Doxygen, because from a user point of
-view it is static data. Thus one of the primary motivations to remove embedded
-copies does not apply in this case.
-
-[Upstream indicated]: http://doxygen.10944.n7.nabble.com/release-tarballs-td5837.html
-
-Consequences
-============
-
-It is not considered a problem for Doxygen or packages using Doxygen to embed
-jquery. In fact replacing the `jquery.js` file created by Doxygen likely
-results in broken documentation. Packages doing that are buggy. Lintian will
-have to learn that a `jquery.js` embedded by Doxygen is a normal thing.
-
-Helmut Grohne
diff --git a/debian/TODO b/debian/TODO
deleted file mode 100644
index 97a070a..0000000
--- a/debian/TODO
+++ /dev/null
@@ -1 +0,0 @@
-bump copyright dates
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index bf8df9f..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,986 +0,0 @@
-doxygen (1.8.8-5) unstable; urgency=medium
-
-  * Cherry pick c83db38ea83499be19d9ff242bfa22ae534ee80c. (Closes: #762272)
-  * Fix FTBFS: Update syntax of Build-Profiles header. (Closes: #767658)
-
- -- Helmut Grohne <helmut at subdivi.de>  Sun, 02 Nov 2014 15:07:52 +0100
-
-doxygen (1.8.8-4) unstable; urgency=medium
-
-  * Cherry pick 6d4044ad43ae1424a256eb1c26992301e7c64f4a. (Closes: #760700)
-  * Declare compliance with policy 3.9.6: No changes needed.
-
- -- Helmut Grohne <helmut at subdivi.de>  Sun, 05 Oct 2014 17:52:01 +0200
-
-doxygen (1.8.8-3) unstable; urgency=medium
-
-  * Fix sqlite3 configuration.
-
- -- Matthias Klose <doko at debian.org>  Thu, 21 Aug 2014 23:32:13 +0200
-
-doxygen (1.8.8-2) unstable; urgency=medium
-
-  * Build-depend on libxapian-dev.
-
- -- Matthias Klose <doko at debian.org>  Thu, 21 Aug 2014 22:37:17 +0200
-
-doxygen (1.8.8-1) unstable; urgency=medium
-
-  * doxygen 1.8.8 release.
-  * Build-depend on python3.
-  * Build using libclang where available.
-  * Really enable sqlite support.
-
- -- Matthias Klose <doko at debian.org>  Thu, 21 Aug 2014 20:22:21 +0200
-
-doxygen (1.8.7-3) unstable; urgency=medium
-
-  * doxygen-latex: Depend on cm-super-minimal.
-
- -- Matthias Klose <doko at debian.org>  Fri, 25 Jul 2014 10:33:14 +0200
-
-doxygen (1.8.7-2) unstable; urgency=medium
-
-  * Reorder latex packages to avoid bogus syntax check. Thanks to Mattias
-    Ellert for tracking down the issue and providing a patch. (Closes:
-    #750536).
-  * Indent debian/doxygen.NEWS for valid formatting.
-  * Bump copyright years.
-
- -- Helmut Grohne <helmut at subdivi.de>  Wed, 04 Jun 2014 16:18:45 +0200
-
-doxygen (1.8.7-1) unstable; urgency=medium
-
-  * doxygen 1.8.7 release.
-    + Standard build regenerates *_js.h now. Update README.jquery.
-    + Add doxygen.NEWS for GENERATE_HTML default change.
-    + Refresh patches. dot-config.diff completely rewritten against
-      config.xml.
-  * Uglify javascript during build. Therefore B-D: yui-compressor.
-  * Also remove winbuild to avoid accidentally using it.
-  * Add half a stage1 build-profile to drop libqt4-dev. Not annotating the
-    dependency because #744246. Thanks to Daniel Schepler and Wookey.
-    (Addresses: #738263)
-
- -- Helmut Grohne <helmut at subdivi.de>  Fri, 16 May 2014 20:58:26 +0200
-
-doxygen (1.8.6-2) unstable; urgency=medium
-
-  * Fix autopkgtest.
-    + Missing dependency on dpkg-dev for apt-get source.
-    + apt-get source prints to stderr.
-
- -- Helmut Grohne <helmut at subdivi.de>  Fri, 24 Jan 2014 19:31:58 +0100
-
-doxygen (1.8.6-1) unstable; urgency=low
-
-  * doxygen 1.8.6 release.
-
- -- Matthias Klose <doko at debian.org>  Mon, 06 Jan 2014 00:58:54 +0100
-
-doxygen (1.8.5-1) unstable; urgency=low
-
-  * doxygen 1.8.5 release.
-    + Refresh patches. dot-config.diff had a failed hunk.
-    + README got renamed to README.md.
-  * Add debug package doxygen-dbg.
-  * Demote recommends doxygen-latex from doxygen to suggests. (Closes:
-    #720493)
-  * LDFLAGS are called QMAKE_LFLAGS_RELEASE (not ...LDFLAGS...),
-    this should fix the build log checks and hardening.
-  * Install upstream changelog. (Closes: #569504)
-  * Shrink doxygen-doc binary package using hardlinks (rdfind).
-    + Add lintian-override for package-contains-hardlink
-  * Rewrite debian/copyright in DEP5 syntax.
-  * Bump standards version to 3.9.5: No changes needed.
-  * Explain that jquery embedding is going to stay in README.jquery.
-    (Closes: #630982)
-  * Add an autopkgtest building the documentation of osmium.
-    It managed to crash Doxygen earlier, see #657917.
-
- -- Helmut Grohne <helmut at subdivi.de>  Sun, 10 Nov 2013 17:32:18 +0100
-
-doxygen (1.8.4-1) unstable; urgency=low
-
-  * doxygen 1.8.4 release
-    + Upstream now ships jquery sources. (Closes: #625956)
-    + Add libsqlite3-dev to Build-Depends.
-    + Refresh patches. All hunks succeeded.
-    + Upstream changelog included in source package for #569504.
-  * Acknowledge upload version 1.8.1.2-2.
-    + Added myself as uploader.
-  * Enable doxygen-gui on hurd. (Closes: #700631)
-  * Clean before build, to ensure that no prebuilt files are used.
-  * Use packaged tmake.
-    + Add tmake Build-Depends, patch configure to use packaged tmake.
-    + Add a tmake wrapper that forces our CFLAGS into tmake. This fixes
-      the tmake part of #596636.
-  * Add a qmake wrapper that forces our... you know the story. (Closes:
-    #596636)
-  * Bump standards version to 3.9.4: No changes needed.
-  * Add an initial dh_doxygen helper that cleans generated documentation for
-    inclusion in binary packages. This is a small aspect of #630982.
-  * Added Homepage to control.
-  * Removed duplicate dependency latex-xcolor from doxygen-latex.
-
- -- Helmut Grohne <helmut at subdivi.de>  Tue, 21 May 2013 16:04:41 +0200
-
-doxygen (1.8.3.1-1) experimental; urgency=low
-
-  * doxygen 1.8.3.1 release.
-
- -- Matthias Klose <doko at debian.org>  Sun, 20 Jan 2013 17:18:39 +0100
-
-doxygen (1.8.2-1) experimental; urgency=low
-
-  * doxygen 1.8.2 release.
-
- -- Matthias Klose <doko at debian.org>  Wed, 15 Aug 2012 18:03:15 +0200
-
-doxygen (1.8.1.2-1) unstable; urgency=low
-
-  * doxygen 1.8.1.2 (bug fix) release.
-    - Changes:
-      + doxygen now strips the leading indentation shared by the lines in a
-        @code.. at endcode block.
-      + id 678218: Changed title of the SVG graphs from 'G' to the root node
-        of the graph.
-    - New features:
-      + Added button in the navigation tree to allow enabling/disabling
-        syncing the navigation tree with the content.
-      + Extended the number of HTML entities with Greek letters and other
-        symbols (thanks to Charles Karney for the patch).
-      + id 663645: Added support for C++11 strongly typed enums
-        (enum class E { ... }).
-    - Bug fixes:
-      + id 590518: Added missing class member initialization to a class
-        in doxmlparser and made the library compile again.
-      + id 667678: Added support for Obj-C property attribute "unsafe_retained".
-      + id 674842,676984: Unmatched quote in a comment prevented alias
-        expansion.
-      + id 676019: Fixed another case where local include path did not appear
-        correctly in the class documentation.
-      + id 676966: Fortran: Some keyword were not colored in the source view.
-      + id 676981: Fortran: Argument type was wrong type of in case of
-        out of place !> comment.
-      + id 677935: Included patch to fix problem compiling for x86 release
-        on Windows.
-      + id 677992: Section without title could result in an invalid
-        Qt Help index.
-      + id 678022: Anonymous enum could result in an invalid Qt Help index.
-      + id 678102: Superfluous trailing comma in javascript prevented
-        navigation tree to load in IE7.
-      + id 678177: a + at the start of a line inside a <pre> block, triggered
-        the start of a list. Also -- and --- where not kept untouched inside
-        a <pre> block.
-      + id 678180: ndash (--) appearing in a brief description could lead to
-        invalid SVG images.
-      + id 678288: -- and --- inside a Markdown code block were not handled
-        properly.
-      + id 679331,675766: In body documentation with a different indentation
-        then the main documentation was not rendered correctly (MARKDOWN=YES).
-      + id 679436: Using an escaped pipe symbol in a Markdown table did not
-        get unescaped in the output.
-      + id 679533: Code fragments did not appear properly in the doxygen manual.
-      + id 679615: Added missing delete call in a piece of debugging code.
-      + id 679626: Fixed some navigation issues in the manual
-      + Not all inherited members appeared in the "Additional inherited members"
-        list.
-      + Link to call after "Inherited members" was not correct when
-        CREATE_SUBDIRS was enabled.
-      + New VHDL diagram was not generated if the path contained spaces.
-      + Fixed a couple of problems handling Objective-C categories.
-  * Fix segfault building the leechcraft docs (Thibaut Paumard).
-    Closes: #676423.
-  * Make doxygen Multi-Arch: foreign. Closes: #658984.
-
- -- Matthias Klose <doko at debian.org>  Fri, 13 Jul 2012 23:41:38 +0200
-
-doxygen (1.8.1.1-1) unstable; urgency=low
-
-  * doxygen 1.8.1.1 (bug fix) release.
-
- -- Matthias Klose <doko at debian.org>  Tue, 12 Jun 2012 23:59:02 +0200
-
-doxygen (1.8.1-1) unstable; urgency=low
-
-  * doxygen 1.8.1 release.
-  * Build-depend on latex-xcolor.
-  * doxygen-latex: Depend on latex-xcolor.
-
- -- Matthias Klose <doko at debian.org>  Tue, 22 May 2012 14:48:01 +0800
-
-doxygen (1.7.6.1-2.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Add depends on ghostscript and texlive-fonts-recommended to doxygen-latex.
-    Closes: #654587, #637661.
-
- -- Bas Wijnen <wijnen at debian.org>  Sat, 07 Jan 2012 12:58:25 +0100
-
-doxygen (1.7.6.1-2) unstable; urgency=low
-
-  * Don't apply doxygen_direct_dot_run.diff.  Closes: #618125.
-
- -- Matthias Klose <doko at debian.org>  Mon, 12 Dec 2011 15:31:10 +0100
-
-doxygen (1.7.6.1-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sat, 10 Dec 2011 23:26:59 +0100
-
-doxygen (1.7.6-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sun, 04 Dec 2011 23:33:44 +0100
-
-doxygen (1.7.5.1-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sun, 23 Oct 2011 16:49:34 +0200
-
-doxygen (1.7.4-4) unstable; urgency=low
-
-  * doxygen-latex: Depend on texlive-font-utils. Closes: #636315.
-
- -- Matthias Klose <doko at debian.org>  Thu, 04 Aug 2011 16:43:34 +0200
-
-doxygen (1.7.4-3) unstable; urgency=low
-
-  * doxygen: Drop the dependency on doxygen-latex. Closes: #616351, #619902.
-
- -- Matthias Klose <doko at debian.org>  Sat, 09 Jul 2011 12:10:11 +0200
-
-doxygen (1.7.4-2) unstable; urgency=low
-
-  * Re-enable the doxygen_direct_dot_run.diff patch, still issues on
-    armel. Closes: #627494.
-  * Only include jquery.js in generated output when needed (Chris Butler).
-    Closes: #622147.
-  * Include jquery.js source in debian/; add jquery.js license.
-    Closes: #625956.
-
- -- Matthias Klose <doko at debian.org>  Mon, 23 May 2011 20:07:07 +0200
-
-doxygen (1.7.4-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Tue, 29 Mar 2011 01:32:10 +0200
-
-doxygen (1.7.3-6) unstable; urgency=low
-
-  * Update doxygen_direct_dot_run.diff (Mattias Ellert). Closes: #618433.
-  * Disable the doxygen_direct_dot_run.diff patch, race conditions should
-    be fixed in 1.7.x releases.
-
- -- Matthias Klose <doko at debian.org>  Wed, 16 Mar 2011 14:50:57 +0100
-
-doxygen (1.7.3-5) unstable; urgency=low
-
-  * Let doxygen depend on doxygen-latex for some time, until packages
-    explicitly build-depend on doxygen-latex.
-
- -- Matthias Klose <doko at debian.org>  Wed, 02 Mar 2011 16:12:07 +0100
-
-doxygen (1.7.3-4) experimental; urgency=low
-
-  * Build a dependency package adding dependencies for all LaTeX packages
-    required to build documents using the default stylesheet.
-
- -- Matthias Klose <doko at debian.org>  Thu, 20 Jan 2011 02:51:40 +0100
-
-doxygen (1.7.3-3) experimental; urgency=low
-
-  * Recommend latex-xcolor and texlive-latex-base, unconditionally
-    used for documentation generated in LaTeX.
-  * Build with -g. Closes: #605586.
-  * COMPACT_LATEX is fixed in 1.7.3. Closes: #606276.
-
- -- Matthias Klose <doko at debian.org>  Sat, 08 Jan 2011 10:40:27 +0100
-
-doxygen (1.7.3-2) experimental; urgency=low
-
-  * Fix build failure with qmake-qt3. Closes: #602814.
-
- -- Matthias Klose <doko at debian.org>  Tue, 04 Jan 2011 16:02:36 +0100
-
-doxygen (1.7.3-1) experimental; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Mon, 03 Jan 2011 23:59:47 +0100
-
-doxygen (1.7.2-1) experimental; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sun, 14 Nov 2010 06:08:08 +0100
-
-doxygen (1.7.1-2) unstable; urgency=low
-
-  * Don't use threads for the `dot' runs (Petr Salinger).
-    Closes: #591648, #593317.
-
- -- Matthias Klose <doko at debian.org>  Mon, 23 Aug 2010 04:13:43 +0200
-
-doxygen (1.7.1-1) unstable; urgency=low
-
-  * New upstream version. Closes: #588702.
-
- -- Matthias Klose <doko at debian.org>  Sat, 17 Jul 2010 14:54:16 +0200
-
-doxygen (1.6.3-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Tue, 09 Mar 2010 23:25:03 +0000
-
-doxygen (1.6.2+20100208-0.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Update to a svn snapshot to fix release critical bugs.
-    Closes: #564243, #564338, #564703.
-
- -- Mattias Ellert <mattias.ellert at fysast.uu.se>  Tue, 09 Feb 2010 10:11:43 +0100
-
-doxygen (1.6.2-1) unstable; urgency=low
-
-  * New upstream version.
-  * Build-depend-indep on texlive-font-utils. Closes: #562335.
-  * Build again doxywizrd. Closes: #556263.
-
- -- Matthias Klose <doko at debian.org>  Wed, 30 Dec 2009 18:18:06 +0100
-
-doxygen (1.6.1-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Tue, 25 Aug 2009 14:44:53 +0200
-
-doxygen (1.6.0-1) unstable; urgency=low
-
-  * New upstream version.
-  * Upstream did remove the support for png images, remove the corresponding
-    debian system-libpng patch.
-  * Don't build doxywizard-gui, currently fails to build.
-
- -- Matthias Klose <doko at debian.org>  Sun, 23 Aug 2009 22:39:59 +0200
-
-doxygen (1.5.9-1) unstable; urgency=low
-
-  * New upstream version.
-  * Let doxygen recommend texlive-extra-utils for epstopdf. Closes: #488833.
-  * Don't apply the gd-renderer patch. Closes: #477364.
-  * Accept additional values known by `dot -T' for DOT_IMAGE_FORMAT.
-  * Set the default for DOT_MULTI_TARGET to true.
-
- -- Matthias Klose <doko at debian.org>  Sat, 02 May 2009 15:34:44 +0200
-
-doxygen (1.5.8-1.1) unstable; urgency=low
-
-  * Non-maintainer upload to fix Segmentation Fault.
-  * Applied patch from Gentoo to fix a Segmentation Fault as 
-    debian/patches/path-prefix.dpatch.  Thanks to Martin von Gagern for 
-    the patch and Leandro Lucarella for the pointer.  Closes: #518031
-
- -- Margarita Manterola <marga at debian.org>  Tue, 28 Apr 2009 13:01:30 +0000
-
-doxygen (1.5.8-1) unstable; urgency=low
-
-  * New upstream version.
-  * Build-depend on libqt4-dev.
-
- -- Matthias Klose <doko at debian.org>  Sun, 01 Mar 2009 18:03:23 +0100
-
-doxygen (1.5.7.1-0ubuntu2) jaunty; urgency=low
-
-  * Build-depend on texlive-latex-recommended.
-
- -- Matthias Klose <doko at ubuntu.com>  Tue, 11 Nov 2008 07:23:32 +0100
-
-doxygen (1.5.7.1-0ubuntu1) jaunty; urgency=low
-
-  * New upstream version.
-  * Adjust build dependencies.
-
- -- Matthias Klose <doko at ubuntu.com>  Tue, 11 Nov 2008 06:13:35 +0100
-
-doxygen (1.5.6-2) unstable; urgency=low
-
-  * Reenable the gd-renderer patch.
-
- -- Matthias Klose <doko at debian.org>  Sat, 07 Jun 2008 22:18:27 +0200
-
-doxygen (1.5.6-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Mon, 26 May 2008 23:01:34 +0200
-
-doxygen (1.5.5-2) unstable; urgency=low
-
-  * Merge from Ubuntu:
-    - Fix crash with empty column cells. LP: #129040.
-
- -- Matthias Klose <doko at debian.org>  Mon, 18 Feb 2008 06:15:20 +0100
-
-doxygen (1.5.5-1) unstable; urgency=low
-
-  * New upstream version.
-    - Allow documentation of template parameters. Closes: #227864.
-
- -- Matthias Klose <doko at debian.org>  Mon, 11 Feb 2008 01:17:48 +0100
-
-doxygen (1.5.4-1) unstable; urgency=low
-
-  * New upstream version.
-  * Update conflict with older graphviz package (closes: #450938).
-
- -- Matthias Klose <doko at debian.org>  Sat, 01 Dec 2007 14:32:30 +0100
-
-doxygen (1.5.3-20071020-1) unstable; urgency=low
-
-  * New upstream version from CVS.
-  * Avoid large images by using the gd renderer (Cyril Brulebois). Closes: #444147.
-
- -- Matthias Klose <doko at debian.org>  Sat, 20 Oct 2007 12:22:14 +0200
-
-doxygen (1.5.3-1) unstable; urgency=low
-
-  * New upstream version. Fixes:
-    - Doxygen gets confused by template typedefs that contain parenthesis.
-      Closes: #267406.
-
- -- Matthias Klose <doko at debian.org>  Fri, 27 Jul 2007 17:49:56 +0200
-
-doxygen (1.5.2-20070723-1) unstable; urgency=low
-
-  * New upstream version from CVS.
-    - Fix segfault for unknown or obsoleted tags in the config file.
-      Closes: #428972.
-    - debian/patches/latexgen.dpatch: Remove, applied upstream.
-    - debian/patches/install-docs.dpatch: Remove, obsolete.
-  * Adjust build dependencies for the Hurd. Closes: #434432.
-
- -- Matthias Klose <doko at debian.org>  Mon, 23 Jul 2007 23:43:45 +0200
-
-doxygen (1.5.2-4) unstable; urgency=low
-
-  * Build-depend on texlive-fonts-recommended. Closes: #425886.
-
- -- Matthias Klose <doko at debian.org>  Thu, 24 May 2007 23:41:07 +0200
-
-doxygen (1.5.2-3) unstable; urgency=low
-
-  * Build-depend on texlive-generic-recommended as well.
-
- -- Matthias Klose <doko at debian.org>  Tue, 22 May 2007 09:24:39 +0200
-
-doxygen (1.5.2-2) unstable; urgency=low
-
-  * Build-depend on texlive-latex-recommended, instead of texlive-latex-base.
-    Closes: #425087.
-
- -- Matthias Klose <doko at debian.org>  Sat, 19 May 2007 07:38:02 +0200
-
-doxygen (1.5.2-1) unstable; urgency=low
-
-  * New upstream version. Closes: #418025.
-  * Add build dependency on texlive-extra-utils. Closes: #420331.
-
- -- Matthias Klose <doko at debian.org>  Wed, 16 May 2007 20:40:05 +0200
-
-doxygen (1.5.1-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sun, 29 Oct 2006 23:35:01 +0100
-
-doxygen (1.4.7-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Tue, 20 Jun 2006 22:54:26 +0000
-
-doxygen (1.4.6-2.3) unstable; urgency=high
-
-  * Non-maintainer upload. (Yes, the third in a row. I hope to get it right
-    this time.)
-  * Do the buffer overflow fixes in a file in debian/patches/ instead of
-    directly in the Debian diff.
-
- -- Steinar H. Gunderson <sesse at debian.org>  Sun,  4 Jun 2006 01:33:12 +0200
-
-doxygen (1.4.6-2.2) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Use $(shell pwd) instead of $(PWD) in debian/rules, which fixes FTBFS on
-    builds that use (newer versions of) sudo.
-
- -- Steinar H. Gunderson <sesse at debian.org>  Sun,  4 Jun 2006 01:19:23 +0200
-
-doxygen (1.4.6-2.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Fix buffer overflows in QCString::sprintf() and SCString::sprintf().
-    (Closes: #357722)
-
- -- Steinar H. Gunderson <sesse at debian.org>  Sat,  3 Jun 2006 13:28:13 +0200
-
-doxygen (1.4.6-2) unstable; urgency=low
-
-  * Fix build error with g++-4.1 (closes: #358208).
-  * Adjust package description (closes: #347194).
-
- -- Matthias Klose <doko at debian.org>  Sat, 25 Mar 2006 23:06:34 +0000
-
-doxygen (1.4.6-1) unstable; urgency=low
-
-  * New upstream version.
-  * Fix generation of (La)TeX files (closes: #344468).
-
- -- Matthias Klose <doko at debian.org>  Fri, 30 Dec 2005 17:23:10 +0100
-
-doxygen (1.4.5-1.1) unstable; urgency=low
-
-  * Remove unused code (QChar::row, QChar::col) that does not build with
-    gcc 4.0 (closes: #338099).  
-
- -- Jeremy Nimmer <jwnimmer at alum.mit.edu>  Sun,  4 Dec 2005 15:18:45 -0500
-
-doxygen (1.4.5-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Thu, 13 Oct 2005 15:03:14 +0200
-
-doxygen (1.4.4-1) unstable; urgency=low
-
-  * New upstream version.
-    - Fix malformed XML output (closes: #315205).
-  * Fix build dependency for the hurd (closes: #312823).
-  * Tighten build dependency on libqt3-mt-dev.
-
- -- Matthias Klose <doko at debian.org>  Sat, 13 Aug 2005 13:17:51 +0200
-
-doxygen (1.4.4-0ubuntu1) breezy; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at ubuntu.com>  Fri, 29 Jul 2005 14:13:03 +0200
-
-doxygen (1.4.3-20050530-1.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Do not Build-Depend on libqt3-mt-dev on the Hurd (closes #312823).
-
- -- Michael Banck <mbanck at debian.org>  Wed, 29 Jun 2005 18:51:39 +0200
-
-doxygen (1.4.3-20050530-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Tue,  7 Jun 2005 15:10:09 +0200
-
-doxygen (1.4.2-4) unstable; urgency=medium
-
-  * src/translator_ca.h: Revert accidental conversion to unicode.
-    Patch by Maximiliano Pin (closes: #309913).
-
- -- Matthias Klose <doko at debian.org>  Sun, 22 May 2005 17:40:31 +0200
-
-doxygen (1.4.2-3) unstable; urgency=high
-
-  * Warn, if empty prototype is found, instead of segfaulting.
-    Closes: #307447.
-  * src/docparser.cpp: Fix another segfault (backport from CVS).
-
- -- Matthias Klose <doko at debian.org>  Fri,  6 May 2005 22:50:22 +0200
-
-doxygen (1.4.2-2) unstable; urgency=medium
-
-  * Do not build doxygen-gui on the Hurd (closes: #301954).
-  * Enhance doxygen manpage (closes: #285132).
-
- -- Matthias Klose <doko at debian.org>  Mon,  2 May 2005 15:40:32 +0200
-
-doxygen (1.4.2-1.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Fix a null dereference segfault in the lexer when comments contain a
-    syntax error.  Closes: #304659
-
- -- Steve Langasek <vorlon at debian.org>  Sun,  1 May 2005 04:51:40 -0700
-
-doxygen (1.4.2-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Mon, 28 Mar 2005 15:27:15 +0200
-
-doxygen (1.4.1-1) unstable; urgency=low
-
-  * New upstream version.
-  * Add menu entry for doxywizard (closes: #289726).
-
- -- Matthias Klose <doko at debian.org>  Sat, 15 Jan 2005 21:29:46 +0100
-
-doxygen (1.4.0-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Fri, 31 Dec 2004 19:22:25 +0100
-
-doxygen (1.3.9.1-1) unstable; urgency=medium
-
-  * New upstream version.
-    - Fixed problem matching array parameters that include template parameters
-      as the array size (closes: #275299).
-    - Fixed parsing problem in the preprocessor when an expression contained
-      the division operator (closes: #274698).
-
- -- Matthias Klose <doko at debian.org>  Sun, 10 Oct 2004 22:53:56 +0200
-
-doxygen (1.3.9-1) unstable; urgency=medium
-
-  * New upstream release.
-
- -- Matthias Klose <doko at debian.org>  Wed,  6 Oct 2004 01:02:35 +0200
-
-doxygen (1.3.8-20040928-1) unstable; urgency=low
-
-  * New upstream version (CVS tarball).
-    - Fix segfault while building gconfmm2.0 docs (closes: #274318).
-
- -- Matthias Klose <doko at debian.org>  Sun,  3 Oct 2004 23:22:23 +0200
-
-doxygen (1.3.8-20040913-1) unstable; urgency=low
-
-  * New upstream version (CVS tarball).
-  * Bugs fixed upstream in this or earlier releases:
-    - Fix FTBFS on GNU/k*BSD (closes: #263542).
-    - Problems with macrocreated functions (closes: #187625).
-    - Use \renewcommand{\footrulewidth}{...} instead of
-      \setlength{\footrulewidth}{...}. Closes: #194211.
-    - Do not capitalize identifiers at the start of a sentence.
-      Closes: #238275.
-    - Interpretation of c++ 'using' keyword (closes: #244213).
-    - Mishandling of c++ 'friend' declarations (closes: #244221).
-    - Fix warning related to * vs. [] (closes: #147357).
-  * Add conflict with older graphviz package (closes: #266309).
-  * Don't use libpng provided by package (closes: #269231).
-  * Add doxywizard(1) manpage (closes: #234022).
-
- -- Matthias Klose <doko at debian.org>  Tue, 21 Sep 2004 07:43:28 +0200
-
-doxygen (1.3.8-1) unstable; urgency=low
-
-  * New maintainer.
-
- -- Matthias Klose <doko at debian.org>  Tue, 27 Jul 2004 21:01:26 +0200
-
-doxygen (1.3.8-0.1) unstable; urgency=low
-
-  * NMU.
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Mon, 26 Jul 2004 00:04:44 +0200
-
-doxygen (1.3.7-0.2) unstable; urgency=low
-
-  * NMU.
-  * Apply Goswin's patch, build depend on python (closes: #241690).
-
- -- Matthias Klose <doko at debian.org>  Sun, 16 May 2004 22:38:53 +0200
-
-doxygen (1.3.7-0.1.0.1.pure64) unstable; urgency=low
-
-  * Temporarily copy src and VERSION into build tree for translate.py
-
- -- Goswin von Brederlow <brederlo at informatik.uni-tuebingen.de>  Sat, 15 May 2004 17:35:20 +0200
-
-doxygen (1.3.7-0.1) unstable; urgency=low
-
-  * NMU
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sat,  8 May 2004 08:15:20 +0200
-
-doxygen (1.3.6.20040222-0.1) unstable; urgency=medium
-
-  * NMU
-  * New upstream version (CVS tarball). Closes: #234348.
-  * Fixing termination problems in 1.3.5 and 1.3.6 (closes: #232598). 
-
- -- Matthias Klose <doko at debian.org>  Thu, 26 Feb 2004 22:07:36 +0100
-
-doxygen (1.3.5-0.1) unstable; urgency=low
-
-  * NMU
-  * New upstream version.
-
- -- Matthias Klose <doko at debian.org>  Sat, 31 Jan 2004 08:25:50 +0100
-
-doxygen (1.3.4-0.1) unstable; urgency=low
-
-  * NMU
-  * New upstream release. (Closes: #203198)
-  * Verified that this version no longer segfaults on the yehia docs.
-    (Closes: #198984)
-  * [debian/doxytag.1] Added a NAME section so it can be parsed for whatis.
-    (Closes: #210620)
-
- -- J.H.M. Dassen (Ray) <jdassen at debian.org>  Sun,  5 Oct 2003 17:24:21 +0200
-
-doxygen (1.3.2-1.1) unstable; urgency=low
-
-  * NMU
-  * [debian/control] Dropped build dependency on obsolete
-    libqt3-plugins-headers and versioned the libqt3-mt-dev build dependency so
-    as to be sure it pulls in a libqt3-headers which replaces
-    libqt3-plugins-headers. Fixes FTBFS. (Closes: #213858)
-
- -- J.H.M. Dassen (Ray) <jdassen at debian.org>  Sun,  5 Oct 2003 16:41:02 +0200
-
-doxygen (1.3.2-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 15 Jun 2003 12:35:33 -0700
-
-doxygen (1.3.1-1) unstable; urgency=low
-
-  * New upstream release (Closes: Bug#188852, Bug#196050)
-  * debian/control: doxygen-doc relationship should be "suggests"
-    (Closes: Bug#196437)
-  * debian/control: Build-Dep on flex-old
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Thu, 12 Jun 2003 20:29:49 -0700
-
-doxygen (1.3-rc3-1) unstable; urgency=low
-
-  * New upstream release
-  * built with g++-3.2
-  * debian/control: build depend on libqt3-mt-dev (Closes: Bug#180599)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Wed, 12 Feb 2003 08:14:35 -0800
-
-doxygen (1.3-rc2-1) unstable; urgency=low
-
-  * New upstream release (Closes: Bug#173643)
-  * debian/control: build depend on xlibs-dev (Closes: Bug#170119)
-  * debian/control: build depend on libqt3-dev
-  * debian/doxygen.1 debian/doxytag.1: improved manpages (Closes: Bug#170716)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Tue, 24 Dec 2002 02:57:59 -0800
-
-doxygen (1.3-rc1-1) unstable; urgency=low
-
-  * New upstream release (Closes: Bug#169676)
-    - contains fix for unconditional ouptut of tags even
-      when in conditional blocks (Closes: Bug#167515)
-    - contains fix for RTF image path bug (Closes: Bug#167722)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Tue, 19 Nov 2002 08:32:04 -0800
-
-doxygen (1.2.18-2) unstable; urgency=low
-
-  * fixed signed/unsigned compiler warning (Closes: Bug#161990) 
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Mon, 14 Oct 2002 14:45:20 -0700
-
-doxygen (1.2.18-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sat, 21 Sep 2002 11:14:28 -0700
-
-doxygen (1.2.16-3) unstable; urgency=low
-
-  * doxygen-doc provides doxygen-docs (Closes: Bug#149804)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 16 Jun 2002 14:37:02 -0700
-
-doxygen (1.2.16-2) unstable; urgency=low
-
-  * doxygen-doc conflicts/replaces doxygen-docs (Closes: Bug#149154)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Fri,  7 Jun 2002 22:28:08 -0700
-
-doxygen (1.2.16-1) unstable; urgency=low
-
-  * New upstream release
-  * debian/control: renamed binary package doxygen-docs to doxygen-doc
-    to better conform with standard practice (Closes: #147629)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun,  2 Jun 2002 18:38:58 -0700
-
-doxygen (1.2.15-2) unstable; urgency=low
-
-  * debian/watch: added uscan version 2 compliant watch file 
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sat, 13 Apr 2002 15:30:43 -0700
-
-doxygen (1.2.15-1) unstable; urgency=low
-
-  * New upstream release
-
- -- luca filipozzi <lfilipoz at debian.org>  Mon,  1 Apr 2002 10:53:09 -0800
-
-doxygen (1.2.14-3) unstable; urgency=low
-
-  * debian/control: added Conflicts against earlier version (Closes: #135670)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Tue, 26 Feb 2002 21:14:28 -0800
-
-doxygen (1.2.14-2) unstable; urgency=low
-
-  * Fixed Section for doxygen-docs: from devel to docs 
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 24 Feb 2002 12:33:53 -0800
-
-doxygen (1.2.14-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 24 Feb 2002 11:09:42 -0800
-
-doxygen (1.2.13.1-1) unstable; urgency=low
-
-  * New upstream release
-  * new package (doxygen-gui) for libqt-dependent binaries (Closes: Bug#130369)
-  * new package (doxygen-docs) for documentation (Closes: Bug#131229)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 17 Feb 2002 12:45:24 -0800
-
-doxygen (1.2.12-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Wed, 19 Dec 2001 12:26:37 -0800
-
-doxygen (1.2.11.1-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Tue, 23 Oct 2001 14:42:07 -0700
-
-doxygen (1.2.9.1-1) unstable; urgency=low
-
-  * New upstream release (Closes: #101374)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun,  5 Aug 2001 09:36:34 -0700
-
-doxygen (1.2.8.1-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Thu, 14 Jun 2001 01:15:46 -0700
-
-doxygen (1.2.8-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Mon,  4 Jun 2001 11:24:28 -0700
-
-doxygen (1.2.7-1) unstable; urgency=low
-
-  * New upstream release (Closes: #96924)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun,  3 Jun 2001 20:34:43 -0700
-
-doxygen (1.2.6-3) unstable; urgency=low
-
-  * added doc-base registration; thanks to Steve M. Robbins (Closes: #92605)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Tue,  3 Apr 2001 09:09:11 -0700
-
-doxygen (1.2.6-2) unstable; urgency=low
-
-  * enable xml support 
-  * fixed a typo that put docs into /usr/share/doc/doxygeen (Closes: #90374)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Mon, 19 Mar 2001 18:34:07 -0800
-
-doxygen (1.2.6-1) unstable; urgency=low
-
-  * New upstream release
-  * Build-depends on libqt-dev rather than libqt2.2-dev  (Closes: #88576)
-  * QTDIR is set to /usr/share/qt from /usr/lib/qt2      (Closes: #88578,#90070)
-  * above two changes fix "fails to build from source"   (Closes: #88204)
-
- -- Luca Filipozzi <lfilipoz at debian.org>  Sun, 11 Mar 2001 13:22:22 -0800
-
-doxygen (1.2.5-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Sun,  4 Feb 2001 23:20:37 -0800
-
-doxygen (1.2.4-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Mon,  8 Jan 2001 20:10:52 -0800
-
-doxygen (1.2.3-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Thu,  2 Nov 2000 16:49:52 -0800
-
-doxygen (1.2.2-2) unstable; urgency=low
-
-  *  Changed maintainer field to Luca Filipozzi <lfilipoz at debian.org>
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Fri,  6 Oct 2000 10:19:05 -0700
-
-doxygen (1.2.2-1) unstable; urgency=low
-
-  * New upstream release... bug fixes and some additional features
-    (see http://www.stack.nl/~dimitri/doxygen/changelog.html for info)
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Sun, 24 Sep 2000 21:29:16 +0000
-
-doxygen (1.2.1-1) unstable; urgency=low
-
-  * New upstream release
-  * Compiled against libqt2.2 (closes: #71813)
-  * debian/control: removed the libqt2 dependency since it is added
-    automatically by ${shlibs:Depends}
-  * debian/control: added Build-Depends and upgraded Standards-Version
-  * debian/control: added Suggests for graphviz for the graph functions
-    (note: graphviz is non-free, so it is listed as a suggestion only)
-  * debian/rules: added --with-doxywizard and --with-configgen so that
-    the doxy wizard and the config generator are included in the package
-  * debian/rules: added --dot dot to specify the name of the "dot" tool
-    so that it will be found if installed at runtime rather than needing
-    it to be installed at build time (the configure script attempts to
-    find "dot" but the build does not actually need it)
-  * Note that the upstream package no longer contains the LaTeX source
-    for the docs. Instead, PDF and PS versions of the docs are provided.
-
-  + many thanks to Torsten Landschoff for his help... all the above changes
-    were suggested by him
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Thu, 21 Sep 2000 12:28:16 -0700
-
-doxygen (1.0.0-2) unstable; urgency=low
-
-  * Compiled against libqt2. 
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Wed, 19 Jul 2000 18:02:38 -0700
-
-doxygen (1.0.0-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Luca Filipozzi <lfilipoz at emyr.net>  Wed, 19 Jul 2000 18:01:52 -0700
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index 7ed6ff8..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 2b874d5..0000000
--- a/debian/control
+++ /dev/null
@@ -1,113 +0,0 @@
-Source: doxygen
-Section: devel
-Priority: optional
-Maintainer: Matthias Klose <doko at debian.org>
-Uploaders: Helmut Grohne <helmut at subdivi.de>
-Build-Depends: debhelper (>= 5),
-  libqt4-dev,
-  flex, bison (>= 1.875a),
-  python3,
-  libsqlite3-dev,
-  libxapian-dev,
-  tmake,
-  yui-compressor,
-  libclang-3.5-dev [alpha amd64 armel armhf arm64 i386 mips mipsel powerpc powerpcspe ppc64 ppc64el s390x kfreebsd-amd64 kfreebsd-i386]
-Build-Depends-Indep: texlive-fonts-recommended,
-  texlive-generic-recommended,
-  texlive-latex-extra,
-  texlive-latex-recommended,
-  texlive-extra-utils,
-  texlive-font-utils,
-  ghostscript,
-  graphviz,
-  latex-xcolor,
-  rdfind
-Standards-Version: 3.9.6
-Homepage: http://www.stack.nl/~dimitri/doxygen/
-XS-Testsuite: autopkgtest
-
-Package: doxygen
-Architecture: any
-Multi-Arch: foreign
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Suggests: doxygen-latex, doxygen-doc, doxygen-gui, graphviz
-Conflicts: graphviz (<< 1.12)
-Description: Documentation system for C, C++, Java, Python and other languages
- Doxygen is a documentation system for C, C++, Java, Objective-C, Python, IDL
- and to some extent PHP, C#, and D.  It can generate an on-line class browser
- (in HTML) and/or an off-line reference manual (in LaTeX) from a set of
- documented source files. There is also support for generating man pages
- and for converting the generated output into Postscript, hyperlinked PDF
- or compressed HTML.  The documentation is extracted directly from the sources.
- .
- Install the doxygen-latex package to build LaTeX based documents.
-
-Package: doxygen-latex
-Architecture: all
-Multi-Arch: foreign
-Depends: doxygen (>= ${source:Version}),
-  ${misc:Depends},
-  texlive-extra-utils,
-  texlive-latex-extra,
-  latex-xcolor,
-  texlive-font-utils,
-  ghostscript,
-  texlive-fonts-recommended,
-  cm-super-minimal
-Description: Documentation system for C, C++, Java, Python and other languages
- Doxygen is a documentation system for C, C++, Java, Objective-C, Python, IDL
- and to some extent PHP, C#, and D.  It can generate an on-line class browser
- (in HTML) and/or an off-line reference manual (in LaTeX) from a set of
- documented source files.
- .
- This dependency package adds dependencies for all LaTeX packages required
- to build documents using the default stylesheet.
-
-Package: doxygen-doc
-Architecture: all
-Depends: ${misc:Depends}
-Recommends: doxygen
-Section: doc
-Provides: doxygen-docs
-Replaces: doxygen (<< 1.2.14), doxygen-docs
-Conflicts: doxygen-docs
-Description: Documentation for doxygen
- Doxygen is a documentation system for C, C++, Java, Objective-C, Python, IDL
- and to some extent PHP, C#, and D.  It can generate an on-line class browser
- (in HTML) and/or an off-line reference manual (in LaTeX) from a set of
- documented source files. There is also support for generating man pages
- and for converting the generated output into Postscript, hyperlinked PDF
- or compressed HTML.  The documentation is extracted directly from the sources. 
- .
- This package contains the documentation for doxygen.
-
-Package: doxygen-gui
-Architecture: any
-Depends: doxygen, ${shlibs:Depends}, ${misc:Depends}
-Suggests: doxygen-doc
-Replaces: doxygen (<< 1.2.14)
-Build-Profiles: <!stage1>
-Description: GUI configuration tool for doxygen
- Doxygen is a documentation system for C, C++, Java, Objective-C, Python, IDL
- and to some extent PHP, C#, and D.  It can generate an on-line class browser
- (in HTML) and/or an off-line reference manual (in LaTeX) from a set of
- documented source files. There is also support for generating man pages
- and for converting the generated output into Postscript, hyperlinked PDF
- or compressed HTML.  The documentation is extracted directly from the sources. 
- .
- This package contains doxywizard, a GUI configuration tool for doxygen.
-
-Package: doxygen-dbg
-Section: debug
-Priority: extra
-Architecture: any
-Depends: doxygen (= ${binary:Version}), ${misc:Depends}
-Description: Debug symbols for doxygen
- Doxygen is a documentation system for C, C++, Java, Objective-C, Python, IDL
- and to some extent PHP, C#, and D.  It can generate an on-line class browser
- (in HTML) and/or an off-line reference manual (in LaTeX) from a set of
- documented source files. There is also support for generating man pages
- and for converting the generated output into Postscript, hyperlinked PDF
- or compressed HTML.  The documentation is extracted directly from the sources.
- .
- This package contains the debug symbols for doxygen.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index d326b5a..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,286 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: doxygen
-Upstream-Contact: Dimitri van Heesch <dimitri at stack.nl>
-Source: http://www.stack.nl/~dimitri/doxygen/download.html
-
-Files: *
-Copyright: 1997-2014, Dimitri van Heesch and others
-License: GPL-2 with exceptions
-
-Files: debian/*
-Copyright:
- 2000-2003, Luca Filipozzi
- 2004-2014, Matthias Klose
- 2013-2014, Helmut Grohne
- and others
-License: GPL-2
-Comment: no license was ever declared by the authors, so assuming a derivative work
-
-Files: debian/dh-doxygen/dh_doxygen
-Copyright: 2011, Jakub Wilk
- 2013, Helmut Grohne
-License: BSD-2
-
-Files: jquery/*
-Copyright:
- 2007-2009, Ariel Flesler
- 2010, "Cowboy" Ben Alman
- 2011, John Resig
- 2011, The Dojo Foundation
- 2013, Steven Benner
-License: MIT or GPL-2
-
-Files: libmd5/*c libmd5/*.h
-Copyright: no copyright claimed by Colin Plumb or Ian Jackson
-License: public-domain
-
-Files: qtools/*
-Copyright: 1992-2000, Trolltech AS. and others
-License: GPL-2 or QPL
-
-Files:
- qtools/qmutex*
- qtools/qthread*
- qtools/qwaitcondition*
-Copyright: 2009, Nokia Corporation and/or its subsidiary(-ies)
-License: LGPL-2.1
-
-Files: src/lodepng.*
-Copyright: 2005-2008, Lode Vandevenne
-License: Zlib
-
-License: BSD-2
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- .
- * Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- .
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
- .
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-License: GPL-2
- This program is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation;
- version 2 of the License.
- .
- This program is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.  See the GNU General Public License for more
- details.
- .
- You should have received a copy of the GNU General Public
- License along with this package; if not, write to the Free
- Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA  02110-1301 USA
- .
- On Debian systems, the full text of the GNU General Public
- License version 2 can be found in the file
- `/usr/share/common-licenses/GPL-2'.
-
-License: GPL-2 with exceptions
- This program is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation;
- version 2 of the License.
- .
- It is hereby explicitly allowed that this program may be linked against
- Troll Tech's Qt library, and distributed, without the GPL applying to Qt.
- .
- Documents produced by Doxygen are derivative works derived from the
- input used in their production; they are not affected by this license.
- .
- This program is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.  See the GNU General Public License for more
- details.
- .
- You should have received a copy of the GNU General Public
- License along with this package; if not, write to the Free
- Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA  02110-1301 USA
- .
- On Debian systems, the full text of the GNU General Public
- License version 2 can be found in the file
- `/usr/share/common-licenses/GPL-2'.
-
-License: LGPL-2.1
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation;
- version 2.1 of the License.
- .
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- Lesser General Public License for more details.
- .
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- .
- On Debian systems, the full text of the GNU Lesser General Public
- License version 2.1 can be found in the file
- `/usr/share/common-licenses/LGPL-2.1'.
-
-License: MIT
- 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.
-
-License: QPL
- 			     THE Q PUBLIC LICENSE
- 				  version 1.0
- .
- 		   Copyright (C) 1999-2000 Trolltech AS, Norway.
- 		       Everyone is permitted to copy and
- 		       distribute this license document.
- .
- The intent of this license is to establish freedom to share and change the
- software regulated by this license under the open source model.
- .
- This license applies to any software containing a notice placed by the
- copyright holder saying that it may be distributed under the terms of
- the Q Public License version 1.0.  Such software is herein referred to as
- the Software.  This license covers modification and distribution of the
- Software, use of third-party application programs based on the Software,
- and development of free software which uses the Software.
- .
- 				 Granted Rights
- .
- 1. You are granted the non-exclusive rights set forth in this license
-    provided you agree to and comply with any and all conditions in this
-    license.  Whole or partial distribution of the Software, or software
-    items that link with the Software, in any form signifies acceptance of
-    this license.
- .
- 2. You may copy and distribute the Software in unmodified form provided
-    that the entire package, including - but not restricted to - copyright,
-    trademark notices and disclaimers, as released by the initial developer
-    of the Software, is distributed.
- .
- 3. You may make modifications to the Software and distribute your
-    modifications, in a form that is separate from the Software, such as
-    patches. The following restrictions apply to modifications:
- .
-      a. Modifications must not alter or remove any copyright notices in
-         the Software.
- .
-      b. When modifications to the Software are released under this
-         license, a non-exclusive royalty-free right is granted to the
-         initial developer of the Software to distribute your modification
-         in future versions of the Software provided such versions remain
-         available under these terms in addition to any other license(s) of
-         the initial developer.
- .
- 4. You may distribute machine-executable forms of the Software or
-    machine-executable forms of modified versions of the Software, provided
-    that you meet these restrictions:
- .
-      a. You must include this license document in the distribution.
- .
-      b. You must ensure that all recipients of the machine-executable forms
-         are also able to receive the complete machine-readable source code
-         to the distributed Software, including all modifications, without
-         any charge beyond the costs of data transfer, and place prominent
-         notices in the distribution explaining this.
- .
-      c. You must ensure that all modifications included in the
-         machine-executable forms are available under the terms of this
-         license.
- .
- 5. You may use the original or modified versions of the Software to
-    compile, link and run application programs legally developed by you
-    or by others.
- .
- 6. You may develop application programs, reusable components and other
-    software items that link with the original or modified versions of the
-    Software.  These items, when distributed, are subject to the following
-    requirements:
- .
-      a. You must ensure that all recipients of machine-executable forms of
-         these items are also able to receive and use the complete
-         machine-readable source code to the items without any charge
-         beyond the costs of data transfer.
- .
-      b. You must explicitly license all recipients of your items to use
-         and re-distribute original and modified versions of the items in
-         both machine-executable and source code forms. The recipients must
-         be able to do so without any charges whatsoever, and they must be
-         able to re-distribute to anyone they choose.
- .
-      c. If the items are not available to the general public, and the
-         initial developer of the Software requests a copy of the items,
-         then you must supply one.
- .
- 			    Limitations of Liability
- .
- In no event shall the initial developers or copyright holders be liable
- for any damages whatsoever, including - but not restricted to - lost
- revenue or profits or other direct, indirect, special, incidental or
- consequential damages, even if they have been advised of the possibility
- of such damages, except to the extent invariable law, if any, provides
- otherwise.
- .
- 			          No Warranty
- .
- The Software and this license document are provided AS IS with NO WARRANTY
- OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE.
-                                  Choice of Law
- .
- This license is governed by the Laws of Norway. Disputes shall be settled
- by Oslo City Court.
-
-
-License: Zlib
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- .
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- .
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
- .
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
- .
-     3. This notice may not be removed or altered from any source
-     distribution.
diff --git a/debian/dh-doxygen/dh_doxygen b/debian/dh-doxygen/dh_doxygen
deleted file mode 100755
index 1d911f9..0000000
--- a/debian/dh-doxygen/dh_doxygen
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright © 2011 Jakub Wilk <jwilk at debian.org>
-# Copyright © 2013 Helmut Grohne <helmut at subdivi.de>
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=head1 NAME
-
-dh_doxygen - helps with packaging doxygen-generated documentation
-
-=head1 SYNOPSIS
-
-dh_doxygen [S<I<debhelper options>>] [B<-X>I<item>] [I<directory>...]
-
-=head1 DESCRIPTION
-
-B<dh_doxygen> is a debhelper program that prepares doxygen-generated
-documentation for inclusion in a Debian package. More specifically:
-
-=over 4
-
-=item *
-
-It removes F<*.md5> and F<*.map> files. These are created by doxygen to speed
-up incremental runs.
-
-=back
-
-=head1 OPTIONS
-
-=over 4
-
-=item I<directory>
-
-By default, B<dh_doxygen> scans your package looking for directories looking
-like they contain doxygen-generated documentation. However, if you explicitly
-provide one or more directories, only they will be processed.
-
-=item B<-X>I<item>, B<--exclude=>I<item>
-
-Exclude files that contain I<item> anywhere in their filename from
-being symlinked, removed or checked for existence.
-
-=back
-
-=head1 BUGS
-
-Probably.
-
-=cut
-
-use strict;
-use warnings;
-
-use File::Find;
-use Debian::Debhelper::Dh_Lib;
-
-sub looks_like_doxygen_doc($)
-{
-    my ($path) = @_;
-    return 0 unless -f "$path/doxygen.css";
-    return 0 unless -f "$path/doxygen.png";
-    return 0 unless -f "$path/index.html";
-    return 1;
-}
-
-sub drop_cruft($)
-{
-    my ($path) = @_;
-    my $find_options = "";
-    if(defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '')
-    {
-        $find_options = "! \\( $dh{EXCLUDE_FIND} \\) -a";
-    }
-    complex_doit("find $path $find_options -type f -a \\
-            \\( -name '*.md5' -o -name '*.map' \\) -delete");
-}
- 
-sub fix_doxygen_doc($$)
-{
-    my ($package, $path) = @_;
-    return 0 if not looks_like_doxygen_doc($path);
-    drop_cruft($path);
-    return 1;
-}
-
-init();
-
-my @paths = @ARGV;
- at paths = (undef) unless @paths;
-
-foreach my $path (@paths)
-{
-    my $done = 0;
-    foreach my $package (@{$dh{DOPACKAGES}})
-    {
-        my $pkgpath = tmpdir($package);
-        if (defined $path)
-        {
-            next if -l $path;
-            $pkgpath .= "/$path";
-            $done += fix_doxygen_doc($package, $pkgpath);
-        }
-        else
-        {
-            $pkgpath .= '/usr/share/doc/';
-            next unless -d $pkgpath;
-            find({
-                wanted => sub {
-                    return unless -d;
-                    return if -l;
-                    return if excludefile($_);
-                    $done += fix_doxygen_doc($package, $_);
-                },
-                no_chdir => 1
-            }, $pkgpath);
-        }
-    }
-    if ($done == 0)
-    {
-        my $message = 'Doxygen documentation not found';
-        $message .= " at $path" if defined $path;
-        error($message);
-    }
-}
-
-=head1 SEE ALSO
-
-L<debhelper(7)>, L<dh(1)>.
-
-This program is meant to be used together with debhelper.
-
-=head1 AUTHORS
-
-Jakub Wilk <jwilk at debian.org>
-Helmut Grohne <helmut at subdivi.de>
-
-=cut
-
-# vim:ts=4 sw=4 et
diff --git a/debian/dh-doxygen/dh_doxygen.1 b/debian/dh-doxygen/dh_doxygen.1
deleted file mode 100644
index 7a69429..0000000
--- a/debian/dh-doxygen/dh_doxygen.1
+++ /dev/null
@@ -1,175 +0,0 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
-.\"
-.\" Standard preamble:
-.\" ========================================================================
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-.fi
-..
-.\" Set up some character translations and predefined strings.  \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
-.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
-.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
-.\" nothing in troff, for use with C<>.
-.tr \(*W-
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-.    ds -- \(*W-
-.    ds PI pi
-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
-.    ds L" ""
-.    ds R" ""
-.    ds C` ""
-.    ds C' ""
-'br\}
-.el\{\
-.    ds -- \|\(em\|
-.    ds PI \(*p
-.    ds L" ``
-.    ds R" ''
-.    ds C`
-.    ds C'
-'br\}
-.\"
-.\" Escape single quotes in literal strings from groff's Unicode transform.
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
-.\" entries marked with X<> in POD.  Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.\"
-.\" Avoid warning from groff about undefined register 'F'.
-.de IX
-..
-.nr rF 0
-.if \n(.g .if rF .nr rF 1
-.if (\n(rF:(\n(.g==0)) \{
-.    if \nF \{
-.        de IX
-.        tm Index:\\$1\t\\n%\t"\\$2"
-..
-.        if !\nF==2 \{
-.            nr % 0
-.            nr F 2
-.        \}
-.    \}
-.\}
-.rr rF
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
-.    \" fudge factors for nroff and troff
-.if n \{\
-.    ds #H 0
-.    ds #V .8m
-.    ds #F .3m
-.    ds #[ \f1
-.    ds #] \fP
-.\}
-.if t \{\
-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-.    ds #V .6m
-.    ds #F 0
-.    ds #[ \&
-.    ds #] \&
-.\}
-.    \" simple accents for nroff and troff
-.if n \{\
-.    ds ' \&
-.    ds ` \&
-.    ds ^ \&
-.    ds , \&
-.    ds ~ ~
-.    ds /
-.\}
-.if t \{\
-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-.    \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.    \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-.    \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-.    ds : e
-.    ds 8 ss
-.    ds o a
-.    ds d- d\h'-1'\(ga
-.    ds D- D\h'-1'\(hy
-.    ds th \o'bp'
-.    ds Th \o'LP'
-.    ds ae ae
-.    ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "DH_DOXYGEN 1"
-.TH DH_DOXYGEN 1 "2014-05-16" "" "Debhelper"
-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.if n .ad l
-.nh
-.SH "NAME"
-dh_doxygen \- helps with packaging doxygen\-generated documentation
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-dh_doxygen [\fIdebhelper\ options\fR] [\fB\-X\fR\fIitem\fR] [\fIdirectory\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBdh_doxygen\fR is a debhelper program that prepares doxygen-generated
-documentation for inclusion in a Debian package. More specifically:
-.IP "\(bu" 4
-It removes \fI*.md5\fR and \fI*.map\fR files. These are created by doxygen to speed
-up incremental runs.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fIdirectory\fR" 4
-.IX Item "directory"
-By default, \fBdh_doxygen\fR scans your package looking for directories looking
-like they contain doxygen-generated documentation. However, if you explicitly
-provide one or more directories, only they will be processed.
-.IP "\fB\-X\fR\fIitem\fR, \fB\-\-exclude=\fR\fIitem\fR" 4
-.IX Item "-Xitem, --exclude=item"
-Exclude files that contain \fIitem\fR anywhere in their filename from
-being symlinked, removed or checked for existence.
-.SH "BUGS"
-.IX Header "BUGS"
-Probably.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIdebhelper\fR\|(7), \fIdh\fR\|(1).
-.PP
-This program is meant to be used together with debhelper.
-.SH "AUTHORS"
-.IX Header "AUTHORS"
-Jakub Wilk <jwilk at debian.org>
-Helmut Grohne <helmut at subdivi.de>
diff --git a/debian/dh-doxygen/doxygen.pm b/debian/dh-doxygen/doxygen.pm
deleted file mode 100644
index 976ae9c..0000000
--- a/debian/dh-doxygen/doxygen.pm
+++ /dev/null
@@ -1,8 +0,0 @@
-use warnings;
-use strict;
-
-use Debian::Debhelper::Dh_Lib;
-
-insert_after('dh_installdocs', 'dh_doxygen');
-
-1;
diff --git a/debian/doxygen-doc.doc-base b/debian/doxygen-doc.doc-base
deleted file mode 100644
index 9cb927d..0000000
--- a/debian/doxygen-doc.doc-base
+++ /dev/null
@@ -1,18 +0,0 @@
-Document: doxygen
-Title: Doxygen
-Author: Dimitri van Heesch
-Abstract: Documentation system for C, C++ and IDL.
- Doxygen can generate an on-line class browser (in HTML) and/or an off-line
- reference manual (in LaTeX) from a set of documented source files. There is
- also support for generating man pages and for converting the generated output
- into Postscript, hyperlinked PDF or compressed HTML. The documentation is
- extracted directly from the sources.
-Section: Programming
-
-Format: HTML
-Index: /usr/share/doc/doxygen/html/index.html
-Files: /usr/share/doc/doxygen/html/*.html
-
-Format: PDF
-Files: /usr/share/doc/doxygen/doxygen_manual.pdf
-
diff --git a/debian/doxygen-doc.files b/debian/doxygen-doc.files
deleted file mode 100644
index 5d67594..0000000
--- a/debian/doxygen-doc.files
+++ /dev/null
@@ -1 +0,0 @@
-usr/share/doc/doxygen-doc
diff --git a/debian/doxygen-doc.lintian-overrides b/debian/doxygen-doc.lintian-overrides
deleted file mode 100644
index 631756a..0000000
--- a/debian/doxygen-doc.lintian-overrides
+++ /dev/null
@@ -1,5 +0,0 @@
-# The package only uses hardlinks below usr/share/doc/doxygen, which is created
-# by doxygen or doxygen-doc. It is therefore unlikely to mount a filesystem on
-# any directory in there. Policy 10.7.3 is not violated, because this directory
-# (by definition) cannot contain conffiles.
-doxygen-doc: package-contains-hardlink
diff --git a/debian/doxygen-gui.menu b/debian/doxygen-gui.menu
deleted file mode 100644
index c142030..0000000
--- a/debian/doxygen-gui.menu
+++ /dev/null
@@ -1,6 +0,0 @@
-?package(doxygen-gui):\
-  needs="X11"\
-  section="Applications/Programming"\
-  title="Doxywizard"\
-  description="Doxygen Configuration Editor"\
-  command="/usr/bin/doxywizard"
diff --git a/debian/doxygen.NEWS b/debian/doxygen.NEWS
deleted file mode 100644
index 68576a8..0000000
--- a/debian/doxygen.NEWS
+++ /dev/null
@@ -1,6 +0,0 @@
-doxygen (1.8.7-1) unstable; urgency=medium
-
-  Doxygen no longer defaults to GENERATE_HTML=YES if no output format is
-  specified. Your html documentation may go missing.
-
- -- Helmut Grohne <helmut at subdivi.de>  Fri, 16 May 2014 19:30:15 +0200
diff --git a/debian/doxygen.docs b/debian/doxygen.docs
deleted file mode 100644
index ca95ded..0000000
--- a/debian/doxygen.docs
+++ /dev/null
@@ -1 +0,0 @@
-debian/README.jquery
diff --git a/debian/doxygen.install b/debian/doxygen.install
deleted file mode 100644
index a5dabf7..0000000
--- a/debian/doxygen.install
+++ /dev/null
@@ -1 +0,0 @@
-debian/dh-doxygen/dh_doxygen /usr/bin
diff --git a/debian/doxygen.manpages b/debian/doxygen.manpages
deleted file mode 100644
index 5379311..0000000
--- a/debian/doxygen.manpages
+++ /dev/null
@@ -1 +0,0 @@
-debian/dh-doxygen/dh_doxygen.1
diff --git a/debian/patches/clang-configure.diff b/debian/patches/clang-configure.diff
deleted file mode 100644
index f919386..0000000
--- a/debian/patches/clang-configure.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-Index: b/configure
-===================================================================
---- a/configure
-+++ b/configure
-@@ -554,8 +554,8 @@ fi
- 
- if test "$f_libclang" = YES; then
-   printf "  Checking for libclang ... "
--  libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
--  libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
-+  libclang_hdr_dir="/usr/lib/llvm-3.5/include /usr/include /usr/local/include /opt/local/include"
-+  libclang_lib_dir="/usr/lib/llvm-3.5/lib /usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
-   if test "$f_libclangstatic" = NO; then
-     libclang_lib_name="libclang.so libclang.dylib libclang.a libclang.dll.a"
-   else
-Index: b/src/libdoxygen.pro.in
-===================================================================
---- a/src/libdoxygen.pro.in
-+++ b/src/libdoxygen.pro.in
-@@ -230,6 +230,7 @@ win32-g++:TMAKE_CXXFLAGS   += -fno-excep
- linux-g++:TMAKE_CXXFLAGS   += -fno-exceptions
- INCLUDEPATH                += ../generated_src/doxygen ../src ../qtools ../libmd5 ../vhdlparser
- INCLUDEPATH                += %%SQLITE3_INC%%
-+INCLUDEPATH                += /usr/lib/llvm-3.5/include
- DEPENDPATH                 += ../generated_src/doxygen
- win32:INCLUDEPATH          += .
- DESTDIR                    =  ../lib
diff --git a/debian/patches/dot-config.diff b/debian/patches/dot-config.diff
deleted file mode 100644
index 0018ff4..0000000
--- a/debian/patches/dot-config.diff
+++ /dev/null
@@ -1,37 +0,0 @@
-Last-Update: 2014-05-16
-
-Index: doxygen/src/config.xml
-===================================================================
---- doxygen.orig/src/config.xml	2014-05-16 20:13:20.000000000 +0200
-+++ doxygen/src/config.xml	2014-05-16 20:14:40.000000000 +0200
-@@ -3049,7 +3049,7 @@
- ]]>
-       </docs>
-     </option>
--    <option type='bool' id='HAVE_DOT' defval='0'>
-+    <option type='bool' id='HAVE_DOT' defval='1'>
-       <docs>
- <![CDATA[
-  If you set the \c HAVE_DOT tag to \c YES then doxygen will assume the \c dot tool is
-@@ -3232,8 +3232,21 @@
- ]]>
-       </docs>
-       <value name='png'/>
-+      <value name='png:cairo'/>
-+      <value name='png:cairo:cairo'/>
-+      <value name='png:cairo:gd'/>
-+      <value name='png:gd'/>
-+      <value name='png:gd:gd'/>
-       <value name='jpg'/>
-+      <value name='jpg:cairo'/>
-+      <value name='jpg:cairo:gd'/>
-+      <value name='jpg:gd'/>
-+      <value name='jpg:gd:gd'/>
-       <value name='gif'/>
-+      <value name='gif:cairo'/>
-+      <value name='gif:cairo:gd'/>
-+      <value name='gif:gd'/>
-+      <value name='gif:gd:gd'/>
-       <value name='svg'/>
-     </option>
-     <option type='bool' id='INTERACTIVE_SVG' defval='0' depends='HAVE_DOT'>
diff --git a/debian/patches/dot_num_threads.diff b/debian/patches/dot_num_threads.diff
deleted file mode 100644
index f542577..0000000
--- a/debian/patches/dot_num_threads.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-Index: doxygen-1.7.6.1/doc/config.doc
-===================================================================
---- doxygen-1.7.6.1.orig/doc/config.doc	2011-12-06 21:07:10.000000000 +0000
-+++ doxygen-1.7.6.1/doc/config.doc	2011-12-12 14:30:30.457971073 +0000
-@@ -2321,10 +2321,10 @@
- <dt>\c DOT_NUM_THREADS <dd>
-  \addindex DOT_NUM_THREADS
-  The \c DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
-- allowed to run in parallel. When set to 0 (the default) doxygen will 
-+ allowed to run in parallel. When set to 0 (the upstream default) doxygen will 
-  base this on the number of processors available in the system. You can set it 
-  explicitly to a value larger than 0 to get control over the balance 
-- between CPU load and processing speed.  
-+ between CPU load and processing speed.  For Debian the default is 1.
- 
- \anchor cfg_dot_fontname
- <dt>\c DOT_FONTNAME <dd>
-Index: doxygen-1.7.6.1/src/config.xml
-===================================================================
---- doxygen-1.7.6.1.orig/src/config.xml	2011-12-06 21:03:24.000000000 +0000
-+++ doxygen-1.7.6.1/src/config.xml	2011-12-12 14:29:03.277842085 +0000
-@@ -1446,11 +1446,11 @@
- ' defval='0'/>
-     <option type='int' id='DOT_NUM_THREADS' docs='
- The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
--allowed to run in parallel. When set to 0 (the default) doxygen will 
-+allowed to run in parallel. When set to 0 (the upstream default) doxygen will 
- base this on the number of processors available in the system. You can set it 
- explicitly to a value larger than 0 to get control over the balance 
--between CPU load and processing speed.  
--' defval='0' minval='0' maxval='32'/>
-+between CPU load and processing speed.  For Debian, the default it 1.
-+' defval='1' minval='0' maxval='32'/>
-     <option type='string' id='DOT_FONTNAME' format='string' docs='
- By default doxygen will use the Helvetica font for all dot files that 
- doxygen generates. When you want a differently looking font you can specify 
-Index: doxygen-1.7.6.1/src/configoptions.cpp
-===================================================================
---- doxygen-1.7.6.1.orig/src/configoptions.cpp	2011-12-12 14:26:13.867594965 +0000
-+++ doxygen-1.7.6.1/src/configoptions.cpp	2011-12-12 14:29:54.897920578 +0000
-@@ -2181,11 +2181,11 @@
-   ci = cfg->addInt(
-                  "DOT_NUM_THREADS",
-                  "The DOT_NUM_THREADS specifies the number of dot invocations doxygen is\n"
--                 "allowed to run in parallel. When set to 0 (the default) doxygen will\n"
-+                 "allowed to run in parallel. When set to 0 (the upstream default) doxygen will\n"
-                  "base this on the number of processors available in the system. You can set it\n"
-                  "explicitly to a value larger than 0 to get control over the balance\n"
--                 "between CPU load and processing speed.",
--                 0,32,0
-+                 "between CPU load and processing speed. For Debian the default is 1",
-+                 0,32,1
-                 );
-   //----
-   cs = cfg->addString(
diff --git a/debian/patches/doxygen-jquery.patch b/debian/patches/doxygen-jquery.patch
deleted file mode 100644
index e636daa..0000000
--- a/debian/patches/doxygen-jquery.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: doxygen/src/htmlgen.cpp
-===================================================================
---- doxygen.orig/src/htmlgen.cpp	2013-11-09 19:18:19.000000000 +0100
-+++ doxygen/src/htmlgen.cpp	2013-11-09 19:18:19.000000000 +0100
-@@ -1560,6 +1560,7 @@
-     fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
-   }
- 
-+  if (Config_getBool("GENERATE_TREEVIEW") || Config_getBool("SEARCHENGINE"))
-   {
-     QFile f(dname+"/jquery.js");
-     if (f.open(IO_WriteOnly))
diff --git a/debian/patches/doxygen_direct_dot_run.diff b/debian/patches/doxygen_direct_dot_run.diff
deleted file mode 100644
index 73516d3..0000000
--- a/debian/patches/doxygen_direct_dot_run.diff
+++ /dev/null
@@ -1,39 +0,0 @@
---- doxygen-1.7.5.1.orig/src/dot.cpp
-+++ doxygen-1.7.5.1/src/dot.cpp
-@@ -1125,6 +1125,8 @@ void DotWorkerThread::cleanup()
- 
- //--------------------------------------------------------------------
- 
-+#define DIRECT_DOT_RUN 1
-+
- DotManager *DotManager::m_theInstance = 0;
- 
- DotManager *DotManager::instance()
-@@ -1141,6 +1143,7 @@ DotManager::DotManager() : m_dotMaps(100
-   m_dotRuns.setAutoDelete(TRUE);
-   m_dotMaps.setAutoDelete(TRUE);
-   m_queue = new DotRunnerQueue;
-+#ifndef DIRECT_DOT_RUN
-   int i;
-   int numThreads = QMIN(32,Config_getInt("DOT_NUM_THREADS"));
-   if (numThreads!=1)
-@@ -1161,6 +1164,7 @@ DotManager::DotManager() : m_dotMaps(100
-     }
-     ASSERT(m_workers.count()>0);
-   }
-+#endif
- }
- 
- DotManager::~DotManager()
-@@ -1261,7 +1265,11 @@ bool DotManager::run()
-   // fill work queue with dot operations
-   DotRunner *dr;
-   int prev=1;
-+#ifdef DIRECT_DOT_RUN
-+  if (1)
-+#else
-   if (m_workers.count()==0) // no threads to work with
-+#endif
-   {
-     for (li.toFirst();(dr=li.current());++li)
-     {
diff --git a/debian/patches/fix-760700.diff b/debian/patches/fix-760700.diff
deleted file mode 100644
index 402b41b..0000000
--- a/debian/patches/fix-760700.diff
+++ /dev/null
@@ -1,67 +0,0 @@
-Author: Dimitri van Heesch <dimitri at stack.nl>
-Date:   Tue Aug 26 20:18:51 2014 +0200
-Origin: https://github.com/doxygen/doxygen/commits/6d4044ad43ae1424a256eb1c26992301e7c64f4a
-Bug-Debian: https://bugs.debian.org/760700
-
-    Fix potential crash when reading tag file which contained nested java classes using generics
-    
-    Also fixed a parse error when reading a tag file with a Java-style enum
-
-diff --git a/src/doxygen.cpp b/src/doxygen.cpp
-index 533e6ef..5492dc9 100644
---- a/src/doxygen.cpp
-+++ b/src/doxygen.cpp
-@@ -1037,9 +1037,16 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
-     else // scope is a namespace
-     {
-     }
--    // make the parent/child scope relation
--    prevScope->addInnerCompound(innerScope);
--    innerScope->setOuterScope(prevScope);
-+    if (innerScope)
-+    {
-+      // make the parent/child scope relation
-+      prevScope->addInnerCompound(innerScope);
-+      innerScope->setOuterScope(prevScope);
-+    }
-+    else // current scope is a class, so return only the namespace part...
-+    {
-+      return prevScope;
-+    }
-     // proceed to the next scope fragment
-     p=idx+l+2;
-     prevScope=innerScope;
-diff --git a/src/tagreader.cpp b/src/tagreader.cpp
-index 23b8f13..50909ee 100644
---- a/src/tagreader.cpp
-+++ b/src/tagreader.cpp
-@@ -95,7 +95,7 @@ class TagMemberInfo
- class TagClassInfo
- {
-   public:
--    enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category };
-+    enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category, Enum };
-     TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; }
-    ~TagClassInfo() { delete bases; delete templateArguments; }
-     QCString name;
-@@ -301,6 +301,12 @@ class TagFileParser : public QXmlDefaultHandler
-         m_curClass->kind = TagClassInfo::Interface;
-         m_state = InClass;
-       }
-+      else if (kind=="enum")
-+      {
-+        m_curClass = new TagClassInfo;
-+        m_curClass->kind = TagClassInfo::Enum;
-+        m_state = InClass;
-+      }
-       else if (kind=="exception")
-       {
-         m_curClass = new TagClassInfo;
-@@ -1286,6 +1292,7 @@ void TagFileParser::buildLists(Entry *root)
-       case TagClassInfo::Struct:    ce->spec = Entry::Struct;    break;
-       case TagClassInfo::Union:     ce->spec = Entry::Union;     break;
-       case TagClassInfo::Interface: ce->spec = Entry::Interface; break;
-+      case TagClassInfo::Enum:      ce->spec = Entry::Enum;      break;
-       case TagClassInfo::Exception: ce->spec = Entry::Exception; break;
-       case TagClassInfo::Protocol:  ce->spec = Entry::Protocol;  break;
-       case TagClassInfo::Category:  ce->spec = Entry::Category;  break;
diff --git a/debian/patches/fix-762272.diff b/debian/patches/fix-762272.diff
deleted file mode 100644
index a4475d6..0000000
--- a/debian/patches/fix-762272.diff
+++ /dev/null
@@ -1,76 +0,0 @@
-From: Dimitri van Heesch <dimitri at stack.nl>
-Subject: Debian Bug 762272: segfault with cyclic subgroups
-Bug-Debian: https://bugs.debian.org/762272
-Last-Modified: 2014-11-02
-Origin: https://github.com/doxygen/doxygen/commits/c83db38ea83499be19d9ff242bfa22ae534ee80c
-
-Index: doxygen/src/groupdef.cpp
-===================================================================
---- doxygen.orig/src/groupdef.cpp	2014-11-02 14:15:33.000000000 +0100
-+++ doxygen/src/groupdef.cpp	2014-11-02 14:15:33.000000000 +0100
-@@ -510,7 +510,31 @@
- 
- bool GroupDef::containsGroup(const GroupDef *def)
- {
--    return this==def || groupList->find(def) >= 0;
-+  if (this==def)
-+  {
-+    return TRUE;
-+  }
-+  else if (groupList->find(def)>=0)
-+  {
-+    return TRUE;
-+  }
-+  else // look for subgroups as well
-+  {
-+    GroupList *groups = partOfGroups();
-+    if (groups)
-+    {
-+      GroupListIterator it(*groups);
-+      GroupDef *gd;
-+      for (;(gd=it.current());++it)
-+      {
-+        if (gd->containsGroup(def))
-+        {
-+          return TRUE;
-+        }
-+      }
-+    }
-+  }
-+  return FALSE;
- }
- 
- void GroupDef::addGroup(const GroupDef *def)
-@@ -1229,16 +1253,23 @@
-   for (;(g=gli.current());++gli)
-   {
-     GroupDef *gd=0;
--    if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) &&
--	!gd->containsGroup(subGroup) )
--    {
--      gd->addGroup(subGroup);
--      subGroup->makePartOfGroup(gd);
--    }
--    else if (gd==subGroup)
-+    if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
-     {
--      warn(root->fileName,root->startLine,"Trying to add group %s to itself!",
--          gd->name().data());
-+      if (gd==subGroup)
-+      {
-+        warn(root->fileName,root->startLine,"Refusing to add group %s to itself",
-+            gd->name().data());
-+      }
-+      else if (gd->containsGroup(subGroup))
-+      {
-+        warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a "
-+                                            "subgroup of the former\n", subGroup->name().data(),gd->name().data());
-+      }
-+      else
-+      {
-+        gd->addGroup(subGroup);
-+        subGroup->makePartOfGroup(gd);
-+      }
-     }
-   }
- }
diff --git a/debian/patches/fix_676423_segfault.patch b/debian/patches/fix_676423_segfault.patch
deleted file mode 100644
index 2c7cca8..0000000
--- a/debian/patches/fix_676423_segfault.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Description: fix for 676423: new segmentation faults in version 1.8.1-1
- removeEmptyLines() segfaults on empty string
-Author: Thibaut Paumard <paumard at users.sourceforge.net>
-Origin: vendor
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=676423
-Forwarded: no
-Last-Update: 2012-07-05
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: doxygen/src/htmlgen.cpp
-===================================================================
---- doxygen.orig/src/htmlgen.cpp	2013-11-09 19:18:25.000000000 +0100
-+++ doxygen/src/htmlgen.cpp	2013-11-09 19:18:25.000000000 +0100
-@@ -1027,6 +1027,11 @@
- static QCString removeEmptyLines(const QCString &s)
- {
-   BufStr out(s.length()+1);
-+  if (s.length()==0)
-+  {
-+    out.addChar('\0');
-+    return out.data();
-+  }
-   char *p=s.data();
-   if (p)
-   {
diff --git a/debian/patches/gcc-g.diff b/debian/patches/gcc-g.diff
deleted file mode 100644
index a3d580a..0000000
--- a/debian/patches/gcc-g.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: b/tmake/lib/linux-64/tmake.conf
-===================================================================
---- a/tmake/lib/linux-64/tmake.conf
-+++ b/tmake/lib/linux-64/tmake.conf
-@@ -11,7 +11,7 @@
- TMAKE_CFLAGS		= -pipe
- TMAKE_CFLAGS_WARN_ON	= -Wall -W 
- TMAKE_CFLAGS_WARN_OFF	=
--TMAKE_CFLAGS_RELEASE	= -O2
-+TMAKE_CFLAGS_RELEASE	= -g -O2
- TMAKE_CFLAGS_DEBUG	= -g
- TMAKE_CFLAGS_SHLIB	= -fPIC
- TMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
-Index: b/tmake/lib/linux-g++/tmake.conf
-===================================================================
---- a/tmake/lib/linux-g++/tmake.conf
-+++ b/tmake/lib/linux-g++/tmake.conf
-@@ -11,7 +11,7 @@
- TMAKE_CFLAGS		= -pipe 
- TMAKE_CFLAGS_WARN_ON	= -Wall -W 
- TMAKE_CFLAGS_WARN_OFF	=
--TMAKE_CFLAGS_RELEASE	= -O2
-+TMAKE_CFLAGS_RELEASE	= -g -O2
- TMAKE_CFLAGS_DEBUG	= -g
- TMAKE_CFLAGS_SHLIB	= -fPIC
- TMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
diff --git a/debian/patches/manpages.diff b/debian/patches/manpages.diff
deleted file mode 100644
index 95f333b..0000000
--- a/debian/patches/manpages.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-Index: doxygen/doc/doxygen.1
-===================================================================
---- doxygen.orig/doc/doxygen.1	2014-05-16 19:41:59.000000000 +0200
-+++ doxygen/doc/doxygen.1	2014-05-16 19:41:59.000000000 +0200
-@@ -48,3 +48,6 @@
- Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2014
- .SH SEE ALSO
- doxywizard(1).
-+.PP
-+Please consider installing the doxygen-doc package as it contains additional
-+documentation on how to use doxygen.
diff --git a/debian/patches/qt4.diff b/debian/patches/qt4.diff
deleted file mode 100644
index b777fc3..0000000
--- a/debian/patches/qt4.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: doxygen-1.7.3/addon/doxywizard/Makefile.doxywizard
-===================================================================
---- doxygen-1.7.3.orig/addon/doxywizard/Makefile.doxywizard	2011-01-03 23:25:53.368234069 +0000
-+++ doxygen-1.7.3/addon/doxywizard/Makefile.doxywizard	2011-01-03 23:26:23.118228985 +0000
-@@ -16,14 +16,14 @@
- CXXFLAGS = -pipe -g -D_LARGEFILE_SOURCE -Wall -W -O2 -D_REENTRANT  -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT
- LEXFLAGS = 
- YACCFLAGS= -d
--INCPATH  = -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -Imoc/
-+INCPATH  = -I/usr/share/qt4/mkspecs/default -I. -I. -I/usr/include/qt4 -Imoc/
- LINK     = g++
- LFLAGS   = 
--LIBS     = $(SUBLIBS) -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
-+LIBS     = $(SUBLIBS) -L/usr/share/qt4/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
- AR       = ar cqs
- RANLIB   = 
- MOC      = moc
--UIC      = /usr/share/qt3/bin/uic
-+UIC      = /usr/share/qt4/bin/uic
- QMAKE    = qmake
- TAR      = tar -cf
- GZIP     = gzip -9f
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 4459f31..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,13 +0,0 @@
-manpages.diff
-dot-config.diff
-#doxygen_direct_dot_run.diff
-#qt4.diff
-#gcc-g.diff
-doxygen-jquery.patch
-#dot_num_threads.diff
-fix_676423_segfault.patch
-system_tmake.patch
-clang-configure.diff
-sqlite3-configure.diff
-fix-760700.diff
-fix-762272.diff
diff --git a/debian/patches/sqlite3-configure.diff b/debian/patches/sqlite3-configure.diff
deleted file mode 100644
index 9275bb1..0000000
--- a/debian/patches/sqlite3-configure.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: b/configure
-===================================================================
---- a/configure
-+++ b/configure
-@@ -507,7 +507,7 @@ if test "$f_sqlite3" = YES; then
-   printf "  Checking for sqlite3 ... "
-   if test "$f_sqlite3_path" = NO; then
-     sqlite3_hdr_dir="/usr/include /usr/local/include /opt/local/include"
--    sqlite3_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib/x86_64-linux-gnu /usr/lib64"
-+    sqlite3_lib_dir="/usr/lib/$DEB_HOST_MULTIARCH /usr/lib /usr/local/lib /opt/local/lib /usr/lib/x86_64-linux-gnu /usr/lib64"
-   else
-     sqlite3_hdr_dir="$f_sqlite3_path/include"
-     sqlite3_lib_dir="$f_sqlite3_path/lib"
diff --git a/debian/patches/system_tmake.patch b/debian/patches/system_tmake.patch
deleted file mode 100644
index 784a6b9..0000000
--- a/debian/patches/system_tmake.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Author: Helmut Grohne <helmut at subdivi.de>
-Description: adapt configure to use the system copy of tmake
-Last-Update: 2013-05-22
-
-Index: b/configure
-===================================================================
---- a/configure
-+++ b/configure
-@@ -751,9 +751,9 @@ configPWD=`pwd`
- 
- cat > .makeconfig <<EOF
- DOXYGEN   = $configPWD
--TMAKEPATH = $configPWD/tmake/lib/$f_platform
-+TMAKEPATH = /usr/share/tmake/$f_platform
- ENV       = env TMAKEPATH="\$(TMAKEPATH)"
--TMAKE     = $configPWD/tmake/bin/tmake
-+TMAKE     = $configPWD/debian/tmake
- MAKE      = $f_make
- PYTHON    = $f_python
- PERL      = $f_perl
diff --git a/debian/qmake b/debian/qmake
deleted file mode 100755
index cb36137..0000000
--- a/debian/qmake
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec /usr/bin/qmake-qt4 "QMAKE_CFLAGS_RELEASE=$CFLAGS" "QMAKE_CXXFLAGS_RELEASE=$CXXFLAGS" QMAKE_LFLAGS_RELEASE="$LDFLAGS" "$@"
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 5b23679..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/make -f
-
-#export DH_VERBOSE=1
-export DH_OPTIONS=
-export QTDIR=/usr/share/qt4
-
-CFLAGS := $(shell dpkg-buildflags --get CPPFLAGS; dpkg-buildflags --get CFLAGS)
-CXXFLAGS := $(shell dpkg-buildflags --get CPPFLAGS; dpkg-buildflags --get CXXFLAGS)
-LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
-export CFLAGS
-export CXXFLAGS
-export LDFLAGS
-DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
-DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
-DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
-
-clang_archs = alpha amd64 armel armhf arm64 i386 mips mipsel \
-	powerpc powerpcspe ppc64 ppc64el s390x \
-	kfreebsd-amd64 kfreebsd-i386
-
-ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
-  with_doxywizard := yes
-else
-  with_doxywizard := no
-endif
-
-ifeq ($(with_doxywizard),yes)
-  CONFIGUREFLAGS+=--with-doxywizard
-endif
-CONFIGUREFLAGS+=--dot /usr/bin/dot
-CONFIGUREFLAGS+=--install /usr/bin/install
-CONFIGUREFLAGS+=--python python3
-CONFIGUREFLAGS+=--with-doxysearch
-CONFIGUREFLAGS+=--with-sqlite3
-ifneq (,$(filter $(DEB_HOST_ARCH),$(clang_archs)))
-  CONFIGUREFLAGS+=--with-libclang
-endif
-
-# used by jquery/Makefile
-export MINIFIER=/usr/share/yui-compressor/yui-compressor
-
-configure: configure-stamp
-configure-stamp:
-	dh_testdir
-	$(MAKE) -C jquery install
-	./configure $(CONFIGUREFLAGS)
-	# get rid of prebuilt files from orig.tar.gz
-	$(MAKE) distclean
-	./configure $(CONFIGUREFLAGS)
-	sed -i 's/^TMAKE_MOC *=.*/TMAKE_MOC = moc/' addon/doxywizard/doxywizard.pro
-	touch $@
-
-build: build-stamp
-build-arch: build-stamp
-build-indep: build-stamp
-build-stamp: configure-stamp
-	dh_testdir
-	$(MAKE) QMAKE=$(shell pwd)/debian/qmake
-	touch $@
-
-clean:
-	dh_testdir
-	dh_testroot
-	rm -f configure-stamp build-stamp install*stamp
-	rm -rf qt tmake winbuild
-	$(MAKE) -C jquery clean
-	rm -f src/jquery_*.js
-	[ ! -f Makefile ] || $(MAKE) distclean
-	rm -f qtools/Makefile.qtools
-	rm -f doxygen_sqlite3.db
-	dh_clean
-
-uninstall:
-	dh_testdir
-	dh_testroot
-	rm -f install*stamp
-	dh_clean -k
-
-install-indep: install-arch
-install-indep: install-indep-stamp
-install-indep-stamp: DH_OPTIONS=-i
-install-indep-stamp: INSDIR=$(shell pwd)/debian/doxygen/usr
-install-indep-stamp: DOCDIR=$(shell pwd)/debian/doxygen-doc/usr/share/doc/doxygen
-install-indep-stamp:
-	dh_testdir
-	dh_testroot
-	dh_installdirs
-	$(MAKE) install_docs \
-		INSTALL=$(INSDIR) DOCDIR=$(DOCDIR) MAN1DIR=share/man/man1
-	-find debian -name .cvsignore -o -name CVS | xargs rm -rf
-	touch $@
-
-install-arch: build
-install-arch: install-arch-stamp
-install-arch-stamp: DH_OPTIONS=-a
-install-arch-stamp: INSDIR=$(shell pwd)/debian/doxygen/usr
-install-arch-stamp: DOCDIR=$(shell pwd)/debian/doxygen/usr/share/doc/doxygen
-install-arch-stamp:
-	dh_testdir
-	dh_testroot
-	dh_clean -k
-	dh_installdirs
-	$(MAKE) install \
-		INSTALL=$(INSDIR) DOCDIR=$(DOCDIR) MAN1DIR=share/man/man1
-	cd debian/dh-doxygen && pod2man -c Debhelper -r '' dh_doxygen dh_doxygen.1
-ifeq ($(with_doxywizard),yes)
-	dh_movefiles -Ndoxygen --sourcedir=debian/doxygen \
-		usr/bin/doxywizard \
-		usr/share/man/man1/doxywizard.1
-endif
-	-find debian -name .cvsignore -o -name CVS | xargs rm -rf
-	touch $@
-
-install: install-indep install-arch
-
-binary-indep: DH_OPTIONS=-i
-binary-indep: install-indep
-	dh_testdir
-	dh_testroot
-	dh_installdocs
-	dh_lintian
-	./debian/dh-doxygen/dh_doxygen
-	rdfind -outputname /dev/null -makehardlinks true debian/doxygen-doc/usr/share/doc/doxygen
-	dh_installchangelogs doc/changelog.doc
-	dh_strip --dbg-package=doxygen-dbg
-	dh_link
-	dh_compress -X.pdf
-	dh_fixperms
-	dh_installdeb
-	dh_shlibdeps
-	dh_gencontrol
-	dh_md5sums
-	dh_builddeb
-
-ifeq ($(with_doxywizard),yes)
-binary-arch: DH_OPTIONS=-a
-else
-binary-arch: DH_OPTIONS=-a -Ndoxygen-gui
-endif
-binary-arch: install-arch
-	dh_testdir
-	dh_testroot
-	dh_install
-	dh_installdocs LANGUAGE.HOWTO PLATFORMS README.md VERSION
-	dh_installman
-	dh_installchangelogs doc/changelog.doc
-	dh_strip --dbg-package=doxygen-dbg
-	dh_link
-	dh_installmenu
-	dh_compress
-	dh_fixperms
-	dh_installdeb
-	dh_shlibdeps
-	dh_gencontrol
-	dh_md5sums
-	dh_builddeb
-
-binary: binary-arch binary-indep
-
-.PHONY: configure build clean uninstall
-.PHONY: install-arch install-indep install
-.PHONY: binary-arch binary-indep binary
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
deleted file mode 100644
index 94942d4..0000000
--- a/debian/tests/control
+++ /dev/null
@@ -1,2 +0,0 @@
-Tests: run
-Depends: apt, dpkg-dev, doxygen, graphviz
diff --git a/debian/tests/run b/debian/tests/run
deleted file mode 100755
index 3437a89..0000000
--- a/debian/tests/run
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-set -e
-
-WORKDIR=$(mktemp -d)
-trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
-cd $WORKDIR
-apt-get source osmium 2>&1
-cd osmium-*
-doxygen 2>&1
-cd /
-rm -Rf "$WORKDIR"
diff --git a/debian/tmake b/debian/tmake
deleted file mode 100755
index 6055b40..0000000
--- a/debian/tmake
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec /usr/bin/tmake "TMAKE_CFLAGS_RELEASE=$CFLAGS" "TMAKE_LFLAGS_RELEASE=$LDFLAGS" "TMAKE_CXXFLAGS_RELEASE=$CXXFLAGS" "$@"
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 5f2bfc0..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=2
-opts=pasv ftp://ftp.stack.nl/pub/users/dimitri/doxygen-(.*)\.src\.tar\.gz debian uupdate
diff --git a/doc/.gitignore b/doc/.gitignore
deleted file mode 100644
index a464770..0000000
--- a/doc/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-mailto.txt
\ No newline at end of file
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
index febba65..0000000
--- a/doc/Makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-
-all: language config.doc FORCE
-	DOXYGEN_DOCDIR=$(DOXYDOCS); \
-	export DOXYGEN_DOCDIR; \
-        VERSION=$(VERSION) ; \
-	export VERSION; \
-	"$(DOXYGEN)/bin/doxygen"
-	@rm -f ../latex/refman.tex
-	@cp doxygen_logo*.gif ../html
-	@cp Makefile.latex ../latex/Makefile
-	@sed -e "s/\$$VERSION/$(VERSION)/g" doxygen_manual.tex >../latex/doxygen_manual.tex
-	@sed -e "s/\$$VERSION/$(VERSION)/g" doxygen.sty >../latex/doxygen.sty 
-	@epstopdf doxygen_logo.eps --outfile=../latex/doxygen_logo.pdf
-
-clean: 
-	rm -rf ../html ../latex *.bak 
-
-language: language.doc 
-
-language.doc: $(wildcard ../src/translator*.h) maintainers.txt language.tpl translator.py
-	$(PYTHON) translator.py
-
-config.doc:  ../src/config.xml ../src/configgen.py
-	$(PYTHON) ../src/configgen.py -doc ../src/config.xml > config.doc
-
-FORCE:
diff --git a/doc/changelog.doc b/doc/changelog.doc
index 606f63f..526e5fd 100644
--- a/doc/changelog.doc
+++ b/doc/changelog.doc
@@ -2,6 +2,207 @@
 \tableofcontents
 \section log_1_8 1.8 Series
 
+\subsection log_1_8_9.1 Release 1.8.9.1
+\htmlonly
+<b>(release date 04-01-2015)</b>
+<a name="1.8.9"></a>
+<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://bugzilla.gnome.org/show_bug.cgi?id=742151">742151</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://bugzilla.gnome.org/show_bug.cgi?id=742230">742230</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://bugzilla.gnome.org/show_bug.cgi?id=742235">742235</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>
+</ul>
+\endhtmlonly
+
+\subsection log_1_8_9 Release 1.8.9
+\htmlonly
+<b>(release date 25-12-2014)</b>
+<a name="1.8.9"></a>
+<ul>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/8f78eff7e8b2650f9a8364ff5c5b6925279e6b5a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/fabd1194a2e3c2536dddc19945c568a690b17031">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=651859">651859</a> - Brief description misplaced in man page output [<a href="http://github.com/doxygen/doxygen/commit/379e3b959a9566571db3c799a8338dd4436881b2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652276">652276</a> - Typedefs in manpages has too few linebreak possiblilities [<a href="http://github.com/doxygen/doxygen/commit/4bbcf71defb2e2be02494b7ff68d475d1a0438ac">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685597">685597</a> - C# <code> tag in an <example> tag does not render as expected. [<a href="http://github.com/doxygen/doxygen/commit/07d5f3f48a497993c525eab9a5ecc0429c317c98">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687576">687576</a> - Add support for LATEX_EXTRA_STYLESHEET [<a href="http://github.com/doxygen/doxygen/commit/fd91442bcc5a20ba298a024ee2cc375ec4f1714d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704090">704090</a> - Allow Class{T}.Method in cref to refer to a generic class in XML comments [<a href="http://github.com/doxygen/doxygen/commit/f9c9edba086f544b813ff036ea9209744da18c44">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722940">722940</a> - classes with same name in different namespace adding to same group [<a href="http://github.com/doxygen/doxygen/commit/73a5a4c48aec0c48353ecb8e5aa6d5ff02463132">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729063">729063</a> - Missing link for item inside the same namespace [<a href="http://github.com/doxygen/doxygen/commit/95aee340bddca0c09c79dc2f137a5ad01eb4fda8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729236">729236</a> - Added HIDE_COMPOUND_REFERENCE config option [<a href="http://github.com/doxygen/doxygen/commit/415ae7021eeee278ad6c95be23e572dc18ff6a32">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735145">735145</a> - QHP toc broken if mainpage with PROJECT_NAME title has sections/subpages [<a href="http://github.com/doxygen/doxygen/commit/745955f576cbd7b5f7601c55937d9c42db8161e8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735194">735194</a> - src/Makefile.libdoxycfg shouldn't be distributed [<a href="http://github.com/doxygen/doxygen/commit/45cfc44d3670bb9f72a0795d4a9bc07403a29d6d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735198">735198</a> - plantUML requires epstopdf for building PDF files [<a href="http://github.com/doxygen/doxygen/commit/52d216a87451c867c92691a4483cd85d3e5b906f">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735376">735376</a> - tag file: Unknown compound attribute `singleton' found! [<a href="http://github.com/doxygen/doxygen/commit/92eb236037e857f38eaf24238815641a48540792">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735441">735441</a> - Fix a resource leak in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/22e44853813066e45b483b1b6633199b3d2bf509">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735462">735462</a> - There's no such thing as a private Q_PROPERTY [<a href="http://github.com/doxygen/doxygen/commit/ff7cc1c73c3d4b3449862055bd08b0f361e5b358">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735475">735475</a> - Same Expression in translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/32aa9f2a7898b5c43070a5cd0dec8bddcc6b8c39">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735477">735477</a> - Fix a potential null pointer dereference in src/memberdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a268f59c0551953fe4e7dde0b1e3804d583a060">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735481">735481</a> - Mismatch in memory allocation/de-allocation function in vhdlparser/vhdlstring.h [<a href="http://github.com/doxygen/doxygen/commit/2038873ce0a9ec90efb28730b3dc787d3d03e964">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735482">735482</a> - Remove a not needed initialization of a local variable in src/mangen.cpp [<a href="http://github.com/doxygen/doxygen/commit/1e8a69902a2cbb3118e6de5959223b9c8d3a843a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735483">735483</a> - Fix a potential null pointer dereference in src/searchindex.cpp [<a href="http://github.com/doxygen/doxygen/commit/e21aaadb920775f431a27957542da80e39d0c947">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735497">735497</a> - Fix wrong pointer initialization in src/definition.cpp [<a href="http://github.com/doxygen/doxygen/commit/cb5d8e6198fe0d0852fb06d6fa18b8ae2682e2c0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735499">735499</a> - Fix potential modulo by zero in src/template.cpp [<a href="http://github.com/doxygen/doxygen/commit/c4007c3abea9c8494bf32181a1352b5366bede69">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735584">735584</a> - Reached end of file while still insided a (nested) comment in Markdown [<a href="http://github.com/doxygen/doxygen/commit/c7f7c954ec1356e7f361da0d655c72ca0012a0cf">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735587">735587</a> - Fix a terminating null character after fread in src/filedef.cpp [<a href="http://github.com/doxygen/doxygen/commit/a4003db44dfb624c03b7e0a518e368d3e4b8c1ca">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735589">735589</a> - Remove not needed variable initialization in src/classdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/5f01852bbfd3c81320ee4aa8cd45875a80b50ee1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735590">735590</a> - Remove not needed pointer initialization in src/entry.cpp [<a href="http://github.com/doxygen/doxygen/commit/88832b15f1256846b1228ac411d270c6d092a50b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735591">735591</a> - Provide exit code in case generatePlantUMLOutput fails [<a href="http://github.com/doxygen/doxygen/commit/94ea18e60c50db14f25eda642be020fac5917b3c">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735620">735620</a> - Remove not needed variable caching in src/markdown.cpp [<a href="http://github.com/doxygen/doxygen/commit/d6c2464982e5b1c027cdde0400822c3b2fc7fd41">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735622">735622</a> - Do not cache inputSize in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/8f3e7fc892f07f32a2c6e0110dab58942f6c20a7">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735623">735623</a> - Expression is always false because 'else if' condition matches previous condition [<a href="http://github.com/doxygen/doxygen/commit/98a9b24cd6006b130dd1e56c32f684e159fee2a3">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735726">735726</a> - Fix missing break in switch case statement [<a href="http://github.com/doxygen/doxygen/commit/b59edd279f887e55b162ae1b1c7bce4b2ca29dab">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735745">735745</a> - Spurious ASSERT message [<a href="http://github.com/doxygen/doxygen/commit/fff03ab9adcbdf480929c6a10975cab469eaf17c">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735759">735759</a> - Broken man pages due to bad use of autoBreak [<a href="http://github.com/doxygen/doxygen/commit/6aa7f36ce924cf9dc59a951e5727b17c37d0345e">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735767">735767</a> - Fix potential copy and paste issue in vhdlparser/VhdlParser.cc [<a href="http://github.com/doxygen/doxygen/commit/9238e342bc8f1ce3e0aaa2944d77c33e4363cf48">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735924">735924</a> - [Patch] Documentation: Wrong link for \\diafile [<a href="http://github.com/doxygen/doxygen/commit/285221e3d287db083b9377cb5633650fb2a783a1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735925">735925</a> - [Patch] DocBook: Possible name clash for generated image files [<a href="http://github.com/doxygen/doxygen/commit/8b39158436b740a78166f947de375b5486441c93">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735926">735926</a> - RTF output: \\diafile and \\mscfile do not work [<a href="http://github.com/doxygen/doxygen/commit/7cd2b1f27a03846a8f9bcd1e4489cbfebf56bfa2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735929">735929</a> - Windows: Process exit code is ignored for processes launched using ShellExecuteEx() [<a href="http://github.com/doxygen/doxygen/commit/68aa8c2bd8a5e6a8ad7c46c725c8bb5e61896ba0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735982">735982</a> - Fix potential allocation of huge memory amount due to type overflow in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/30870ef90f4a74e7c53a6856b10bcd2f16e4d1bd">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735985">735985</a> - Fix missing unchecked return value in src/dot.cpp [<a href="http://github.com/doxygen/doxygen/commit/be0c23efcb902891e91bed42ab2ac27a6f1460cb">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736018">736018</a> - Fix potential null pointer dereference in src/dbusxmlscanner.cpp [<a href="http://github.com/doxygen/doxygen/commit/46e83b44be0c0aa97ead5ee52e329154c1fb47bc">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736020">736020</a> - Fix identical code for different branches in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/79dedb65ae1f9306b83a69058dbd2015ef7c3b94">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736022">736022</a> - Fix potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/68c063cbffc38c1528dd86232a8b8642fae26b1b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736023">736023</a> - Remove not needed variable initialization in src/cite.cpp [<a href="http://github.com/doxygen/doxygen/commit/23bc555e5483baa6c1a3d0c1ad346bb37348b31b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736027">736027</a> - Remove not needed local variable in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/561a996c68f796dccb36fb3eed6150fcc90e5634">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736029">736029</a> - Remove redundant if/else branch in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/3026131de3126298863d1a68fe0c747524e26e43">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736030">736030</a> - Remove redundant if/else branch in src/translator_lt.h [<a href="http://github.com/doxygen/doxygen/commit/e7b9f1d16ea2043be068c448676e368e9239314e">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736031">736031</a> - Cleanup redundant if/else branch in src/translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/3d1343d1c8876d0eb0352eafafe4aa90bc483adf">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736032">736032</a> - Cleanup redundant if/else branch in src/translator_sr.h [<a href="http://github.com/doxygen/doxygen/commit/192aa6590b6ceb264335a5b8a1aed6b6f8b0f350">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736033">736033</a> - Cleanup redundant if/else branch in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/02b35985cda1a537c45071f1245b2c4a6dc4ffc6">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736034">736034</a> - Cleanup redundant if/else branch in src/translator_vi.h [<a href="http://github.com/doxygen/doxygen/commit/8e47b4bc5084cb00e5bdcdaa4c1bd048b48a4999">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736036">736036</a> - Remove redundant local variable initialization in qtools/qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/4afe088327ae6780c9c8a73b7b2d3994005f6cca">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736037">736037</a> - Fix wrong member variable initialization in src/define.cpp [<a href="http://github.com/doxygen/doxygen/commit/33daf7a7d9ab9b6c5454acd7a3cff7923d1c4c14">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736385">736385</a> - Fix potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/24b5b715929759a7836a3813ef93976b7cc10641">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736386">736386</a> - Fix another potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/bc95beac3eca3cda55430e0cde97ba826d3d7400">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736387">736387</a> - Fix a potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/c22be34fb79588fa04a9cf9c86438c8eb00d81fc">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736389">736389</a> - Fix a potential null pointer dereference in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a22d83a1f9665863201ff0e717071e9b7d3a110">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736992">736992</a> - Member functions omitted from tagfile [<a href="http://github.com/doxygen/doxygen/commit/b9ad9a03cf4febeb2aa10ddca22c1c9296c5223b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=737444">737444</a> - Java: Annotations with brackets prevent documentation [<a href="http://github.com/doxygen/doxygen/commit/e446e2e044d674ba3609619e3dd95eb340f15e09">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=737830">737830</a> - Invalid element name in footer part when GENERATE_TREEVIEW specified [<a href="http://github.com/doxygen/doxygen/commit/5cb961284e89f197406170389e8866bb9c94fe3a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738063">738063</a> - Fortran attribute contiguous not identified [<a href="http://github.com/doxygen/doxygen/commit/6da2e3fb28f6ed9f219c66d165ac4467fda36148">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738167">738167</a> - Entity references in XML command attributes are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/553a7bf7e1b7be2f602e0230ddfc7f882b009cf8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738173">738173</a> - Entity references in XML code command are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/30216574cb189a92f27bb0e701ff31aa8cce6b83">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738548">738548</a> - latex: dead links to source code [<a href="http://github.com/doxygen/doxygen/commit/b68a4abcfa22e68fd94487a8f2b48588eda5a1af">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738574">738574</a> - &hellip; is replaced by \cdots rather than \dots in the LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/9ac31f84bd25d320f861e9e194fe5df49f4b212b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739054">739054</a> - Python xml not outputting info of functions inside __init__.py [<a href="http://github.com/doxygen/doxygen/commit/d13908f65b6e745bab14dc610c9f9bc7908c55c5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739056">739056</a> - Python xml - argsstring is empty, while HTML have arguments [<a href="http://github.com/doxygen/doxygen/commit/89eb624fec44c0f900d9035dfea950ceaf0ba76d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739209">739209</a> - Invalid warning about undocumented C++ function imported from tagfile [<a href="http://github.com/doxygen/doxygen/commit/f1c96033bcea28e3ff4528299459b39488831669">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739210">739210</a> - C++11 scoped enums with same name inside different classes are merged if using tagfile [<a href="http://github.com/doxygen/doxygen/commit/b4fd6ac51fad4f20116194816d4802f616739d1f">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739211">739211</a> - Cannot make explicit links to C++ const member functions [<a href="http://github.com/doxygen/doxygen/commit/ad5dfc39bee7a1b3de16f36bc3a20565aa6438fe">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739214">739214</a> - Cannot make unscoped link to C++ conversion operator [<a href="http://github.com/doxygen/doxygen/commit/9f477b87fc492221e1b7109d197fe468cd0ed23d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739462">739462</a> - Using "doxygen.css" for HTML_EXTRA_STYLESHEET fails silently [<a href="http://github.com/doxygen/doxygen/commit/5e962c90d3270612df7363e7cf6bf42646c94fbe">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739863">739863</a> - Regression: Base classes incorrect when using CRTP with default template parameter [<a href="http://github.com/doxygen/doxygen/commit/200b828ead9f6bb5b2f6f99919837d5828a250e4">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740218">740218</a> - Full scope needed when making link inside cross-referenced section [<a href="http://github.com/doxygen/doxygen/commit/c6e41226574c94a869ad0757b53027562ef189e1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740218">740218</a> - Full scope needed when making link inside cross-referenced section (fixed regression) [<a href="http://github.com/doxygen/doxygen/commit/60abada8b95cc1772996a264065904f408ed32ff">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740446">740446</a> - invalid copydoc target does not result in warning [<a href="http://github.com/doxygen/doxygen/commit/738c0dd829b6e3ae74359a8d92d12b491fa71d1b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741100">741100</a> - Latex to PDF hangs when using Markdown tables [<a href="http://github.com/doxygen/doxygen/commit/089771b5f3c3c3984ae6f352125a001788a62d29">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741417">741417</a> - Crash when building gtkmm documentation [<a href="http://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741778">741778</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="http://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li>
+<li>fix docbook output [<a href="http://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>]
+    <ol><li>support other than english
+        <li>fix broken example link id
+        <li>fix incomplete TOC : no Classe etc.
+        <li>add brief description for Functions etc.
+        <li>Comply with REPEAT_BRIEF 
+        <li>Do not output duplicated contents when detailed descripton is missing.
+        <li>set table colwidth for Param/RetVal 
+    </ol>
+</li>
+<li>Add missing escape in doxysearch.cpp when result contained a double quote [<a href="http://github.com/doxygen/doxygen/commit/08c9689157d7edc5d8e3369ef96f2ccd4b01c10c">view</a>]</li>
+<li>Add source code possibility for RTF output [<a href="http://github.com/doxygen/doxygen/commit/05eb230757f6510d461bd14df3b190da46edd9dc">view</a>]</li>
+<li>Added Coverity Scan Build Status to Readme [<a href="http://github.com/doxygen/doxygen/commit/394acb6a10dbef10cad3a0a3ff50a05d0efdea9e">view</a>]</li>
+<li>Added clearer range checks for string class to help compiler [<a href="http://github.com/doxygen/doxygen/commit/869ff34828e20e3ec318384d7b0dbf91b6b2d24d">view</a>]</li>
+<li>Added compilation support for MacOSX 10.10 (yosemite) [<a href="http://github.com/doxygen/doxygen/commit/151876a8321204bd2ec08ec6c4de38ba9fb2d034">view</a>]</li>
+<li>Added faster reference counted string implementation with short string optimization [<a href="http://github.com/doxygen/doxygen/commit/9323ae470ad514586706dc8647501361fe208f36">view</a>]</li>
+<li>Added graphical hierarchy support to template engine [<a href="http://github.com/doxygen/doxygen/commit/fe818bf8e3a154788a4a180068cfdfbbadd66ff6">view</a>]</li>
+<li>Added guard to prevent (theoretical) out of bound access [<a href="http://github.com/doxygen/doxygen/commit/060a5cc121be5fd177b5d5c834f2b810dc58b9ec">view</a>]</li>
+<li>Added language attribute to XML output for classes, namespaces, and files [<a href="http://github.com/doxygen/doxygen/commit/e986e0039de21791bd1fbb1f59b13f58c4a46324">view</a>]</li>
+<li>Avoid a (theoretical) memory leak [<a href="http://github.com/doxygen/doxygen/commit/2937e44299a615628c27b0a0a7a95ffdf18249ef">view</a>]</li>
+<li>Better handling of inline Fortran parameter documentation [<a href="http://github.com/doxygen/doxygen/commit/d5546cff5c82157f2dfddd0e1c4fdeeee8e501dd">view</a>]</li>
+<li>Fixed bug for page numbers in the latex indices [<a href="http://github.com/doxygen/doxygen/commit/37ea04c317f9e1e8a09e5944b8c6c2c2ef35b1f6">view</a>]</li>
+<li>Compilation fixes for Windows for new string implementation. [<a href="http://github.com/doxygen/doxygen/commit/a31c9fffec6b5145ac8509d77da826d2e196ed1e">view</a>]</li>
+<li>Convert FORTRAN modules to namespaces [<a href="http://github.com/doxygen/doxygen/commit/be933bfacadaca98aaf4713746201b1fc21177de">view</a>]</li>
+<li>Create an easy possibility to take a snippet from the current file. [<a href="http://github.com/doxygen/doxygen/commit/f8ceac63bdb52cf395207258c98ff0bcba35870a">view</a>]</li>
+<li>Debian Bug 762272: segfault with cyclic subgroups [<a href="http://github.com/doxygen/doxygen/commit/c83db38ea83499be19d9ff242bfa22ae534ee80c">view</a>]</li>
+<li>Disabled enter/exit printing for doctokenizer (produced too much noise) [<a href="http://github.com/doxygen/doxygen/commit/0b615342f0a24fbf02cc9fa94550cf34d230425b">view</a>]</li>
+<li>Empty entry in \tableofcontents in case e.g. section without description. [<a href="http://github.com/doxygen/doxygen/commit/d2acdcf3b1bbd4d3079cf6c4ff5de6ba6716fd06">view</a>]</li>
+<li>Extra empty line in source fragments [<a href="http://github.com/doxygen/doxygen/commit/79b40a437092bccb6589cdb29c0059a4797b771d">view</a>]</li>
+<li>Fix bug with C++11 static_assert [<a href="http://github.com/doxygen/doxygen/commit/7c257bb57562b015b094f109851d914ef232ae2a">view</a>]</li>
+<li>Fix bug: language switch command "\~" failed to detect language id which contains '-' [<a href="http://github.com/doxygen/doxygen/commit/a4cf65dea1371721f07c63c2bb5f9e5085b2618a">view</a>]</li>
+<li>Fix for https://bugzilla.gnome.org/show_bug.cgi?id=651850 [<a href="http://github.com/doxygen/doxygen/commit/e1aa7af27eded7afdf81b688015421d3b3467b2b">view</a>]</li>
+<li>Fix for the second issue in bz 651848 [<a href="http://github.com/doxygen/doxygen/commit/bcd3fbf59f9199470d51938486fecda05006da61">view</a>]</li>
+<li>Fix potential crash when reading tag file which contained nested java classes using generics [<a href="http://github.com/doxygen/doxygen/commit/6d4044ad43ae1424a256eb1c26992301e7c64f4a">view</a>]</li>
+<li>Fix rules for closing FORTRAN module and typedef scopes [<a href="http://github.com/doxygen/doxygen/commit/7ace28eb7bb5f42c3571e5b7be1ab954f4509e17">view</a>]</li>
+<li>Fix to ignore the contents of \verbatim and friends while looking for sections [<a href="http://github.com/doxygen/doxygen/commit/cba0d89fafee3daef31469cbe1cdd24e68c7b56a">view</a>]</li>
+<li>Fix to show relations between C#/Java generic classes [<a href="http://github.com/doxygen/doxygen/commit/9879fddbf8f91c57b258b8e788b5ed8a150a8331">view</a>]</li>
+<li>Fixed a number of issues (resource leaks, uninitialized members, etc) found by coverity [<a href="http://github.com/doxygen/doxygen/commit/41887832b90698df95e8d222cdc0a541ae2f2284">view</a>]</li>
+<li>Fixed bug in new QCString::sprintf for long string. [<a href="http://github.com/doxygen/doxygen/commit/0ec56b7aa2dd39e3cab71c2229d486161566e7f6">view</a>]</li>
+<li>Fixed extension matching issue if path contained a dot. [<a href="http://github.com/doxygen/doxygen/commit/79ed06502c3abca083f2e231f09fc8101862fcf6">view</a>]</li>
+<li>Fixed issue accessing uninitialized data when combining RTF output. [<a href="http://github.com/doxygen/doxygen/commit/e5076edf2c103d262a9e32d57fb40cfe210c9ddf">view</a>]</li>
+<li>Fixed issue parsing @end directly followed by the end of the file [<a href="http://github.com/doxygen/doxygen/commit/fa239ea9a3bba27e4fff84629883ee400f674c1e">view</a>]</li>
+<li>Fixed problem finding \enduml when using /// style comments. [<a href="http://github.com/doxygen/doxygen/commit/4df52916170bb81179697d0fa78c7d81fd95415f">view</a>]</li>
+<li>Fixed refcounting bug in new string implementation [<a href="http://github.com/doxygen/doxygen/commit/a9dcbfe28625673f4d13bc5b3cde694c24062e19">view</a>]</li>
+<li>Fixed several Coverity warnings [<a href="http://github.com/doxygen/doxygen/commit/9b7e4ffb6c5f7534e4ba11d5798b4eb74d4a2a70">view</a>]</li>
+<li>Fixed to small memory leaks [<a href="http://github.com/doxygen/doxygen/commit/b55a5c91d49359f9bbf7c78d9f284be2092bcfaa">view</a>]</li>
+<li>Fixed typos and formatting in Doxyfile (thanks to Armin Mueller) [<a href="http://github.com/doxygen/doxygen/commit/fdd1c3f1527b15f6b0a25c2d99748f6a8adc5fcf">view</a>]</li>
+<li>Fixed typos in C/C++ comments. There are no functional changes. [<a href="http://github.com/doxygen/doxygen/commit/458fb1738f4e59586460daa2a1e3ad2e730306c4">view</a>]</li>
+<li>Fixed typos in comments. [<a href="http://github.com/doxygen/doxygen/commit/8ff67ad01abfe97b43de0ef1799c8b798d725ab9">view</a>]</li>
+<li>Fixed typos in comments. No functional changes. [<a href="http://github.com/doxygen/doxygen/commit/6920d3ec6db21cec32086249a48875cbac957470">view</a>]</li>
+<li>Fortran code color END (regression pull request 259) [<a href="http://github.com/doxygen/doxygen/commit/0ccda478e35eb420d644b6c39923f9c020e69c13">view</a>]</li>
+<li>Fortran color CALL as keyword [<a href="http://github.com/doxygen/doxygen/commit/d3a5f96d07db323ff97fb07766a809769506ef3a">view</a>]</li>
+<li>Fortran color code of END [<a href="http://github.com/doxygen/doxygen/commit/1cfa914cbb4e41f15af1f08517af887d6b241f28">view</a>]</li>
+<li>Fortran continuation character seen as begin of function call [<a href="http://github.com/doxygen/doxygen/commit/b2e9aa362540cae4487e48598fb7e80b8651752f">view</a>]</li>
+<li>Generate error message in case bibtex generation fails [<a href="http://github.com/doxygen/doxygen/commit/f121923bde72ef68616224a3fa1c1fe27eeb385e">view</a>]</li>
+<li>Improved main page rendering via template engine [<a href="http://github.com/doxygen/doxygen/commit/f8a86910e4cd1d98993bd6991eb1b1aff7a86b05">view</a>]</li>
+<li>Initialized potentially uninitialized variable in markdown part [<a href="http://github.com/doxygen/doxygen/commit/c98afa68350ed5cbce5a24bee3b47069789cc411">view</a>]</li>
+<li>Introduce new optimized string implementation (attempt 2) [<a href="http://github.com/doxygen/doxygen/commit/43edc14cd357dcb070402bccc5030507570c22a4">view</a>]</li>
+<li>Introduced template directory for template and resource files and resource compiler & manager [<a href="http://github.com/doxygen/doxygen/commit/0fea3d4ca57187f271d7580ff16f32b7ab4657df">view</a>]</li>
+<li>LaTeX problem with 2 consecutive single quotes [<a href="http://github.com/doxygen/doxygen/commit/0cb39b4cf9f1e89720cb19f58158b90ecf0b75ef">view</a>]</li>
+<li>Last comment of \code{.f90} missing [<a href="http://github.com/doxygen/doxygen/commit/b9145da402cd49c4c4e888a31dc17612387b1321">view</a>]</li>
+<li>Limit images sizes and make more uniform (LaTeX) [<a href="http://github.com/doxygen/doxygen/commit/329a4ddc036ac9dfe72b11d62cb4043bc8488c20">view</a>]</li>
+<li>Package mathptmx gives discrepancy between pdf and HTML formulas [<a href="http://github.com/doxygen/doxygen/commit/418d7f076ffbb1aeaae5f689a5dd46977c456a98">view</a>]</li>
+<li>Portuguese and Brazilian Portuguese translators updated to 1.8.5. [<a href="http://github.com/doxygen/doxygen/commit/7da215a553e19783de60341bd863264ea9393513">view</a>]</li>
+<li>Prevent overly long terms from stopping the search indexer [<a href="http://github.com/doxygen/doxygen/commit/5d266c5d7f7b05dcfa8d3485bc43e268dd8fe90a">view</a>]</li>
+<li>Problem in case of line termination (., a dot) direct after the \cite command [<a href="http://github.com/doxygen/doxygen/commit/f0338dbf3a8770a6120eab83b338e6e3c3427a0e">view</a>]</li>
+<li>Regression class<T extends V> resulted in class<V> as the page title [<a href="http://github.com/doxygen/doxygen/commit/dec53d22986c8d2c44a30806a2c8ed03bbe24768">view</a>]</li>
+<li>Remove bogus argument to avoid compiler warning [<a href="http://github.com/doxygen/doxygen/commit/5bebcfb4a077287c561d2be7b3510d13d4e44a55">view</a>]</li>
+<li>Remove dependency of PlantUML on HAVE_DOT [<a href="http://github.com/doxygen/doxygen/commit/352bac2c21b69d4e33ec0056fe4d2b96fbe1b0b5">view</a>]</li>
+<li>Remove extraneous 'README' to allow successful RPM creation [<a href="http://github.com/doxygen/doxygen/commit/fefce473f5cde9fe4db3a86544db2ba41eec8d74">view</a>]</li>
+<li>Remove filtering rule when generating FORTRAN module links [<a href="http://github.com/doxygen/doxygen/commit/238b73322f87614f5753dc0fa6df6c450f81be5e">view</a>]</li>
+<li>Remove redundant code [<a href="http://github.com/doxygen/doxygen/commit/d1ed20c4c9a04f7995b82f8628908e3c34fd054a">view</a>]</li>
+<li>Removed bash specific construct from ./configure script to make it work on Solaris [<a href="http://github.com/doxygen/doxygen/commit/3ebc431569aa6566389f3f3fc00aae7b8a90e58b">view</a>]</li>
+<li>Removed some comment statements. [<a href="http://github.com/doxygen/doxygen/commit/222753a906d42dab63708e074dd289e66dccf091">view</a>]</li>
+<li>Revert "Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized" [<a href="http://github.com/doxygen/doxygen/commit/8c8120bc3efa6ffa74f5e8cfce9cd6e4cae3de3a">view</a>]</li>
+<li>Reverted back to old string implementation. New one needs more work. [<a href="http://github.com/doxygen/doxygen/commit/7d933a9f99dacb83937534719103218470e2a5ab">view</a>]</li>
+<li>Show tag file name instead of <unknown> for warnings pointing to symbols extracted from tag files. [<a href="http://github.com/doxygen/doxygen/commit/b4b4c9decfacdf77d58490fa2dd81e1e10fe2dd0">view</a>]</li>
+<li>Show the parent-child type specialization relation in Java/C# generics inheritance diagrams [<a href="http://github.com/doxygen/doxygen/commit/7ee743004ac80914bdb66e3c7a8e5c39c0d5bf4a">view</a>]</li>
+<li>Support charset option for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/ed0da5fe85e17eb0f7071fff12e851e92c2d79e6">view</a>]</li>
+<li>Support for INLINE_SOURCES in Fortran [<a href="http://github.com/doxygen/doxygen/commit/940a802a997609105e5be25f6ff576628a51fbda">view</a>]</li>
+<li>Support plantuml !include statement [<a href="http://github.com/doxygen/doxygen/commit/bbb6bb217a2feb7b9b961037072f06ff1024a0ef">view</a>]</li>
+<li>Support visible=no for main page tab. [<a href="http://github.com/doxygen/doxygen/commit/52df7ae7fb9ed9765b0faf922c69a1c57a5cfd69">view</a>]</li>
+<li>Supporting linking for methods bound to FORTRAN classes in source definitions [<a href="http://github.com/doxygen/doxygen/commit/f704342b42b19a857ec42438542221836576287a">view</a>]</li>
+<li>This is the patch attached to bz 651848 by Robin Gareus. [<a href="http://github.com/doxygen/doxygen/commit/f854e1d9f1a60a7e254dcc20a4e6db0aa9172b2c">view</a>]</li>
+<li>Update README.md [<a href="http://github.com/doxygen/doxygen/commit/b3c44e52cf7226b16ebd576ad381c3ee343dfd7e">view</a>]</li>
+<li>Updated configuration script and libdoxygen.pro.in to use llvm-config [<a href="http://github.com/doxygen/doxygen/commit/61e07f8ea2d0d2a2f001b1f657d3d5bbe44e7690">view</a>]</li>
+<li>Use result of vsnprintf [<a href="http://github.com/doxygen/doxygen/commit/84a6f4155659f97d42290494bd21d51f55eda258">view</a>]</li>
+<li>Use substitute() instead of QString conversion [<a href="http://github.com/doxygen/doxygen/commit/7a0f5e6d565db6192f8c22045d7988a0b4e4d8c3">view</a>]</li>
+<li>Various VHDL fixes [<a href="http://github.com/doxygen/doxygen/commit/475b0c51847271b04cb0e58254bd7e420445250b">view</a>]</li>
+<li>various fixes and restructuring [<a href="http://github.com/doxygen/doxygen/commit/223e7de6478019c8eebcfd87085fe22d3bfeec0e">view</a>]</li>
+<li>Various latex problems [<a href="http://github.com/doxygen/doxygen/commit/fb4dad1e1d9774e92d1509d1c2d3f8cb341826a1">view</a>]</li>
+</ul>
+\endhtmlonly
 \subsection log_1_8_8 Release 1.8.8
 \htmlonly
 <b>(release date 21-08-2014)</b>
diff --git a/doc/commands.doc b/doc/commands.doc
index 73eb842..12fe9a6 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2147,7 +2147,8 @@ Commands for displaying examples
  \addindex \\snippet
  Where the \ref cmdinclude "\\include" command can be used to include
  a complete file as source code, this command can be used to quote only
- a fragment of a source file.
+ a fragment of a source file. In case `this` is used as <file-name> the
+ current file is taken as file to take the snippet from.
 
  For example, the putting the following command in the documentation,
  references a snippet in file \c example.cpp residing in a subdirectory 
@@ -2450,13 +2451,25 @@ only copy the detailed documentation, not the brief description.
               \ref cmdhtmlonly "\\htmlonly".
 
 <hr>
-\section cmddot \\dot
+\section cmddot \\dot ["caption"] [<sizeindication>=<size>]
 
   \addindex \\dot
   Starts a text fragment which should contain a valid description of a
   dot graph. The text fragment ends with \ref cmdenddot "\\enddot".
   Doxygen will pass the text on to dot and include the resulting
   image (and image map) into the output.
+
+  The first argument is optional and can be used to specify the caption
+  that is displayed below the image. This argument has to be specified
+  between quotes even if it does not contain any spaces. The quotes are
+  stripped before the caption is displayed.
+
+  The second argument is also optional and can be used to specify the
+  width or height of the image.
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
   The nodes of a graph can be made clickable by using the URL attribute.
   By using the command \ref cmdref "\\ref" inside the URL value you can conveniently
   link to an item inside doxygen. Here is an example:
@@ -2484,12 +2497,24 @@ class C {};
 \endcode
 
 <hr>
-\section cmdmsc \\msc
+\section cmdmsc \\msc ["caption"] [<sizeindication>=<size>]
 
   \addindex \\msc
   Starts a text fragment which should contain a valid description of a
   message sequence chart. See http://www.mcternan.me.uk/mscgen/ for examples.
   The text fragment ends with \ref cmdendmsc "\\endmsc".
+
+  The first argument is optional and can be used to specify the caption
+  that is displayed below the image. This argument has to be specified
+  between quotes even if it does not contain any spaces. The quotes are
+  stripped before the caption is displayed.
+
+  The second argument is also optional and can be used to specify the
+  width or height of the image. 
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
   \note The text fragment should only include the part of the message
   sequence chart that is
   within the <code>msc {...}</code> block.
@@ -2533,7 +2558,7 @@ class Receiver
   \sa section \ref cmdmscfile "\\mscfile".
 
 <hr>
-\section cmdstartuml \\startuml
+\section cmdstartuml \\startuml [{file}] ["caption"] [<sizeindication>=<size>]
 
   \addindex \\startuml
   Starts a text fragment which should contain a valid description of a
@@ -2543,6 +2568,28 @@ class Receiver
   if you want to use this command. The location of the jar file should be specified
   using \ref cfg_plantuml_jar_path "PLANTUML_JAR_PATH".
 
+  The first argument is optional and is for compatibility with running PlantUML as a preprocessing
+  step before running doxygen, you can also add the name of the image file after \c \\startuml
+  and inside curly brackets, i.e.
+  \verbatim
+  @startuml{myimage.png} "Image Caption" width=5cm
+  Alice -> Bob : Hello
+  @enduml
+  \endverbatim
+  When the name of the image is specified, doxygen will generate an image with that name.
+  Without the name doxygen will choose a name automatically.
+
+  The second argument is optional and can be used to specify the caption
+  that is displayed below the image. This argument has to be specified
+  between quotes even if it does not contain any spaces. The quotes are
+  stripped before the caption is displayed.
+
+  The third argument is also optional and can be used to specify the
+  width or height of the image.
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
 Here is an example of the use of the \c \\startuml command.
 \code
 /** Sender class. Can be used to send a command to the server.
@@ -2574,19 +2621,8 @@ class Receiver
 };
 \endcode
 
-\note For compatibility with running PlantUML as a preprocessing step before
-running doxygen, you can also add the name of the image file after \c \\startuml
-and inside curly brackets, i.e.
-\verbatim
- at startuml{myimage.png}
-Alice -> Bob : Hello
- at enduml
-\endverbatim
-When the name of the image is specified, doxygen will generate an image with that name.
-Without the name doxygen will choose a name automatically.
-
 <hr>
-\section cmddotfile \\dotfile <file> ["caption"]
+\section cmddotfile \\dotfile <file> ["caption"] [<sizeindication>=<size>]
 
   \addindex \\dotfile
   Inserts an image generated by dot from \<file\> into the documentation.
@@ -2603,8 +2639,16 @@ Without the name doxygen will choose a name automatically.
   between quotes even if it does not contain any spaces. The quotes are
   stripped before the caption is displayed.
 
+  The third argument is also optional and can be used to specify the
+  width or height of the image.
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
+  \sa section \ref cmddot "\\dot".
+
 <hr>
-\section cmdmscfile \\mscfile <file> ["caption"]
+\section cmdmscfile \\mscfile <file> ["caption"] [<sizeindication>=<size>]
 
   \addindex \\mscfile
   Inserts an image generated by mscgen from \<file\> into the documentation.
@@ -2622,10 +2666,16 @@ Without the name doxygen will choose a name automatically.
   between quotes even if it does not contain any spaces. The quotes are
   stripped before the caption is displayed.
 
+  The third argument is also optional and can be used to specify the
+  width or height of the image.
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
   \sa section \ref cmdmsc "\\msc".
 
 <hr>
-\section cmddiafile \\diafile <file> ["caption"]
+\section cmddiafile \\diafile <file> ["caption"] [<sizeindication>=<size>]
 
   \addindex \\diafile
   Inserts an image made in dia from \<file\> into the documentation.
@@ -2642,6 +2692,12 @@ Without the name doxygen will choose a name automatically.
   between quotes even if it does not contain any spaces. The quotes are
   stripped before the caption is displayed.
 
+  The third argument is also optional and can be used to specify the
+  width or height of the image.
+  For a descriptionm of the possibilities see the paragraph
+  \ref image_sizeindicator "Size indication" with the
+  \ref cmdimage "\\image" command.
+
 <hr>
 \section cmde \\e <word>
 
@@ -2841,15 +2897,16 @@ Without the name doxygen will choose a name automatically.
   specific, so if you want to insert an image for more than one
   format you'll have to repeat this command for each format.
 
-  The first argument specifies the output format. Currently, the
-  following values are supported: \c html, \c latex and \c rtf.
+  The first argument specifies the output format in which the image should
+  be embedded. Currently, the following values are supported:
+  \c html, \c latex, \c docbook and \c rtf.
 
   The second argument specifies the file name of the image.
   doxygen will look for files in the paths (or files) that you specified
   after the \ref cfg_image_path "IMAGE_PATH" tag.
   If the image is found it will be copied to the correct output directory.
-  If the image name contains spaces you'll have to put quotes ("...") around it.
-  You can also specify an absolute URL instead of a file name, but then
+  If the image name contains spaces you'll have to put quotes ("...") around
+  the name. You can also specify an absolute URL instead of a file name, but then
   doxygen does not copy the image nor check its existence.
 
   The third argument is optional and can be used to specify the caption
@@ -2858,12 +2915,12 @@ Without the name doxygen will choose a name automatically.
   spaces. The quotes are stripped before the caption is displayed.
 
   The fourth argument is also optional and can be used to specify the
-  width or height of the image. This is only useful
-  for \LaTeX output
-  (i.e. format=<code>latex</code>). The \c sizeindication can be
-  either \c width or \c height. The size should be a valid
-  size specifier in \LaTeX (for example <code>10cm</code> or
-  <code>6in</code> or a symbolic width like <code>\\textwidth</code>).
+  width or height of the image. This can be useful for \LaTeX or docbook output
+  (i.e. format=<code>latex</code> or format=<code>docbook</code>).
+  \anchor image_sizeindicator \par Size indication
+  The \c sizeindication can specify the width or height to be used (or a combination).
+  The size specifier in \LaTeX (for example `10cm` or
+  `4in` or a symbolic width like `\\textwidth`).
 
   Here is example of a comment block:
 
diff --git a/doc/config.doc b/doc/config.doc
index cef270d..2720b9a 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -173,6 +173,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_group_graphs GROUP_GRAPHS
 \refitem cfg_have_dot HAVE_DOT
 \refitem cfg_hhc_location HHC_LOCATION
+\refitem cfg_hide_compound_reference HIDE_COMPOUND_REFERENCE
 \refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS
 \refitem cfg_hide_in_body_docs HIDE_IN_BODY_DOCS
 \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES
@@ -215,6 +216,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_latex_bib_style LATEX_BIB_STYLE
 \refitem cfg_latex_cmd_name LATEX_CMD_NAME
 \refitem cfg_latex_extra_files LATEX_EXTRA_FILES
+\refitem cfg_latex_extra_stylesheet LATEX_EXTRA_STYLESHEET
 \refitem cfg_latex_footer LATEX_FOOTER
 \refitem cfg_latex_header LATEX_HEADER
 \refitem cfg_latex_hide_indices LATEX_HIDE_INDICES
@@ -250,6 +252,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_perlmod_makevar_prefix PERLMOD_MAKEVAR_PREFIX
 \refitem cfg_perlmod_pretty PERLMOD_PRETTY
 \refitem cfg_perl_path PERL_PATH
+\refitem cfg_plantuml_include_path PLANTUML_INCLUDE_PATH
 \refitem cfg_plantuml_jar_path PLANTUML_JAR_PATH
 \refitem cfg_predefined PREDEFINED
 \refitem cfg_project_brief PROJECT_BRIEF
@@ -273,6 +276,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_rtf_extensions_file RTF_EXTENSIONS_FILE
 \refitem cfg_rtf_hyperlinks RTF_HYPERLINKS
 \refitem cfg_rtf_output RTF_OUTPUT
+\refitem cfg_rtf_source_code RTF_SOURCE_CODE
 \refitem cfg_rtf_stylesheet_file RTF_STYLESHEET_FILE
 \refitem cfg_searchdata_file SEARCHDATA_FILE
 \refitem cfg_searchengine SEARCHENGINE
@@ -364,7 +368,7 @@ The default value is: <code>My Project</code>.
  \anchor cfg_project_logo
 <dt>\c PROJECT_LOGO <dd>
  \addindex PROJECT_LOGO
- With the \c PROJECT_LOGO tag one can specify an logo or icon that is 
+ With the \c PROJECT_LOGO tag one can specify a logo or an icon that is 
  included in the documentation. The maximum height of the logo should not 
  exceed 55 pixels and the maximum width should not exceed 200 pixels. 
  Doxygen will copy the logo to the output directory.
@@ -380,7 +384,7 @@ The default value is: <code>My Project</code>.
  \anchor cfg_create_subdirs
 <dt>\c CREATE_SUBDIRS <dd>
  \addindex CREATE_SUBDIRS
- If the \c CREATE_SUBDIRS tag is set to \c YES, then doxygen will create
+ If the \c CREATE_SUBDIRS tag is set to \c YES then doxygen will create
  4096 sub-directories (in 2 levels) under the output directory of each output 
  format and will distribute the generated files over these directories. 
  Enabling this option can be useful when feeding doxygen a huge amount of source
@@ -459,7 +463,7 @@ The default value is: <code>English</code>.
  \anchor cfg_brief_member_desc
 <dt>\c BRIEF_MEMBER_DESC <dd>
  \addindex BRIEF_MEMBER_DESC
- If the \c BRIEF_MEMBER_DESC tag is set to \c YES doxygen will
+ If the \c BRIEF_MEMBER_DESC tag is set to \c YES, doxygen will
  include brief member descriptions after the members that are listed in
  the file and class documentation (similar to \c Javadoc).
  Set to \c NO to disable this.
@@ -470,7 +474,7 @@ The default value is: <code>YES</code>.
  \anchor cfg_repeat_brief
 <dt>\c REPEAT_BRIEF <dd>
  \addindex REPEAT_BRIEF
- If the \c REPEAT_BRIEF tag is set to \c YES doxygen will 
+ If the \c REPEAT_BRIEF tag is set to \c YES, doxygen will 
  prepend the brief description of a member or function before the detailed 
  description 
  <br>Note: 
@@ -528,7 +532,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_full_path_names
 <dt>\c FULL_PATH_NAMES <dd>
  \addindex FULL_PATH_NAMES
- If the \c FULL_PATH_NAMES tag is set to \c YES doxygen will prepend the full
+ If the \c FULL_PATH_NAMES tag is set to \c YES, doxygen will prepend the full
  path before files name in the file list and in the header files. If set
  to \c NO the shortest path that makes the file name unique will be used
 
@@ -621,7 +625,7 @@ The default value is: <code>YES</code>.
  \anchor cfg_separate_member_pages
 <dt>\c SEPARATE_MEMBER_PAGES <dd>
  \addindex SEPARATE_MEMBER_PAGES
- If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES, then doxygen will produce
+ If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES then doxygen will produce
  a new page for each member. If set to \c NO, the documentation of a member will
  be part of the file/class/namespace that contains it.
 
@@ -719,7 +723,7 @@ The default value is: <code>NO</code>.
  <code>.inc</code> files as Fortran files (default is PHP), and <code>.f</code> files as C (default is Fortran),
  use: `inc=Fortran f=C`.
 
- <br>Note For files without extension you can use `no_extension` as a placeholder.
+ <br>Note: For files without extension you can use `no_extension` as a placeholder.
  <br>Note that for custom extensions you also need to set \ref cfg_file_patterns "FILE_PATTERNS" otherwise the 
  files are not read by doxygen.
 
@@ -741,7 +745,7 @@ The default value is: <code>YES</code>.
  \addindex AUTOLINK_SUPPORT
  When enabled doxygen tries to link words that correspond to documented classes, 
  or namespaces to their corresponding documentation. Such a link can be 
- prevented in individual cases by by putting a \c % sign in front of the word or 
+ prevented in individual cases by putting a \c % sign in front of the word or 
  globally by setting \c AUTOLINK_SUPPORT to \c NO.
 
 
@@ -797,7 +801,7 @@ The default value is: <code>YES</code>.
 <dt>\c DISTRIBUTE_GROUP_DOC <dd>
  \addindex DISTRIBUTE_GROUP_DOC
  If member grouping is used in the documentation and the \c DISTRIBUTE_GROUP_DOC
- tag is set to \c YES, then doxygen will reuse the documentation of the first
+ tag is set to \c YES then doxygen will reuse the documentation of the first
  member in the group (if any) for the other members of the group. By default
  all members of a group must be documented explicitly.
 
@@ -880,7 +884,7 @@ The default value is: <code>NO</code>.
 
 <dt>\c EXTRACT_ALL <dd>
  \addindex EXTRACT_ALL
- If the \c EXTRACT_ALL tag is set to \c YES doxygen will assume all 
+ If the \c EXTRACT_ALL tag is set to \c YES, doxygen will assume all 
  entities in documentation are documented, even if no documentation was 
  available. Private class members and static file members will be hidden 
  unless the \ref cfg_extract_private "EXTRACT_PRIVATE" respectively 
@@ -896,7 +900,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_extract_private
 <dt>\c EXTRACT_PRIVATE <dd>
  \addindex EXTRACT_PRIVATE
- If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a 
+ If the \c EXTRACT_PRIVATE tag is set to \c YES, all private members of a 
  class will be included in the documentation.
 
 
@@ -905,7 +909,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_extract_package
 <dt>\c EXTRACT_PACKAGE <dd>
  \addindex EXTRACT_PACKAGE
- If the \c EXTRACT_PACKAGE tag is set to \c YES all members with package 
+ If the \c EXTRACT_PACKAGE tag is set to \c YES, all members with package 
  or internal scope will be included in the documentation.
 
 
@@ -914,7 +918,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_extract_static
 <dt>\c EXTRACT_STATIC <dd>
  \addindex EXTRACT_STATIC
- If the \c EXTRACT_STATIC tag is set to \c YES all static members of a file
+ If the \c EXTRACT_STATIC tag is set to \c YES, all static members of a file
  will be included in the documentation.
 
 
@@ -923,9 +927,9 @@ The default value is: <code>NO</code>.
  \anchor cfg_extract_local_classes
 <dt>\c EXTRACT_LOCAL_CLASSES <dd>
  \addindex EXTRACT_LOCAL_CLASSES
- If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES classes (and structs) 
+ If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES, classes (and structs) 
  defined locally in source files will be included in the documentation. 
- If set to \c NO only classes defined in header files are included. Does not
+ If set to \c NO, only classes defined in header files are included. Does not
  have any effect for Java sources.
 
 
@@ -934,10 +938,10 @@ The default value is: <code>YES</code>.
  \anchor cfg_extract_local_methods
 <dt>\c EXTRACT_LOCAL_METHODS <dd>
  \addindex EXTRACT_LOCAL_METHODS
- This flag is only useful for Objective-C code. When set to \c YES local 
+ This flag is only useful for Objective-C code. If set to \c YES, local 
  methods, which are defined in the implementation section but not in
  the interface are included in the documentation.
- If set to \c NO only methods in the interface are included.
+ If set to \c NO, only methods in the interface are included.
 
 
 The default value is: <code>NO</code>.
@@ -970,7 +974,7 @@ The default value is: <code>NO</code>.
  \addindex HIDE_UNDOC_CLASSES
  If the \c HIDE_UNDOC_CLASSES tag is set to \c YES, doxygen will hide all
  undocumented classes that are normally visible in the class hierarchy. 
- If set to \c NO these classes will be included in the
+ If set to \c NO, these classes will be included in the
  various overviews.
  This option has no effect if \ref cfg_extract_all "EXTRACT_ALL" is enabled.
 
@@ -982,7 +986,7 @@ The default value is: <code>NO</code>.
  \addindex HIDE_FRIEND_COMPOUNDS
  If the \c HIDE_FRIEND_COMPOUNDS tag is set to \c YES, doxygen will hide all
  friend (class|struct|union) declarations.
- If set to \c NO these declarations will be included in the
+ If set to \c NO, these declarations will be included in the
  documentation.
 
 
@@ -993,7 +997,7 @@ The default value is: <code>NO</code>.
  \addindex HIDE_IN_BODY_DOCS
  If the \c HIDE_IN_BODY_DOCS tag is set to \c YES, doxygen will hide any 
  documentation blocks found inside the body of a function.
- If set to \c NO these blocks will be appended to the 
+ If set to \c NO, these blocks will be appended to the 
  function's detailed documentation block.
 
 
@@ -1015,7 +1019,7 @@ The default value is: <code>NO</code>.
  \addindex CASE_SENSE_NAMES
  If the \c CASE_SENSE_NAMES tag is set to \c NO then doxygen
  will only generate file names in lower-case letters. If set to
- \c YES upper-case letters are also allowed. This is useful if you have
+ \c YES, upper-case letters are also allowed. This is useful if you have
  classes or files whose names only differ in case and if your file system
  supports case sensitive file names. Windows and Mac users are advised to set this
  option to \c NO.
@@ -1028,7 +1032,17 @@ The default value is: system dependent.
  \addindex HIDE_SCOPE_NAMES
  If the \c HIDE_SCOPE_NAMES tag is set to \c NO then doxygen 
  will show members with their full class and namespace scopes in the
- documentation. If set to \c YES the scope will be hidden.
+ documentation. If set to \c YES, the scope will be hidden.
+
+
+The default value is: <code>NO</code>.
+
+ \anchor cfg_hide_compound_reference
+<dt>\c HIDE_COMPOUND_REFERENCE <dd>
+ \addindex HIDE_COMPOUND_REFERENCE
+ If the \c HIDE_COMPOUND_REFERENCE tag is set to \c NO (default) then
+ doxygen will append additional text to a page's title, such as Class Reference.
+ If set to \c YES the compound reference will be hidden.
 
 
 The default value is: <code>NO</code>.
@@ -1077,7 +1091,7 @@ The default value is: <code>YES</code>.
  \addindex SORT_MEMBER_DOCS
  If the \c SORT_MEMBER_DOCS tag is set to \c YES then doxygen
  will sort the (detailed) documentation of file and class members
- alphabetically by member name. If set to \c NO the members will appear in
+ alphabetically by member name. If set to \c NO, the members will appear in
  declaration order.
 
 
@@ -1088,7 +1102,7 @@ The default value is: <code>YES</code>.
  \addindex SORT_BRIEF_DOCS
  If the \c SORT_BRIEF_DOCS tag is set to \c YES then doxygen will sort the
  brief descriptions of file, namespace and class members alphabetically
- by member name. If set to \c NO the members will appear in
+ by member name. If set to \c NO, the members will appear in
  declaration order. Note that this will also influence the order of the
  classes in the class list.
 
@@ -1215,7 +1229,7 @@ The default value is: <code>YES</code>.
 <dt>\c SHOW_USED_FILES <dd>
  \addindex SHOW_USED_FILES
  Set the \c SHOW_USED_FILES tag to \c NO to disable the list of files generated
- at the bottom of the documentation of classes and structs. If set to \c YES the
+ at the bottom of the documentation of classes and structs. If set to \c YES, the
  list will mention the files that were used to generate the documentation.
 
 
@@ -1325,7 +1339,7 @@ The default value is: <code>YES</code>.
  \anchor cfg_warn_if_undocumented
 <dt>\c WARN_IF_UNDOCUMENTED <dd>
  \addindex WARN_IF_UNDOCUMENTED
- If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES, then doxygen will generate warnings
+ If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES then doxygen will generate warnings
  for undocumented members. If \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES then this flag will
  automatically be disabled.
 
@@ -1348,7 +1362,7 @@ The default value is: <code>YES</code>.
  \addindex WARN_NO_PARAMDOC
  This \c WARN_NO_PARAMDOC option can be enabled to get warnings for 
  functions that are documented, but have no documentation for their parameters
- or return value. If set to \c NO doxygen will only warn about
+ or return value. If set to \c NO, doxygen will only warn about
  wrong or incomplete parameter documentation, but not about the absence of
  documentation.
 
@@ -1565,7 +1579,7 @@ The default value is: <code>NO</code>.
 <dt>\c FILTER_SOURCE_FILES <dd>
  \addindex FILTER_SOURCE_FILES
  If the \c FILTER_SOURCE_FILES tag is set to \c YES, the input filter (if set using
- \ref cfg_input_filter "INPUT_FILTER" ) will also be used to filter the input
+ \ref cfg_input_filter "INPUT_FILTER") will also be used to filter the input
  files that are used for producing the source files to browse 
  (i.e. when \ref cfg_source_browser "SOURCE_BROWSER" is set to \c YES).
 
@@ -1649,7 +1663,7 @@ The default value is: <code>NO</code>.
 <dt>\c REFERENCES_LINK_SOURCE <dd>
  \addindex REFERENCES_LINK_SOURCE
  If the \c REFERENCES_LINK_SOURCE tag is set to \c YES
- and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES, then the hyperlinks from 
+ and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES then the hyperlinks from 
  functions in \ref cfg_references_relation "REFERENCES_RELATION" and
  \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION" lists will 
  link to the source code.  Otherwise they will link to the documentation.
@@ -1711,7 +1725,7 @@ The default value is: <code>YES</code>.
  \anchor cfg_clang_assisted_parsing
 <dt>\c CLANG_ASSISTED_PARSING <dd>
  \addindex CLANG_ASSISTED_PARSING
-  If the \c CLANG_ASSISTED_PARSING tag is set to \c YES, then doxygen will use the 
+  If the \c CLANG_ASSISTED_PARSING tag is set to \c YES then doxygen will use the 
   <a href="http://clang.llvm.org/">clang parser</a> for more accurate parsing 
   at the cost of reduced performance. This can be particularly helpful with 
   template rich C++ code for which doxygen's built-in parser lacks the 
@@ -1775,7 +1789,7 @@ This tag requires that the tag \ref cfg_alphabetical_index "ALPHABETICAL_INDEX"
 
 <dt>\c GENERATE_HTML <dd>
  \addindex GENERATE_HTML
- If the \c GENERATE_HTML tag is set to \c YES doxygen will
+ If the \c GENERATE_HTML tag is set to \c YES, doxygen will
  generate HTML output
 
 
@@ -1936,11 +1950,11 @@ This tag requires that the tag \ref cfg_generate_html "GENERATE_HTML" is set to
  user-defined cascading style sheets that are included after the standard 
  style sheets created by doxygen. Using this option one can overrule 
  certain style aspects. This is preferred over using \ref cfg_html_stylesheet "HTML_STYLESHEET" 
- since it does not replace the standard style sheet and is therefor more 
+ since it does not replace the standard style sheet and is therefore more 
  robust against future updates. Doxygen will copy the style sheet files to 
  the output directory.
- \note The order of the extra stylesheet files is of importance (e.g. the last
- stylesheet in the list overrules the setting of the previous ones in the list). Here is an example stylesheet that gives the contents area a fixed width:
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list). Here is an example style sheet that gives the contents area a fixed width:
 \verbatim
 body {
         background-color: #CCC;
@@ -1990,7 +2004,7 @@ This tag requires that the tag \ref cfg_generate_html "GENERATE_HTML" is set to
 <dt>\c HTML_COLORSTYLE_HUE <dd>
  \addindex HTML_COLORSTYLE_HUE
  The \c HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
- Doxygen will adjust the colors in the stylesheet and background images 
+ Doxygen will adjust the colors in the style sheet and background images 
  according to this color. Hue is specified as an angle on a colorwheel, 
  see http://en.wikipedia.org/wiki/Hue for more information. 
  For instance the value 0 represents red, 60 is yellow, 120 is green, 
@@ -2174,7 +2188,7 @@ This tag requires that the tag \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP" is
  \addindex HHC_LOCATION
   The \c HHC_LOCATION tag can
   be used to specify the location (absolute path including file name) of 
-  the HTML help compiler (\c hhc.exe). If non-empty doxygen will try to run
+  the HTML help compiler (\c hhc.exe). If non-empty, doxygen will try to run
   the HTML help compiler on the generated \c index.hhp.
 
 The file has to be specified with full path.
@@ -2363,7 +2377,7 @@ This tag requires that the tag \ref cfg_generate_html "GENERATE_HTML" is set to
  JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
  Windows users are probably better off using the HTML help feature.
 
- Via custom stylesheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
+ Via custom style sheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
  one can further \ref doxygen_finetune "fine-tune" the look of the index.
  As an example, the default style sheet generated by doxygen has an
  example that shows how to put an image at the root of the tree instead of
@@ -2406,7 +2420,7 @@ This tag requires that the tag \ref cfg_generate_html "GENERATE_HTML" is set to
  \anchor cfg_ext_links_in_window
 <dt>\c EXT_LINKS_IN_WINDOW <dd>
  \addindex EXT_LINKS_IN_WINDOW
- When the \c EXT_LINKS_IN_WINDOW option is set to \c YES doxygen will open 
+ If the \c EXT_LINKS_IN_WINDOW option is set to \c YES, doxygen will open 
  links to external symbols imported via tag files in a separate window.
 
 
@@ -2447,7 +2461,7 @@ This tag requires that the tag \ref cfg_generate_html "GENERATE_HTML" is set to
  \addindex USE_MATHJAX
  Enable the \c USE_MATHJAX option to render \f$\mbox{\LaTeX}\f$ formulas using MathJax 
  (see http://www.mathjax.org) which uses client side Javascript for the 
- rendering instead of using prerendered bitmaps. Use this if you do not 
+ rendering instead of using pre-rendered bitmaps. Use this if you do not 
  have \f$\mbox{\LaTeX}\f$ installed or if you want to formulas look prettier in the HTML 
  output. When enabled you may also need to install MathJax separately and 
  configure the path to it using the \ref cfg_mathjax_relpath "MATHJAX_RELPATH" 
@@ -2652,7 +2666,7 @@ This tag requires that the tag \ref cfg_searchengine "SEARCHENGINE" is set to \c
 
 <dt>\c GENERATE_LATEX <dd>
  \addindex GENERATE_LATEX
- If the \c GENERATE_LATEX tag is set to \c YES doxygen will
+ If the \c GENERATE_LATEX tag is set to \c YES, doxygen will
  generate \f$\mbox{\LaTeX}\f$ output.
 
 
@@ -2695,7 +2709,7 @@ This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set t
  \anchor cfg_compact_latex
 <dt>\c COMPACT_LATEX <dd>
  \addindex COMPACT_LATEX
- If the \c COMPACT_LATEX tag is set to \c YES doxygen generates more compact
+ If the \c COMPACT_LATEX tag is set to \c YES, doxygen generates more compact
  \f$\mbox{\LaTeX}\f$ documents. This may be useful for small projects and may help to
  save some trees in general.
 
@@ -2752,8 +2766,8 @@ This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set t
  <code>\$doxygenversion</code>, <code>\$projectname</code>, 
  <code>\$projectnumber</code>, <code>\$projectbrief</code>, 
  <code>\$projectlogo</code>. 
- Doxygen will replace <code>\$title</code> with the empy string, for the replacement values of the
- other commands the user is refered to \ref cfg_html_header "HTML_HEADER".
+ Doxygen will replace <code>\$title</code> with the empty string, for the replacement values of the
+ other commands the user is referred to \ref cfg_html_header "HTML_HEADER".
 
 
 This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set to \c YES.
@@ -2772,6 +2786,19 @@ This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set t
 
 
 This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set to \c YES.
+ \anchor cfg_latex_extra_stylesheet
+<dt>\c LATEX_EXTRA_STYLESHEET <dd>
+ \addindex LATEX_EXTRA_STYLESHEET
+ The \c LATEX_EXTRA_STYLESHEET tag can be used to specify additional 
+ user-defined \f$\mbox{\LaTeX}\f$ style sheets that are included after the standard 
+ style sheets created by doxygen. Using this option one can overrule 
+ certain style aspects. Doxygen will copy the style sheet files to 
+ the output directory.
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
+
+
+This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set to \c YES.
  \anchor cfg_latex_extra_files
 <dt>\c LATEX_EXTRA_FILES <dd>
  \addindex LATEX_EXTRA_FILES
@@ -2802,7 +2829,7 @@ This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set t
  \addindex USE_PDFLATEX
  If the \c USE_PDFLATEX tag is set to \c YES, doxygen will use
  \c pdflatex to generate the PDF file directly from the \f$\mbox{\LaTeX}\f$
- files.  Set this option to \c YES to get a higher quality PDF documentation.
+ files.  Set this option to \c YES, to get a higher quality PDF documentation.
 
 
 The default value is: <code>YES</code>.
@@ -2867,7 +2894,7 @@ This tag requires that the tag \ref cfg_generate_latex "GENERATE_LATEX" is set t
 
 <dt>\c GENERATE_RTF <dd>
  \addindex GENERATE_RTF
- If the \c GENERATE_RTF tag is set to \c YES doxygen will generate RTF output.
+ If the \c GENERATE_RTF tag is set to \c YES, doxygen will generate RTF output.
  The RTF output is optimized for Word 97 and may not look too pretty with
  other RTF readers/editors.
 
@@ -2888,7 +2915,7 @@ This tag requires that the tag \ref cfg_generate_rtf "GENERATE_RTF" is set to \c
  \anchor cfg_compact_rtf
 <dt>\c COMPACT_RTF <dd>
  \addindex COMPACT_RTF
- If the \c COMPACT_RTF tag is set to \c YES doxygen generates more compact
+ If the \c COMPACT_RTF tag is set to \c YES, doxygen generates more compact
  RTF documents. This may be useful for small projects and may help to
  save some trees in general.
 
@@ -2935,6 +2962,19 @@ This tag requires that the tag \ref cfg_generate_rtf "GENERATE_RTF" is set to \c
 
 
 This tag requires that the tag \ref cfg_generate_rtf "GENERATE_RTF" is set to \c YES.
+ \anchor cfg_rtf_source_code
+<dt>\c RTF_SOURCE_CODE <dd>
+ \addindex RTF_SOURCE_CODE
+ If the \c RTF_SOURCE_CODE tag is set to \c YES then doxygen will include
+ source code with syntax highlighting in the RTF output.
+ <br>Note that which sources are shown also depends on other settings
+ such as \ref cfg_source_browser "SOURCE_BROWSER".
+
+
+The default value is: <code>NO</code>.
+
+
+This tag requires that the tag \ref cfg_generate_rtf "GENERATE_RTF" is set to \c YES.
 </dl>
 \section config_man Configuration options related to the man page output
  \anchor cfg_generate_man
@@ -2942,7 +2982,7 @@ This tag requires that the tag \ref cfg_generate_rtf "GENERATE_RTF" is set to \c
 
 <dt>\c GENERATE_MAN <dd>
  \addindex GENERATE_MAN
- If the \c GENERATE_MAN tag is set to \c YES doxygen will
+ If the \c GENERATE_MAN tag is set to \c YES, doxygen will
  generate man pages for classes and files.
 
 
@@ -3002,7 +3042,7 @@ This tag requires that the tag \ref cfg_generate_man "GENERATE_MAN" is set to \c
 
 <dt>\c GENERATE_XML <dd>
  \addindex GENERATE_XML
- If the \c GENERATE_XML tag is set to \c YES doxygen will
+ If the \c GENERATE_XML tag is set to \c YES, doxygen will
  generate an XML file that captures the structure of
  the code including all documentation.
 
@@ -3023,7 +3063,7 @@ This tag requires that the tag \ref cfg_generate_xml "GENERATE_XML" is set to \c
  \anchor cfg_xml_programlisting
 <dt>\c XML_PROGRAMLISTING <dd>
  \addindex XML_PROGRAMLISTING
- If the \c XML_PROGRAMLISTING tag is set to \c YES doxygen will
+ If the \c XML_PROGRAMLISTING tag is set to \c YES, doxygen will
  dump the program listings (including syntax highlighting
  and cross-referencing information) to the XML output. Note that
  enabling this will significantly increase the size of the XML output.
@@ -3040,7 +3080,7 @@ This tag requires that the tag \ref cfg_generate_xml "GENERATE_XML" is set to \c
 
 <dt>\c GENERATE_DOCBOOK <dd>
  \addindex GENERATE_DOCBOOK
-If the \c GENERATE_DOCBOOK tag is set to \c YES doxygen will generate Docbook files 
+If the \c GENERATE_DOCBOOK tag is set to \c YES, doxygen will generate Docbook files 
 that can be used to generate PDF.
 
 
@@ -3060,7 +3100,7 @@ This tag requires that the tag \ref cfg_generate_docbook "GENERATE_DOCBOOK" is s
  \anchor cfg_docbook_programlisting
 <dt>\c DOCBOOK_PROGRAMLISTING <dd>
  \addindex DOCBOOK_PROGRAMLISTING
- If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES doxygen will
+ If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES, doxygen will
  include the program listings (including syntax highlighting
  and cross-referencing information) to the DOCBOOK output. Note that
  enabling this will significantly increase the size of the DOCBOOK output.
@@ -3077,7 +3117,7 @@ This tag requires that the tag \ref cfg_generate_docbook "GENERATE_DOCBOOK" is s
 
 <dt>\c GENERATE_AUTOGEN_DEF <dd>
  \addindex GENERATE_AUTOGEN_DEF
- If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES doxygen will
+ If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES, doxygen will
  generate an AutoGen Definitions (see http://autogen.sf.net) file
  that captures the structure of the code including all
  documentation. Note that this feature is still experimental 
@@ -3093,7 +3133,7 @@ The default value is: <code>NO</code>.
 
 <dt>\c GENERATE_PERLMOD <dd>
  \addindex GENERATE_PERLMOD
- If the \c GENERATE_PERLMOD tag is set to \c YES doxygen will
+ If the \c GENERATE_PERLMOD tag is set to \c YES, doxygen will
  generate a Perl module file that captures the structure of
  the code including all documentation.
  <br>Note that this 
@@ -3106,7 +3146,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_perlmod_latex
 <dt>\c PERLMOD_LATEX <dd>
  \addindex PERLMOD_LATEX
- If the \c PERLMOD_LATEX tag is set to \c YES doxygen will generate 
+ If the \c PERLMOD_LATEX tag is set to \c YES, doxygen will generate 
  the necessary \c Makefile rules, \c Perl scripts and \f$\mbox{\LaTeX}\f$ code to be able 
  to generate PDF and DVI output from the Perl module output.
 
@@ -3118,10 +3158,10 @@ This tag requires that the tag \ref cfg_generate_perlmod "GENERATE_PERLMOD" is s
  \anchor cfg_perlmod_pretty
 <dt>\c PERLMOD_PRETTY <dd>
  \addindex PERLMOD_PRETTY
- If the \c PERLMOD_PRETTY tag is set to \c YES the Perl module output will be 
+ If the \c PERLMOD_PRETTY tag is set to \c YES, the Perl module output will be 
  nicely formatted so it can be parsed by a human reader.  This is useful 
  if you want to understand what is going on. On the other hand, if this
- tag is set to \c NO the size of the Perl module output will be much smaller
+ tag is set to \c NO, the size of the Perl module output will be much smaller
  and Perl will parse it just the same.
 
 
@@ -3146,7 +3186,7 @@ This tag requires that the tag \ref cfg_generate_perlmod "GENERATE_PERLMOD" is s
 
 <dt>\c ENABLE_PREPROCESSING <dd>
  \addindex ENABLE_PREPROCESSING
- If the \c ENABLE_PREPROCESSING tag is set to \c YES doxygen will
+ If the \c ENABLE_PREPROCESSING tag is set to \c YES, doxygen will
  evaluate all C-preprocessor directives found in the sources and include
  files.
 
@@ -3156,8 +3196,8 @@ The default value is: <code>YES</code>.
  \anchor cfg_macro_expansion
 <dt>\c MACRO_EXPANSION <dd>
  \addindex MACRO_EXPANSION
- If the \c MACRO_EXPANSION tag is set to \c YES doxygen will expand all macro
- names in the source code. If set to \c NO only conditional 
+ If the \c MACRO_EXPANSION tag is set to \c YES, doxygen will expand all macro
+ names in the source code. If set to \c NO, only conditional 
  compilation will be performed. Macro expansion can be done in a controlled
  way by setting \ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" to \c YES.
 
@@ -3181,7 +3221,7 @@ This tag requires that the tag \ref cfg_enable_preprocessing "ENABLE_PREPROCESSI
  \anchor cfg_search_includes
 <dt>\c SEARCH_INCLUDES <dd>
  \addindex SEARCH_INCLUDES
- If the \c SEARCH_INCLUDES tag is set to \c YES the includes files
+ If the \c SEARCH_INCLUDES tag is set to \c YES, the include files
  in the \ref cfg_include_path "INCLUDE_PATH" will be searched if a \c \#include is found.
 
 
@@ -3286,8 +3326,8 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
  \anchor cfg_allexternals
 <dt>\c ALLEXTERNALS <dd>
  \addindex ALLEXTERNALS
- If the \c ALLEXTERNALS tag is set to \c YES all external class will be listed
- in the class index. If set to \c NO only the inherited external classes
+ If the \c ALLEXTERNALS tag is set to \c YES, all external class will be listed
+ in the class index. If set to \c NO, only the inherited external classes
  will be listed.
 
 
@@ -3296,7 +3336,7 @@ The default value is: <code>NO</code>.
  \anchor cfg_external_groups
 <dt>\c EXTERNAL_GROUPS <dd>
  \addindex EXTERNAL_GROUPS
- If the \c EXTERNAL_GROUPS tag is set to \c YES all external groups will be listed
+ If the \c EXTERNAL_GROUPS tag is set to \c YES, all external groups will be listed
  in the modules index. If set to \c NO, only the current project's groups will
  be listed.
 
@@ -3306,7 +3346,7 @@ The default value is: <code>YES</code>.
  \anchor cfg_external_pages
 <dt>\c EXTERNAL_PAGES <dd>
  \addindex EXTERNAL_PAGES
- If the \c EXTERNAL_PAGES tag is set to \c YES all external pages will be listed 
+ If the \c EXTERNAL_PAGES tag is set to \c YES, all external pages will be listed 
  in the related pages index. If set to \c NO, only the current project's 
  pages will be listed.
 
@@ -3328,7 +3368,7 @@ The default file (with absolute path) is: <code>/usr/bin/perl</code>.
 
 <dt>\c CLASS_DIAGRAMS <dd>
  \addindex CLASS_DIAGRAMS
- If the \c CLASS_DIAGRAMS tag is set to \c YES doxygen will
+ If the \c CLASS_DIAGRAMS tag is set to \c YES, doxygen will
  generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
  super classes. Setting the tag to \c NO turns the diagrams off. Note that 
  this option also works with \ref cfg_have_dot "HAVE_DOT" disabled, but it is recommended to 
@@ -3357,7 +3397,7 @@ to be found in the default search path.
  \anchor cfg_hide_undoc_relations
 <dt>\c HIDE_UNDOC_RELATIONS <dd>
  \addindex HIDE_UNDOC_RELATIONS
- If set to \c YES, the inheritance and collaboration graphs will hide
+ If set to \c YES the inheritance and collaboration graphs will hide
  inheritance and usage relations if the target is undocumented
  or is not a class.
 
@@ -3464,7 +3504,7 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  \anchor cfg_uml_look
 <dt>\c UML_LOOK <dd>
  \addindex UML_LOOK
- If the \c UML_LOOK tag is set to \c YES doxygen will generate inheritance and
+ If the \c UML_LOOK tag is set to \c YES, doxygen will generate inheritance and
  collaboration diagrams in a style similar to the OMG's Unified Modeling
  Language.
 
@@ -3645,7 +3685,7 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  \addindex DIAFILE_DIRS
  The \c DIAFILE_DIRS tag can be used to specify one or more directories that 
  contain dia files that are included in the documentation (see the
- \ref cmdmscfile "\\diafile" command).
+ \ref cmddiafile "\\diafile" command).
 
  \anchor cfg_plantuml_jar_path
 <dt>\c PLANTUML_JAR_PATH <dd>
@@ -3655,8 +3695,12 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  called during a preprocessing step. Doxygen will generate a warning when it encounters a 
  \ref cmdstartuml "\\startuml" command in this case and will not generate output for the diagram.
 
+ \anchor cfg_plantuml_include_path
+<dt>\c PLANTUML_INCLUDE_PATH <dd>
+ \addindex PLANTUML_INCLUDE_PATH
+ When using plantuml, the specified paths are searched for files specified by the \c !include
+ statement in a plantuml block.
 
-This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  \anchor cfg_dot_graph_max_nodes
 <dt>\c DOT_GRAPH_MAX_NODES <dd>
  \addindex DOT_GRAPH_MAX_NODES
@@ -3708,7 +3752,7 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  \anchor cfg_dot_multi_targets
 <dt>\c DOT_MULTI_TARGETS <dd>
  \addindex DOT_MULTI_TARGETS
- Set the \c DOT_MULTI_TARGETS tag to \c YES allow dot to generate multiple output
+ Set the \c DOT_MULTI_TARGETS tag to \c YES to allow dot to generate multiple output
  files in one run (i.e. multiple -o and -T options on the command line). This
  makes \c dot run faster, but since only newer versions of \c dot (>1.8.10)
  support this, this feature is disabled by default.
@@ -3733,7 +3777,7 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  \anchor cfg_dot_cleanup
 <dt>\c DOT_CLEANUP <dd>
  \addindex DOT_CLEANUP
-If the \c DOT_CLEANUP tag is set to \c YES doxygen will
+If the \c DOT_CLEANUP tag is set to \c YES, doxygen will
 remove the intermediate dot files that are used to generate the various graphs.
 
 
diff --git a/doc/customize.doc b/doc/customize.doc
index 46b1d8b..c7359c1 100644
--- a/doc/customize.doc
+++ b/doc/customize.doc
@@ -117,9 +117,9 @@ This will create 3 files:
 You should edit these files and then reference them from the config file.
 - \ref cfg_html_header "HTML_HEADER" = \c header.html
 - \ref cfg_html_footer "HTML_FOOTER" = \c footer.html
-- \ref cfg_html_stylesheet "HTML_STYLESHEET" = \c customdoxygen.css <b>←obsolete</b>
+- \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET" = \c my_customdoxygen.css
 
-\note it is not longer recommended to use HTML_STYLESHEET this way,
+\note it is not longer recommended to use \ref cfg_html_stylesheet "HTML_STYLESHEET",
 as it make it difficult to upgrade to a newer version of doxygen. Use
 \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET" instead.
 
diff --git a/doc/language.doc b/doc/language.doc
index bc94f23..b96fa44 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -23,7 +23,7 @@ than English (the default). The output language is chosen through the
 configuration option \ref cfg_output_language "OUTPUT_LANGUAGE" in the 
 configuration file (with default name and known as Doxyfile).
 
-Currently (version 1.8.7), 40 languages
+Currently (version 1.8.8), 40 languages
 are supported (sorted alphabetically):
 Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
 Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
@@ -74,7 +74,7 @@ when the translator was updated.
     <td bgcolor="#ffffff">Brazilian Portuguese</td>
     <td>Fabio "FJTC" Jun Takada Chino</td>
     <td>jun-chino at uol dot com dot br</td>
-    <td bgcolor="#ffffcc">1.8.0</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td bgcolor="#ffffff">Catalan</td>
@@ -236,7 +236,7 @@ when the translator was updated.
     <td bgcolor="#ffffff">Portuguese</td>
     <td>Rui Godinho Lopes<br/>Fabio "FJTC" Jun Takada Chino</td>
     <td><span style="color: brown">[resigned]</span><br/>jun-chino at uol dot com dot br</td>
-    <td bgcolor="#ffffcc">1.8.0</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td bgcolor="#ffffff">Romanian</td>
@@ -327,7 +327,7 @@ when the translator was updated.
   \hline
   Armenian & Armen Tangamyan & {\tt\tiny armen dot tangamyan at anu dot edu dot au} & 1.8.0 \\
   \hline
-  Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino at uol dot com dot br} & 1.8.0 \\
+  Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino at uol dot com dot br} & up-to-date \\
   \hline
   Catalan & Maximiliano Pin & {\tt\tiny max dot pin at bitroit dot com} & 1.8.0 \\
   ~ & Albert Mora & {\tt\tiny [unreachable] amora at iua dot upf dot es} & ~ \\
@@ -402,7 +402,7 @@ when the translator was updated.
   ~ & Grzegorz Kowal & {\tt\tiny [unreachable] g\_kowal at poczta dot onet dot pl} & ~ \\
   ~ & Krzysztof Kral & {\tt\tiny krzysztof dot kral at gmail dot com} & ~ \\
   \hline
-  Portuguese & Rui Godinho Lopes & {\tt\tiny [resigned] rgl at ruilopes dot com} & 1.8.0 \\
+  Portuguese & Rui Godinho Lopes & {\tt\tiny [resigned] rgl at ruilopes dot com} & up-to-date \\
   ~ & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino at uol dot com dot br} & ~ \\
   \hline
   Romanian & Ionut Dumitrascu & {\tt\tiny reddumy at yahoo dot com} & almost up-to-date \\
diff --git a/doc/mailto.txt b/doc/mailto.txt
new file mode 100644
index 0000000..b1675e6
--- /dev/null
+++ b/doc/mailto.txt
@@ -0,0 +1,8 @@
+up-to-date
+jun-chino at uol.com.br; prikryl at atlas.cz; dimitri at stack.nl; dimitri at stack.nl; contact at e-concept-applications.fr; xouthier at yahoo.fr; Benoit.BROSSE at ingenico.com; szmml at h12u.com; goyoki at gmail.com; sun594 at hotmail.com; fly1004 at gmail.com; jung5000 at gmail.com; jun-chino at uol.com.br; prikryl at atlas.cz; bartomeu at loteria3cornella.com; david at grupoikusnet.com
+
+almost up-to-date
+dlin.tw at gmail.com; garywlee at gmail.com; reddumy at yahoo.com; aiosup at yahoo.com; brilliantov at byterg.ru; cav at cryptopro.ru; bjorn.palmqvist at aidium.se
+
+translator based
+python at i.ua; lauris at nix.lv; gessos.paul at yahoo.gr; Peter.Grotrian at pdv-FS.de; jensseidel at users.sf.net; ander.basaundi at gmail.com; krzysztof.kral at gmail.com; alessandro at falappa.net; aaf23 at cam.ac.uk; boris.bralo at gmail.com; lian.yang.cn at gmail.com; lidaobing at gmail.com; liuwei at asiainfo.com; ceefour at gauldong.net; pouhan at gnotometrics.dk; eriksoe+doxygen at daimi.au.dk; max.pin at bitroit.com; armen.tangamyan at anu.edu.au; niw3 at yahoo.com; nadalizadeh at gmail.com; tuanvietkey at gmail.com; stenedjo at yahoo.com; sla [...]
\ No newline at end of file
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 2997ec6..6143c54 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -1,4 +1,4 @@
-(1.8.7)
+(1.8.8)
 
 Doxygen supports the following 40 languages (sorted alphabetically):
 
@@ -10,7 +10,7 @@ Macedonian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian,
 Serbian, SerbianCyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
 Ukrainian, and Vietnamese.
 
-Of them, 12 translators are up-to-date, 28 translators are based on
+Of them, 14 translators are up-to-date, 26 translators are based on
 some adapter class, and 2 are English based.
 
 ----------------------------------------------------------------------
@@ -19,12 +19,14 @@ alphabetically). This means that they derive from the Translator
 class, they implement all 242 of the required methods, and even minor
 problems were not spotted by the script:
 
+  TranslatorBrazilian
   TranslatorCzech
   TranslatorDutch
   TranslatorEnglish
   TranslatorFrench
   TranslatorJapanese
   TranslatorKorean
+  TranslatorPortuguese
   TranslatorSlovak
   TranslatorSpanish
 
@@ -54,11 +56,9 @@ implemented to become up-to-date:
   TranslatorItalian               1.8.2 	15 methods to implement (6 %)
   TranslatorCroatian              1.8.2 	15 methods to implement (6 %)
   TranslatorChinese               1.8.2 	15 methods to implement (6 %)
-  TranslatorPortuguese            1.8.0 	22 methods to implement (9 %)
   TranslatorIndonesian            1.8.0 	22 methods to implement (9 %)
   TranslatorDanish                1.8.0 	22 methods to implement (9 %)
   TranslatorCatalan               1.8.0 	22 methods to implement (9 %)
-  TranslatorBrazilian             1.8.0 	22 methods to implement (9 %)
   TranslatorArmenian              1.8.0 	22 methods to implement (9 %)
   TranslatorTurkish               1.7.5 	25 methods to implement (10 %)
   TranslatorPersian               1.7.5 	25 methods to implement (10 %)
@@ -253,37 +253,6 @@ TranslatorArmenian   (TranslatorAdapter_1_8_0)  22 methods to implement (9 %)
     virtual QCString trTemplateParameters()
 
 
-TranslatorBrazilian   (TranslatorAdapter_1_8_0)  22 methods to implement (9 %)
--------------------
-
-  Implements 220 of the required methods (90 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trAdditionalInheritedMembers()
-    virtual QCString trAndMore(const QCString & number)
-    virtual QCString trClassMethods()
-    virtual QCString trConstantGroupReference(const char * namespaceName)
-    virtual QCString trConstantGroups()
-    virtual QCString trDesignOverview()
-    virtual QCString trDetailLevel()
-    virtual QCString trEnumGeneratedFromFiles(bool single)
-    virtual QCString trEnumReference(const char * name)
-    virtual QCString trExtendsClass()
-    virtual QCString trInheritedFrom(const char * members, const char * what)
-    virtual QCString trInstanceMethods()
-    virtual QCString trInterfaces()
-    virtual QCString trMethodDocumentation()
-    virtual QCString trPanelSynchronisationTooltip(bool enable)
-    virtual QCString trProvidedByCategory()
-    virtual QCString trServiceGeneratedFromFiles(bool single)
-    virtual QCString trServiceReference(const char * sName)
-    virtual QCString trServices()
-    virtual QCString trSingletonGeneratedFromFiles(bool single)
-    virtual QCString trSingletonReference(const char * sName)
-    virtual QCString trTemplateParameters()
-
-
 TranslatorCatalan   (TranslatorAdapter_1_8_0)  22 methods to implement (9 %)
 -----------------
 
@@ -908,37 +877,6 @@ TranslatorPolish   (TranslatorAdapter_1_8_2)  14 methods to implement (5 %)
     QCString trSources()
 
 
-TranslatorPortuguese   (TranslatorAdapter_1_8_0)  22 methods to implement (9 %)
---------------------
-
-  Implements 220 of the required methods (90 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trAdditionalInheritedMembers()
-    virtual QCString trAndMore(const QCString & number)
-    virtual QCString trClassMethods()
-    virtual QCString trConstantGroupReference(const char * namespaceName)
-    virtual QCString trConstantGroups()
-    virtual QCString trDesignOverview()
-    virtual QCString trDetailLevel()
-    virtual QCString trEnumGeneratedFromFiles(bool single)
-    virtual QCString trEnumReference(const char * name)
-    virtual QCString trExtendsClass()
-    virtual QCString trInheritedFrom(const char * members, const char * what)
-    virtual QCString trInstanceMethods()
-    virtual QCString trInterfaces()
-    virtual QCString trMethodDocumentation()
-    virtual QCString trPanelSynchronisationTooltip(bool enable)
-    virtual QCString trProvidedByCategory()
-    virtual QCString trServiceGeneratedFromFiles(bool single)
-    virtual QCString trServiceReference(const char * sName)
-    virtual QCString trServices()
-    virtual QCString trSingletonGeneratedFromFiles(bool single)
-    virtual QCString trSingletonReference(const char * sName)
-    virtual QCString trTemplateParameters()
-
-
 TranslatorRomanian   (Translator)
 ------------------
 
diff --git a/examples/Makefile b/examples/Makefile
deleted file mode 100644
index a5e08a2..0000000
--- a/examples/Makefile
+++ /dev/null
@@ -1,151 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-DOXYGEN_BIN="$(DOXYGEN)/bin/doxygen"
-
-all: class/html/index.html \
-     define/html/index.html \
-     enum/html/index.html \
-     file/html/index.html \
-     func/html/index.html \
-     page/html/index.html \
-     relates/html/index.html \
-     author/html/index.html \
-     par/html/index.html \
-     overload/html/index.html \
-     example/html/index.html \
-     include/html/index.html \
-     qtstyle/html/index.html \
-     jdstyle/html/index.html \
-     structcmd/html/index.html \
-     autolink/html/index.html \
-     restypedef/html/index.html \
-     afterdoc/html/index.html \
-     template/html/index.html \
-     tag/html/index.html \
-     group/html/index.html \
-     diagrams/html/index.html \
-     memgrp/html/index.html \
-     docstring/html/index.html \
-     pyexample/html/index.html \
-     tclexample/html/index.html \
-     mux/html/index.html \
-     manual/html/index.html
-
-# Disabled since it is broken :-(
-#     dbusxml/html/index.html
-
-clean:
-	rm -rf  class define enum file func page relates author \
-                par overload example include qtstyle jdstyle structcmd \
-		autolink tag restypedef afterdoc template tag group diagrams \
-		memgrp docstring pyexample mux manual dbusxml tclexample
-
-class/html/index.html: class.h class.cfg
-	$(DOXYGEN_BIN) class.cfg
-
-define/html/index.html: define.h define.cfg
-	$(DOXYGEN_BIN) define.cfg
-
-enum/html/index.html: enum.h enum.cfg
-	$(DOXYGEN_BIN) enum.cfg
-
-file/html/index.html: file.h file.cfg
-	$(DOXYGEN_BIN) file.cfg
-
-func/html/index.html: func.h func.cfg
-	$(DOXYGEN_BIN) func.cfg
-
-page/html/index.html: page.doc page.cfg
-	$(DOXYGEN_BIN) page.cfg
-
-relates/html/index.html: relates.cpp relates.cfg
-	$(DOXYGEN_BIN) relates.cfg
-
-author/html/index.html: author.cpp author.cfg
-	$(DOXYGEN_BIN) author.cfg
-
-par/html/index.html: par.cpp par.cfg
-	$(DOXYGEN_BIN) par.cfg
-
-overload/html/index.html: overload.cpp overload.cfg
-	$(DOXYGEN_BIN) overload.cfg
-
-example/html/index.html: example.cpp example_test.cpp example.cfg
-	$(DOXYGEN_BIN) example.cfg
-
-include/html/index.html: include.cpp example_test.cpp include.cfg
-	$(DOXYGEN_BIN) include.cfg
-
-qtstyle/html/index.html: qtstyle.cpp qtstyle.cfg
-	$(DOXYGEN_BIN) qtstyle.cfg
-
-jdstyle/html/index.html: jdstyle.cpp jdstyle.cfg
-	$(DOXYGEN_BIN) jdstyle.cfg
-
-structcmd/html/index.html: structcmd.h structcmd.cfg
-	$(DOXYGEN_BIN) structcmd.cfg
-
-autolink/html/index.html: autolink.cpp autolink.cfg
-	$(DOXYGEN_BIN) autolink.cfg
-
-tag/html/index.html: tag.cpp tag.cfg example/html/index.html
-	$(DOXYGEN_BIN) tag.cfg
-
-restypedef/html/index.html: restypedef.cpp restypedef.cfg
-	$(DOXYGEN_BIN) restypedef.cfg
-
-afterdoc/html/index.html: afterdoc.h afterdoc.cfg
-	$(DOXYGEN_BIN) afterdoc.cfg
-
-template/html/index.html: templ.cpp templ.cfg
-	$(DOXYGEN_BIN) templ.cfg
-
-group/html/index.html: group.cpp group.cfg
-	$(DOXYGEN_BIN) group.cfg
-
-memgrp/html/index.html: memgrp.cpp memgrp.cfg
-	$(DOXYGEN_BIN) memgrp.cfg
-
-pyexample/html/index.html: pyexample.py pyexample.cfg
-	$(DOXYGEN_BIN) pyexample.cfg
-
-tclexample/html/index.html: tclexample.tcl tclexample.cfg
-	$(DOXYGEN_BIN) tclexample.cfg
-
-mux/html/index.html: mux.vhdl mux.cfg
-	$(DOXYGEN_BIN) mux.cfg
-
-manual/html/index.html: manual.c manual.cfg
-	$(DOXYGEN_BIN) manual.cfg
-
-docstring/html/index.html: docstring.py docstring.cfg
-	$(DOXYGEN_BIN) docstring.cfg
-
-#dbusxml/html/index.html: dbusxml.xml dbusxml.cfg
-#	$(DOXYGEN_BIN) dbusxml.cfg
-
-diagrams/html/index.html: diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg
-ifneq ($(HAVE_DOT),)
-	$(DOXYGEN_BIN) diagrams.cfg
-endif
-
diff --git a/examples/example.cfg b/examples/example.cfg
index 4c5c869..a25df24 100644
--- a/examples/example.cfg
+++ b/examples/example.cfg
@@ -1,6 +1,6 @@
 PROJECT_NAME      = "Example Command"
 OUTPUT_DIRECTORY  = example
-GENERATE_TAGFILE  = example.tag
+#GENERATE_TAGFILE  = example.tag
 GENERATE_LATEX    = NO
 GENERATE_MAN      = NO
 GENERATE_RTF      = NO
diff --git a/jquery/Makefile b/jquery/Makefile
index 2290ef9..996f472 100644
--- a/jquery/Makefile
+++ b/jquery/Makefile
@@ -3,6 +3,7 @@ JQUERY_UI_VERSION = 1.8.18
 HASHCHANGE_VERSION = 1.3
 SCROLL_VERSION = 1.4.2
 POWERTIP_VERSION = 1.2.0
+
 MINIFIER ?= /usr/local/bin/yuicompressor-2.4.7
 SCRIPTS = jquery-$(JQUERY_VERSION).js \
           jquery.ui-$(JQUERY_UI_VERSION).core.js \
@@ -12,31 +13,17 @@ SCRIPTS = jquery-$(JQUERY_VERSION).js \
           jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
           jquery.scrollTo-$(SCROLL_VERSION).js \
 	  jquery.powertip-$(POWERTIP_VERSION).js
-RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js \
-          jquery_ui.js jquery_fx.js jquery_pt.js
+RESULTS = jquery.js
 
 SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
 
 all: $(RESULTS)
 
 install: $(RESULTS)
-	cp $(RESULTS) ../src/
-
-jquery_ui.js: scripts
-	cat jquery.ui-$(JQUERY_UI_VERSION).core-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).widget-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).mouse-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).resizable-min.js \
-            jquery.ba-$(HASHCHANGE_VERSION)-hashchange-min.js > jquery_ui.js
-
-jquery_pt.js: scripts
-	cat jquery.powertip-$(POWERTIP_VERSION)-min.js > jquery_pt.js
-
-jquery_fx.js: scripts
-	cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
+	cp $(RESULTS) ../templates/html/
 
-jquery_p1.js jquery_p2.js jquery_p3.js: scripts
-	perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
+jquery.js: scripts
+	cat $(SCRIPTS_MIN) > jquery.js
 
 scripts: $(SCRIPTS_MIN)
 
@@ -44,5 +31,5 @@ clean:
 	rm -f $(SCRIPTS_MIN) $(RESULTS)
 
 %-min.js: %.js
-	java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
+	java -jar $(MINIFIER).jar $^ > $@
 
diff --git a/jquery/README b/jquery/README
index 7fd4dcd..5e385a5 100644
--- a/jquery/README
+++ b/jquery/README
@@ -11,7 +11,4 @@ packages:
 - jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
 - jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
 
-The Makefile will built the jquery_*.js files used by doxygen.
-Some files are split into smaller parts to make sure Visual Studio can compile them 
-as strings.
-
+The Makefile will built the jquery.js files used by doxygen.
diff --git a/jquery/split_jquery.pl b/jquery/split_jquery.pl
deleted file mode 100644
index 3edc763..0000000
--- a/jquery/split_jquery.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# script to split file into parts of roughly 32kb
-#!/bin/perl
-my $file = shift;
-my $target = shift;
-my $count = 1;
-my $len = 0;
-$target=~/p(\d+).js/;
-my $part = $1;
-open(F,"<$file") || die ("cannot open file for reading: $!");
-open(G,">$target") || die("cannot open file for writing: $!");
-while (<F>)
-{
-  if ($part==$count)
-  {
-    print G "$_";
-  }
-  $len+=length($_);
-  if ($len>32768) 
-  {
-    $len=0;
-    $count++;
-  }
-}
-close(F);
-close(G);
diff --git a/libmd5/Makefile b/libmd5/Makefile
deleted file mode 100644
index 8afa249..0000000
--- a/libmd5/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-all: Makefile.libmd5 
-	$(MAKE) -f Makefile.libmd5
-
-clean: Makefile.libmd5 
-	$(MAKE) -f Makefile.libmd5 clean
-
-distclean: clean
-	$(RM) -f Makefile.libmd5 libmd5.pro Makefile 
-
-realclean: distclean
-
-tmake:
-	$(ENV) $(PERL) "$(TMAKE)" libmd5.pro >Makefile.libmd5
-
-Makefile.libmd5: libmd5.pro
-	$(ENV) $(PERL) "$(TMAKE)" libmd5.pro >Makefile.libmd5
-
-install:
diff --git a/libmd5/Makefile.libmd5 b/libmd5/Makefile.libmd5
deleted file mode 100644
index f0a1810..0000000
--- a/libmd5/Makefile.libmd5
+++ /dev/null
@@ -1,82 +0,0 @@
-#############################################################################
-# Makefile for building ../lib/libmd5.a
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: libmd5
-#    Template: lib
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I/opt/local/include
-AR	=	ar cq
-RANLIB	=	ranlib
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	md5.h \
-		md5_loc.h
-SOURCES =	md5.c
-OBJECTS =	../objects/md5/md5.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../lib/libmd5.a
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-staticlib: $(TARGET)
-
-$(TARGET): $(OBJECTS) $(OBJMOC) 
-	-rm -f $(TARGET)
-	$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)
-	ranlib $(TARGET)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake libmd5.pro
-
-dist:
-	$(TAR) libmd5.tar libmd5.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) libmd5.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../objects/md5/md5.o: md5.c \
-		md5.h \
-		md5_loc.h
-	$(CC) -c $(CFLAGS) $(INCPATH) -o ../objects/md5/md5.o md5.c
-
diff --git a/libmd5/libmd5.pro b/libmd5/libmd5.pro
deleted file mode 100644
index 6714f3e..0000000
--- a/libmd5/libmd5.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# This file was generated from libmd5.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE	= lib
-CONFIG		= warn_on staticlib debug
-HEADERS		= md5.h md5_loc.h
-SOURCES		= md5.c
-win32:INCLUDEPATH          += .
-win32-g++:TMAKE_CFLAGS     += -D__CYGWIN__ -DALL_STATIC
-DESTDIR                    =  ../lib
-TARGET                     =  md5
-OBJECTS_DIR                =  ../objects/md5
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index b86ead3..7bd673d 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,4 +1,4 @@
-%define version 1.8.8
+%define version 1.8.9.1
 %define revision 1
 %define mmn 1
 %define name doxygen
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index 9e9743c..644eee5 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -127,7 +127,7 @@ REFERENCES_LINK_SOURCE = YES
 SOURCE_TOOLTIPS        = YES
 USE_HTAGS              = NO
 VERBATIM_HEADERS       = YES
-CLANG_ASSISTED_PARSING = YES
+CLANG_ASSISTED_PARSING = NO
 CLANG_OPTIONS          =
 #---------------------------------------------------------------------------
 # configuration options related to the alphabetical class index
diff --git a/qtools/Makefile b/qtools/Makefile
deleted file mode 100644
index c085ff3..0000000
--- a/qtools/Makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-#
-# 
-#
-# Copyright (C) 1997-2000 by Dimitri van Heesch.
-# 
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-# 
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-# 
-
-all: Makefile.qtools Makefile
-	$(MAKE) -f Makefile.qtools    $@
-
-Makefile.qtools: qtools.pro 
-	$(ENV) $(PERL) "$(TMAKE)" qtools.pro >Makefile.qtools
-
-tmake: 
-	$(ENV) $(PERL) "$(TMAKE)" qtools.pro >Makefile.qtools
-
-clean: Makefile.qtools 
-	$(MAKE) -f Makefile.qtools    clean 
-
-distclean: clean
-
-FORCE:
diff --git a/qtools/Makefile.in b/qtools/Makefile.in
index ca66cc1..411ee5d 100644
--- a/qtools/Makefile.in
+++ b/qtools/Makefile.in
@@ -26,5 +26,6 @@ clean: Makefile.qtools
 	$(MAKE) -f Makefile.qtools    clean 
 
 distclean: clean
+	$(RM) Makefile.qtools
 
 FORCE:
diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp
index 4038d55..26df166 100644
--- a/qtools/qcstring.cpp
+++ b/qtools/qcstring.cpp
@@ -3,8 +3,8 @@
  * Copyright (C) 1997-2004 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby 
- * granted. No representations are made about the suitability of this software 
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
  * for any purpose. It is provided "as is" without express or implied warranty.
  * See the GNU General Public License for more details.
  *
@@ -24,281 +24,148 @@
 #include <qregexp.h>
 #include <qdatastream.h>
 
-
-QCString::QCString(int size)
-{
-  if (size>0)
-  {
-    m_data = (char *)malloc(size);
-    if (m_data)
-    {
-      if (size>1) memset(m_data,' ',size-1);
-      m_data[size-1]='\0';
-    }
-  }
-  else
-  {
-    m_data=0;
-  }
-}
-
-QCString::QCString( const QCString &s ) 
-{ 
-  duplicate(s);
-}
-
-QCString::QCString( const char *str )
-{ 
-  duplicate(str);
-}
-
-QCString::QCString( const char *str, uint maxlen )
-{ 
-  uint l;
-  if (str && ( l = QMIN(qstrlen(str),maxlen) )) 
-  { 
-    m_data=(char *)malloc(l+1);
-    strncpy(m_data,str,l+1);
-    m_data[l]='\0';
-  } 
-  else
-  {
-    m_data=0;
-  }
-}
-
-QCString::~QCString()
-{
-  if (m_data) free(m_data);
-  m_data=0;
-}
-
-QCString &QCString::assign( const char *str )
+QCString &QCString::sprintf( const char *format, ... )
 {
-  if (m_data) free(m_data);
-  duplicate(str);
+  va_list ap;
+  va_start( ap, format );
+  const int minlen=256;
+  int l = length();
+  if (l<minlen) { resize(minlen); l=minlen; }
+  int n=vsnprintf( rawData(), l, format, ap);
+  if (n<0) n=l;
+  resize(n+1);
+  va_end( ap );
   return *this;
 }
 
-bool QCString::resize( uint newlen )
+int QCString::find( char c, int index, bool cs ) const
 {
-  if (newlen==0)
-  {
-    if (m_data) { free(m_data); m_data=0; }
-    return TRUE;
-  }
-  if (m_data==0) // newlen>0
+  if (index<0 || index>=(int)length()) return -1; // index outside string
+  register const char *pos;
+  if (cs)
   {
-    m_data = (char *)malloc(newlen);
+    pos = strchr(data()+index,c);
   }
   else
   {
-    m_data = (char *)realloc(m_data,newlen);
+    pos = data()+index;
+    c = tolower((unsigned char)c);
+    while (*pos && tolower((unsigned char)*pos)!=c) pos++;
+    if (!*pos && c) pos=0; // not found
   }
-  if (m_data==0) return FALSE;
-  m_data[newlen-1]='\0';
-  return TRUE;
+  return pos ? (int)(pos - data()) : -1;
 }
 
-bool QCString::fill( char c, int len )
+int QCString::find( const char *str, int index, bool cs ) const
 {
-  uint l=length();
-  if (len<0) len=l;
-  if ((uint)len!=l) 
-  {
-    if (m_data) free(m_data);
-    if (len>0)
-    {
-      m_data=(char *)malloc(len+1);
-      if (m_data==0) return FALSE;
-      m_data[len]='\0';
-    }
-    else
-    {
-      m_data=0;
-    }
-  }
-  if (len>0)
+  int l = length();
+  if (index<0 || index>=l) return -1; // index outside string
+  if (!str)  return -1;               // no string to search for
+  if (!*str) return index;           // empty string matching at index
+  register const char *pos;
+  if (cs) // case sensitive
   {
-    uint i;
-    for (i=0;i<(uint)len;i++) m_data[i]=c;
+    pos = strstr(data()+index,str);
   }
-  return TRUE;
-}
-
-QCString &QCString::sprintf( const char *format, ... )
-{
-  va_list ap;
-  va_start( ap, format );
-  uint l = length();
-  const uint minlen=256;
-  if (l<minlen)
+  else // case insensitive
   {
-    if (m_data) 
-      m_data = (char *)realloc(m_data,minlen);
-    else
-      m_data = (char *)malloc(minlen);
-  }
-  vsprintf( m_data, format, ap );
-  resize( qstrlen(m_data) + 1 );              // truncate
-  va_end( ap );
-  return *this;
-}
-
-
-int QCString::find( char c, int index, bool cs ) const
-{
-  uint len = length();
-  if ( m_data==0 || (uint)index>len )               // index outside string
-    return -1;
-  register const char *d;
-  if ( cs ) // case sensitive
-  {  
-    d = strchr( m_data+index, c );
-  } 
-  else 
-  {
-    d = m_data+index;
-    c = tolower( (uchar) c );
-    while ( *d && tolower((uchar) *d) != c )
-      d++;
-    if ( !*d && c )                         // not found
-      d = 0;
-  }
-  return d ? (int)(d - m_data) : -1;
-}
-
-int QCString::find( const char *str, int index, bool cs ) const
-{
-  uint l = length();
-  if ( m_data==0 || (uint)index > l )         // index outside string
-    return -1;
-  if ( !str )                                 // no search string
-    return -1;
-  if ( !*str )                                // zero-length search string
-    return index;
-  register const char *d;
-  if ( cs )                                   // case sensitive
-  {              
-    d = strstr( m_data+index, str );
-  } 
-  else                                        // case insensitive
-  {
-    d = m_data+index;
-    int len = qstrlen( str );
-    while ( *d ) 
+    pos = data();
+    int len = qstrlen(str);
+    while (*pos)
     {
-      if ( qstrnicmp(d, str, len) == 0 )
-        break;
-      d++;
+      if (qstrnicmp(pos,str,len)==0) break;
+      pos++;
     }
-    if ( !*d )                              // not found
-      d = 0;
+    if (!*pos) pos = 0; // not found
   }
-  return d ? (int)(d - m_data) : -1;
+  return pos ? (int)(pos - data()) : -1;
 }
 
-int QCString::find( const QCString &str,int index,bool cs) const
+int QCString::find( const QCString &str, int index, bool cs ) const
 {
   return find(str.data(),index,cs);
 }
 
 int QCString::find( const QRegExp &rx, int index ) const
 {
-  QString d = QString::fromLatin1( m_data );
+  QString d = QString::fromLatin1( data() );
   return d.find( rx, index );
 }
 
 int QCString::findRev( char c, int index, bool cs) const
 {
-  const char *b = m_data;
-  const char *d;
-  uint len = length();
-  if ( b == 0 ) return -1;  // empty string
-  if ( index < 0 )          // neg index ==> start from end
+  const char *b = data();
+  const char *pos;
+  int len = length();
+  if (len==0) return -1; // empty string
+  if (index<0) // start from end
   {
-    if ( len == 0 ) return -1;
-    if ( cs ) 
+    if (cs)
     {
-      d = strrchr( b, c );
-      return d ? (int)(d - b) : -1;
+      pos = strrchr(b,c);
+      return pos ? (int)(pos - b) : -1;
     }
-    index = len;
-  } 
-  else if ( (uint)index > len )  // bad index
-  {      
+    index=len;
+  }
+  else if (index>len) // bad index
+  {
     return -1;
   }
-  d = b+index;
-  if ( cs )   // case sensitive
+  pos = b+index;
+  if (cs)
   {
-    while ( d >= b && *d != c )
-      d--;
-  } 
-  else  // case insensitive
+    while ( pos>=b && *pos!=c) pos--;
+  }
+  else
   {
-    c = tolower( (uchar) c );
-    while ( d >= b && tolower((uchar) *d) != c )
-      d--;
+    c = tolower((unsigned char)c);
+    while ( pos>=b && tolower((unsigned char)*pos)!=c) pos--;
   }
-  return d >= b ? (int)(d - b) : -1;
+  return pos>=b ? (int)(pos - b) : -1;
 }
 
 int QCString::findRev( const char *str, int index, bool cs) const
 {
   int slen = qstrlen(str);
-  uint len = length();
-  if ( index < 0 )                           // neg index ==> start from end
-    index = len-slen;
-  else if ( (uint)index > len )              // bad index
-    return -1;
-  else if ( (uint)(index + slen) > len )     // str would be too long
-    index = len - slen;
-  if ( index < 0 )
-    return -1;
-
-  register char *d = m_data + index;
-  if ( cs )                     // case sensitive 
-  {      
-    for ( int i=index; i>=0; i-- )
-      if ( qstrncmp(d--,str,slen)==0 )
-        return i;
-  } 
-  else                          // case insensitive
-  {           
-    for ( int i=index; i>=0; i-- )
-      if ( qstrnicmp(d--,str,slen)==0 )
-        return i;
+  int len = length();
+  if (index<0) index = len-slen; // start from end
+  else if (index>len) return -1; // bad index
+  else if (index+slen>len) index=len-slen; // str would be too long
+  if (index<0) return -1; // no match possible
+  register const char *pos = data()+index;
+  if (cs) // case sensitive
+  {
+    for (int i=index; i>=0; i--) if (qstrncmp(pos--,str,slen)==0) return i;
+  }
+  else // case insensitive
+  {
+    for (int i=index; i>=0; i--) if (qstrnicmp(pos,str,slen)==0) return i;
   }
   return -1;
-
 }
 
 int QCString::findRev( const QRegExp &rx, int index ) const
 {
-  QString d = QString::fromLatin1( m_data );
+  QString d = QString::fromLatin1( data() );
   return d.findRev( rx, index );
 }
 
 int QCString::contains( char c, bool cs ) const
 {
-  int count = 0;
-  char *d = m_data;
-  if ( !d )
-    return 0;                               
-  if ( cs )                                // case sensitive
-  {
-    while ( *d )
-      if ( *d++ == c )
-        count++;                        
-  } 
-  else                                     // case insensitive
-  {
-    c = tolower( (uchar) c );
-    while ( *d ) {
-      if ( tolower((uchar) *d) == c )
-        count++;
-      d++;
+  if (length()==0) return 0;
+  int count=0;
+  const char *pos = data();
+  if (cs)
+  {
+    while (*pos) if (*pos++ == c) count++;
+  }
+  else
+  {
+    c = tolower((unsigned char)c);
+    while (*pos)
+    {
+      if (tolower((unsigned char)*pos)==c) count++;
+      pos++;
     }
   }
   return count;
@@ -306,96 +173,104 @@ int QCString::contains( char c, bool cs ) const
 
 int QCString::contains( const char *str, bool cs ) const
 {
-  int count = 0;
-  char *d = data();
-  if ( !d )
-    return 0;
-  int len = qstrlen( str );
-  while ( *d )   // counts overlapping strings
+  if (str==0 || length()==0) return 0;
+  int count=0;
+  const char *pos = data();
+  int len = qstrlen(str);
+  while (*pos)
   {
-    if ( cs ) 
+    if (cs)
     {
-      if ( qstrncmp( d, str, len ) == 0 )
-        count++;
-    } 
-    else 
+      if (qstrncmp(pos,str,len)==0) count++;
+    }
+    else
     {
-      if ( qstrnicmp(d, str, len) == 0 )
-        count++;
+      if (qstrnicmp(pos,str,len)==0) count++;
     }
-    d++;
+    pos++;
   }
   return count;
 }
 
 int QCString::contains( const QRegExp &rx ) const
-{ 
-  QString d = QString::fromLatin1( m_data );
+{
+  QString d = QString::fromLatin1( data() );
   return d.contains( rx );
 }
 
+bool QCString::stripPrefix(const char *prefix)
+{
+  if (prefix==0 || length()==0) return FALSE;
+  int len = qstrlen(prefix);
+  if (qstrncmp(prefix,data(),len)==0)
+  {
+    m_rep=mid(len,length()-len).m_rep; // need to make a deep copy
+    return TRUE;
+  }
+  return FALSE;
+}
+
 QCString QCString::left( uint len )  const
 {
-  if ( isEmpty() ) 
+  if (isEmpty())
   {
     return QCString();
-  } 
-  else if ( len >= length() ) 
+  }
+  else if (len>=length())
   {
-    return *this;
-  } 
-  else 
+    return QCString(data());
+  }
+  else
   {
     QCString s( len+1 );
-    strncpy( s.data(), m_data, len );
-    *(s.data()+len) = '\0';
+    memcpy( s.rawData(), data(), len);
     return s;
   }
 }
 
 QCString QCString::right( uint len ) const
 {
-  if ( isEmpty() ) 
+  if (isEmpty())
   {
     return QCString();
-  } 
-  else 
+  }
+  else
   {
-    uint l = length();
-    if ( len > l ) len = l;
-    char *p = m_data + (l - len); 
-    return QCString( p ); 
-  }       
+    int l = length();
+    if ((int)len>l) len=l;
+    const char *pos = data() + (l-len);
+    return QCString(pos);
+  }
 }
 
 QCString QCString::mid( uint index, uint len) const
 {
-  uint slen = length();
-  if ( len == 0xffffffff ) len = slen-index;
-  if ( isEmpty() || index >= slen ) 
+  uint slen = (uint)length();
+  if (len==0xffffffff) len = slen-index;
+  if (isEmpty() || index>=slen || len==0)
   {
     return QCString();
-  } 
-  else 
+  }
+  else
   {
-    register char *p = data()+index;
-    QCString s( len+1 );
-    strncpy( s.data(), p, len );
-    *(s.data()+len) = '\0';
+    register const char *p = data()+index;
+    QCString s(len+1);
+    qstrncpy( s.rawData(), p, len+1 );
     return s;
   }
 }
 
 QCString QCString::lower() const
 {
-  QCString s( m_data );
-  register char *p = s.data();
-  if ( p ) 
+  if (length()==0) return QCString();
+  QCString s(data());
+  register char *pos = s.rawData();
+  if (pos)
   {
-    while ( *p ) 
+    while (*pos)
     {
-      *p = tolower((uchar) *p);
-      p++;
+      *pos = tolower((unsigned char)*pos);
+      pos++;
     }
   }
   return s;
@@ -403,41 +278,44 @@ QCString QCString::lower() const
 
 QCString QCString::upper() const
 {
-  QCString s( m_data );
-  register char *p = s.data();
-  if ( p ) {
-    while ( *p ) {
-      *p = toupper((uchar)*p);
-      p++;
+  if (length()==0) return QCString();
+  QCString s(data());
+  register char *pos = s.rawData();
+  if (pos)
+  {
+    while (*pos)
+    {
+      *pos = toupper((unsigned char)*pos);
+      pos++;
     }
   }
   return s;
 }
 
-QCString QCString::stripWhiteSpace()	const
+QCString QCString::stripWhiteSpace() const
 {
   if ( isEmpty() )                            // nothing to do
     return *this;
 
-  register char *s = m_data;
+  register const char *cs = data();
   int reslen = length();
-  if ( !isspace((uchar) s[0]) && !isspace((uchar) s[reslen-1]) )
-    return *this;                           // returns a copy
+  if ( !isspace((uchar)cs[0]) && !isspace((uchar)cs[reslen-1]) )
+    return *this;                             // returns a copy
 
-  QCString result(s);
-  s = result.data(); 
+  QCString result(cs);
+  register char *s = result.rawData();
   int start = 0;
   int end = reslen - 1;
   while ( isspace((uchar) s[start]) )                 // skip white space from start
-    start++; 
-  if ( s[start] == '\0' ) 
+    start++;
+  if ( s[start] == '\0' )
   {                                                   // only white space
     return QCString();
   }
   while ( end && isspace((uchar) s[end]) )            // skip white space from end
     end--;
   end -= start - 1;
-  memmove( result.data(), &s[start], end );
+  qmemmove( s, &s[start], end );
   result.resize( end + 1 );
   return result;
 }
@@ -448,10 +326,10 @@ QCString QCString::simplifyWhiteSpace() const
     return *this;
 
   QCString result( length()+1 );
-  char *from  = data();
-  char *to    = result.data();
+  const char *from  = data();
+  char *to    = result.rawData();
   char *first = to;
-  while ( TRUE ) 
+  while ( TRUE )
   {
     while ( *from && isspace((uchar) *from) )
       from++;
@@ -469,84 +347,68 @@ QCString QCString::simplifyWhiteSpace() const
   return result;
 }
 
+QCString &QCString::assign( const char *str )
+{
+  return operator=(str);
+}
+
 QCString &QCString::insert( uint index, const char *s )
-{   
+{
   int len = s ? qstrlen(s) : 0;
-  if ( len == 0 )
-    return *this;
-  uint olen = length();
-  int nlen = olen + len;                      
-  if ( index >= olen )  // insert after end of string
-  {                     
-    m_data = (char *)realloc(m_data,nlen+index-olen+1);
-    if ( m_data ) 
-    {
-      memset( m_data+olen, ' ', index-olen );
-      memcpy( m_data+index, s, len+1 );
-    }
-  } 
-  else if ( (m_data = (char *)realloc(m_data,nlen+1)) )  // normal insert
-  { 
-    memmove( m_data+index+len, m_data+index, olen-index+1 );
-    memcpy( m_data+index, s, len );
+  if ( len == 0 ) return *this;
+  int olen = length();
+  int nlen = olen + len;
+  if ((int)index>=olen)
+  {
+    resize(nlen+index-olen+1);
+    memset(rawData()+olen, ' ', index-olen);
+    memcpy(rawData()+index,s, len+1);
+  }
+  else
+  {
+    resize(nlen+1);
+    qmemmove(rawData()+index+len,data()+index,olen-index+1);
+    memcpy(rawData()+index,s,len);
   }
   return *this;
 }
 
-QCString &QCString::insert( uint index, char c )        // insert char
+QCString &QCString::insert( uint index, char c)
 {
   char buf[2];
   buf[0] = c;
   buf[1] = '\0';
   return insert( index, buf );
 }
-
-QCString& QCString::operator+=( const char *str )
+QCString &QCString::append( const char *s )
 {
-  if ( !str ) return *this;  // nothing to append
-  uint len1 = length();
-  uint len2 = qstrlen(str);
-  char *newData = (char *)realloc( m_data, len1 + len2 + 1 );
-  if (newData)
-  {
-    m_data = newData;
-    memcpy( m_data + len1, str, len2 + 1 );
-  }
-  return *this;      
+  return operator+=(s);
 }
-
-QCString &QCString::operator+=( char c )
+QCString &QCString::prepend( const char *s )
 {
-  uint len = length();
-  char *newData = (char *)realloc( m_data, length()+2 );
-  if (newData)
-  {
-    m_data = newData;
-    m_data[len] = c;
-    m_data[len+1] = '\0';
-  }
-  return *this;
+  return insert(0,s);
 }
-
 QCString &QCString::remove( uint index, uint len )
 {
   uint olen = length();
   if ( index + len >= olen ) // range problems
-  {             
+  {
     if ( index < olen )  // index ok
-    {                  
+    {
       resize( index+1 );
     }
-  } 
-  else if ( len != 0 ) 
+  }
+  else if ( len != 0 )
   {
-    memmove( m_data+index, m_data+index+len, olen-index-len+1 );
+    QCString tmp(olen-index-len+1);
+    qmemmove( tmp.rawData(), data()+index+len, olen-index-len+1 );
     resize( olen-len+1 );
+    memcpy( rawData()+index,tmp.data(),tmp.length() );
   }
   return *this;
 }
 
-QCString &QCString::replace( uint index, uint len, const char *s )
+QCString &QCString::replace( uint index, uint len, const char *s)
 {
   remove( index, len );
   insert( index, s );
@@ -555,65 +417,85 @@ QCString &QCString::replace( uint index, uint len, const char *s )
 
 QCString &QCString::replace( const QRegExp &rx, const char *str )
 {
-  QString d = QString::fromLatin1( m_data );
+  QString d = QString::fromLatin1( data() );
   QString r = QString::fromLatin1( str );
   d.replace( rx, r );
   operator=( d.ascii() );
   return *this;
 }
 
-long  QCString::toLong( bool *ok ) const
+short QCString::toShort(bool *ok) const
+{
+  QString s(data());
+  return s.toShort(ok);
+}
+
+ushort QCString::toUShort(bool *ok) const
+{
+  QString s(data());
+  return s.toUShort(ok);
+}
+
+int QCString::toInt(bool *ok) const
+{
+  QString s(data());
+  return s.toInt(ok);
+}
+
+uint QCString::toUInt(bool *ok) const
 {
-  QString s(m_data);
+  QString s(data());
+  return s.toUInt(ok);
+}
+
+long QCString::toLong(bool *ok) const
+{
+  QString s(data());
   return s.toLong(ok);
 }
 
-ulong QCString::toULong( bool *ok ) const
+ulong QCString::toULong(bool *ok) const
 {
-  QString s(m_data);
+  QString s(data());
   return s.toULong(ok);
 }
 
-short QCString::toShort( bool *ok )	const
+QCString &QCString::setNum(short n)
 {
-  QString s(m_data);
-  return s.toShort(ok);
+  return setNum((long)n);
 }
 
-ushort QCString::toUShort( bool *ok ) const
+QCString &QCString::setNum(ushort n)
 {
-  QString s(m_data);
-  return s.toUShort(ok);
+  return setNum((ulong)n);
 }
 
-int QCString::toInt( bool *ok ) const
+QCString &QCString::setNum(int n)
 {
-  QString s(m_data);
-  return s.toInt(ok);
+  return setNum((long)n);
 }
 
-uint QCString::toUInt( bool *ok ) const
+QCString &QCString::setNum(uint n)
 {
-  QString s(m_data);
-  return s.toUInt(ok);
+  return setNum((ulong)n);
 }
 
-QCString &QCString::setNum( long n )
+QCString &QCString::setNum(long n)
 {
   char buf[20];
   register char *p = &buf[19];
   bool neg;
-  if ( n < 0 ) 
+  if ( n < 0 )
   {
     neg = TRUE;
     n = -n;
-  } 
-  else 
+  }
+  else
   {
     neg = FALSE;
   }
   *p = '\0';
-  do 
+  do
   {
     *--p = ((int)(n%10)) + '0';
     n /= 10;
@@ -623,12 +505,12 @@ QCString &QCString::setNum( long n )
   return *this;
 }
 
-QCString &QCString::setNum( ulong n )
+QCString &QCString::setNum( ulong n)
 {
   char buf[20];
   register char *p = &buf[19];
   *p = '\0';
-  do 
+  do
   {
     *--p = ((int)(n%10)) + '0';
     n /= 10;
@@ -637,31 +519,7 @@ QCString &QCString::setNum( ulong n )
   return *this;
 }
 
-void QCString::msg_index( uint index )
-{
-#if defined(CHECK_RANGE)
-    qWarning( "QCString::at: Absolute index %d out of range", index );
-#else
-    Q_UNUSED( index )
-#endif
-}
-
-bool QCString::stripPrefix(const char *prefix)
-{
-  if (prefix==0) return FALSE;
-  uint plen   = qstrlen(prefix);
-  if (m_data && qstrncmp(prefix,m_data,plen)==0) // prefix matches
-  {
-    uint len    = qstrlen(m_data);
-    uint newlen = len-plen+1;
-    qmemmove(m_data,m_data+plen,newlen);
-    resize(newlen);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-//---------------------------------------------------------------------------
+//-------------------------------------------------
 
 void *qmemmove( void *dst, const void *src, uint len )
 {
@@ -685,7 +543,7 @@ char *qstrdup( const char *str )
 {
     if ( !str )
 	return 0;
-    char *dst = new char[strlen(str)+1];
+    char *dst = new char[qstrlen(str)+1];
     CHECK_PTR( dst );
     return strcpy( dst, str );
 }
@@ -777,7 +635,7 @@ QDataStream &operator>>( QDataStream &s, QCString &str )
 	len = 0;
     }
     if ( len > 0 )				// not null array
-	s.readRawBytes( str.data(), (uint)len );
+	s.readRawBytes( str.rawData(), (uint)len );
     return s;
 }
 
diff --git a/qtools/qcstring.h b/qtools/qcstring.h
index f7d2c95..8854aa7 100644
--- a/qtools/qcstring.h
+++ b/qtools/qcstring.h
@@ -1,38 +1,16 @@
 /****************************************************************************
-** 
 **
-** Definition of the extended char array operations,
-** and QByteArray and QCString classes
+** Copyright (C) 1997-2004 by Dimitri van Heesch.
 **
-** Created : 920609
+** Permission to use, copy, modify, and distribute this software and its
+** documentation under the terms of the GNU General Public License is hereby
+** granted. No representations are made about the suitability of this software
+** for any purpose. It is provided "as is" without express or implied warranty.
+** See the GNU General Public License for more details.
 **
-** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales at trolltech.com for
-**   information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info at trolltech.com if any conditions of this licensing are
-** not clear to you.
+** Note: this is a reimplementation of the qcstring.h that came with
+** an Qt version 2.2.3. For short strings it stores the string data inside
+** the object. For long strings it uses a separate array with reference counting.
 **
 **********************************************************************/
 
@@ -43,6 +21,7 @@
 #include "qarray.h"
 #endif // QT_H
 
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -54,6 +33,7 @@
 #include <strings.h>
 #endif
 
+#include <assert.h>
 
 class QGString;
 
@@ -77,7 +57,6 @@ inline char *hack_strrchr( const char *s, int c )
 #define strrchr(s,c)	hack_strrchr((s),(c))
 #endif
 
-
 /*****************************************************************************
   Safe and portable C string functions; extensions to standard string.h
  *****************************************************************************/
@@ -127,39 +106,6 @@ Q_EXPORT int qstricmp( const char *str1, const char *str2 );
 
 Q_EXPORT int qstrnicmp( const char *str1, const char *str2, uint len );
 
-#if 0
-// ### TODO for 3.0: these and the cstr* functions should be used if
-//                   !defined(QT_CLEAN_NAMESPACE)
-//                   We want to keep source compatibility for 2.x
-// ### TODO for 4.0: completely remove these and the cstr* functions
-
-#if !defined(QT_GENUINE_STR)
-
-#undef	strlen
-#define strlen qstrlen
-
-#undef	strcpy
-#define strcpy qstrcpy
-
-#undef	strcmp
-#define strcmp qstrcmp
-
-#undef	strncmp
-#define strncmp qstrncmp
-
-#undef	stricmp
-#define stricmp	 qstricmp
-
-#undef	strnicmp
-#define strnicmp qstrnicmp
-
-#endif
-#endif
-
-// qChecksum: Internet checksum
-
-Q_EXPORT Q_UINT16 qChecksum( const char *s, uint len );
-
 /*****************************************************************************
   QByteArray class
  *****************************************************************************/
@@ -169,7 +115,6 @@ template class Q_EXPORT QArray<char>;
 #endif
 typedef QArray<char> QByteArray;
 
-
 /*****************************************************************************
   QByteArray stream functions
  *****************************************************************************/
@@ -181,142 +126,574 @@ Q_EXPORT QDataStream &operator>>( QDataStream &, QByteArray & );
 class QRegExp;
 
 /** This is an alternative implementation of QCString. It provides basically
- *  the same functions but uses less memory for administration. This class
- *  is just a wrapper around a plain C string requiring only 4 bytes "overhead".
- *  QCString features sharing of data and stores the string length, but 
- *  requires 4 + 12 bytes for this (even for the empty string). As doxygen 
- *  uses a LOT of string during a run it saves a lot of memory to use a 
- *  more memory efficient implementation at the cost of relatively low
- *  runtime overhead.
+ *  the same functions but uses reference counting and copy on write.
  */
-class QCString 
+class QCString
 {
 public:
-    QCString() : m_data(0) {}		// make null string
-    QCString( const QCString &s );
-    QCString( int size );
-    QCString( const char *str );
-    QCString( const char *str, uint maxlen );
-    ~QCString();
-
-    QCString    &operator=( const QCString &s );// deep copy
-    QCString    &operator=( const char *str );	// deep copy
-
-    bool        isNull()        const;
-    bool	isEmpty()	const;
-    uint	length()	const;
-    uint        size()          const { return m_data ? length()+1 : 0; }
-    char *      data()          const { return m_data; }
-    bool	resize( uint newlen );
-    bool	truncate( uint pos );
-    bool	fill( char c, int len = -1 );
-
-    QCString	copy()	const;
-
-    QCString    &sprintf( const char *format, ... );
-
-    int		find( char c, int index=0, bool cs=TRUE ) const;
-    int		find( const char *str, int index=0, bool cs=TRUE ) const;
-    int		find( const QCString &str, int index=0, bool cs=TRUE ) const;
-    int		find( const QRegExp &, int index=0 ) const;
-    int		findRev( char c, int index=-1, bool cs=TRUE) const;
-    int		findRev( const char *str, int index=-1, bool cs=TRUE) const;
-    int		findRev( const QRegExp &, int index=-1 ) const;
-    int		contains( char c, bool cs=TRUE ) const;
-    int		contains( const char *str, bool cs=TRUE ) const;
-    int		contains( const QRegExp & ) const;
-    bool        stripPrefix(const char *prefix);
-
-    QCString	left( uint len )  const;
-    QCString	right( uint len ) const;
-    QCString	mid( uint index, uint len=0xffffffff) const;
-
-    QCString	lower() const;
-    QCString	upper() const;
-
-    QCString	stripWhiteSpace()	const;
-    QCString	simplifyWhiteSpace()	const;
-
-    QCString    &assign( const char *str );
-    QCString    &insert( uint index, const char * );
-    QCString    &insert( uint index, char );
-    QCString    &append( const char *s );
-    QCString    &prepend( const char *s );
-    QCString    &remove( uint index, uint len );
-    QCString    &replace( uint index, uint len, const char * );
-    QCString    &replace( const QRegExp &, const char * );
-
-    short	toShort( bool *ok=0 )	const;
-    ushort	toUShort( bool *ok=0 )	const;
-    int		toInt( bool *ok=0 )	const;
-    uint	toUInt( bool *ok=0 )	const;
-    long	toLong( bool *ok=0 )	const;
-    ulong	toULong( bool *ok=0 )	const;
-
-    QCString    &setNum( short );
-    QCString    &setNum( ushort );
-    QCString    &setNum( int );
-    QCString    &setNum( uint );
-    QCString    &setNum( long );
-    QCString    &setNum( ulong );
-    QCString    &setNum( float, char f='g', int prec=6 );
-    QCString    &setNum( double, char f='g', int prec=6 );
-
-		operator const char *() const;
-    QCString    &operator+=( const char *str );
-    QCString    &operator+=( char c );
-    char &at( uint index ) const;
-    char &operator[]( int i ) const { return at(i); }
-    
-  private:
-    static void msg_index( uint );
-    void duplicate( const QCString &s );
-    void duplicate( const char *str);
-    QCString &duplicate( const char *str, int);
-
-    char *      m_data;
-};
-
-inline char &QCString::at( uint index ) const
-{
-  return m_data[index];
-}
+    /** creates an empty string */
+    QCString() : m_rep()
+    {
+    }
+
+    /** destroys the string */
+   ~QCString()
+    {
+    }
+
+    /** makes a copy of a string. */
+    QCString( const QCString &s ) : m_rep(s.m_rep)
+    {
+    }
+
+    /** creates a string with room for size characters
+     *  @param[in] size the number of character to allocate (including the 0-terminator)
+     */
+    QCString( int size ) : m_rep(size)
+    {
+    }
+
+    /** creates a string from a plain C string.
+     *  @param[in] str A zero terminated C string. When 0 an empty string is created.
+     */
+    QCString( const char *str ) : m_rep(str)
+    {
+    }
+
+    /** creates a string from \a str and copies over the first \a maxlen characters. */
+    QCString( const char *str, uint maxlen ) : m_rep(str,maxlen)
+    {
+    }
+
+    /** replaces the contents by that of string \a s. */
+    QCString &operator=( const QCString &s )
+    {
+      m_rep = s.m_rep;
+      return *this;
+    }
+
+    /** replaces the contents by that of C string \a str. */
+    QCString &operator=( const char *str)
+    {
+      m_rep = str;
+      return *this;
+    }
+
+    /** Returns TRUE iff the string is empty. Equivalent to isEmpty(). */
+    bool isNull() const
+    {
+      return m_rep.isEmpty();
+    }
+
+    /** Returns TRUE iff the string is empty */
+    bool isEmpty() const
+    {
+      return m_rep.isEmpty();
+    }
+
+    /** Returns the length of the string, excluding the 0-terminator. Equivalent to size(). */
+    uint length() const
+    {
+      return m_rep.length();
+    }
+
+    /** Returns the length of the string, excluding the 0-terminator. */
+    uint size() const
+    {
+      return m_rep.length();
+    }
+
+    /** Returns a pointer to the contents of the string in the form of a 0-terminated C string */
+    const char *data() const
+    {
+      return m_rep.data();
+    }
+
+    /** Returns a writable pointer to the data.
+     *  @warning if the string is shared it will modifying the string directly and
+     *  this will overwrite all copies as well!
+     */
+    char *rawData() const
+    {
+      return m_rep.rawData();
+    }
+
+    /** Resizes the string to hold \a newlen characters
+     *  (this value should include the 0-terminator). If the string is enlarged the contents will
+     *  be left unmodified.
+     */
+    bool resize( uint newlen )
+    {
+      m_rep.resize(newlen);
+      return TRUE;
+    }
+
+    /** Truncates the string at position \a pos. */
+    bool truncate( uint pos )
+    {
+      return resize(pos+1);
+    }
+
+    /** Fills a string with a predefined character
+     *  @param[in] c the character used to fill the string with.
+     *  @param[in] len the number of character to fill. Use -1 to fill the whole string.
+     *  @note the string will be resized to contain \a len characters. The contents of the
+     *  string will be lost.
+     */
+    bool fill( char c, int len = -1 )
+    {
+      m_rep.fill(c,len);
+      return TRUE;
+    }
+
+    /** Returns a deep copy of the string. */
+    QCString copy() const
+    {
+      if (length()==0) return QCString();
+      QCString cs(length()+1);
+      memcpy(cs.rawData(),data(),length());
+      return cs;
+    }
+
+    QCString &sprintf( const char *format, ... );
+    int	find( char c, int index=0, bool cs=TRUE ) const;
+    int	find( const char *str, int index=0, bool cs=TRUE ) const;
+    int find( const QCString &str, int index=0, bool cs=TRUE ) const;
+    int	find( const QRegExp &rx, int index=0 ) const;
+    int	findRev( char c, int index=-1, bool cs=TRUE) const;
+    int	findRev( const char *str, int index=-1, bool cs=TRUE) const;
+    int	findRev( const QRegExp &rx, int index=-1 ) const;
+    int	contains( char c, bool cs=TRUE ) const;
+    int	contains( const char *str, bool cs=TRUE ) const;
+    int contains( const QRegExp &rx ) const;
+    bool stripPrefix(const char *prefix);
+    QCString left( uint len ) const;
+    QCString right( uint len ) const;
+    QCString mid( uint index, uint len=0xffffffff) const;
+    QCString lower() const;
+    QCString upper() const;
+    QCString stripWhiteSpace() const;
+    QCString simplifyWhiteSpace() const;
+    QCString &assign( const char *str );
+    QCString &insert( uint index, const char *s );
+    QCString &insert( uint index, char c);
+    QCString &append( const char *s );
+    QCString &prepend( const char *s );
+    QCString &remove( uint index, uint len );
+    QCString &replace( uint index, uint len, const char *s);
+    QCString &replace( const QRegExp &rx, const char *str );
+    short toShort( bool *ok=0 ) const;
+    ushort toUShort( bool *ok=0 ) const;
+    int	toInt( bool *ok=0 ) const;
+    uint toUInt( bool *ok=0 ) const;
+    long toLong( bool *ok=0 ) const;
+    ulong toULong( bool *ok=0 )	const;
+    QCString &setNum(short n);
+    QCString &setNum(ushort n);
+    QCString &setNum(int n);
+    QCString &setNum(uint n);
+    QCString &setNum(long n);
+    QCString &setNum(ulong n);
+
+    /** Converts the string to a plain C string */
+    operator const char *() const
+    {
+      return (const char *)data();
+    }
+
+    /** Appends string \a str to this string and returns a reference to the result. */
+    QCString &operator+=( const char *str )
+    {
+      if (!str) return *this;
+      int len1 = length();
+      int len2 = (int)strlen(str);
+      resize(len1+len2+1);
+      memcpy(rawData()+len1,str,len2);
+      return *this;
+    }
+
+    /** Appends character \a c to this string and returns a reference to the result. */
+    QCString &operator+=( char c )
+    {
+      int len = length();
+      resize(len+2);
+      rawData()[len]=c;
+      return *this;
+    }
+
+    /** Returns a reference to the character at index \a i. */
+    char &at( uint i) const
+    {
+      return m_rep.at(i);
+    }
+
+    /** Indexing operator. Equavalent to at(). */
+    char &operator[]( int i ) const
+    {
+      return m_rep.at((uint)i);
+    }
 
-inline void QCString::duplicate( const QCString &s )
-{
-  if (!s.isEmpty()) 
-  {
-    uint l = (uint)strlen(s.data());
-    m_data = (char *)malloc(l+1);
-    if (m_data) memcpy(m_data,s.data(),l+1);
-  }
-  else 
-  {
-    m_data=0; 
-  }
-}
+  private:
 
-inline void QCString::duplicate( const char *str)
-{
-  if (str && str[0]!='\0') 
-  {
-    uint l = (uint)strlen(str);
-    m_data = (char *)malloc(l+1);
-    if (m_data) memcpy(m_data,str,l+1);
-  }
-  else 
-  {
-    m_data=0;
-  }
-}
+    struct LSData;
+
+    // long string representation
+    struct LongStringRep
+    {
+      uchar isShort; // : 1;  // should be shared with ShortStringRep
+      //uchar : 7;
+      LSData *d;
+    };
+
+#define SHORT_STR_CAPACITY ((int)sizeof(LongStringRep)-2)
+#define SHORT_STR_MAX_LEN (SHORT_STR_CAPACITY-1)
+
+    // short string representation
+    struct ShortStringRep
+    {
+      uchar isShort; // : 1;  // should be shared with LongStringRep
+      uchar len; //     : 7;
+      char str[SHORT_STR_CAPACITY]; // size including 0-terminator
+    };
+
+    // ref counting string header
+    struct LSHeader
+    {
+      int           len;      // length of string without 0 terminator
+      int           refCount; // -1=leaked, 0=one ref & non-cost, n>0, n+1 refs, const
+    };
+    // ref counting string data and methods
+    struct LSData : public LSHeader
+    {
+      char *toStr()
+      {
+        return (char*)(this+1); // string data starts after the header
+      }
+
+      // creates a LSData item with room for size bytes (which includes the 0 terminator!)
+      // if size is zero, an empty string will be created.
+      static LSData *create(int size)
+      {
+        LSData *data;
+        data = (LSData*)malloc(sizeof(LSHeader)+size);
+        data->len = size-1;
+        data->refCount = 0;
+        data->toStr()[size-1] = 0;
+        return data;
+      }
+      // remove out reference to the data. Frees memory if no more users
+      void dispose()
+      {
+        if (--refCount<0) free(this);
+      }
+
+      // resizes LSData so it can hold size bytes (which includes the 0 terminator!)
+      // Since this is for long strings only, size should be > SHORT_STR_CAPACITY
+      static LSData *resize(LSData *d,int size)
+      {
+        if (d->len>0 && d->refCount==0) // non-const, non-empty
+        {
+          d = (LSData*)realloc(d,sizeof(LSHeader)+size);
+          d->len = size-1;
+          d->toStr()[size-1] = 0;
+          return d;
+        }
+        else // need to make a copy
+        {
+          LSData *newData = LSData::create(size);
+          int len = d->len;
+          if (len>=size) len=size-1;
+          memcpy(newData->toStr(),d->toStr(),len);
+          newData->toStr()[len]=0;
+          d->dispose();
+          return newData;
+        }
+      }
+    };
+
+    class StringRep
+    {
+      public:
+        StringRep()
+        {
+          initEmpty();
+        }
+        void initEmpty()
+        {
+          u.s.isShort=TRUE;
+          u.s.len=0;
+          //memset(u.s.str,0,SHORT_STR_CAPACITY);
+        }
+       ~StringRep()
+        {
+          if (!u.s.isShort)
+          {
+            u.l.d->dispose();
+          }
+        }
+        StringRep(const StringRep &s)
+        {
+          if (&s!=this)
+          {
+            u.s.isShort = s.u.s.isShort;
+            if (s.u.s.isShort)
+            {
+              u.s.len = s.u.s.len;
+              memcpy(u.s.str,s.u.s.str,s.u.s.len+1);
+            }
+            else
+            {
+              u.l.d = s.u.l.d;
+              u.l.d->refCount++;
+            }
+          }
+          else // self-assignment
+          {
+            u = s.u; // avoid uninitialized warning from gcc
+          }
+        }
+        StringRep(int size)
+        {
+          u.s.isShort = size<=SHORT_STR_CAPACITY;
+          if (size<=SHORT_STR_CAPACITY) // init short string
+          {
+            if (size>0)
+            {
+              u.s.len = size-1;
+              u.s.str[size-1]='\0';
+            }
+            else
+            {
+              u.s.len = 0;
+            }
+          }
+          else // int long string
+          {
+            u.l.d = LSData::create(size);
+          }
+        }
+        StringRep(const char *str)
+        {
+          if (str)
+          {
+            int len = (int)strlen(str);
+            u.s.isShort = len<SHORT_STR_CAPACITY;
+            if (len<SHORT_STR_CAPACITY)
+            {
+              u.s.len = len;
+              qstrncpy(u.s.str,str,SHORT_STR_CAPACITY);
+            }
+            else
+            {
+              u.l.d = LSData::create(len+1);
+              memcpy(u.l.d->toStr(),str,u.l.d->len);
+            }
+          }
+          else // create empty string
+          {
+            initEmpty();
+          }
+        }
+        StringRep( const char *str, uint maxlen )
+        {
+          if (str && maxlen>0)
+          {
+            uint len=(uint)strlen(str);
+            if (len>maxlen) len=maxlen;
+            u.s.isShort = len<=SHORT_STR_MAX_LEN;
+            if (u.s.isShort)
+            {
+              u.s.len = len;
+              memcpy(u.s.str,str,len);
+              u.s.str[len]='\0';
+            }
+            else
+            {
+              u.l.d = LSData::create(len+1);
+              memcpy(u.l.d->toStr(),str,len);
+            }
+          }
+          else // create empty string
+          {
+            initEmpty();
+          }
+        }
+        StringRep &operator=(const StringRep &s)
+        {
+          if (&s!=this)
+          {
+            if (!u.s.isShort)
+            {
+              u.l.d->dispose();
+            }
+            u.s.isShort = s.u.s.isShort;
+            if (u.s.isShort) // copy by value
+            {
+              u.s.len = s.u.s.len;
+              memcpy(u.s.str,s.u.s.str,s.u.s.len+1);
+            }
+            else // copy by reference
+            {
+              u.l.d = s.u.l.d;
+              u.l.d->refCount++;
+            }
+          }
+          else // self-assignment
+          {
+            u = s.u; // avoid uninitialized warning from gcc
+          }
+          return *this;
+        }
+        StringRep &operator=(const char *str)
+        {
+          if (!u.s.isShort)
+          {
+            u.l.d->dispose();
+          }
+          if (str)
+          {
+            int len = (int)strlen(str);
+            u.s.isShort = len<SHORT_STR_CAPACITY;
+            if (len<SHORT_STR_CAPACITY)
+            {
+              u.s.len = len;
+              qstrncpy(u.s.str,str,SHORT_STR_CAPACITY);
+            }
+            else
+            {
+              u.l.d = LSData::create(len+1);
+              memcpy(u.l.d->toStr(),str,len);
+            }
+          }
+          else
+          {
+            initEmpty();
+          }
+          return *this;
+        }
+        bool isEmpty() const
+        {
+          return u.s.isShort && u.s.len==0;
+        }
+        uint length() const
+        {
+          uint l = u.s.isShort ? u.s.len : u.l.d->len;
+          return l;
+        }
+        const char *data() const
+        {
+          if (u.s.isShort)
+          {
+            return u.s.len==0 ? 0 : u.s.str;
+          }
+          else
+          {
+            return u.l.d->len==0 ? 0 : u.l.d->toStr();
+          }
+        }
+        char *rawData() const
+        {
+          if (u.s.isShort)
+          {
+            return u.s.len==0 ? 0 : (char*)u.s.str;
+          }
+          else
+          {
+            //assert(u.l.d->refCount==0); // string may not be shared when accessed raw
+            return u.l.d->len==0 ? 0 : u.l.d->toStr();
+          }
+        }
+        char &at(int i) const
+        {
+          if (u.s.isShort)
+          {
+            return (char&)u.s.str[i];
+          }
+          else
+          {
+            return u.l.d->toStr()[i];
+          }
+        }
+        bool resize( uint newlen )
+        {
+          if (u.s.isShort && newlen<=SHORT_STR_CAPACITY) // resize short string
+          {
+            if (newlen>0)
+            {
+              u.s.len = newlen-1;
+              u.s.str[newlen-1]='\0';
+            }
+            else // string becomes empty
+            {
+              initEmpty();
+            }
+          }
+          else if (u.s.isShort) // turn short string into long string
+          {
+            StringRep tmp = *this;
+            u.s.isShort=FALSE;
+            u.l.d = LSData::create(newlen);
+            if (tmp.u.s.len>0)
+            {
+              memcpy(u.l.d->toStr(),tmp.u.s.str,tmp.u.s.len+1);
+            }
+            else
+            {
+              u.l.d->toStr()[0]='\0';
+            }
+          }
+          else if (!u.s.isShort && newlen<=SHORT_STR_CAPACITY) // turn long string into short string
+          {
+            if (newlen>0)
+            {
+              StringRep tmp(newlen); // copy short part into tmp buffer
+              memcpy(tmp.u.s.str,u.l.d->toStr(),newlen-1);
+              tmp.u.s.str[newlen-1]='\0';
+              u.l.d->dispose();
+              u.s = tmp.u.s;
+            }
+            else
+            {
+              u.l.d->dispose();
+              initEmpty();
+            }
+          }
+          else // resize long string
+          {
+            u.l.d = u.l.d->resize(u.l.d,newlen);
+          }
+          return TRUE;
+        }
+        bool fill( char c, int len )
+        {
+          if (len<0) len=length();
+          if (!u.s.isShort) // detach from shared string
+          {
+            resize(len+1);
+          }
+          else if (len!=(int)length())
+          {
+            if (len>0)
+            {
+              resize(len+1);
+            }
+          }
+          if (len>0)
+          {
+            memset(rawData(),c,len);
+          }
+          return TRUE;
+        }
+      private:
+        union ShortOrLongStringSelector
+        {
+          ShortStringRep s;
+          LongStringRep  l;
+        } u;
+    };
+    StringRep m_rep;
 
-inline QCString &QCString::duplicate( const char *str, int)
-{
-  if (m_data==str) return *this;
-  if (m_data) free(m_data);
-  duplicate(str);
-  return *this;
-}
+};
 
 /*****************************************************************************
   QCString stream functions
@@ -327,56 +704,6 @@ Q_EXPORT QDataStream &operator>>( QDataStream &, QCString & );
 #endif
 
 /*****************************************************************************
-  QCString inline functions
- *****************************************************************************/
-
-inline QCString &QCString::operator=( const QCString &s )
-{ return (QCString&)assign( s ); }
-
-inline QCString &QCString::operator=( const char *str )
-{ return (QCString&)duplicate( str, qstrlen(str)+1 ); }
-
-inline bool QCString::isNull() const
-{ return data() == 0; }
-
-inline bool QCString::isEmpty() const
-{ return data() == 0 || *data() == '\0'; }
-
-inline uint QCString::length() const
-{ return qstrlen( data() ); }
-
-inline bool QCString::truncate( uint pos )
-{ return resize(pos+1); }
-
-inline QCString QCString::copy() const
-{ return QCString( data() ); }
-
-inline QCString &QCString::prepend( const char *s )
-{ return insert(0,s); }
-
-inline QCString &QCString::append( const char *s )
-{ return operator+=(s); }
-
-inline QCString &QCString::setNum( short n )
-{ return setNum((long)n); }
-
-inline QCString &QCString::setNum( ushort n )
-{ return setNum((ulong)n); }
-
-inline QCString &QCString::setNum( int n )
-{ return setNum((long)n); }
-
-inline QCString &QCString::setNum( uint n )
-{ return setNum((ulong)n); }
-
-inline QCString &QCString::setNum( float n, char f, int prec )
-{ return setNum((double)n,f,prec); }
-
-inline QCString::operator const char *() const
-{ return (const char *)data(); }
-
-
-/*****************************************************************************
   QCString non-member operators
  *****************************************************************************/
 
@@ -476,5 +803,4 @@ inline const char *qPrint(const QCString &s)
   if (!s.isEmpty()) return s.data(); else return "";
 }
 
-
 #endif // QCSTRING_H
diff --git a/qtools/qfeatures.h b/qtools/qfeatures.h
index 84fa715..d6c2882 100644
--- a/qtools/qfeatures.h
+++ b/qtools/qfeatures.h
@@ -637,7 +637,7 @@
 #   define QT_NO_VBUTTONGROUP
 #endif
 /*!
-  Horizonal box layout widgets
+  Horizontal box layout widgets
 */
 #ifdef QT_NO_FRAME
 # define QT_NO_HBOX
diff --git a/qtools/qfile_unix.cpp b/qtools/qfile_unix.cpp
index 0422fb4..dd41c4e 100644
--- a/qtools/qfile_unix.cpp
+++ b/qtools/qfile_unix.cpp
@@ -550,6 +550,7 @@ int QFile::writeBlock( const char *p, uint len )
 	return -1;
     }
 #endif
+    if (p==0) return 0;
     int nwritten;				// number of bytes written
     if ( isRaw() )				// raw file
 	nwritten = (int)WRITE( fd, p, len );
diff --git a/qtools/qglobal.h b/qtools/qglobal.h
index 024b40c..aa11f01 100644
--- a/qtools/qglobal.h
+++ b/qtools/qglobal.h
@@ -98,7 +98,10 @@
 #  if !defined(MAC_OS_X_VERSION_10_9)
 #       define MAC_OS_X_VERSION_10_9 MAC_OS_X_VERSION_10_8 + 10
 #  endif
-#  if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_9)
+#  if !defined(MAC_OS_X_VERSION_10_10)
+#       define MAC_OS_X_VERSION_10_10 MAC_OS_X_VERSION_10_9 + 10
+#  endif
+#  if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_10)
 #    warning "This version of Mac OS X is unsupported"
 #  endif
 #elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
diff --git a/qtools/qgstring.cpp b/qtools/qgstring.cpp
index 85dd879..8b15675 100644
--- a/qtools/qgstring.cpp
+++ b/qtools/qgstring.cpp
@@ -209,7 +209,7 @@ QGString &QGString::operator+=( const QGString &s )
   assert(memSize>=len1+len2+1);
   char *newData = memSize!=m_memSize ? (char*)realloc( m_data, memSize ) : m_data;
   m_memSize = memSize;
-  if (m_data)
+  if (newData)
   {
     m_data = newData;
     memcpy( m_data + len1, s, len2 + 1 );
diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp
index fa8f1d3..f51c0d4 100644
--- a/qtools/qstring.cpp
+++ b/qtools/qstring.cpp
@@ -11499,9 +11499,9 @@ static inline bool format(QChar::Decomposition tag, QString & str,
     unsigned int l = index + len;
     unsigned int r = index;
 
-    bool left = FALSE, right = FALSE;
+    bool right = FALSE;
 
-    left = ((l < str.length()) &&
+    bool left = ((l < str.length()) &&
 	    ((str[(int)l].joining() == QChar::Dual) ||
 	     (str[(int)l].joining() == QChar::Right)));
     if (r > 0) {
@@ -11963,7 +11963,7 @@ QChar* QString::asciiToUnicode( const QByteArray& ba, uint* len )
     int l = 0;
     while ( l < (int)ba.size() && ba[l] )
 	l++;
-    char* str = ba.data();
+    const char* str = ba.data();
     QChar *uc = new QChar[ l ];	  // Can't use macro, since function is public
     QChar *result = uc;
     if ( len )
@@ -11982,7 +11982,7 @@ static QChar* internalAsciiToUnicode( const QByteArray& ba, uint* len )
     int l = 0;
     while ( l < (int)ba.size() && ba[l] )
 	l++;
-    char* str = ba.data();
+    const char* str = ba.data();
     QChar *uc = QT_ALLOC_QCHAR_VEC( l );
     QChar *result = uc;
     if ( len )
@@ -15257,7 +15257,7 @@ QCString qt_winQString2MB( const QString& s, int uclen )
     QCString mb(bufSize);
     int len;
     while ( !(len=WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)s.unicode(), uclen,
-		mb.data(), bufSize-1, 0, &used_def)) )
+		mb.rawData(), bufSize-1, 0, &used_def)) )
     {
 	int r = GetLastError();
 	if ( r == ERROR_INSUFFICIENT_BUFFER ) {
diff --git a/qtools/qtextcodec.cpp b/qtools/qtextcodec.cpp
index 168445f..bd874bb 100644
--- a/qtools/qtextcodec.cpp
+++ b/qtools/qtextcodec.cpp
@@ -1192,7 +1192,7 @@ public:
             lenInOut = uc.length();
         int rlen = lenInOut*max_bytes_per_char;
         QCString rstr(rlen);
-        char* cursor = rstr.data();
+        char* cursor = rstr.rawData();
         char* s=0;
         int l = lenInOut;
         int lout = 0;
@@ -1881,7 +1881,7 @@ QCString QSimpleTextCodec::fromUnicode(const QString& uc, int& len ) const
     int i = len;
     int u;
     const QChar* ucp = uc.unicode();
-    char* rp = r.data();
+    char* rp = r.rawData();
     char* rmp = reverseMap->data();
     int rmsize = (int) reverseMap->size();
     while( i-- )
diff --git a/qtools/qtextstream.cpp b/qtools/qtextstream.cpp
index bae072d..4ebf59e 100644
--- a/qtools/qtextstream.cpp
+++ b/qtools/qtextstream.cpp
@@ -1443,17 +1443,17 @@ QTextStream &QTextStream::operator>>( QCString &str )
 	if ( i >= buflen-1 ) {
 	    if ( !dynbuf )  {			// create dynamic buffer
 		dynbuf = new QCString(buflen*2);
-		memcpy( dynbuf->data(), s, i );	// copy old data
+		memcpy( dynbuf->rawData(), s, i );	// copy old data
 	    } else if ( i >= (int)dynbuf->size()-1 ) {
 		dynbuf->resize( dynbuf->size()*2 );
 	    }
-	    s = dynbuf->data();
+	    s = dynbuf->rawData();
 	}
 	s[i++] = c;
 	c = ts_getc();
     }
     str.resize( i+1 );
-    memcpy( str.data(), s, i );
+    memcpy( str.rawData(), s, i );
     delete dynbuf;
     return *this;
 }
diff --git a/qtools/qthread.cpp b/qtools/qthread.cpp
index db2a0de..02c99f2 100644
--- a/qtools/qthread.cpp
+++ b/qtools/qthread.cpp
@@ -52,6 +52,7 @@ QThread::~QThread()
    QMutexLocker locker(&d->mutex);
    if (d->running && !d->finished)
       qWarning("QThread: Destroyed while thread is still running");
+   delete d;
 }
 
 bool QThread::isFinished() const
diff --git a/qtools/qtools.pro b/qtools/qtools.pro
deleted file mode 100644
index 6679fdb..0000000
--- a/qtools/qtools.pro
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# This file was generated from qtools.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE	= lib
-CONFIG		= warn_on staticlib debug
-HEADERS		= qarray.h \
-		  qbuffer.h \
-                  qcache.h \
-                  qgcache.h \
-		  qcollection.h \
-		  qconfig.h \
-		  qcstring.h \
-		  scstring.h \
-		  qdatastream.h \
-		  qdatetime.h \
-		  qdict.h \
-		  qdir.h \
-		  qfeatures.h \
-		  qfile.h \
-		  qfiledefs_p.h \
-		  qfileinfo.h \
-		  qgarray.h \
-		  qfeatures.h \
-		  qgdict.h \
-		  qgeneric.h \
-		  qglist.h \
-		  qglobal.h \
-		  qgstring.h \
-		  qgvector.h \
-		  qintdict.h \
-		  qiodevice.h \
-		  qinternallist.h \
-		  qptrdict.h \
-		  qqueue.h \
-		  qregexp.h \
-		  qshared.h \
-		  qsortedlist.h \
-		  qstack.h \
-		  qstring.h \
-		  qstringlist.h \
-		  qstrlist.h \
-		  qstrvec.h \
-		  qtextstream.h \
-		  qtl.h \
-		  qvaluelist.h \
-		  qvector.h \
-                  qxml.h \
-                  qvaluestack.h \
-                  qmap.h \
-		  qmodules.h \
-		  qthread.h \
-		  qthread_p.h \
-		  qmutex.h \
-		  qmutex_p.h \
-                  qutfcodec.h \
-		  qwaitcondition.h
-
-SOURCES		= qbuffer.cpp \
-		  qcollection.cpp \
-		  scstring.cpp \
-		  qdatastream.cpp \
-		  qdatetime.cpp \
-		  qdir.cpp \
-		  qfile.cpp \
-		  qfileinfo.cpp \
-		  qgarray.cpp \
-		  qgcache.cpp \
-		  qgdict.cpp \
-		  qglist.cpp \
-		  qglobal.cpp \
-		  qgstring.cpp \
-		  qgvector.cpp \
-		  qiodevice.cpp \
-		  qregexp.cpp \
-		  qstring.cpp \
-                  qtextstream.cpp \
-		  qtextcodec.cpp \
-		  qstringlist.cpp \
-	          qxml.cpp \
-                  qmap.cpp \
-		  qthread.cpp \
-		  qmutex.cpp \
-                  qutfcodec.cpp
-
-unix:SOURCES +=   qfile_unix.cpp \
-		  qdir_unix.cpp \
-		  qfileinfo_unix.cpp \
-		  qthread_unix.cpp \
-		  qmutex_unix.cpp \
-		  qwaitcondition_unix.cpp
-
-win32:SOURCES +=  qfile_win32.cpp \
-		  qdir_win32.cpp \
-		  qfileinfo_win32.cpp \
-		  qthread_win32.cpp \
-		  qmutex_win32.cpp \
-		  qwaitcondition_win32.cpp
-
-INCLUDEPATH = .
-#TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQT_LITE_UNICODE
-TMAKE_CXXFLAGS += -DQT_LITE_UNICODE
-win32:TMAKE_CXXFLAGS += -DQT_NODLL
-win32-g++:TMAKE_CXXFLAGS += -D__CYGWIN__ -DALL_STATIC
-OBJECTS_DIR = ../objects/qtools
-DESTDIR = ../lib
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/qtools/qtools.pro.in b/qtools/qtools.pro.in
index f287d34..ba8a086 100644
--- a/qtools/qtools.pro.in
+++ b/qtools/qtools.pro.in
@@ -7,7 +7,6 @@ HEADERS		= qarray.h \
 		  qcollection.h \
 		  qconfig.h \
 		  qcstring.h \
-		  scstring.h \
 		  qdatastream.h \
 		  qdatetime.h \
 		  qdict.h \
@@ -54,7 +53,7 @@ HEADERS		= qarray.h \
 
 SOURCES		= qbuffer.cpp \
 		  qcollection.cpp \
-		  scstring.cpp \
+		  qcstring.cpp \
 		  qdatastream.cpp \
 		  qdatetime.cpp \
 		  qdir.cpp \
diff --git a/qtools/qutfcodec.cpp b/qtools/qutfcodec.cpp
index c7094ad..a37e37f 100644
--- a/qtools/qutfcodec.cpp
+++ b/qtools/qutfcodec.cpp
@@ -203,14 +203,14 @@ public:
 	if ( headerdone ) {
 	    len_in_out = uc.length()*(int)sizeof(QChar);
 	    QCString d(len_in_out);
-	    memcpy(d.data(),uc.unicode(),len_in_out);
+	    memcpy(d.rawData(),uc.unicode(),len_in_out);
 	    return d;
 	} else {
 	    headerdone = TRUE;
 	    len_in_out = (1+uc.length())*(int)sizeof(QChar);
 	    QCString d(len_in_out);
-	    memcpy(d.data(),&QChar::byteOrderMark,sizeof(QChar));
-	    memcpy(d.data()+sizeof(QChar),uc.unicode(),uc.length()*sizeof(QChar));
+	    memcpy(d.rawData(),&QChar::byteOrderMark,sizeof(QChar));
+	    memcpy(d.rawData()+sizeof(QChar),uc.unicode(),uc.length()*sizeof(QChar));
 	    return d;
 	}
     }
diff --git a/qtools/scstring.cpp b/qtools/scstring.cpp
deleted file mode 100644
index 26d3a52..0000000
--- a/qtools/scstring.cpp
+++ /dev/null
@@ -1,798 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2004 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby 
- * granted. No representations are made about the suitability of this software 
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-// with this switch you can choose between the original qcstring implementation,
-// which implicitly shares data so copying is faster, but requires at least 12 bytes, and
-// the new implementation in this file, which has a smaller footprint (only 4 bytes for
-// an empty string), but always copies strings.
-#define SMALLSTRING
-
-#include "qcstring.h"
-#ifndef SMALLSTRING
-#include "qcstring.cpp"
-#else
-#define SCString QCString
-
-#include <qstring.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdatastream.h>
-
-
-SCString::SCString(int size)
-{
-  if (size>0)
-  {
-    m_data = (char *)malloc(size);
-    if (m_data)
-    {
-      if (size>1) memset(m_data,' ',size-1);
-      m_data[size-1]='\0';
-    }
-  }
-  else
-  {
-    m_data=0;
-  }
-}
-
-SCString::SCString( const SCString &s ) 
-{ 
-  duplicate(s);
-}
-
-SCString::SCString( const char *str )
-{ 
-  duplicate(str);
-}
-
-SCString::SCString( const char *str, uint maxlen )
-{ 
-  uint l;
-  if (str && ( l = QMIN(qstrlen(str),maxlen) )) 
-  { 
-    m_data=(char *)malloc(l+1);
-    strncpy(m_data,str,l+1);
-    m_data[l]='\0';
-  } 
-  else
-  {
-    m_data=0;
-  }
-}
-
-SCString::~SCString()
-{
-  if (m_data) free(m_data);
-  m_data=0;
-}
-
-SCString &SCString::assign( const char *str )
-{
-  if (m_data==str) return *this;
-  if (m_data) free(m_data);
-  duplicate(str);
-  return *this;
-}
-
-bool SCString::resize( uint newlen )
-{
-  if (newlen==0)
-  {
-    if (m_data) { free(m_data); m_data=0; }
-    return TRUE;
-  }
-  if (m_data==0) // newlen>0
-  {
-    m_data = (char *)malloc(newlen);
-  }
-  else
-  {
-    m_data = (char *)realloc(m_data,newlen);
-  }
-  if (m_data==0) return FALSE;
-  m_data[newlen-1]='\0';
-  return TRUE;
-}
-
-bool SCString::fill( char c, int len )
-{
-  uint l=length();
-  if (len<0) len=l;
-  if ((uint)len!=l) 
-  {
-    if (m_data) free(m_data);
-    if (len>0)
-    {
-      m_data=(char *)malloc(len+1);
-      if (m_data==0) return FALSE;
-      m_data[len]='\0';
-    }
-    else
-    {
-      m_data=0;
-    }
-  }
-  if (len>0)
-  {
-    uint i;
-    for (i=0;i<(uint)len;i++) m_data[i]=c;
-  }
-  return TRUE;
-}
-
-SCString &SCString::sprintf( const char *format, ... )
-{
-  va_list ap;
-  va_start( ap, format );
-  uint l = length();
-  const uint minlen=4095;
-  if (l<minlen)
-  {
-    if (m_data) 
-      m_data = (char *)realloc(m_data,minlen+1);
-    else
-      m_data = (char *)malloc(minlen+1);
-    m_data[minlen]='\0';
-  }
-  vsnprintf( m_data, minlen, format, ap );
-  resize( qstrlen(m_data) + 1 );              // truncate
-  va_end( ap );
-  return *this;
-}
-
-
-int SCString::find( char c, int index, bool cs ) const
-{
-  uint len = length();
-  if ( m_data==0 || (uint)index>len )               // index outside string
-    return -1;
-  register const char *d;
-  if ( cs ) // case sensitive
-  {  
-    d = strchr( m_data+index, c );
-  } 
-  else 
-  {
-    d = m_data+index;
-    c = tolower( (uchar) c );
-    while ( *d && tolower((uchar) *d) != c )
-      d++;
-    if ( !*d && c )                         // not found
-      d = 0;
-  }
-  return d ? (int)(d - m_data) : -1;
-}
-
-int SCString::find( const char *str, int index, bool cs ) const
-{
-  uint l = length();
-  if ( m_data==0 || (uint)index > l )         // index outside string
-    return -1;
-  if ( !str )                                 // no search string
-    return -1;
-  if ( !*str )                                // zero-length search string
-    return index;
-  register const char *d;
-  if ( cs )                                   // case sensitive
-  {              
-    d = strstr( m_data+index, str );
-  } 
-  else                                        // case insensitive
-  {
-    d = m_data+index;
-    int len = qstrlen( str );
-    while ( *d ) 
-    {
-      if ( qstrnicmp(d, str, len) == 0 )
-        break;
-      d++;
-    }
-    if ( !*d )                              // not found
-      d = 0;
-  }
-  return d ? (int)(d - m_data) : -1;
-}
-
-int SCString::find( const QCString &str, int index, bool cs ) const
-{
-  return find(str.data(),index,cs);
-}
-
-int SCString::find( const QRegExp &rx, int index ) const
-{
-  QString d = QString::fromLatin1( m_data );
-  return d.find( rx, index );
-}
-
-int SCString::findRev( char c, int index, bool cs) const
-{
-  const char *b = m_data;
-  const char *d;
-  uint len = length();
-  if ( b == 0 ) return -1;  // empty string
-  if ( index < 0 )          // neg index ==> start from end
-  {
-    if ( len == 0 ) return -1;
-    if ( cs ) 
-    {
-      d = strrchr( b, c );
-      return d ? (int)(d - b) : -1;
-    }
-    index = len;
-  } 
-  else if ( (uint)index > len )  // bad index
-  {      
-    return -1;
-  }
-  d = b+index;
-  if ( cs )   // case sensitive
-  {
-    while ( d >= b && *d != c )
-      d--;
-  } 
-  else  // case insensitive
-  {
-    c = tolower( (uchar) c );
-    while ( d >= b && tolower((uchar) *d) != c )
-      d--;
-  }
-  return d >= b ? (int)(d - b) : -1;
-}
-
-int SCString::findRev( const char *str, int index, bool cs) const
-{
-  int slen = qstrlen(str);
-  uint len = length();
-  if ( index < 0 )                           // neg index ==> start from end
-    index = len-slen;
-  else if ( (uint)index > len )              // bad index
-    return -1;
-  else if ( (uint)(index + slen) > len )     // str would be too long
-    index = len - slen;
-  if ( index < 0 )
-    return -1;
-
-  register char *d = m_data + index;
-  if ( cs )                     // case sensitive 
-  {      
-    for ( int i=index; i>=0; i-- )
-      if ( qstrncmp(d--,str,slen)==0 )
-        return i;
-  } 
-  else                          // case insensitive
-  {           
-    for ( int i=index; i>=0; i-- )
-      if ( qstrnicmp(d--,str,slen)==0 )
-        return i;
-  }
-  return -1;
-
-}
-
-int SCString::findRev( const QRegExp &rx, int index ) const
-{
-  QString d = QString::fromLatin1( m_data );
-  return d.findRev( rx, index );
-}
-
-int SCString::contains( char c, bool cs ) const
-{
-  int count = 0;
-  char *d = m_data;
-  if ( !d )
-    return 0;                               
-  if ( cs )                                // case sensitive
-  {
-    while ( *d )
-      if ( *d++ == c )
-        count++;                        
-  } 
-  else                                     // case insensitive
-  {
-    c = tolower( (uchar) c );
-    while ( *d ) {
-      if ( tolower((uchar) *d) == c )
-        count++;
-      d++;
-    }
-  }
-  return count;
-}
-
-int SCString::contains( const char *str, bool cs ) const
-{
-  int count = 0;
-  char *d = data();
-  if ( !d )
-    return 0;
-  int len = qstrlen( str );
-  while ( *d )   // counts overlapping strings
-  {
-    if ( cs ) 
-    {
-      if ( qstrncmp( d, str, len ) == 0 )
-        count++;
-    } 
-    else 
-    {
-      if ( qstrnicmp(d, str, len) == 0 )
-        count++;
-    }
-    d++;
-  }
-  return count;
-}
-
-int SCString::contains( const QRegExp &rx ) const
-{ 
-  QString d = QString::fromLatin1( m_data );
-  return d.contains( rx );
-}
-
-SCString SCString::left( uint len )  const
-{
-  if ( isEmpty() ) 
-  {
-    return SCString();
-  } 
-  else if ( len >= length() ) 
-  {
-    return *this;
-  } 
-  else 
-  {
-    SCString s( len+1 );
-    strncpy( s.data(), m_data, len );
-    *(s.data()+len) = '\0';
-    return s;
-  }
-}
-
-SCString SCString::right( uint len ) const
-{
-  if ( isEmpty() ) 
-  {
-    return SCString();
-  } 
-  else 
-  {
-    uint l = length();
-    if ( len > l ) len = l;
-    char *p = m_data + (l - len); 
-    return SCString( p ); 
-  }       
-}
-
-SCString SCString::mid( uint index, uint len) const
-{
-  uint slen = length();
-  if ( len == 0xffffffff ) len = slen-index;
-  if ( isEmpty() || index >= slen ) 
-  {
-    return SCString();
-  } 
-  else 
-  {
-    register char *p = data()+index;
-    SCString s( len+1 );
-    strncpy( s.data(), p, len );
-    *(s.data()+len) = '\0';
-    return s;
-  }
-}
-
-SCString SCString::lower() const
-{
-  SCString s( m_data );
-  register char *p = s.data();
-  if ( p ) 
-  {
-    while ( *p ) 
-    {
-      *p = tolower((uchar) *p);
-      p++;
-    }
-  }
-  return s;
-}
-
-SCString SCString::upper() const
-{
-  SCString s( m_data );
-  register char *p = s.data();
-  if ( p ) {
-    while ( *p ) {
-      *p = toupper((uchar)*p);
-      p++;
-    }
-  }
-  return s;
-}
-
-SCString SCString::stripWhiteSpace()	const
-{
-  if ( isEmpty() )                            // nothing to do
-    return *this;
-
-  register char *s = m_data;
-  int reslen = length();
-  if ( !isspace((uchar) s[0]) && !isspace((uchar) s[reslen-1]) )
-    return *this;                           // returns a copy
-
-  SCString result(s);
-  s = result.data(); 
-  int start = 0;
-  int end = reslen - 1;
-  while ( isspace((uchar) s[start]) )                 // skip white space from start
-    start++; 
-  if ( s[start] == '\0' ) 
-  {                                                   // only white space
-    return SCString();
-  }
-  while ( end && isspace((uchar) s[end]) )            // skip white space from end
-    end--;
-  end -= start - 1;
-  memmove( result.data(), &s[start], end );
-  result.resize( end + 1 );
-  return result;
-}
-
-SCString SCString::simplifyWhiteSpace() const
-{
-  if ( isEmpty() )                            // nothing to do
-    return *this;
-
-  SCString result( length()+1 );
-  char *from  = data();
-  char *to    = result.data();
-  char *first = to;
-  while ( TRUE ) 
-  {
-    while ( *from && isspace((uchar) *from) )
-      from++;
-    while ( *from && !isspace((uchar)*from) )
-      *to++ = *from++;
-    if ( *from )
-      *to++ = 0x20;                       // ' '
-    else
-      break;
-  }
-  if ( to > first && *(to-1) == 0x20 )
-    to--;
-  *to = '\0';
-  result.resize( (int)((long)to - (long)result.data()) + 1 );
-  return result;
-}
-
-SCString &SCString::insert( uint index, const char *s )
-{   
-  int len = qstrlen(s);
-  if ( len == 0 )
-    return *this;
-  uint olen = length();
-  int nlen = olen + len;                      
-  if ( index >= olen )  // insert after end of string
-  {                     
-    m_data = (char *)realloc(m_data,nlen+index-olen+1);
-    if ( m_data ) 
-    {
-      memset( m_data+olen, ' ', index-olen );
-      memcpy( m_data+index, s, len+1 );
-    }
-  } 
-  else if ( (m_data = (char *)realloc(m_data,nlen+1)) )  // normal insert
-  { 
-    memmove( m_data+index+len, m_data+index, olen-index+1 );
-    memcpy( m_data+index, s, len );
-  }
-  return *this;
-}
-
-SCString &SCString::insert( uint index, char c )        // insert char
-{
-  char buf[2];
-  buf[0] = c;
-  buf[1] = '\0';
-  return insert( index, buf );
-}
-
-SCString& SCString::operator+=( const char *str )
-{
-  if ( !str ) return *this;  // nothing to append
-  uint len1 = length();
-  uint len2 = qstrlen(str);
-  char *newData = (char *)realloc( m_data, len1 + len2 + 1 );
-  if (newData)
-  {
-    m_data = newData;
-    memcpy( m_data + len1, str, len2 + 1 );
-  }
-  return *this;      
-}
-
-SCString &SCString::operator+=( char c )
-{
-  uint len = length();
-  char *newData = (char *)realloc( m_data, length()+2 );
-  if (newData)
-  {
-    m_data = newData;
-    m_data[len] = c;
-    m_data[len+1] = '\0';
-  }
-  return *this;
-}
-
-SCString &SCString::remove( uint index, uint len )
-{
-  uint olen = length();
-  if ( index + len >= olen ) // range problems
-  {             
-    if ( index < olen )  // index ok
-    {                  
-      resize( index+1 );
-    }
-  } 
-  else if ( len != 0 ) 
-  {
-    memmove( m_data+index, m_data+index+len, olen-index-len+1 );
-    resize( olen-len+1 );
-  }
-  return *this;
-}
-
-SCString &SCString::replace( uint index, uint len, const char *s )
-{
-  remove( index, len );
-  insert( index, s );
-  return *this;
-}
-
-SCString &SCString::replace( const QRegExp &rx, const char *str )
-{
-  QString d = QString::fromLatin1( m_data );
-  QString r = QString::fromLatin1( str );
-  d.replace( rx, r );
-  return assign(d.ascii());
-}
-
-long  SCString::toLong( bool *ok ) const
-{
-  QString s(m_data);
-  return s.toLong(ok);
-}
-
-ulong SCString::toULong( bool *ok ) const
-{
-  QString s(m_data);
-  return s.toULong(ok);
-}
-
-short SCString::toShort( bool *ok )	const
-{
-  QString s(m_data);
-  return s.toShort(ok);
-}
-
-ushort SCString::toUShort( bool *ok ) const
-{
-  QString s(m_data);
-  return s.toUShort(ok);
-}
-
-int SCString::toInt( bool *ok ) const
-{
-  QString s(m_data);
-  return s.toInt(ok);
-}
-
-uint SCString::toUInt( bool *ok ) const
-{
-  QString s(m_data);
-  return s.toUInt(ok);
-}
-
-SCString &SCString::setNum( long n )
-{
-  char buf[20];
-  register char *p = &buf[19];
-  bool neg;
-  if ( n < 0 ) 
-  {
-    neg = TRUE;
-    n = -n;
-  } 
-  else 
-  {
-    neg = FALSE;
-  }
-  *p = '\0';
-  do 
-  {
-    *--p = ((int)(n%10)) + '0';
-    n /= 10;
-  } while ( n );
-  if ( neg ) *--p = '-';
-  operator=( p );
-  return *this;
-}
-
-SCString &SCString::setNum( ulong n )
-{
-  char buf[20];
-  register char *p = &buf[19];
-  *p = '\0';
-  do 
-  {
-    *--p = ((int)(n%10)) + '0';
-    n /= 10;
-  } while ( n );
-  operator=( p );
-  return *this;
-}
-
-void SCString::msg_index( uint index )
-{
-#if defined(CHECK_RANGE)
-    qWarning( "SCString::at: Absolute index %d out of range", index );
-#else
-    Q_UNUSED( index )
-#endif
-}
-
-bool SCString::stripPrefix(const char *prefix)
-{
-  if (prefix==0) return FALSE;
-  uint plen   = qstrlen(prefix);
-  if (m_data && qstrncmp(prefix,m_data,plen)==0) // prefix matches
-  {
-    uint len    = qstrlen(m_data);
-    uint newlen = len-plen+1;
-    qmemmove(m_data,m_data+plen,newlen);
-    resize(newlen);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-void *qmemmove( void *dst, const void *src, uint len )
-{
-    register char *d;
-    register char *s;
-    if ( dst > src ) {
-	d = (char *)dst + len - 1;
-	s = (char *)src + len - 1;
-	while ( len-- )
-	    *d-- = *s--;
-    } else if ( dst < src ) {
-	d = (char *)dst;
-	s = (char *)src;
-	while ( len-- )
-	    *d++ = *s++;
-    }
-    return dst;
-}
-
-char *qstrdup( const char *str )
-{
-    if ( !str )
-	return 0;
-    char *dst = new char[strlen(str)+1];
-    CHECK_PTR( dst );
-    return strcpy( dst, str );
-}
-
-char *qstrncpy( char *dst, const char *src, uint len )
-{
-    if ( !src )
-	return 0;
-    strncpy( dst, src, len );
-    if ( len > 0 )
-	dst[len-1] = '\0';
-    return dst;
-}
-
-int qstricmp( const char *str1, const char *str2 )
-{
-    register const uchar *s1 = (const uchar *)str1;
-    register const uchar *s2 = (const uchar *)str2;
-    int res;
-    uchar c;
-    if ( !s1 || !s2 )
-	return s1 == s2 ? 0 : (int)((long)s2 - (long)s1);
-    for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
-	if ( !c )				// strings are equal
-	    break;
-    return res;
-}
-
-int qstrnicmp( const char *str1, const char *str2, uint len )
-{
-    register const uchar *s1 = (const uchar *)str1;
-    register const uchar *s2 = (const uchar *)str2;
-    int res;
-    uchar c;
-    if ( !s1 || !s2 )
-	return (int)((long)s2 - (long)s1);
-    for ( ; len--; s1++, s2++ ) {
-	if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
-	    return res;
-	if ( !c )				// strings are equal
-	    break;
-    }
-    return 0;
-}
-
-#ifndef QT_NO_DATASTREAM
-
-QDataStream &operator<<( QDataStream &s, const QByteArray &a )
-{
-    return s.writeBytes( a.data(), a.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, QByteArray &a )
-{
-    Q_UINT32 len;
-    s >> len;					// read size of array
-    if ( len == 0 || s.eof() ) {		// end of file reached
-	a.resize( 0 );
-	return s;
-    }
-    if ( !a.resize( (uint)len ) ) {		// resize array
-#if defined(CHECK_NULL)
-	qWarning( "QDataStream: Not enough memory to read QByteArray" );
-#endif
-	len = 0;
-    }
-    if ( len > 0 )				// not null array
-	s.readRawBytes( a.data(), (uint)len );
-    return s;
-}
-
-QDataStream &operator<<( QDataStream &s, const SCString &str )
-{
-    return s.writeBytes( str.data(), str.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, SCString &str )
-{
-    Q_UINT32 len;
-    s >> len;					// read size of string
-    if ( len == 0 || s.eof() ) {		// end of file reached
-	str.resize( 0 );
-	return s;
-    }
-    if ( !str.resize( (uint)len )) {// resize string
-#if defined(CHECK_NULL)
-	qWarning( "QDataStream: Not enough memory to read QCString" );
-#endif
-	len = 0;
-    }
-    if ( len > 0 )				// not null array
-	s.readRawBytes( str.data(), (uint)len );
-    return s;
-}
-
-#endif //QT_NO_DATASTREAM
-
-
-
-#endif
diff --git a/qtools/scstring.h b/qtools/scstring.h
deleted file mode 100644
index a9b462c..0000000
--- a/qtools/scstring.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2004 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby 
- * granted. No representations are made about the suitability of this software 
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef SCSTRING_H
-#define SCSTRING_H
-
-#include <stdlib.h>
-
-class QRegExp;
-
-/** This is an alternative implementation of QCString. It provides basically
- *  the same functions but uses less memory for administration. This class
- *  is just a wrapper around a plain C string requiring only 4 bytes "overhead".
- *  QCString features sharing of data and stores the string length, but 
- *  requires 4 + 12 bytes for this (even for the empty string). As doxygen 
- *  uses a LOT of string during a run it saves a lot of memory to use a 
- *  more memory efficient implementation at the cost of relatively low
- *  runtime overhead.
- */
-class SCString 
-{
-public:
-    SCString() : m_data(0) {}		// make null string
-    SCString( const SCString &s );
-    SCString( int size );
-    SCString( const char *str );
-    SCString( const char *str, uint maxlen );
-    ~SCString();
-
-    SCString    &operator=( const SCString &s );// deep copy
-    SCString    &operator=( const char *str );	// deep copy
-
-    bool        isNull()        const;
-    bool	isEmpty()	const;
-    uint	length()	const;
-    uint        size()          const { return m_data ? length()+1 : 0; }
-    char *      data()          const { return m_data; }
-    bool	resize( uint newlen );
-    bool	truncate( uint pos );
-    bool	fill( char c, int len = -1 );
-
-    SCString	copy()	const;
-
-    SCString    &sprintf( const char *format, ... );
-
-    int		find( char c, int index=0, bool cs=TRUE ) const;
-    int		find( const char *str, int index=0, bool cs=TRUE ) const;
-    int		find( const QRegExp &, int index=0 ) const;
-    int         find( const QCString &str, int index, bool cs ) const;
-    int		findRev( char c, int index=-1, bool cs=TRUE) const;
-    int		findRev( const char *str, int index=-1, bool cs=TRUE) const;
-    int		findRev( const QRegExp &, int index=-1 ) const;
-    int		contains( char c, bool cs=TRUE ) const;
-    int		contains( const char *str, bool cs=TRUE ) const;
-    int		contains( const QRegExp & ) const;
-    bool        stripPrefix(const char *prefix);
-
-    SCString	left( uint len )  const;
-    SCString	right( uint len ) const;
-    SCString	mid( uint index, uint len=0xffffffff) const;
-
-    SCString	lower() const;
-    SCString	upper() const;
-
-    SCString	stripWhiteSpace()	const;
-    SCString	simplifyWhiteSpace()	const;
-
-    SCString    &assign( const char *str );
-    SCString    &insert( uint index, const char * );
-    SCString    &insert( uint index, char );
-    SCString    &append( const char *s );
-    SCString    &prepend( const char *s );
-    SCString    &remove( uint index, uint len );
-    SCString    &replace( uint index, uint len, const char * );
-    SCString    &replace( const QRegExp &, const char * );
-
-    short	toShort( bool *ok=0 )	const;
-    ushort	toUShort( bool *ok=0 )	const;
-    int		toInt( bool *ok=0 )	const;
-    uint	toUInt( bool *ok=0 )	const;
-    long	toLong( bool *ok=0 )	const;
-    ulong	toULong( bool *ok=0 )	const;
-
-    SCString    &setNum( short );
-    SCString    &setNum( ushort );
-    SCString    &setNum( int );
-    SCString    &setNum( uint );
-    SCString    &setNum( long );
-    SCString    &setNum( ulong );
-    QCString    &setNum( float, char f='g', int prec=6 );
-    QCString    &setNum( double, char f='g', int prec=6 );
-
-		operator const char *() const;
-    SCString    &operator+=( const char *str );
-    SCString    &operator+=( char c );
-    char &at( uint index ) const;
-    char &operator[]( int i ) const { return at(i); }
-    
-  private:
-    static void msg_index( uint );
-    void duplicate( const SCString &s );
-    void duplicate( const char *str);
-    SCString &duplicate( const char *str, int);
-
-    char *      m_data;
-};
-
-inline char &SCString::at( uint index ) const
-{
-  return m_data[index];
-}
-
-inline void SCString::duplicate( const SCString &s )
-{
-  if (!s.isEmpty()) 
-  {
-    uint l = strlen(s.data());
-    m_data = (char *)malloc(l+1);
-    if (m_data) memcpy(m_data,s.data(),l+1);
-  }
-  else 
-    m_data=0; 
-}
-inline void SCString::duplicate( const char *str)
-{
-  if (str && str[0]!='\0') 
-  {
-    uint l = strlen(str);
-    m_data = (char *)malloc(l+1);
-    if (m_data) memcpy(m_data,str,l+1);
-  }
-  else 
-    m_data=0;
-}
-inline SCString &SCString::duplicate( const char *str, int)
-{
-  if (m_data) free(m_data);
-  duplicate(str);
-  return *this;
-}
-
-#endif
-
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index 6b7b841..0000000
--- a/src/Makefile
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-
-#
-#
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby
-# granted. No representations are made about the suitability of this software
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-
-GENERATED_SRC = ../generated_src/doxygen
-
-all: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile
-	$(MAKE) -f Makefile.libdoxycfg $@
-	$(MAKE) -f Makefile.libdoxygen $@
-	$(MAKE) -f Makefile.doxygen    $@
-
-Makefile.libdoxygen: libdoxygen.pro libdoxygen.t
-	$(ENV) $(PERL) "$(TMAKE)" libdoxygen.pro >Makefile.libdoxygen
-	echo 'HEADERS += ' `ls -1 translator_??.h`  >>Makefile.libdoxygen
-
-Makefile.libdoxycfg: libdoxycfg.pro libdoxycfg.t
-	$(ENV) $(PERL) "$(TMAKE)" libdoxycfg.pro >Makefile.libdoxycfg
-
-Makefile.doxygen: doxygen.pro
-	$(ENV) $(PERL) "$(TMAKE)" doxygen.pro >Makefile.doxygen
-
-tmake:
-	$(ENV) $(PERL) "$(TMAKE)" libdoxygen.pro >Makefile.libdoxygen
-	$(ENV) $(PERL) "$(TMAKE)" libdoxycfg.pro >Makefile.libdoxycfg
-	$(ENV) $(PERL) "$(TMAKE)" doxygen.pro >Makefile.doxygen
-
-# clean objects
-clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen
-	$(MAKE) -f Makefile.libdoxygen clean
-	$(MAKE) -f Makefile.libdoxycfg clean
-	$(MAKE) -f Makefile.doxygen    clean
-
-# also clean flex/bison generated files
-distclean: clean
-	-cd $(GENERATED_SRC) && $(RM) scanner.cpp code.cpp config.cpp pre.cpp constexp.cpp \
-	       ce_parse.cpp ce_parse.h tag.cpp commentscan.cpp \
-	       declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \
-	       pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp \
-	       vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp
-
-FORCE:
diff --git a/src/Makefile.libdoxycfg b/src/Makefile.libdoxycfg
deleted file mode 100644
index da7416f..0000000
--- a/src/Makefile.libdoxycfg
+++ /dev/null
@@ -1,137 +0,0 @@
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#############################################################################
-# Makefile for building ../lib/libdoxycfg.a
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: libdoxycfg
-#    Template: libdoxycfg.t
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I../generated_src/doxygen -I. -I../qtools -I/opt/local/include
-AR	=	ar cq
-RANLIB	=	ranlib
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	config.h \
-		configoptions.h \
-		portable.h
-SOURCES =	../generated_src/doxygen/config.cpp \
-		../generated_src/doxygen/configoptions.cpp \
-		portable.cpp \
-		portable_c.c
-OBJECTS =	../objects/doxygen/config.o \
-		../objects/doxygen/configoptions.o \
-		../objects/doxygen/portable.o \
-		../objects/doxygen/portable_c.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../lib/libdoxycfg.a
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-staticlib: $(TARGET)
-
-$(TARGET): $(OBJECTS) $(OBJMOC) 
-	-rm -f $(TARGET)
-	$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)
-	ranlib $(TARGET)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake libdoxycfg.pro
-
-dist:
-	$(TAR) libdoxycfg.tar libdoxycfg.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) libdoxycfg.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../objects/doxygen/config.o: ../generated_src/doxygen/config.cpp
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/doxygen/config.o ../generated_src/doxygen/config.cpp
-
-../objects/doxygen/configoptions.o: ../generated_src/doxygen/configoptions.cpp
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/doxygen/configoptions.o ../generated_src/doxygen/configoptions.cpp
-
-../objects/doxygen/portable.o: portable.cpp \
-		portable.h \
-		debug.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/doxygen/portable.o portable.cpp
-
-../objects/doxygen/portable_c.o: portable_c.c
-	$(CC) -c $(CFLAGS) $(INCPATH) -o ../objects/doxygen/portable_c.o portable_c.c
-
-
-LEX     =   /usr/bin/flex
-YACC    =   /opt/local/bin/bison
-PYTHON  =   /opt/local/bin/python2
-
-
-####################
-
-../generated_src/doxygen/config.cpp: config.l \
-		config.h \
-		ftextstream.h \
-		version.h \
-		portable.h \
-		util.h \
-		types.h \
-		sortdict.h \
-		docparser.h \
-		docvisitor.h \
-		htmlattrib.h \
-		message.h \
-		configoptions.h
-	$(LEX) -PconfigYY -t config.l >../generated_src/doxygen/config.cpp 
-
-../generated_src/doxygen/configoptions.cpp: config.xml configgen.py
-	$(PYTHON) configgen.py -cpp config.xml >../generated_src/doxygen/configoptions.cpp
-
diff --git a/src/cite.cpp b/src/cite.cpp
index a33f12f..2ea6300 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -21,20 +21,11 @@
 #include "util.h"
 #include "language.h"
 #include "ftextstream.h"
+#include "resourcemgr.h"
 #include <qdir.h>
 
 //--------------------------------------------------------------------------
 
-static const char *doxygen_bst =
-#include "doxygen.bst.h"
-;
-
-static const char *bib2xhtml_pl =
-#include "bib2xhtml.pl.h"
-;
-
-//--------------------------------------------------------------------------
-
 const QCString CiteConsts::fileName("citelist");
 const QCString CiteConsts::anchorPrefix("CITEREF_");
 const QCString bibTmpFile("bibTmpFile_");
@@ -62,12 +53,16 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
     unit = "chapter";
   t << "% Bibliography\n"
        "\\newpage\n"
-       "\\phantomsection\n"
-       "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"
-       "\\bibliographystyle{" << style << "}\n"
+       "\\phantomsection\n";
+  bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  if (!pdfHyperlinks)
+  {
+    t << "\\clearemptydoublepage\n";
+    t << "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n";
+  }
+  t << "\\bibliographystyle{" << style << "}\n"
        "\\bibliography{";
   QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
-  QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
   int i = 0;
   const char *bibdata = citeDataList.first();
   while (bibdata)
@@ -87,8 +82,12 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
     }
     bibdata = citeDataList.next();
   }
-  t << "}\n"
-       "\n";
+  t << "}\n";
+  if (pdfHyperlinks)
+  {
+    t << "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n";
+  }
+  t << "\n";
 }
 
 void CiteDict::insert(const char *label)
@@ -144,26 +143,12 @@ void CiteDict::generatePage() const
   f.close();
 
   // 2. generate bib2xhtml
-  QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
-  f.setName(bib2xhtmlFile);
-  QCString bib2xhtml = bib2xhtml_pl;
-  if (!f.open(IO_WriteOnly)) 
-  {
-    err("could not open file %s for writing\n",bib2xhtmlFile.data());
-  }
-  f.writeBlock(bib2xhtml, bib2xhtml.length());
-  f.close();
+  QCString bib2xhtmlFile  = outputDir+"/bib2xhtml.pl";
+  ResourceMgr::instance().copyResource("bib2xhtml.pl",outputDir);
 
   // 3. generate doxygen.bst
   QCString doxygenBstFile = outputDir+"/doxygen.bst";
-  QCString bstData = doxygen_bst;
-  f.setName(doxygenBstFile);
-  if (!f.open(IO_WriteOnly)) 
-  {
-    err("could not open file %s for writing\n",doxygenBstFile.data());
-  }
-  f.writeBlock(bstData, bstData.length());
-  f.close();
+  ResourceMgr::instance().copyResource("doxygen.bst",outputDir);
 
   // 4. for all formats we just copy the bib files to as special output directory
   //    so bibtex can find them without path (bibtex doesn't support paths or
@@ -202,8 +187,15 @@ void CiteDict::generatePage() const
 
   // 5. run bib2xhtml perl script on the generated file which will insert the
   //    bibliography in citelist.doc
-  portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
-                         citeListFile+"\"");
+  int exitCode;
+  portable_sysTimerStop();
+  if ((exitCode=portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
+                         citeListFile+"\"")) != 0)
+  {
+    err("Problems running bibtex. Verify that the command 'perl --version' works from the command line. Exit code: %d\n",
+        exitCode);
+  }
+  portable_sysTimerStop();
 
   QDir::setCurrent(oldDir);
 
@@ -218,7 +210,7 @@ void CiteDict::generatePage() const
   QCString doc;
   QFileInfo fi(citeListFile);
   QCString input(fi.size()+1);
-  f.readBlock(input.data(),fi.size());
+  f.readBlock(input.rawData(),fi.size());
   f.close();
   input.at(fi.size())='\0';
   int p=0,s;
@@ -294,7 +286,6 @@ void CiteDict::generatePage() const
   thisDir.remove(citeListFile);
   thisDir.remove(doxygenBstFile);
   thisDir.remove(bib2xhtmlFile);
-  bibdata = citeDataList.first();
   // we might try to remove too many files as empty files didn't get a coresponding new file
   // but the remove function does not emit an error for it and we don't catch the error return
   // so no problem.
diff --git a/src/classdef.cpp b/src/classdef.cpp
index c36a83f..3a103af 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -854,13 +854,14 @@ void ClassDef::setIncludeFile(FileDef *fd,
 
 static void searchTemplateSpecs(/*in*/  Definition *d,
                                 /*out*/ QList<ArgumentList> &result,
-                                /*out*/ QCString &name)
+                                /*out*/ QCString &name,
+                                /*in*/  SrcLangExt lang)
 {
   if (d->definitionType()==Definition::TypeClass)
   {
     if (d->getOuterScope())
     {
-      searchTemplateSpecs(d->getOuterScope(),result,name);
+      searchTemplateSpecs(d->getOuterScope(),result,name,lang);
     }
     ClassDef *cd=(ClassDef *)d;
     if (!name.isEmpty()) name+="::";
@@ -876,7 +877,7 @@ static void searchTemplateSpecs(/*in*/  Definition *d,
       result.append(cd->templateArguments());
       if (!isSpecialization)
       {
-        name+=tempArgListToString(cd->templateArguments());
+        name+=tempArgListToString(cd->templateArguments(),lang);
       }
     }
   }
@@ -887,11 +888,11 @@ static void searchTemplateSpecs(/*in*/  Definition *d,
 }
 
 static void writeTemplateSpec(OutputList &ol,Definition *d,
-            const QCString &type)
+            const QCString &type,SrcLangExt lang)
 {
   QList<ArgumentList> specs;
   QCString name;
-  searchTemplateSpecs(d,specs,name);
+  searchTemplateSpecs(d,specs,name,lang);
   if (specs.count()>0) // class has template scope specifiers
   {
     ol.startSubsubsection();
@@ -962,7 +963,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
 
   if (getLanguage()==SrcLangExt_Cpp)
   {
-    writeTemplateSpec(ol,this,compoundTypeString());
+    writeTemplateSpec(ol,this,compoundTypeString(),getLanguage());
   }
 
   // repeat brief description
@@ -1179,7 +1180,7 @@ int ClassDef::countInheritanceNodes()
 void ClassDef::writeInheritanceGraph(OutputList &ol)
 {
   // count direct inheritance relations
-  int count=countInheritanceNodes();
+  const int count=countInheritanceNodes();
 
   bool renderDiagram = FALSE;
   if (Config_getBool("HAVE_DOT") &&
@@ -1216,7 +1217,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
     ol.disableAllBut(OutputGenerator::Man);
   }
 
-  if (m_impl->inherits && (count=m_impl->inherits->count())>0)
+  if (m_impl->inherits && m_impl->inherits->count()>0)
   {
     ol.startParagraph();
     //parseText(ol,theTranslator->trInherits()+" ");
@@ -1242,24 +1243,6 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
 
         if (cd->isLinkable())
         {
-          if (!Config_getString("GENERATE_TAGFILE").isEmpty())
-          {
-            Doxygen::tagFile << "    <base";
-            if (bcd->prot==Protected)
-            {
-              Doxygen::tagFile << " protection=\"protected\"";
-            }
-            else if (bcd->prot==Private)
-            {
-              Doxygen::tagFile << " protection=\"private\"";
-            }
-            if (bcd->virt==Virtual)
-            {
-              Doxygen::tagFile << " virtualness=\"virtual\"";
-            }
-            Doxygen::tagFile << ">" << convertToXML(cd->name())
-                             << "</base>" << endl;
-          }
           ol.writeObjectLink(cd->getReference(),
                              cd->getOutputFileBase(),
                              cd->anchor(),
@@ -1281,7 +1264,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
   }
 
   // write subclasses
-  if (m_impl->inheritedBy && (count=m_impl->inheritedBy->count())>0)
+  if (m_impl->inheritedBy && m_impl->inheritedBy->count()>0)
   {
     ol.startParagraph();
     QCString inheritLine = theTranslator->trInheritedByList(m_impl->inheritedBy->count());
@@ -1573,36 +1556,118 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
   ol.popGeneratorState();
 }
 
-void ClassDef::writeTagFileMarker()
+void ClassDef::writeTagFile(FTextStream &tagFile)
 {
-  // write section to the tag file
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+  if (!isLinkableInProject()) return;
+  tagFile << "  <compound kind=\"" << compoundTypeString();
+  tagFile << "\"";
+  if (isObjectiveC()) { tagFile << " objc=\"yes\""; }
+  tagFile << ">" << endl;
+  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
+  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
+  if (!anchor().isEmpty())
   {
-    Doxygen::tagFile << "  <compound kind=\"" << compoundTypeString();
-    Doxygen::tagFile << "\"";
-    if (isObjectiveC()) { Doxygen::tagFile << " objc=\"yes\""; }
-    Doxygen::tagFile << ">" << endl;
-    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
-    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
-    if (!anchor().isEmpty())
-    {
-      Doxygen::tagFile << "    <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
-    }
-    QCString idStr = id();
-    if (!idStr.isEmpty())
+    tagFile << "    <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
+  }
+  QCString idStr = id();
+  if (!idStr.isEmpty())
+  {
+    tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+  }
+  if (m_impl->tempArgs)
+  {
+    ArgumentListIterator ali(*m_impl->tempArgs);
+    Argument *a;
+    for (;(a=ali.current());++ali)
     {
-      Doxygen::tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+      tagFile << "    <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
     }
-    if (m_impl->tempArgs)
+  }
+  if (m_impl->inherits)
+  {
+    BaseClassListIterator it(*m_impl->inherits);
+    BaseClassDef *ibcd;
+    for (it.toFirst();(ibcd=it.current());++it)
     {
-      ArgumentListIterator ali(*m_impl->tempArgs);
-      Argument *a;
-      for (;(a=ali.current());++ali)
+      ClassDef *cd=ibcd->classDef;
+      if (cd && cd->isLinkable())
       {
-        Doxygen::tagFile << "    <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
+        if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+        {
+          tagFile << "    <base";
+          if (ibcd->prot==Protected)
+          {
+            tagFile << " protection=\"protected\"";
+          }
+          else if (ibcd->prot==Private)
+          {
+            tagFile << " protection=\"private\"";
+          }
+          if (ibcd->virt==Virtual)
+          {
+            tagFile << " virtualness=\"virtual\"";
+          }
+          tagFile << ">" << convertToXML(cd->name()) << "</base>" << endl;
+        }
       }
     }
   }
+  QListIterator<LayoutDocEntry> eli(
+      LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
+  LayoutDocEntry *lde;
+  for (eli.toFirst();(lde=eli.current());++eli)
+  {
+    switch (lde->kind())
+    {
+      case LayoutDocEntry::ClassNestedClasses:
+        {
+          if (m_impl->innerClasses)
+          {
+            ClassSDict::Iterator cli(*m_impl->innerClasses);
+            ClassDef *innerCd;
+            for (cli.toFirst();(innerCd=cli.current());++cli)
+            {
+              if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
+                  protectionLevelVisible(innerCd->protection()) &&
+                  !innerCd->isEmbeddedInOuterScope()
+                 )
+              {
+                tagFile << "    <class kind=\"" << innerCd->compoundTypeString() <<
+                  "\">" << convertToXML(innerCd->name()) << "</class>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberDecl:
+        {
+          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+          MemberList * ml = getMemberList(lmd->type);
+          if (ml)
+          {
+            ml->writeTagFile(tagFile);
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberGroups:
+        {
+          if (m_impl->memberGroupSDict)
+          {
+            MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
+            MemberGroup *mg;
+            for (;(mg=mgli.current());++mgli)
+            {
+              mg->writeTagFile(tagFile);
+            }
+          }
+        }
+        break;
+     default:
+        break;
+    }
+  }
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "  </compound>" << endl;
 }
 
 /** Write class documentation inside another container (i.e. a group) */
@@ -1721,9 +1786,6 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
     ol.endIndent();
   }
   ol.popGeneratorState();
-
-  // part 4: write tag file information
-  writeTagFileMarker();
 }
 
 void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
@@ -1809,12 +1871,6 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
       ol.startMemberList();
       found=TRUE;
     }
-    if (!Config_getString("GENERATE_TAGFILE").isEmpty() &&
-        !isReference())  // skip classes found in tag files
-    {
-      Doxygen::tagFile << "    <class kind=\"" << compoundTypeString()
-        << "\">" << convertToXML(name()) << "</class>" << endl;
-    }
     ol.startMemberDeclaration();
     ol.startMemberItem(anchor(),FALSE);
     QCString ctype = compoundTypeString();
@@ -1902,8 +1958,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
   pageType += compoundTypeString();
   toupper(pageType.at(1));
 
-  writeTagFileMarker();
-
   Doxygen::indexList->addIndexItem(this,0);
 
   if (Doxygen::searchIndex)
@@ -2016,11 +2070,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
     }
   }
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
-  {
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
   ol.endContents();
 }
 
@@ -2053,9 +2102,16 @@ QCString ClassDef::title() const
   }
   else
   {
-    pageTitle = theTranslator->trCompoundReference(displayName(),
-              m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType,
-              m_impl->tempArgs != 0);
+    if (Config_getBool("HIDE_COMPOUND_REFERENCE"))
+    {
+      pageTitle = displayName();
+    }
+    else
+    {
+      pageTitle = theTranslator->trCompoundReference(displayName(),
+                m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType,
+                m_impl->tempArgs != 0);
+    }
   }
   return pageTitle;
 }
@@ -2617,7 +2673,7 @@ bool ClassDef::isLinkable() const
   }
   else
   {
-    return isLinkableInProject() || isReference();
+    return isReference() || isLinkableInProject();
   }
 }
 
@@ -3067,18 +3123,19 @@ void ClassDef::mergeCategory(ClassDef *category)
           Protection prot = mi->prot;
           //if (makePrivate) prot = Private;
           MemberDef *newMd = mi->memberDef->deepCopy();
-          //printf("Copying member %s\n",mi->memberDef->name().data());
-          newMd->moveTo(this);
-
-          MemberInfo *newMi=new MemberInfo(newMd,prot,mi->virt,mi->inherited);
-          newMi->scopePath=mi->scopePath;
-          newMi->ambigClass=mi->ambigClass;
-          newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope;
-          newMni->append(newMi);
-
-          // also add the newly created member to the global members list
           if (newMd)
           {
+            //printf("Copying member %s\n",mi->memberDef->name().data());
+            newMd->moveTo(this);
+
+            MemberInfo *newMi=new MemberInfo(newMd,prot,mi->virt,mi->inherited);
+            newMi->scopePath=mi->scopePath;
+            newMi->ambigClass=mi->ambigClass;
+            newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope;
+            newMni->append(newMi);
+
+            // also add the newly created member to the global members list
+
             MemberName *mn;
             QCString name = newMd->name();
             if ((mn=Doxygen::memberNameSDict->find(name)))
@@ -3091,17 +3148,17 @@ void ClassDef::mergeCategory(ClassDef *category)
               mn->append(newMd);
               Doxygen::memberNameSDict->append(name,mn);
             }
+          
+            newMd->setCategory(category);
+            newMd->setCategoryRelation(mi->memberDef);
+            mi->memberDef->setCategoryRelation(newMd);
+            if (makePrivate || isExtension)
+            {
+             newMd->makeImplementationDetail();
+            }
+            internalInsertMember(newMd,prot,FALSE);
           }
-
-          newMd->setCategory(category);
-          newMd->setCategoryRelation(mi->memberDef);
-          mi->memberDef->setCategoryRelation(newMd);
-          if (makePrivate || isExtension)
-          {
-            newMd->makeImplementationDetail();
-          }
-          internalInsertMember(newMd,prot,FALSE);
-        }
+		}
 
         // add it to the dictionary
         dstMnd->append(newMni->memberName(),newMni);
@@ -3767,7 +3824,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
   //{
   //  clName = clName.left(clName.length()-2);
   //}
-  //printf("m_impl->lang=%d clName=%s\n",m_impl->lang,clName.data());
+  //printf("m_impl->lang=%d clName=%s isSpecialization=%d\n",getLanguage(),clName.data(),isSpecialization);
   scName+=clName;
   ArgumentList *al=0;
   if (templateArguments())
@@ -3777,7 +3834,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
       al = actualParams->at(*actualParamIndex);
       if (!isSpecialization)
       {
-        scName+=tempArgListToString(al);
+        scName+=tempArgListToString(al,lang);
       }
       (*actualParamIndex)++;
     }
@@ -3785,7 +3842,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
     {
       if (!isSpecialization)
       {
-        scName+=tempArgListToString(templateArguments());
+        scName+=tempArgListToString(templateArguments(),lang);
       }
     }
   }
@@ -3823,7 +3880,8 @@ void ClassDef::addListReferences()
                                       : theTranslator->trClass(TRUE,TRUE),
              getOutputFileBase(),
              displayName(),
-             0
+             0,
+             this
             );
   }
   if (m_impl->memberGroupSDict)
@@ -3974,7 +4032,6 @@ int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
     static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB");
     if (!inlineInheritedMembers) // show inherited members as separate lists
     {
-      QPtrDict<void> visited(17);
       count+=countInheritedDecMembers(lt,inheritedFrom,invert,showAlways,visitedClasses);
     }
   }
@@ -4178,7 +4235,13 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
   MemberList * ml = getMemberList(lt);
   MemberList * ml2 = getMemberList((MemberListType)lt2);
   if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
-  {
+  { 
+    static ClassDef *cdef;
+    if (cdef!=this)
+    { // only one inline link
+      VhdlDocGen::writeInlineClassLink(this,ol);
+      cdef=this;
+    }
     if (ml)
     {
       VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0,0);
@@ -4191,14 +4254,14 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
     if (ml)
     {
       //printf("  writeDeclaration type=%d count=%d\n",lt,ml->numDecMembers());
-      ml->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt);
+      ml->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt);
       tt.resize(0);
       st.resize(0);
     }
     if (ml2)
     {
       //printf("  writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers());
-      ml2->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt);
+      ml2->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt);
     }
     static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB");
     if (!inlineInheritedMembers) // show inherited members as separate lists
@@ -4253,7 +4316,7 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol,
   if (ml)
   {
     ml->setInGroup(inGroup);
-    ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId);
+    ml->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId);
   }
 }
 
diff --git a/src/classdef.h b/src/classdef.h
index 9f0ae5f..0729d20 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -46,6 +46,7 @@ class StringDict;
 struct IncludeInfo;
 class ClassDefImpl;
 class ArgumentList;
+class FTextStream;
 
 /** A class representing of a compound symbol.
  *
@@ -391,6 +392,7 @@ class ClassDef : public Definition
                               ClassDef *inheritedFrom,const QCString &inheritId);
     int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
     int countInheritanceNodes();
+    void writeTagFile(FTextStream &);
     
     bool visited;
 
@@ -400,7 +402,6 @@ class ClassDef : public Definition
     void showUsedFiles(OutputList &ol);
 
   private: 
-    void writeTagFileMarker();
     void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
     void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
     void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index b0ca85f..eeb7f78 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -140,6 +140,7 @@ CommandMap cmdMap[] =
   { "diafile",       CMD_DIAFILE },
   { "--",            CMD_NDASH },
   { "---",           CMD_MDASH },
+  { "_setscope",     CMD_SETSCOPE },
   { 0,               0 },
 };
 
@@ -226,6 +227,16 @@ int Mapper::map(const char *n)
   return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
 }
 
+QString Mapper::find(const int n)
+{
+  QDictIterator<int> mapIterator(m_map);
+  for (int *curVal = mapIterator.toFirst();(curVal = mapIterator.current());++mapIterator)
+  {
+    if (*curVal == n || (*curVal == (n | SIMPLESECT_BIT))) return mapIterator.currentKey();
+  }
+  return NULL;
+}
+
 Mapper::Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
 {
   m_map.setAutoDelete(TRUE);
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 75fd8ec..fd33b10 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -129,7 +129,8 @@ enum CommandType
   CMD_NDASH        = 99,
   CMD_MDASH        = 100,
   CMD_STARTUML     = 101,
-  CMD_ENDUML       = 102
+  CMD_ENDUML       = 102,
+  CMD_SETSCOPE     = 103
 };
 
 enum HtmlTagType
@@ -201,6 +202,7 @@ class Mapper
 {
   public:
     int map(const char *n);
+    QString find(const int n);
     Mapper(const CommandMap *cm,bool caseSensitive);
   private:
     QDict<int> m_map;
diff --git a/src/code.l b/src/code.l
index d96067e..09f1177 100644
--- a/src/code.l
+++ b/src/code.l
@@ -1236,7 +1236,6 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
       {
 	int vi;
 	QCString vn=varName;
-	QCString scope;
 	if ((vi=vn.findRev("::"))!=-1 || (vi=vn.findRev('.'))!=-1)  // explicit scope A::b(), probably static member
 	{
 	  ClassDef *jcd = getClass(vn.left(vi));
diff --git a/src/commentcnv.l b/src/commentcnv.l
index ec56b90..64e18be 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -450,7 +450,14 @@ void replaceComment(int offset);
                                      copyToOutput(yytext,(int)yyleng); 
 				     g_lastCommentContext = YY_START;
 				     g_javaBlock=0;
-				     g_blockName=&yytext[1];
+                                     if (qstrcmp(&yytext[1],"startuml")==0)
+                                     {
+                                       g_blockName="uml";
+                                     }
+                                     else
+                                     {
+				       g_blockName=&yytext[1];
+                                     }
                                      BEGIN(VerbatimCode);
   				   }
 <CComment,ReadLine>[\\@]("f$"|"f["|"f{"[a-z]*) {
@@ -554,7 +561,7 @@ void replaceComment(int offset);
                                      copyToOutput(yytext,(int)yyleng); 
                                    }
 <Verbatim>^[ \t]*"///"             {
-  				     if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="startuml" || g_blockName.at(0)=='f')
+  				     if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="uml" || g_blockName.at(0)=='f')
 				     {
 				       // see bug 487871, strip /// from dot images and formulas.
                                        int l=0;
@@ -1004,7 +1011,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
     warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
 	"a corresponding \\endcond command within this file.",sectionInfo.data());
   }
-  if (g_nestingCount>0 || (YY_START==CComment && g_lang!=SrcLangExt_Markdown))
+  if (g_nestingCount>0 && g_lang!=SrcLangExt_Markdown)
   {
     QCString tmp= "(probable line reference: ";
     bool first = TRUE;
diff --git a/src/commentscan.l b/src/commentscan.l
index 168907f..702a616 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -917,7 +917,7 @@ ID        "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
 LABELID   [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
 CITESCHAR [a-z_A-Z\x80-\xFF]
 CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
-CITEID    {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
+CITEID    {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
 SCOPEID   {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
 SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
 TMPLSPEC  "<"{BN}*[^>]+{BN}*">"
@@ -1120,7 +1120,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 <Comment>{B}*("\\\\"|"@@")"f"[$\[{]	{ // escaped formula command
   					  addOutput(yytext);
   					}
-<Comment>{B}*{CMD}"~"[a-z_A-Z]*		{ // language switch command
+<Comment>{B}*{CMD}"~"[a-z_A-Z-]*		{ // language switch command
                                           QCString langId = QString(yytext).stripWhiteSpace().data()+2;
 			       	          if (!langId.isEmpty() &&
 					      qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
@@ -2160,7 +2160,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 
   /* ----- handle language specific sections ------- */
 
-<SkipLang>[\\@]"~"[a-zA-Z]*        { /* language switch */
+<SkipLang>[\\@]"~"[a-zA-Z-]*        { /* language switch */
                                      QCString langId = &yytext[2];
 				     if (langId.isEmpty() ||
 					 qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
diff --git a/src/condparser.h b/src/condparser.h
index 0310f36..7c65411 100644
--- a/src/condparser.h
+++ b/src/condparser.h
@@ -28,24 +28,25 @@ class CondParser
 {
   // public functions
   public:
+    CondParser() : m_e(0), m_tokenType(NOTHING) {}
     bool parse(const char *fileName,int lineNr,const char *expr);
 
     // enumerations
   private:
-    enum TOKENTYPE 
+    enum TOKENTYPE
     {
-      NOTHING = -1, 
-      DELIMITER, 
-      VARIABLE, 
+      NOTHING = -1,
+      DELIMITER,
+      VARIABLE,
       UNKNOWN
     };
-    enum OPERATOR_ID 
+    enum OPERATOR_ID
     {
-      UNKNOWN_OP = -1, 
-      AND = 1, 
-      OR, 
+      UNKNOWN_OP = -1,
+      AND = 1,
+      OR,
       NOT
-    }; 
+    };
 
     // data
   private:
diff --git a/src/config.h b/src/config.h
index 505e4d1..981f6fe 100644
--- a/src/config.h
+++ b/src/config.h
@@ -533,6 +533,7 @@ class Config
       m_dict     = new QDict<ConfigOption>(257);
       m_options->setAutoDelete(TRUE);
       m_obsolete->setAutoDelete(TRUE);
+      m_disabled->setAutoDelete(TRUE);
       m_initialized = FALSE;
       create();
     }
diff --git a/src/config.l b/src/config.l
index a237faf..a10626e 100644
--- a/src/config.l
+++ b/src/config.l
@@ -85,7 +85,7 @@ static QCString convertToComment(const QCString &s, const QCString &u)
   if (!s.isEmpty())
   {
     QCString tmp=s.stripWhiteSpace();
-    char *p=tmp.data();
+    const char *p=tmp.data();
     char c;
     result+="#";
     if (*p && *p!='\n')
@@ -431,19 +431,11 @@ static bool             *b=0;
 static QStrList         *l=0;
 static int               lastState;
 static QCString          elemStr;
-static QCString          includeName;
 static QStrList          includePathList;
 static QStack<ConfigFileState> includeStack;  
 static int               includeDepth;
 static bool              config_upd = FALSE;
 
-static QCString     tabSizeString;
-static QCString     maxInitLinesString;
-static QCString     colsInAlphaIndexString;
-static QCString     enumValuesPerLineString;
-static QCString     treeViewWidthString;
-static QCString     maxDotGraphWidthString;
-static QCString     maxDotGraphHeightString;
 static QCString     encoding;
 
 static Config      *config;
@@ -495,8 +487,8 @@ static QCString configStringRecode(
   }
   size_t iLeft=(size_t)inputSize;
   size_t oLeft=(size_t)outputSize;
-  char *inputPtr  = str.data();
-  char *outputPtr = output.data();
+  char *inputPtr  = str.rawData();
+  char *outputPtr = output.rawData();
   if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
   {
     outputSize-=(int)oLeft;
@@ -1695,7 +1687,7 @@ static QCString configFileToString(const char *name)
       QCString contents(bSize);
       int totalSize=0;
       int size;
-      while ((size=f.readBlock(contents.data()+totalSize,bSize))==bSize)
+      while ((size=f.readBlock(contents.rawData()+totalSize,bSize))==bSize)
       {
         totalSize+=bSize;
         contents.resize(totalSize+bSize); 
@@ -1721,7 +1713,7 @@ static QCString configFileToString(const char *name)
     {
       int fsize=f.size();
       QCString contents(fsize+2);
-      f.readBlock(contents.data(),fsize);
+      f.readBlock(contents.rawData(),fsize);
       f.close();
       if (fsize==0 || contents[fsize-1]=='\n') 
 	contents[fsize]='\0';
diff --git a/src/config.xml b/src/config.xml
index f83ee55..994190d 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -250,7 +250,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='string' id='PROJECT_LOGO' format='image' defval=''>
       <docs>
 <![CDATA[
- With the \c PROJECT_LOGO tag one can specify an logo or icon that is 
+ With the \c PROJECT_LOGO tag one can specify a logo or an icon that is 
  included in the documentation. The maximum height of the logo should not 
  exceed 55 pixels and the maximum width should not exceed 200 pixels. 
  Doxygen will copy the logo to the output directory.
@@ -270,7 +270,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='CREATE_SUBDIRS' defval='0'>
       <docs>
 <![CDATA[
- If the \c CREATE_SUBDIRS tag is set to \c YES, then doxygen will create
+ If the \c CREATE_SUBDIRS tag is set to \c YES then doxygen will create
  4096 sub-directories (in 2 levels) under the output directory of each output 
  format and will distribute the generated files over these directories. 
  Enabling this option can be useful when feeding doxygen a huge amount of source
@@ -344,7 +344,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='BRIEF_MEMBER_DESC' defval='1'>
       <docs>
 <![CDATA[
- If the \c BRIEF_MEMBER_DESC tag is set to \c YES doxygen will
+ If the \c BRIEF_MEMBER_DESC tag is set to \c YES, doxygen will
  include brief member descriptions after the members that are listed in
  the file and class documentation (similar to \c Javadoc).
  Set to \c NO to disable this.
@@ -354,7 +354,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='REPEAT_BRIEF' defval='1'>
       <docs>
 <![CDATA[
- If the \c REPEAT_BRIEF tag is set to \c YES doxygen will 
+ If the \c REPEAT_BRIEF tag is set to \c YES, doxygen will 
  prepend the brief description of a member or function before the detailed 
  description 
  <br>Note: 
@@ -411,7 +411,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='FULL_PATH_NAMES' defval='1'>
       <docs>
 <![CDATA[
- If the \c FULL_PATH_NAMES tag is set to \c YES doxygen will prepend the full
+ If the \c FULL_PATH_NAMES tag is set to \c YES, doxygen will prepend the full
  path before files name in the file list and in the header files. If set
  to \c NO the shortest path that makes the file name unique will be used
 ]]>
@@ -501,7 +501,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='SEPARATE_MEMBER_PAGES' defval='0'>
       <docs>
 <![CDATA[
- If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES, then doxygen will produce
+ If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES then doxygen will produce
  a new page for each member. If set to \c NO, the documentation of a member will
  be part of the file/class/namespace that contains it.
 ]]>
@@ -597,7 +597,7 @@ Go to the <a href="commands.html">next</a> section or return to the
  <code>.inc</code> files as Fortran files (default is PHP), and <code>.f</code> files as C (default is Fortran),
  use: `inc=Fortran f=C`.
 
- <br>Note For files without extension you can use `no_extension` as a placeholder.
+ <br>Note: For files without extension you can use `no_extension` as a placeholder.
  <br>Note that for custom extensions you also need to set \ref cfg_file_patterns "FILE_PATTERNS" otherwise the 
  files are not read by doxygen.
 ]]>
@@ -620,7 +620,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  When enabled doxygen tries to link words that correspond to documented classes, 
  or namespaces to their corresponding documentation. Such a link can be 
- prevented in individual cases by by putting a \c % sign in front of the word or 
+ prevented in individual cases by putting a \c % sign in front of the word or 
  globally by setting \c AUTOLINK_SUPPORT to \c NO.
 ]]>
       </docs>
@@ -671,7 +671,7 @@ Go to the <a href="commands.html">next</a> section or return to the
       <docs>
 <![CDATA[
  If member grouping is used in the documentation and the \c DISTRIBUTE_GROUP_DOC
- tag is set to \c YES, then doxygen will reuse the documentation of the first
+ tag is set to \c YES then doxygen will reuse the documentation of the first
  member in the group (if any) for the other members of the group. By default
  all members of a group must be documented explicitly.
 ]]>
@@ -747,7 +747,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_ALL' defval='0'>
       <docs>
 <![CDATA[
- If the \c EXTRACT_ALL tag is set to \c YES doxygen will assume all 
+ If the \c EXTRACT_ALL tag is set to \c YES, doxygen will assume all 
  entities in documentation are documented, even if no documentation was 
  available. Private class members and static file members will be hidden 
  unless the \ref cfg_extract_private "EXTRACT_PRIVATE" respectively 
@@ -762,7 +762,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_PRIVATE' defval='0'>
       <docs>
 <![CDATA[
- If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a 
+ If the \c EXTRACT_PRIVATE tag is set to \c YES, all private members of a 
  class will be included in the documentation.
 ]]>
       </docs>
@@ -770,7 +770,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_PACKAGE' defval='0'>
       <docs>
 <![CDATA[
- If the \c EXTRACT_PACKAGE tag is set to \c YES all members with package 
+ If the \c EXTRACT_PACKAGE tag is set to \c YES, all members with package 
  or internal scope will be included in the documentation. 
 ]]>
       </docs>
@@ -778,7 +778,7 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_STATIC' defval='0'>
       <docs>
 <![CDATA[
- If the \c EXTRACT_STATIC tag is set to \c YES all static members of a file
+ If the \c EXTRACT_STATIC tag is set to \c YES, all static members of a file
  will be included in the documentation.
 ]]>
       </docs>
@@ -786,9 +786,9 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_LOCAL_CLASSES' defval='1'>
       <docs>
 <![CDATA[
- If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES classes (and structs) 
+ If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES, classes (and structs) 
  defined locally in source files will be included in the documentation. 
- If set to \c NO only classes defined in header files are included. Does not
+ If set to \c NO, only classes defined in header files are included. Does not
  have any effect for Java sources.
 ]]>
       </docs>
@@ -796,10 +796,10 @@ Go to the <a href="commands.html">next</a> section or return to the
     <option type='bool' id='EXTRACT_LOCAL_METHODS' defval='0'>
       <docs>
 <![CDATA[
- This flag is only useful for Objective-C code. When set to \c YES local 
+ This flag is only useful for Objective-C code. If set to \c YES, local 
  methods, which are defined in the implementation section but not in
  the interface are included in the documentation.
- If set to \c NO only methods in the interface are included.
+ If set to \c NO, only methods in the interface are included.
 ]]>
       </docs>
     </option>
@@ -829,7 +829,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c HIDE_UNDOC_CLASSES tag is set to \c YES, doxygen will hide all
  undocumented classes that are normally visible in the class hierarchy. 
- If set to \c NO these classes will be included in the
+ If set to \c NO, these classes will be included in the
  various overviews.
  This option has no effect if \ref cfg_extract_all "EXTRACT_ALL" is enabled.
 ]]>
@@ -840,7 +840,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c HIDE_FRIEND_COMPOUNDS tag is set to \c YES, doxygen will hide all
  friend (class|struct|union) declarations.
- If set to \c NO these declarations will be included in the
+ If set to \c NO, these declarations will be included in the
  documentation.
 ]]>
       </docs>
@@ -850,7 +850,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c HIDE_IN_BODY_DOCS tag is set to \c YES, doxygen will hide any 
  documentation blocks found inside the body of a function.
- If set to \c NO these blocks will be appended to the 
+ If set to \c NO, these blocks will be appended to the 
  function's detailed documentation block.
 ]]>
       </docs>
@@ -870,7 +870,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c CASE_SENSE_NAMES tag is set to \c NO then doxygen
  will only generate file names in lower-case letters. If set to
- \c YES upper-case letters are also allowed. This is useful if you have
+ \c YES, upper-case letters are also allowed. This is useful if you have
  classes or files whose names only differ in case and if your file system
  supports case sensitive file names. Windows and Mac users are advised to set this
  option to \c NO.
@@ -882,7 +882,16 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c HIDE_SCOPE_NAMES tag is set to \c NO then doxygen 
  will show members with their full class and namespace scopes in the
- documentation. If set to \c YES the scope will be hidden. 
+ documentation. If set to \c YES, the scope will be hidden. 
+]]>
+      </docs>
+    </option>
+    <option type='bool' id='HIDE_COMPOUND_REFERENCE' defval='0'>
+      <docs>
+<![CDATA[
+ If the \c HIDE_COMPOUND_REFERENCE tag is set to \c NO (default) then
+ doxygen will append additional text to a page's title, such as Class Reference.
+ If set to \c YES the compound reference will be hidden. 
 ]]>
       </docs>
     </option>
@@ -926,7 +935,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c SORT_MEMBER_DOCS tag is set to \c YES then doxygen
  will sort the (detailed) documentation of file and class members
- alphabetically by member name. If set to \c NO the members will appear in
+ alphabetically by member name. If set to \c NO, the members will appear in
  declaration order.
 ]]>
       </docs>
@@ -936,7 +945,7 @@ Go to the <a href="commands.html">next</a> section or return to the
 <![CDATA[
  If the \c SORT_BRIEF_DOCS tag is set to \c YES then doxygen will sort the
  brief descriptions of file, namespace and class members alphabetically
- by member name. If set to \c NO the members will appear in
+ by member name. If set to \c NO, the members will appear in
  declaration order. Note that this will also influence the order of the
  classes in the class list.
 ]]>
@@ -1055,7 +1064,7 @@ Go to the <a href="commands.html">next</a> section or return to the
       <docs>
 <![CDATA[
  Set the \c SHOW_USED_FILES tag to \c NO to disable the list of files generated
- at the bottom of the documentation of classes and structs. If set to \c YES the
+ at the bottom of the documentation of classes and structs. If set to \c YES, the
  list will mention the files that were used to generate the documentation.
 ]]>
       </docs>
@@ -1174,7 +1183,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
     <option type='bool' id='WARN_IF_UNDOCUMENTED' defval='1'>
       <docs>
 <![CDATA[
- If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES, then doxygen will generate warnings
+ If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES then doxygen will generate warnings
  for undocumented members. If \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES then this flag will
  automatically be disabled.
 ]]>
@@ -1195,7 +1204,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
 <![CDATA[
  This \c WARN_NO_PARAMDOC option can be enabled to get warnings for 
  functions that are documented, but have no documentation for their parameters
- or return value. If set to \c NO doxygen will only warn about
+ or return value. If set to \c NO, doxygen will only warn about
  wrong or incomplete parameter documentation, but not about the absence of
  documentation.
 ]]>
@@ -1430,7 +1439,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
       <docs>
 <![CDATA[
  If the \c FILTER_SOURCE_FILES tag is set to \c YES, the input filter (if set using
- \ref cfg_input_filter "INPUT_FILTER" ) will also be used to filter the input
+ \ref cfg_input_filter "INPUT_FILTER") will also be used to filter the input
  files that are used for producing the source files to browse 
  (i.e. when \ref cfg_source_browser "SOURCE_BROWSER" is set to \c YES).
 ]]>
@@ -1508,7 +1517,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
       <docs>
 <![CDATA[
  If the \c REFERENCES_LINK_SOURCE tag is set to \c YES
- and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES, then the hyperlinks from 
+ and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES then the hyperlinks from 
  functions in \ref cfg_references_relation "REFERENCES_RELATION" and
  \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION" lists will 
  link to the source code.  Otherwise they will link to the documentation.
@@ -1563,7 +1572,7 @@ to disable this feature.
     <option type='bool' id='CLANG_ASSISTED_PARSING' setting='USE_LIBCLANG' defval='0'>
       <docs>
 <![CDATA[
-  If the \c CLANG_ASSISTED_PARSING tag is set to \c YES, then doxygen will use the 
+  If the \c CLANG_ASSISTED_PARSING tag is set to \c YES then doxygen will use the 
   <a href="http://clang.llvm.org/">clang parser</a> for more accurate parsing 
   at the cost of reduced performance. This can be particularly helpful with 
   template rich C++ code for which doxygen's built-in parser lacks the 
@@ -1618,7 +1627,7 @@ to disable this feature.
     <option type='bool' id='GENERATE_HTML' defval='1'>
       <docs>
 <![CDATA[
- If the \c GENERATE_HTML tag is set to \c YES doxygen will
+ If the \c GENERATE_HTML tag is set to \c YES, doxygen will
  generate HTML output
 ]]>
       </docs>
@@ -1785,16 +1794,16 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil
  user-defined cascading style sheets that are included after the standard 
  style sheets created by doxygen. Using this option one can overrule 
  certain style aspects. This is preferred over using \ref cfg_html_stylesheet "HTML_STYLESHEET" 
- since it does not replace the standard style sheet and is therefor more 
+ since it does not replace the standard style sheet and is therefore more 
  robust against future updates. Doxygen will copy the style sheet files to 
  the output directory.
- \note The order of the extra stylesheet files is of importance (e.g. the last
- stylesheet in the list overrules the setting of the previous ones in the list).
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
 ]]>
       </docs>
       <docs doxywizard='0' doxyfile='0'>
 <![CDATA[
- Here is an example stylesheet that gives the contents area a fixed width:
+ Here is an example style sheet that gives the contents area a fixed width:
 \verbatim
 body {
         background-color: #CCC;
@@ -1849,7 +1858,7 @@ hr.footer {
       <docs>
 <![CDATA[
  The \c HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
- Doxygen will adjust the colors in the stylesheet and background images 
+ Doxygen will adjust the colors in the style sheet and background images 
  according to this color. Hue is specified as an angle on a colorwheel, 
  see http://en.wikipedia.org/wiki/Hue for more information. 
  For instance the value 0 represents red, 60 is yellow, 120 is green, 
@@ -2001,7 +2010,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
 <![CDATA[
   The \c HHC_LOCATION tag can
   be used to specify the location (absolute path including file name) of 
-  the HTML help compiler (\c hhc.exe). If non-empty doxygen will try to run
+  the HTML help compiler (\c hhc.exe). If non-empty, doxygen will try to run
   the HTML help compiler on the generated \c index.hhp.
 ]]>
       </docs>
@@ -2164,7 +2173,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
  JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
  Windows users are probably better off using the HTML help feature.
 
- Via custom stylesheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
+ Via custom style sheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
  one can further \ref doxygen_finetune "fine-tune" the look of the index.
  As an example, the default style sheet generated by doxygen has an
  example that shows how to put an image at the root of the tree instead of
@@ -2199,7 +2208,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
     <option type='bool' id='EXT_LINKS_IN_WINDOW' defval='0' depends='GENERATE_HTML'>
       <docs>
 <![CDATA[
- When the \c EXT_LINKS_IN_WINDOW option is set to \c YES doxygen will open 
+ If the \c EXT_LINKS_IN_WINDOW option is set to \c YES, doxygen will open 
  links to external symbols imported via tag files in a separate window. 
 ]]>
       </docs>
@@ -2231,7 +2240,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
 <![CDATA[
  Enable the \c USE_MATHJAX option to render \f$\mbox{\LaTeX}\f$ formulas using MathJax 
  (see http://www.mathjax.org) which uses client side Javascript for the 
- rendering instead of using prerendered bitmaps. Use this if you do not 
+ rendering instead of using pre-rendered bitmaps. Use this if you do not 
  have \f$\mbox{\LaTeX}\f$ installed or if you want to formulas look prettier in the HTML 
  output. When enabled you may also need to install MathJax separately and 
  configure the path to it using the \ref cfg_mathjax_relpath "MATHJAX_RELPATH" 
@@ -2423,7 +2432,7 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
     <option type='bool' id='GENERATE_LATEX' defval='1'>
       <docs>
 <![CDATA[
- If the \c GENERATE_LATEX tag is set to \c YES doxygen will
+ If the \c GENERATE_LATEX tag is set to \c YES, doxygen will
  generate \f$\mbox{\LaTeX}\f$ output.
 ]]>
       </docs>
@@ -2459,7 +2468,7 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
     <option type='bool' id='COMPACT_LATEX' defval='0' depends='GENERATE_LATEX'>
       <docs>
 <![CDATA[
- If the \c COMPACT_LATEX tag is set to \c YES doxygen generates more compact
+ If the \c COMPACT_LATEX tag is set to \c YES, doxygen generates more compact
  \f$\mbox{\LaTeX}\f$ documents. This may be useful for small projects and may help to
  save some trees in general.
 ]]>
@@ -2508,8 +2517,8 @@ EXTRA_PACKAGES=times
  <code>\$doxygenversion</code>, <code>\$projectname</code>, 
  <code>\$projectnumber</code>, <code>\$projectbrief</code>, 
  <code>\$projectlogo</code>. 
- Doxygen will replace <code>\$title</code> with the empy string, for the replacement values of the
- other commands the user is refered to \ref cfg_html_header "HTML_HEADER".
+ Doxygen will replace <code>\$title</code> with the empty string, for the replacement values of the
+ other commands the user is referred to \ref cfg_html_header "HTML_HEADER".
 ]]>
       </docs>
     </option>
@@ -2528,6 +2537,19 @@ EXTRA_PACKAGES=times
 ]]>
       </docs>
     </option>
+    <option type='list' id='LATEX_EXTRA_STYLESHEET' format='file' defval='' depends='GENERATE_LATEX'>
+      <docs>
+<![CDATA[
+ The \c LATEX_EXTRA_STYLESHEET tag can be used to specify additional 
+ user-defined \f$\mbox{\LaTeX}\f$ style sheets that are included after the standard 
+ style sheets created by doxygen. Using this option one can overrule 
+ certain style aspects. Doxygen will copy the style sheet files to 
+ the output directory.
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
+]]>
+      </docs>
+    </option>
     <option type='list' id='LATEX_EXTRA_FILES' format='file' depends='GENERATE_LATEX'>
       <docs>
 <![CDATA[
@@ -2555,7 +2577,7 @@ EXTRA_PACKAGES=times
 <![CDATA[
  If the \c USE_PDFLATEX tag is set to \c YES, doxygen will use
  \c pdflatex to generate the PDF file directly from the \f$\mbox{\LaTeX}\f$
- files.  Set this option to \c YES to get a higher quality PDF documentation. 
+ files.  Set this option to \c YES, to get a higher quality PDF documentation. 
 ]]>
       </docs>
     </option>
@@ -2604,7 +2626,7 @@ EXTRA_PACKAGES=times
     <option type='bool' id='GENERATE_RTF' defval='0'>
       <docs>
 <![CDATA[
- If the \c GENERATE_RTF tag is set to \c YES doxygen will generate RTF output.
+ If the \c GENERATE_RTF tag is set to \c YES, doxygen will generate RTF output.
  The RTF output is optimized for Word 97 and may not look too pretty with
  other RTF readers/editors.
 ]]>
@@ -2622,7 +2644,7 @@ EXTRA_PACKAGES=times
     <option type='bool' id='COMPACT_RTF' defval='0' depends='GENERATE_RTF'>
       <docs>
 <![CDATA[
- If the \c COMPACT_RTF tag is set to \c YES doxygen generates more compact
+ If the \c COMPACT_RTF tag is set to \c YES, doxygen generates more compact
  RTF documents. This may be useful for small projects and may help to
  save some trees in general.
 ]]>
@@ -2664,12 +2686,22 @@ EXTRA_PACKAGES=times
 ]]>
       </docs>
     </option>
+    <option type='bool' id='RTF_SOURCE_CODE' defval='0' depends='GENERATE_RTF'>
+      <docs>
+<![CDATA[
+ If the \c RTF_SOURCE_CODE tag is set to \c YES then doxygen will include
+ source code with syntax highlighting in the RTF output.
+ <br>Note that which sources are shown also depends on other settings
+ such as \ref cfg_source_browser "SOURCE_BROWSER".
+]]>
+      </docs>
+    </option>
   </group>
   <group name='Man' docs='Configuration options related to the man page output'>
     <option type='bool' id='GENERATE_MAN' defval='0'>
       <docs>
 <![CDATA[
- If the \c GENERATE_MAN tag is set to \c YES doxygen will
+ If the \c GENERATE_MAN tag is set to \c YES, doxygen will
  generate man pages for classes and files.
 ]]>
       </docs>
@@ -2719,7 +2751,7 @@ EXTRA_PACKAGES=times
     <option type='bool' id='GENERATE_XML' defval='0'>
       <docs>
 <![CDATA[
- If the \c GENERATE_XML tag is set to \c YES doxygen will
+ If the \c GENERATE_XML tag is set to \c YES, doxygen will
  generate an XML file that captures the structure of
  the code including all documentation. 
 ]]>
@@ -2737,7 +2769,7 @@ EXTRA_PACKAGES=times
     <option type='bool' id='XML_PROGRAMLISTING' defval='1' depends='GENERATE_XML'>
       <docs>
 <![CDATA[
- If the \c XML_PROGRAMLISTING tag is set to \c YES doxygen will
+ If the \c XML_PROGRAMLISTING tag is set to \c YES, doxygen will
  dump the program listings (including syntax highlighting
  and cross-referencing information) to the XML output. Note that
  enabling this will significantly increase the size of the XML output.
@@ -2749,7 +2781,7 @@ EXTRA_PACKAGES=times
     <option type='bool' id='GENERATE_DOCBOOK' defval='0'>
       <docs>
 <![CDATA[
-If the \c GENERATE_DOCBOOK tag is set to \c YES doxygen will generate Docbook files 
+If the \c GENERATE_DOCBOOK tag is set to \c YES, doxygen will generate Docbook files 
 that can be used to generate PDF.
 ]]>
       </docs>
@@ -2766,7 +2798,7 @@ front of it.
     <option type='bool' id='DOCBOOK_PROGRAMLISTING' defval='0' depends='GENERATE_DOCBOOK'>
       <docs>
 <![CDATA[
- If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES doxygen will
+ If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES, doxygen will
  include the program listings (including syntax highlighting
  and cross-referencing information) to the DOCBOOK output. Note that
  enabling this will significantly increase the size of the DOCBOOK output.
@@ -2778,7 +2810,7 @@ front of it.
     <option type='bool' id='GENERATE_AUTOGEN_DEF' defval='0'>
       <docs>
 <![CDATA[
- If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES doxygen will
+ If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES, doxygen will
  generate an AutoGen Definitions (see http://autogen.sf.net) file
  that captures the structure of the code including all
  documentation. Note that this feature is still experimental 
@@ -2813,7 +2845,7 @@ put in front of it.
     <option type='bool' id='GENERATE_PERLMOD' defval='0'>
       <docs>
 <![CDATA[
- If the \c GENERATE_PERLMOD tag is set to \c YES doxygen will
+ If the \c GENERATE_PERLMOD tag is set to \c YES, doxygen will
  generate a Perl module file that captures the structure of
  the code including all documentation.
  <br>Note that this 
@@ -2825,7 +2857,7 @@ put in front of it.
     <option type='bool' id='PERLMOD_LATEX' defval='0' depends='GENERATE_PERLMOD'>
       <docs>
 <![CDATA[
- If the \c PERLMOD_LATEX tag is set to \c YES doxygen will generate 
+ If the \c PERLMOD_LATEX tag is set to \c YES, doxygen will generate 
  the necessary \c Makefile rules, \c Perl scripts and \f$\mbox{\LaTeX}\f$ code to be able 
  to generate PDF and DVI output from the Perl module output. 
 ]]>
@@ -2834,10 +2866,10 @@ put in front of it.
     <option type='bool' id='PERLMOD_PRETTY' defval='1' depends='GENERATE_PERLMOD'>
       <docs>
 <![CDATA[
- If the \c PERLMOD_PRETTY tag is set to \c YES the Perl module output will be 
+ If the \c PERLMOD_PRETTY tag is set to \c YES, the Perl module output will be 
  nicely formatted so it can be parsed by a human reader.  This is useful 
  if you want to understand what is going on. On the other hand, if this
- tag is set to \c NO the size of the Perl module output will be much smaller
+ tag is set to \c NO, the size of the Perl module output will be much smaller
  and Perl will parse it just the same. 
 ]]>
       </docs>
@@ -2857,7 +2889,7 @@ put in front of it.
     <option type='bool' id='ENABLE_PREPROCESSING' defval='1'>
       <docs>
 <![CDATA[
- If the \c ENABLE_PREPROCESSING tag is set to \c YES doxygen will
+ If the \c ENABLE_PREPROCESSING tag is set to \c YES, doxygen will
  evaluate all C-preprocessor directives found in the sources and include
  files. 
 ]]>
@@ -2866,8 +2898,8 @@ put in front of it.
     <option type='bool' id='MACRO_EXPANSION' defval='0' depends='ENABLE_PREPROCESSING'>
       <docs>
 <![CDATA[
- If the \c MACRO_EXPANSION tag is set to \c YES doxygen will expand all macro
- names in the source code. If set to \c NO only conditional 
+ If the \c MACRO_EXPANSION tag is set to \c YES, doxygen will expand all macro
+ names in the source code. If set to \c NO, only conditional 
  compilation will be performed. Macro expansion can be done in a controlled
  way by setting \ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" to \c YES.
 ]]>
@@ -2885,7 +2917,7 @@ put in front of it.
     <option type='bool' id='SEARCH_INCLUDES' defval='1' depends='ENABLE_PREPROCESSING'>
       <docs>
 <![CDATA[
- If the \c SEARCH_INCLUDES tag is set to \c YES the includes files
+ If the \c SEARCH_INCLUDES tag is set to \c YES, the include files
  in the \ref cfg_include_path "INCLUDE_PATH" will be searched if a \c \#include is found.
 ]]>
       </docs>
@@ -2986,8 +3018,8 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
     <option type='bool' id='ALLEXTERNALS' defval='0'>
       <docs>
 <![CDATA[
- If the \c ALLEXTERNALS tag is set to \c YES all external class will be listed
- in the class index. If set to \c NO only the inherited external classes
+ If the \c ALLEXTERNALS tag is set to \c YES, all external class will be listed
+ in the class index. If set to \c NO, only the inherited external classes
  will be listed.
 ]]>
       </docs>
@@ -2995,7 +3027,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
     <option type='bool' id='EXTERNAL_GROUPS' defval='1'>
       <docs>
 <![CDATA[
- If the \c EXTERNAL_GROUPS tag is set to \c YES all external groups will be listed
+ If the \c EXTERNAL_GROUPS tag is set to \c YES, all external groups will be listed
  in the modules index. If set to \c NO, only the current project's groups will
  be listed.
 ]]>
@@ -3004,7 +3036,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
     <option type='bool' id='EXTERNAL_PAGES' defval='1'>
       <docs>
 <![CDATA[
- If the \c EXTERNAL_PAGES tag is set to \c YES all external pages will be listed 
+ If the \c EXTERNAL_PAGES tag is set to \c YES, all external pages will be listed 
  in the related pages index. If set to \c NO, only the current project's 
  pages will be listed. 
 ]]>
@@ -3023,7 +3055,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
     <option type='bool' id='CLASS_DIAGRAMS' defval='1'>
       <docs>
 <![CDATA[
- If the \c CLASS_DIAGRAMS tag is set to \c YES doxygen will
+ If the \c CLASS_DIAGRAMS tag is set to \c YES, doxygen will
  generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
  super classes. Setting the tag to \c NO turns the diagrams off. Note that 
  this option also works with \ref cfg_have_dot "HAVE_DOT" disabled, but it is recommended to 
@@ -3055,7 +3087,7 @@ to be found in the default search path.
     <option type='bool' id='HIDE_UNDOC_RELATIONS' defval='1'>
       <docs>
 <![CDATA[
- If set to \c YES, the inheritance and collaboration graphs will hide
+ If set to \c YES the inheritance and collaboration graphs will hide
  inheritance and usage relations if the target is undocumented
  or is not a class.
 ]]>
@@ -3143,7 +3175,7 @@ to be found in the default search path.
     <option type='bool' id='UML_LOOK' defval='0' depends='HAVE_DOT'>
       <docs>
 <![CDATA[
- If the \c UML_LOOK tag is set to \c YES doxygen will generate inheritance and
+ If the \c UML_LOOK tag is set to \c YES, doxygen will generate inheritance and
  collaboration diagrams in a style similar to the OMG's Unified Modeling
  Language.
 ]]>
@@ -3291,11 +3323,11 @@ to be found in the default search path.
 <![CDATA[
  The \c DIAFILE_DIRS tag can be used to specify one or more directories that 
  contain dia files that are included in the documentation (see the
- \ref cmdmscfile "\\diafile" command).
+ \ref cmddiafile "\\diafile" command).
 ]]>
       </docs>
     </option>
-    <option type='string' id='PLANTUML_JAR_PATH' format='dir' defval='' depends='HAVE_DOT'>
+    <option type='string' id='PLANTUML_JAR_PATH' format='dir' defval=''>
       <docs>
 <![CDATA[
  When using plantuml, the \c PLANTUML_JAR_PATH tag should be used to specify the path where 
@@ -3305,6 +3337,14 @@ to be found in the default search path.
 ]]>
       </docs>
     </option>
+    <option type='list' id='PLANTUML_INCLUDE_PATH' format='dir' defval=''>
+      <docs>
+<![CDATA[
+ When using plantuml, the specified paths are searched for files specified by the \c !include
+ statement in a plantuml block. 
+]]>
+      </docs>
+    </option>
     <option type='int' id='DOT_GRAPH_MAX_NODES' minval='0' maxval='10000' defval='50' depends='HAVE_DOT'>
       <docs>
 <![CDATA[
@@ -3347,7 +3387,7 @@ to be found in the default search path.
     <option type='bool' id='DOT_MULTI_TARGETS' defval='0' depends='HAVE_DOT'>
       <docs>
 <![CDATA[
- Set the \c DOT_MULTI_TARGETS tag to \c YES allow dot to generate multiple output
+ Set the \c DOT_MULTI_TARGETS tag to \c YES to allow dot to generate multiple output
  files in one run (i.e. multiple -o and -T options on the command line). This
  makes \c dot run faster, but since only newer versions of \c dot (>1.8.10)
  support this, this feature is disabled by default.
@@ -3366,7 +3406,7 @@ to be found in the default search path.
     <option type='bool' id='DOT_CLEANUP' defval='1' depends='HAVE_DOT'>
       <docs>
 <![CDATA[
-If the \c DOT_CLEANUP tag is set to \c YES doxygen will
+If the \c DOT_CLEANUP tag is set to \c YES, doxygen will
 remove the intermediate dot files that are used to generate the various graphs.
 ]]>
       </docs>
diff --git a/src/configgen.py b/src/configgen.py
index 04ffc8c..7115dba 100755
--- a/src/configgen.py
+++ b/src/configgen.py
@@ -26,6 +26,7 @@ def transformDocs(doc):
 	doc = doc.replace("\r", " ")
 	doc = doc.replace("\t", " ")
 	doc = doc.replace("\\&", "&")
+	doc = doc.replace("(\\c ", "(")
 	doc = doc.replace("\\c ", " ")
 	doc = doc.replace("\\b ", " ")
 	doc = doc.replace("\\e ", " ")
diff --git a/src/context.cpp b/src/context.cpp
index b35fffa..551db1a 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -13,6 +13,7 @@
  *
  */
 
+#include <assert.h>
 #include <qdir.h>
 
 #include "context.h"
@@ -665,6 +666,18 @@ class TranslateContext::Private : public PropertyMapper
       static bool extractAll = Config_getBool("EXTRACT_ALL");
       return theTranslator->trNamespaceMemberDescription(extractAll);
     }
+    TemplateVariant classHierarchyDescription() const
+    {
+      return theTranslator->trClassHierarchyDescription();
+    }
+    TemplateVariant gotoGraphicalHierarchy() const
+    {
+      return theTranslator->trGotoGraphicalHierarchy();
+    }
+    TemplateVariant gotoTextualHierarchy() const
+    {
+      return theTranslator->trGotoTextualHierarchy();
+    }
     TemplateVariant classMembersDescription() const
     {
       static bool extractAll = Config_getBool("EXTRACT_ALL");
@@ -1011,6 +1024,12 @@ class TranslateContext::Private : public PropertyMapper
       addProperty("macros",             this,&Private::macros);
       //%% string namespaceMembersDescription
       addProperty("namespaceMembersDescription",this,&Private::namespaceMembersDescription);
+      //%% string classHierarchyDescription
+      addProperty("classHierarchyDescription",this,&Private::classHierarchyDescription);
+      //%% string gotoGraphicalHierarchy
+      addProperty("gotoGraphicalHierarchy",this,&Private::gotoGraphicalHierarchy);
+      //%% string gotoTextualHierarchy
+      addProperty("gotoTextualHierarchy",this,&Private::gotoTextualHierarchy);
 
       m_javaOpt    = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
       m_fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
@@ -1108,6 +1127,7 @@ class DefinitionContext : public PropertyMapper
   public:
     DefinitionContext(Definition *d) : m_def(d)
     {
+      assert(d!=0);
       //%% string name: the name of the symbol
       addProperty("name",this,&DefinitionContext::name);
       //%% string bareName: the bare name of the symbol with scope info
@@ -2944,7 +2964,7 @@ class PageContext::Private : public DefinitionContext<PageContext::Private>
     }
     TemplateVariant relPath() const
     {
-      if (m_pageDef==Doxygen::mainPage)
+      if (m_isMainPage)
       {
         return "";
       }
@@ -2955,7 +2975,7 @@ class PageContext::Private : public DefinitionContext<PageContext::Private>
     }
     TemplateVariant highlight() const
     {
-      if (m_pageDef==Doxygen::mainPage)
+      if (m_isMainPage)
       {
         return "main";
       }
@@ -4820,194 +4840,74 @@ TemplateVariant ClassIndexContext::get(const char *n) const
 
 //------------------------------------------------------------------------
 
-//%% struct ClassInheritanceNode: node in inheritance tree
-//%% {
-class ClassInheritanceNodeContext::Private : public PropertyMapper
+static int computeMaxDepth(const TemplateListIntf *list)
 {
-  public:
-    Private(ClassDef *cd) : m_classDef(cd)
+  int maxDepth=0;
+  if (list)
+  {
+    TemplateListIntf::ConstIterator *it = list->createIterator();
+    TemplateVariant v;
+    for (it->toFirst();it->current(v);it->toNext())
     {
-      //%% bool is_leaf_node: true if this node does not have any children
-      addProperty("is_leaf_node",this,&Private::isLeafNode);
-      //%% ClassInheritance children: list of nested classes/namespaces
-      addProperty("children",this,&Private::children);
-      //%% Class class: class info
-      addProperty("class",this,&Private::getClass);
+      const TemplateStructIntf *s = v.toStruct();
+      TemplateVariant child = s->get("children");
+      int d = computeMaxDepth(child.toList())+1;
+      if (d>maxDepth) maxDepth=d;
     }
-    void addChildren(const BaseClassList *bcl,bool hideSuper)
-    {
-      if (bcl==0) return;
-      BaseClassListIterator bcli(*bcl);
-      BaseClassDef *bcd;
-      for (bcli.toFirst() ; (bcd=bcli.current()) ; ++bcli)
-      {
-        ClassDef *cd=bcd->classDef;
-        if (cd->getLanguage()==SrcLangExt_VHDL && (VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
-        {
-          continue;
-        }
-
-        bool b;
-        if (cd->getLanguage()==SrcLangExt_VHDL)
-        {
-          b=hasVisibleRoot(cd->subClasses());
-        }
-        else
-        {
-          b=hasVisibleRoot(cd->baseClasses());
-        }
+    delete it;
+  }
+  return maxDepth;
+}
 
-        if (cd->isVisibleInHierarchy() && b) // hasVisibleRoot(cd->baseClasses()))
-        {
-          bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
-          ClassInheritanceNodeContext *tnc = new ClassInheritanceNodeContext(cd);
-          m_children.append(tnc);
-          if (hasChildren)
-          {
-            //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
-            bool wasVisited=cd->visited;
-            cd->visited=TRUE;
-            if (cd->getLanguage()==SrcLangExt_VHDL)
-            {
-              tnc->addChildren(cd->baseClasses(),wasVisited);
-            }
-            else
-            {
-              tnc->addChildren(cd->subClasses(),wasVisited);
-            }
-          }
-        }
-      }
-    }
-    TemplateVariant isLeafNode() const
-    {
-      return m_children.isEmpty();
-    }
-    TemplateVariant children() const
-    {
-      return TemplateVariant(&m_children);
-    }
-    TemplateVariant getClass() const
+static int computeNumNodesAtLevel(const TemplateStructIntf *s,int level,int maxLevel)
+{
+  int num=0;
+  if (level<maxLevel)
+  {
+    num++;
+    TemplateVariant child = s->get("children");
+    if (child.toList())
     {
-      if (!m_cache.classContext)
+      TemplateListIntf::ConstIterator *it = child.toList()->createIterator();
+      TemplateVariant v;
+      for (it->toFirst();it->current(v);it->toNext())
       {
-        m_cache.classContext.reset(ClassContext::alloc(m_classDef));
+        num+=computeNumNodesAtLevel(v.toStruct(),level+1,maxLevel);
       }
-      return m_cache.classContext.get();
+      delete it;
     }
-  private:
-    ClassDef *m_classDef;
-    GenericNodeListContext m_children;
-    struct Cachable
-    {
-      SharedPtr<ClassContext> classContext;
-    };
-    mutable Cachable m_cache;
-};
-//%% }
-
-ClassInheritanceNodeContext::ClassInheritanceNodeContext(ClassDef *cd) : RefCountedContext("ClassInheritanceNodeContext")
-{
-  p = new Private(cd);
-}
-
-ClassInheritanceNodeContext::~ClassInheritanceNodeContext()
-{
-  delete p;
-}
-
-TemplateVariant ClassInheritanceNodeContext::get(const char *n) const
-{
-  return p->get(n);
-}
-
-void ClassInheritanceNodeContext::addChildren(const BaseClassList *bcl,bool hideSuper)
-{
-  p->addChildren(bcl,hideSuper);
+  }
+  return num;
 }
 
-//------------------------------------------------------------------------
-
-//%% list ClassInheritance[ClassInheritanceNode]: list of classes
-class ClassInheritanceContext::Private : public GenericNodeListContext
+static int computePreferredDepth(const TemplateListIntf *list,int maxDepth)
 {
-  public:
-    void addClasses(const ClassSDict &classSDict)
+  int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES");
+  int preferredDepth=1;
+  if (preferredNumEntries>0)
+  {
+    int depth = maxDepth;
+    for (int i=1;i<=depth;i++)
     {
-      ClassSDict::Iterator cli(classSDict);
-      ClassDef *cd;
-      for (cli.toFirst();(cd=cli.current());++cli)
+      int num=0;
+      TemplateListIntf::ConstIterator *it = list->createIterator();
+      TemplateVariant v;
+      for (it->toFirst();it->current(v);it->toNext())
       {
-        bool b;
-        if (cd->getLanguage()==SrcLangExt_VHDL)
-        {
-          if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
-          {
-            continue;
-          }
-          b=!hasVisibleRoot(cd->subClasses());
-        }
-        else
-        {
-          b=!hasVisibleRoot(cd->baseClasses());
-        }
-        if (b)
-        {
-          if (cd->isVisibleInHierarchy()) // should it be visible
-          {
-            // new root level class
-            ClassInheritanceNodeContext *tnc = ClassInheritanceNodeContext::alloc(cd);
-            append(tnc);
-            bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
-            if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren)
-            {
-              tnc->addChildren(cd->baseClasses(),cd->visited);
-              cd->visited=TRUE;
-            }
-            else if (hasChildren)
-            {
-              tnc->addChildren(cd->subClasses(),cd->visited);
-              cd->visited=TRUE;
-            }
-          }
-        }
+        num+=computeNumNodesAtLevel(v.toStruct(),0,i);
+      }
+      delete it;
+      if (num<=preferredNumEntries)
+      {
+        preferredDepth=i;
+      }
+      else
+      {
+        break;
       }
     }
-};
-
-ClassInheritanceContext::ClassInheritanceContext() : RefCountedContext("ClassInheritanceContext")
-{
-  p = new Private;
-  initClassHierarchy(Doxygen::classSDict);
-  initClassHierarchy(Doxygen::hiddenClasses);
-  p->addClasses(*Doxygen::classSDict);
-  p->addClasses(*Doxygen::hiddenClasses);
-}
-
-ClassInheritanceContext::~ClassInheritanceContext()
-{
-  delete p;
-}
-
-// TemplateListIntf
-int ClassInheritanceContext::count() const
-{
-  return (int)p->count();
-}
-
-TemplateVariant ClassInheritanceContext::at(int index) const
-{
-  TemplateVariant result;
-  if (index>=0 && index<count())
-  {
-    result = p->at(index);
   }
-  return result;
-}
-
-TemplateListIntf::ConstIterator *ClassInheritanceContext::createIterator() const
-{
-  return p->createIterator();
+  return preferredDepth;
 }
 
 //------------------------------------------------------------------------
@@ -5017,13 +4917,27 @@ TemplateListIntf::ConstIterator *ClassInheritanceContext::createIterator() const
 class ClassHierarchyContext::Private : public PropertyMapper
 {
   public:
+    Private()
+    {
+      m_classTree.reset(NestingContext::alloc(0,0));
+      initClassHierarchy(Doxygen::classSDict);
+      initClassHierarchy(Doxygen::hiddenClasses);
+      m_classTree->addClassHierarchy(*Doxygen::classSDict,TRUE);
+      m_classTree->addClassHierarchy(*Doxygen::hiddenClasses,TRUE);
+      //%% ClassInheritance tree
+      addProperty("tree",            this,&Private::tree);
+      addProperty("fileName",        this,&Private::fileName);
+      addProperty("relPath",         this,&Private::relPath);
+      addProperty("highlight",       this,&Private::highlight);
+      addProperty("subhighlight",    this,&Private::subhighlight);
+      addProperty("title",           this,&Private::title);
+      addProperty("preferredDepth",  this,&Private::preferredDepth);
+      addProperty("maxDepth",        this,&Private::maxDepth);
+      addProperty("diagrams",        this,&Private::diagrams);
+    }
     TemplateVariant tree() const
     {
-      if (!m_cache.classTree)
-      {
-        m_cache.classTree.reset(ClassInheritanceContext::alloc());
-      }
-      return m_cache.classTree.get();
+      return m_classTree.get();
     }
     TemplateVariant fileName() const
     {
@@ -5041,6 +4955,34 @@ class ClassHierarchyContext::Private : public PropertyMapper
     {
       return "classhierarchy";
     }
+    DotGfxHierarchyTable *getHierarchy() const
+    {
+      if (!m_cache.hierarchy)
+      {
+        m_cache.hierarchy.reset(new DotGfxHierarchyTable());
+      }
+      return m_cache.hierarchy.get();
+    }
+    TemplateVariant diagrams() const
+    {
+      if (!m_cache.diagrams)
+      {
+        TemplateList *diagrams = TemplateList::alloc();
+        DotGfxHierarchyTable *hierarchy = getHierarchy();
+        if (hierarchy->subGraphs())
+        {
+          int id=0;
+          QListIterator<DotNode> li(*hierarchy->subGraphs());
+          DotNode *n;
+          for (li.toFirst();(n=li.current());++li)
+          {
+            diagrams->append(InheritanceGraphContext::alloc(hierarchy,n,id++));
+          }
+        }
+        m_cache.diagrams.reset(diagrams);
+      }
+      return m_cache.diagrams.get();
+    }
     TemplateVariant title() const
     {
       static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
@@ -5053,20 +4995,36 @@ class ClassHierarchyContext::Private : public PropertyMapper
         return theTranslator->trClassHierarchy();
       }
     }
-    Private()
+    TemplateVariant maxDepth() const
     {
-      //%% ClassInheritance tree
-      addProperty("tree",this,&Private::tree);
-      addProperty("fileName",this,&Private::fileName);
-      addProperty("relPath",this,&Private::relPath);
-      addProperty("highlight",this,&Private::highlight);
-      addProperty("subhighlight",this,&Private::subhighlight);
-      addProperty("title",this,&Private::title);
+      if (!m_cache.maxDepthComputed)
+      {
+        m_cache.maxDepth = computeMaxDepth(m_classTree.get());
+        m_cache.maxDepthComputed=TRUE;
+      }
+      return m_cache.maxDepth;
+    }
+    TemplateVariant preferredDepth() const
+    {
+      if (!m_cache.preferredDepthComputed)
+      {
+        m_cache.preferredDepth = computePreferredDepth(m_classTree.get(),maxDepth().toInt());
+        m_cache.preferredDepthComputed=TRUE;
+      }
+      return m_cache.preferredDepth;
     }
   private:
+    SharedPtr<NestingContext> m_classTree;
     struct Cachable
     {
-      SharedPtr<ClassInheritanceContext> classTree;
+      Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+                   preferredDepth(0), preferredDepthComputed(FALSE), hierarchy(0) {}
+      int   maxDepth;
+      bool  maxDepthComputed;
+      int   preferredDepth;
+      bool  preferredDepthComputed;
+      SharedPtr<TemplateList> diagrams;
+      ScopedPtr<DotGfxHierarchyTable> hierarchy;
     };
     mutable Cachable m_cache;
 };
@@ -5095,7 +5053,7 @@ class NestingNodeContext::Private : public PropertyMapper
 {
   public:
     Private(const NestingNodeContext *parent,const NestingNodeContext *thisNode,
-        Definition *d,int index,int level,bool addCls)
+        Definition *d,int index,int level,bool addCls,bool inherit, bool hideSuper)
       : m_parent(parent), m_def(d), m_level(level), m_index(index)
     {
       m_children.reset(NestingContext::alloc(thisNode,level+1));
@@ -5129,7 +5087,7 @@ class NestingNodeContext::Private : public PropertyMapper
       addProperty("fileName",this,&Private::fileName);
 
       addNamespaces(addCls);
-      addClasses();
+      addClasses(inherit,hideSuper);
       addDirFiles();
       addPages();
       addModules();
@@ -5281,12 +5239,34 @@ class NestingNodeContext::Private : public PropertyMapper
       return m_def->getOutputFileBase();
     }
 
-    void addClasses()
+    //------------------------------------------------------------------
+
+    void addClasses(bool inherit, bool hideSuper)
     {
       ClassDef *cd = m_def->definitionType()==Definition::TypeClass ? (ClassDef*)m_def : 0;
-      if (cd && cd->getClassSDict())
+      if (cd && inherit)
       {
-        m_children->addClasses(*cd->getClassSDict(),FALSE);
+        bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+        if (hasChildren)
+        {
+          bool wasVisited=cd->visited;
+          cd->visited=TRUE;
+          if (cd->getLanguage()==SrcLangExt_VHDL)
+          {
+            m_children->addDerivedClasses(cd->baseClasses(),wasVisited);
+          }
+          else
+          {
+            m_children->addDerivedClasses(cd->subClasses(),wasVisited);
+          }
+        }
+      }
+      else
+      {
+        if (cd && cd->getClassSDict())
+        {
+          m_children->addClasses(*cd->getClassSDict(),FALSE);
+        }
       }
     }
     void addNamespaces(bool addClasses)
@@ -5350,9 +5330,10 @@ class NestingNodeContext::Private : public PropertyMapper
 //%% }
 
 NestingNodeContext::NestingNodeContext(const NestingNodeContext *parent,
-                                       Definition *d,int index,int level,bool addClass) : RefCountedContext("NestingNodeContext")
+                                       Definition *d,int index,int level,bool addClass,bool inherit,bool hideSuper)
+   : RefCountedContext("NestingNodeContext")
 {
-  p = new Private(parent,this,d,index,level,addClass);
+  p = new Private(parent,this,d,index,level,addClass,inherit,hideSuper);
 }
 
 NestingNodeContext::~NestingNodeContext()
@@ -5392,7 +5373,7 @@ class NestingContext::Private : public GenericNodeListContext
           bool isLinkable  = nd->isLinkableInProject();
           if (isLinkable || hasChildren)
           {
-            NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,nd,m_index,m_level,addClasses);
+            NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,nd,m_index,m_level,addClasses,FALSE,FALSE);
             append(nnc);
             m_index++;
           }
@@ -5421,7 +5402,7 @@ class NestingContext::Private : public GenericNodeListContext
         {
           if (classVisibleInIndex(cd) && cd->templateMaster()==0)
           {
-            NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE);
+            NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,FALSE,FALSE);
             append(nnc);
             m_index++;
           }
@@ -5436,7 +5417,7 @@ class NestingContext::Private : public GenericNodeListContext
       {
         if (dd->getOuterScope()==Doxygen::globalScope)
         {
-          append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE));
+          append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE));
           m_index++;
         }
       }
@@ -5447,7 +5428,7 @@ class NestingContext::Private : public GenericNodeListContext
       DirDef *dd;
       for (li.toFirst();(dd=li.current());++li)
       {
-        append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE));
+        append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE));
         m_index++;
       }
     }
@@ -5463,7 +5444,7 @@ class NestingContext::Private : public GenericNodeListContext
         {
           if (fd->getDirDef()==0) // top level file
           {
-            append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE));
+            append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE,FALSE,FALSE));
             m_index++;
           }
         }
@@ -5475,7 +5456,7 @@ class NestingContext::Private : public GenericNodeListContext
       FileDef *fd;
       for (li.toFirst();(fd=li.current());++li)
       {
-        append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE));
+        append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE,FALSE,FALSE));
         m_index++;
       }
     }
@@ -5489,7 +5470,7 @@ class NestingContext::Private : public GenericNodeListContext
             pd->getOuterScope()==0 ||
             pd->getOuterScope()->definitionType()!=Definition::TypePage)
         {
-          append(NestingNodeContext::alloc(m_parent,pd,m_index,m_level,FALSE));
+          append(NestingNodeContext::alloc(m_parent,pd,m_index,m_level,FALSE,FALSE,FALSE));
           m_index++;
         }
       }
@@ -5505,7 +5486,7 @@ class NestingContext::Private : public GenericNodeListContext
              (!gd->isReference() || externalGroups)
            )
         {
-          append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+          append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE,FALSE,FALSE));
           m_index++;
         }
       }
@@ -5518,11 +5499,74 @@ class NestingContext::Private : public GenericNodeListContext
       {
         if (gd->isVisible())
         {
-          append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+          append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE,FALSE,FALSE));
           m_index++;
         }
       }
     }
+    void addDerivedClasses(const BaseClassList *bcl,bool hideSuper)
+    {
+      if (bcl==0) return;
+      BaseClassListIterator bcli(*bcl);
+      BaseClassDef *bcd;
+      for (bcli.toFirst() ; (bcd=bcli.current()) ; ++bcli)
+      {
+        ClassDef *cd=bcd->classDef;
+        if (cd->getLanguage()==SrcLangExt_VHDL && (VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
+        {
+          continue;
+        }
+
+        bool b;
+        if (cd->getLanguage()==SrcLangExt_VHDL)
+        {
+          b=hasVisibleRoot(cd->subClasses());
+        }
+        else
+        {
+          b=hasVisibleRoot(cd->baseClasses());
+        }
+
+        if (cd->isVisibleInHierarchy() && b)
+        {
+          NestingNodeContext *tnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,hideSuper);
+          append(tnc);
+          m_index++;
+        }
+      }
+    }
+    void addClassHierarchy(const ClassSDict &classSDict,bool)
+    {
+      ClassSDict::Iterator cli(classSDict);
+      ClassDef *cd;
+      for (cli.toFirst();(cd=cli.current());++cli)
+      {
+        bool b;
+        if (cd->getLanguage()==SrcLangExt_VHDL)
+        {
+          if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
+          {
+            continue;
+          }
+          b=!hasVisibleRoot(cd->subClasses());
+        }
+        else
+        {
+          b=!hasVisibleRoot(cd->baseClasses());
+        }
+        if (b)
+        {
+          if (cd->isVisibleInHierarchy()) // should it be visible
+          {
+            // new root level class
+            NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->visited);
+            append(nnc);
+            m_index++;
+          }
+        }
+      }
+    }
+
   private:
     const NestingNodeContext *m_parent;
     int m_level;
@@ -5600,78 +5644,17 @@ void NestingContext::addModules(const GroupList &modules)
   p->addModules(modules);
 }
 
-//------------------------------------------------------------------------
-
-static int computeMaxDepth(const TemplateListIntf *list)
-{
-  int maxDepth=0;
-  if (list)
-  {
-    TemplateListIntf::ConstIterator *it = list->createIterator();
-    TemplateVariant v;
-    for (it->toFirst();it->current(v);it->toNext())
-    {
-      const TemplateStructIntf *s = v.toStruct();
-      TemplateVariant child = s->get("children");
-      int d = computeMaxDepth(child.toList())+1;
-      if (d>maxDepth) maxDepth=d;
-    }
-    delete it;
-  }
-  return maxDepth;
-}
-
-static int computeNumNodesAtLevel(const TemplateStructIntf *s,int level,int maxLevel)
+void NestingContext::addClassHierarchy(const ClassSDict &classSDict,bool rootOnly)
 {
-  int num=0;
-  if (level<maxLevel)
-  {
-    num++;
-    TemplateVariant child = s->get("children");
-    if (child.toList())
-    {
-      TemplateListIntf::ConstIterator *it = child.toList()->createIterator();
-      TemplateVariant v;
-      for (it->toFirst();it->current(v);it->toNext())
-      {
-        num+=computeNumNodesAtLevel(v.toStruct(),level+1,maxLevel);
-      }
-      delete it;
-    }
-  }
-  return num;
+  p->addClassHierarchy(classSDict,rootOnly);
 }
 
-static int computePreferredDepth(const TemplateListIntf *list,int maxDepth)
+void NestingContext::addDerivedClasses(const BaseClassList *bcl,bool hideSuper)
 {
-  int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES");
-  int preferredDepth=1;
-  if (preferredNumEntries>0)
-  {
-    int depth = maxDepth;
-    for (int i=1;i<=depth;i++)
-    {
-      int num=0;
-      TemplateListIntf::ConstIterator *it = list->createIterator();
-      TemplateVariant v;
-      for (it->toFirst();it->current(v);it->toNext())
-      {
-        num+=computeNumNodesAtLevel(v.toStruct(),0,i);
-      }
-      delete it;
-      if (num<=preferredNumEntries)
-      {
-        preferredDepth=i;
-      }
-      else
-      {
-        break;
-      }
-    }
-  }
-  return preferredDepth;
+  p->addDerivedClasses(bcl,hideSuper);
 }
 
+//------------------------------------------------------------------------
 
 //%% struct ClassTree: Class nesting relations
 //%% {
@@ -5758,7 +5741,8 @@ class ClassTreeContext::Private : public PropertyMapper
     SharedPtr<NestingContext> m_classTree;
     struct Cachable
     {
-      Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+      Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+                   preferredDepth(0), preferredDepthComputed(FALSE) {}
       int   maxDepth;
       bool  maxDepthComputed;
       int   preferredDepth;
@@ -6166,7 +6150,8 @@ class FileTreeContext::Private : public PropertyMapper
     SharedPtr<NestingContext> m_dirFileTree;
     struct Cachable
     {
-      Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+      Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+                   preferredDepth(0), preferredDepthComputed(FALSE) {}
       int   maxDepth;
       bool  maxDepthComputed;
       int   preferredDepth;
@@ -7045,6 +7030,56 @@ TemplateVariant NamespaceMembersIndexContext::get(const char *name) const
   return p->get(name);
 }
 
+//------------------------------------------------------------------------
+
+//%% struct InheritanceGraph: a connected graph reprenting part of the overall interitance tree
+//%% {
+class InheritanceGraphContext::Private : public PropertyMapper
+{
+  public:
+    Private(DotGfxHierarchyTable *hierarchy,DotNode *n,int id) : m_hierarchy(hierarchy), m_node(n), m_id(id)
+    {
+      addProperty("graph",this,&Private::graph);
+    }
+    TemplateVariant graph() const
+    {
+      QGString result;
+      static bool haveDot            = Config_getBool("HAVE_DOT");
+      static bool graphicalHierarchy = Config_getBool("GRAPHICAL_HIERARCHY");
+      if (haveDot && graphicalHierarchy)
+      {
+        FTextStream t(&result);
+        m_hierarchy->createGraph(m_node,t,
+                          /*GOF_BITMAP,
+                          EOF_Html,*/
+                          g_globals.outputDir,
+                          g_globals.outputDir+portable_pathSeparator()+"inherits"+Doxygen::htmlFileExtension,
+                          m_id);
+      }
+      return TemplateVariant(result.data(),TRUE);
+    }
+  private:
+    DotGfxHierarchyTable *m_hierarchy;
+    DotNode *m_node;
+    int m_id;
+};
+
+InheritanceGraphContext::InheritanceGraphContext(DotGfxHierarchyTable *hierarchy,DotNode *n,int id)
+   : RefCountedContext("InheritanceGraphContext")
+{
+  p = new Private(hierarchy,n,id);
+}
+
+InheritanceGraphContext::~InheritanceGraphContext()
+{
+  delete p;
+}
+
+TemplateVariant InheritanceGraphContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
 
 //------------------------------------------------------------------------
 
@@ -8082,7 +8117,7 @@ class HtmlSpaceless : public TemplateSpacelessIntf
               {
                 m_insideString='\0';
               }
-              else // start of string
+              else if (m_insideString=='\0') // start of string
               {
                 m_insideString=c;
               }
@@ -8107,8 +8142,8 @@ class HtmlSpaceless : public TemplateSpacelessIntf
         }
       }
       result+='\0';
-      //printf("HtmlSpaceless::remove({%s})={%s} m_insideTag=%d m_insideString=%d removeSpaces=%d\n",s.data(),result.data(),
-      //    m_insideTag,m_insideString,m_removeSpaces);
+      //printf("HtmlSpaceless::remove({%s})={%s} m_insideTag=%d m_insideString=%c (%d) removeSpaces=%d\n",s.data(),result.data(),
+      //    m_insideTag,m_insideString,m_insideString,m_removeSpaces);
       return result.data();
     }
   private:
@@ -8147,7 +8182,6 @@ void generateOutputViaTemplate()
       SharedPtr<ExampleListContext>           exampleList          (ExampleListContext::alloc());
       SharedPtr<ModuleTreeContext>            moduleTree           (ModuleTreeContext::alloc());
       SharedPtr<ModuleListContext>            moduleList           (ModuleListContext::alloc());
-      SharedPtr<PageContext>                  mainPage             (PageContext::alloc(Doxygen::mainPage,TRUE));
       SharedPtr<GlobalsIndexContext>          globalsIndex         (GlobalsIndexContext::alloc());
       SharedPtr<ClassMembersIndexContext>     classMembersIndex    (ClassMembersIndexContext::alloc());
       SharedPtr<NamespaceMembersIndexContext> namespaceMembersIndex(NamespaceMembersIndexContext::alloc());
@@ -8187,7 +8221,19 @@ void generateOutputViaTemplate()
       //%% DirList dirList
       ctx->set("dirList",dirList.get());
       //%% Page mainPage
-      ctx->set("mainPage",mainPage.get());
+      if (Doxygen::mainPage)
+      {
+        SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE));
+        ctx->set("mainPage",mainPage.get());
+      }
+      else
+      {
+        // TODO: for LaTeX output index should be main... => solve in template
+        Doxygen::mainPage = new PageDef("[generated]",1,"index","",theTranslator->trMainPage());
+        Doxygen::mainPage->setFileName("index",TRUE);
+        SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE));
+        ctx->set("mainPage",mainPage.get());
+      }
       //%% GlobalsIndex globalsIndex:
       ctx->set("globalsIndex",globalsIndex.get());
       //%% ClassMembersIndex classMembersIndex:
diff --git a/src/context.h b/src/context.h
index b39ab40..6b5b810 100644
--- a/src/context.h
+++ b/src/context.h
@@ -51,6 +51,8 @@ struct MemberInfo;
 class MemberGroup;
 class MemberGroupSDict;
 class MemberGroupList;
+class DotNode;
+class DotGfxHierarchyTable; 
 
 //----------------------------------------------------
 
@@ -419,6 +421,26 @@ class ClassIndexContext : public RefCountedContext, public TemplateStructIntf
 
 //----------------------------------------------------
 
+class InheritanceGraphContext : public RefCountedContext, public TemplateStructIntf
+{
+  public:
+    static InheritanceGraphContext *alloc(DotGfxHierarchyTable *hierarchy,DotNode *n,int id)
+    { return new InheritanceGraphContext(hierarchy,n,id); }
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+    virtual int addRef()  { return RefCountedContext::addRef(); }
+    virtual int release() { return RefCountedContext::release(); }
+
+  private:
+    InheritanceGraphContext(DotGfxHierarchyTable *hierarchy,DotNode *n,int id);
+   ~InheritanceGraphContext();
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
 class ClassInheritanceNodeContext : public RefCountedContext, public TemplateStructIntf
 {
   public:
@@ -485,8 +507,8 @@ class NestingNodeContext : public RefCountedContext, public TemplateStructIntf
 {
   public:
     static NestingNodeContext *alloc(const NestingNodeContext *parent,Definition *def,
-                                     int index,int level,bool addClasses)
-    { return new NestingNodeContext(parent,def,index,level,addClasses); }
+                                     int index,int level,bool addClasses,bool inherit,bool hideSuper)
+    { return new NestingNodeContext(parent,def,index,level,addClasses,inherit,hideSuper); }
 
     QCString id() const;
 
@@ -497,7 +519,7 @@ class NestingNodeContext : public RefCountedContext, public TemplateStructIntf
 
   private:
     NestingNodeContext(const NestingNodeContext *parent,
-                       Definition *,int index,int level,bool addClasses);
+                       Definition *,int index,int level,bool addClasses,bool inherit,bool hideSuper);
    ~NestingNodeContext();
     class Private;
     Private *p;
@@ -527,6 +549,8 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
     void addPages(const PageSDict &pages,bool rootOnly);
     void addModules(const GroupSDict &modules);
     void addModules(const GroupList &modules);
+    void addClassHierarchy(const ClassSDict &clDict,bool rootOnly);
+    void addDerivedClasses(const BaseClassList *bcl,bool hideSuper);
 
   private:
     NestingContext(const NestingNodeContext *parent,int level);
diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp
index e841428..aa3cc47 100644
--- a/src/dbusxmlscanner.cpp
+++ b/src/dbusxmlscanner.cpp
@@ -432,7 +432,7 @@ public:
             m_currentEnum = 0;
         }
 
-        if (EXTENSION("value"))
+        if (EXTENSION("value") && m_currentEnum)
         {
             CONDITION(!m_currentEntry, "end of value without start");
             m_currentEntry->endBodyLine = lineNumber();
diff --git a/src/declinfo.l b/src/declinfo.l
index f238be3..a90077e 100644
--- a/src/declinfo.l
+++ b/src/declinfo.l
@@ -45,7 +45,6 @@ static QCString      funcTempList;
 static QCString      type;
 static QCString      name;
 static QCString      args;
-static QCString      tmpType;
 static int          sharpCount;
 static bool         classTempListFound;
 static bool         funcTempListFound;
diff --git a/src/define.cpp b/src/define.cpp
index 75459c9..2f4e43a 100644
--- a/src/define.cpp
+++ b/src/define.cpp
@@ -35,7 +35,7 @@ Define::Define(const Define &d)
 { 
   //name=d.name; definition=d.definition; fileName=d.fileName; 
   lineNr=d.lineNr; 
-  lineNr=d.columnNr;
+  columnNr=d.columnNr;
   nargs=d.nargs; 
   undef=d.undef; 
   varArgs=d.varArgs;
diff --git a/src/definition.cpp b/src/definition.cpp
index 4a6a728..8014a37 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -58,10 +58,10 @@ class DefinitionImpl
 
     SectionDict *sectionDict;  // dictionary of all sections, not accessible
 
-    MemberSDict *sourceRefByDict;       
-    MemberSDict *sourceRefsDict;        
-    QList<ListItemInfo> *xrefListItems; 
-    GroupList *partOfGroups;            
+    MemberSDict *sourceRefByDict;
+    MemberSDict *sourceRefsDict;
+    QList<ListItemInfo> *xrefListItems;
+    GroupList *partOfGroups;
 
     DocInfo   *details;    // not exported
     DocInfo   *inbodyDocs; // not exported
@@ -89,11 +89,11 @@ class DefinitionImpl
     QCString id; // clang unique id
 };
 
-DefinitionImpl::DefinitionImpl() 
-  : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0), 
+DefinitionImpl::DefinitionImpl()
+  : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
     xrefListItems(0), partOfGroups(0),
-    details(0), inbodyDocs(0), brief(0), body(0), 
-    outerScope(0)
+    details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
+    outerScope(0), lang(SrcLangExt_Unknown)
 {
 }
 
@@ -371,7 +371,7 @@ Definition::Definition(const Definition &d) : DefinitionIntf()
   }
   if (d.m_impl->inbodyDocs)
   {
-    m_impl->details = new DocInfo(*d.m_impl->inbodyDocs);
+    m_impl->inbodyDocs = new DocInfo(*d.m_impl->inbodyDocs);
   }
 
   m_isSymbol = d.m_isSymbol;
@@ -511,9 +511,9 @@ void Definition::addSectionsToIndex()
   }
 }
 
-void Definition::writeDocAnchorsToTagFile()
+void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
 {
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
+  if (m_impl->sectionDict)
   {
     //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count());
     SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict);
@@ -523,15 +523,13 @@ void Definition::writeDocAnchorsToTagFile()
       if (!si->generated)
       {
         //printf("write an entry!\n");
-        if (definitionType()==TypeMember) Doxygen::tagFile << "  ";
-        Doxygen::tagFile << "    <docanchor file=\"" 
-                         << si->fileName << "\"";
+        if (definitionType()==TypeMember) tagFile << "  ";
+        tagFile << "    <docanchor file=\"" << si->fileName << "\"";
         if (!si->title.isEmpty())
         {
-          Doxygen::tagFile << " title=\"" << convertToXML(si->title) << "\"";
+          tagFile << " title=\"" << convertToXML(si->title) << "\"";
         }
-        Doxygen::tagFile << ">" << si->label 
-                         << "</docanchor>" << endl;
+        tagFile << ">" << si->label << "</docanchor>" << endl;
       }
     }
   }
@@ -545,7 +543,7 @@ bool Definition::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
   // double whitespaces...
   QCString docStr = doc.simplifyWhiteSpace();
   MD5Buffer((const unsigned char *)docStr.data(),docStr.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
   //    name().data(),doc.data(),sigStr.data(),sigList.data());
   if (sigList.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
@@ -757,6 +755,7 @@ bool readCodeFragment(const char *fileName,
     {
       while ((c=fgetc(f))!='\n' && c!=EOF) /* skip */;
       lineNr++; 
+      if (found && c == '\n') c = '\0';
     }
     if (!feof(f))
     {
@@ -765,7 +764,7 @@ bool readCodeFragment(const char *fileName,
       while (lineNr<=endLine && !feof(f) && !found)
       {
         int pc=0;
-        while ((c=fgetc(f))!='{' && c!=':' && c!=EOF) 
+        while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)  // } so vi matching brackets has no problem
         {
           //printf("parsing char `%c'\n",c);
           if (c=='\n') 
@@ -818,7 +817,7 @@ bool readCodeFragment(const char *fileName,
           result+=spaces;
         }
         // copy until end of line
-        result+=c;
+        if (c) result+=c;
         startLine=lineNr;
         if (c==':') 
         {
@@ -892,16 +891,17 @@ QCString Definition::getSourceFileBase() const
 
 QCString Definition::getSourceAnchor() const
 {
-  QCString anchorStr;
+  const int maxAnchorStrLen = 20;
+  char anchorStr[maxAnchorStrLen];
   if (m_impl->body && m_impl->body->startLine!=-1)
   {
     if (Htags::useHtags)
     {
-      anchorStr.sprintf("L%d",m_impl->body->startLine);
+      qsnprintf(anchorStr,maxAnchorStrLen,"L%d",m_impl->body->startLine);
     }
     else
     {
-      anchorStr.sprintf("l%05d",m_impl->body->startLine);
+      qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",m_impl->body->startLine);
     }
   }
   return anchorStr;
@@ -911,6 +911,7 @@ QCString Definition::getSourceAnchor() const
 void Definition::writeSourceDef(OutputList &ol,const char *)
 {
   static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+  static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
   ol.pushGeneratorState();
   //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
   QCString fn = getSourceFileBase();
@@ -930,13 +931,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         // write text left from linePos marker
         ol.parseText(refText.left(lineMarkerPos)); 
         ol.pushGeneratorState();
-        ol.disable(OutputGenerator::RTF); 
         ol.disable(OutputGenerator::Man); 
         if (!latexSourceCode)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write line link (HTML, LaTeX optionally)
+        if (!rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
+        // write line link (HTML, LaTeX optionally, RTF optionally)
         ol.writeObjectLink(0,fn,anchorStr,lineStr);
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
@@ -944,7 +948,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write normal text (Man/RTF, Latex optionally)
+        if (rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
+        // write normal text (Man, Latex optionally, RTF optionally)
         ol.docify(lineStr);
         ol.popGeneratorState();
         
@@ -953,13 +961,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
               fileMarkerPos-lineMarkerPos-2));
 
         ol.pushGeneratorState();
-        ol.disable(OutputGenerator::RTF); 
         ol.disable(OutputGenerator::Man); 
         if (!latexSourceCode)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write file link (HTML, LaTeX optionally)
+        if (!rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
+        // write file link (HTML, LaTeX optionally, RTF optionally)
         ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
@@ -967,7 +978,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write normal text (Man/RTF, Latex optionally)
+        if (rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
+        // write normal text (Man, Latex optionally, RTF optionally)
         ol.docify(m_impl->body->fileDef->name());
         ol.popGeneratorState();
         
@@ -980,12 +995,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         // write text left from file marker
         ol.parseText(refText.left(fileMarkerPos)); 
         ol.pushGeneratorState();
-        ol.disable(OutputGenerator::RTF); 
         ol.disable(OutputGenerator::Man); 
         if (!latexSourceCode)
         {
           ol.disable(OutputGenerator::Latex);
         }
+        if (!rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
         // write file link (HTML only)
         ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
         ol.enableAll();
@@ -994,7 +1012,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write normal text (Latex/Man only)
+        if (rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
+        // write normal text (RTF/Latex/Man only)
         ol.docify(m_impl->body->fileDef->name());
         ol.popGeneratorState();
         
@@ -1003,12 +1025,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
               lineMarkerPos-fileMarkerPos-2)); 
 
         ol.pushGeneratorState();
-        ol.disable(OutputGenerator::RTF); 
         ol.disable(OutputGenerator::Man); 
         if (!latexSourceCode)
         {
           ol.disable(OutputGenerator::Latex);
         }
+        if (!rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
         ol.disableAllBut(OutputGenerator::Html); 
         // write line link (HTML only)
         ol.writeObjectLink(0,fn,anchorStr,lineStr);
@@ -1018,6 +1043,10 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         {
           ol.disable(OutputGenerator::Latex);
         }
+        if (rtfSourceCode)
+        {
+          ol.disable(OutputGenerator::RTF);
+        }
         // write normal text (Latex/Man only)
         ol.docify(lineStr);
         ol.popGeneratorState();
@@ -1107,6 +1136,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
     const QCString &text,MemberSDict *members,bool /*funcOnly*/)
 {
   static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); 
+  static bool rtfSourceCode   = Config_getBool("RTF_SOURCE_CODE");
   static bool sourceBrowser   = Config_getBool("SOURCE_BROWSER");
   static bool refLinkSource   = Config_getBool("REFERENCES_LINK_SOURCE");
   ol.pushGeneratorState();
@@ -1159,14 +1189,18 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
           ol.pushGeneratorState();
           //ol.disableAllBut(OutputGenerator::Html);
 
-          ol.disable(OutputGenerator::RTF); 
           ol.disable(OutputGenerator::Man); 
           if (!latexSourceCode)
           {
             ol.disable(OutputGenerator::Latex);
           }
-          QCString lineStr,anchorStr;
-          anchorStr.sprintf("l%05d",md->getStartBodyLine());
+          if (!rtfSourceCode)
+          {
+            ol.disable(OutputGenerator::RTF);
+          }
+          const int maxLineNrStr = 10;
+          char anchorStr[maxLineNrStr];
+          qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
           //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data());
           ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name);
           ol.popGeneratorState();
@@ -1178,6 +1212,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
           {
             ol.disable(OutputGenerator::Latex);
           }
+          if (!rtfSourceCode)
+          {
+            ol.disable(OutputGenerator::RTF);
+          }
           ol.docify(name);
           ol.popGeneratorState();
         }
@@ -1186,12 +1224,15 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
           // for HTML write a real link
           ol.pushGeneratorState();
           //ol.disableAllBut(OutputGenerator::Html); 
-          ol.disable(OutputGenerator::RTF); 
           ol.disable(OutputGenerator::Man); 
           if (!latexSourceCode)
           {
             ol.disable(OutputGenerator::Latex);
           }
+          if (!rtfSourceCode)
+          {
+            ol.disable(OutputGenerator::RTF);
+          }
 
           ol.writeObjectLink(md->getReference(),
               md->getOutputFileBase(),
@@ -1205,6 +1246,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
           {
             ol.disable(OutputGenerator::Latex);
           }
+          if (rtfSourceCode)
+          {
+            ol.disable(OutputGenerator::RTF);
+          }
           ol.docify(name);
           ol.popGeneratorState();
         }
@@ -1288,9 +1333,6 @@ void Definition::addSourceReferencedBy(MemberDef *md)
 
 void Definition::addSourceReferences(MemberDef *md)
 {
-  QCString name  = md->name();
-  QCString scope = md->getScopeString();
-
   if (md)
   {
     QCString name  = md->name();
@@ -1526,12 +1568,12 @@ QCString Definition::navigationPathAsString() const
     if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
     {
       result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
-              ((const GroupDef*)this)->groupTitle()+"</a>";
+              convertToHtml(((const GroupDef*)this)->groupTitle())+"</a>";
     }
     else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
     {
       result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
-              ((const PageDef*)this)->title()+"</a>";
+              convertToHtml(((const PageDef*)this)->title())+"</a>";
     }
     else if (definitionType()==Definition::TypeClass)
     {
@@ -1542,17 +1584,17 @@ QCString Definition::navigationPathAsString() const
       }
       result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension;
       if (!anchor().isEmpty()) result+="#"+anchor();
-      result+="\">"+name+"</a>";
+      result+="\">"+convertToHtml(name)+"</a>";
     }
     else
     {
       result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
-              locName+"</a>";
+              convertToHtml(locName)+"</a>";
     }
   }
   else
   {
-    result+="<b>"+locName+"</b>";
+    result+="<b>"+convertToHtml(locName)+"</b>";
   }
   result+="</li>";
   return result;
@@ -1620,7 +1662,7 @@ void Definition::writeToc(OutputList &ol)
       }
       cs[0]='0'+nextLevel;
       if (inLi[nextLevel]) ol.writeString("</li>\n");
-      ol.writeString("<li class=\"level"+QCString(cs)+"\"><a href=\"#"+si->label+"\">"+si->title+"</a>");
+      ol.writeString("<li class=\"level"+QCString(cs)+"\"><a href=\"#"+si->label+"\">"+(si->title.isEmpty()?si->label:si->title)+"</a>");
       inLi[nextLevel]=TRUE;
       level = nextLevel;
     }
diff --git a/src/definition.h b/src/definition.h
index 05ea621..b1f118d 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -34,6 +34,7 @@ struct ListItemInfo;
 struct SectionInfo;
 class Definition;
 class DefinitionImpl;
+class FTextStream;
   
 /** Data associated with a detailed description. */
 struct DocInfo
@@ -334,7 +335,7 @@ class Definition : public DefinitionIntf
     /*! Writes the documentation anchors of the definition to 
      *  the Doxygen::tagFile stream.
      */
-    void writeDocAnchorsToTagFile();
+    void writeDocAnchorsToTagFile(FTextStream &);
     void setLocalName(const QCString name);
 
     void addSectionsToIndex();
diff --git a/src/diagram.cpp b/src/diagram.cpp
index e50baec..cc16b50 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1337,7 +1337,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
     QCString epstopdfArgs(4096);
     epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
                    epsBaseName.data(),epsBaseName.data());
-    //printf("Converting eps using `%s'\n",epstopdfCmd.data());
+    //printf("Converting eps using `%s'\n",epstopdfArgs.data());
     portable_sysTimerStart();
     if (portable_system("epstopdf",epstopdfArgs)!=0)
     {
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 284d1ee..067daa0 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -18,7 +18,7 @@
 
 static int g_dirCount=0;
 
-DirDef::DirDef(const char *path) : Definition(path,1,1,path)
+DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
 {
   bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
   // get display name (stipping the paths mentioned in STRIP_FROM_PATH)
@@ -80,16 +80,15 @@ void DirDef::addFile(FileDef *fd)
 
 static QCString encodeDirName(const QCString &anchor)
 {
-  QCString result;
-
   // convert to md5 hash
   uchar md5_sig[16];
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   return sigStr;
 
   // old algorithm
+//  QCString result;
 
 //  int l = anchor.length(),i;
 //  for (i=0;i<l;i++)
@@ -235,10 +234,6 @@ void DirDef::writeSubDirList(OutputList &ol)
       ol.insertMemberAlign();
       ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
       ol.endMemberItem();
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-      {
-        Doxygen::tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
-      }
       if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(dd->getOutputFileBase());
@@ -297,10 +292,6 @@ void DirDef::writeFileList(OutputList &ol)
         ol.endTextLink();
         ol.popGeneratorState();
       }
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-      {
-        Doxygen::tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
-      }
       ol.endMemberItem();
       if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
@@ -341,6 +332,53 @@ bool DirDef::hasDetailedDescription() const
   return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty();
 }
 
+void DirDef::writeTagFile(FTextStream &tagFile)
+{
+  tagFile << "  <compound kind=\"dir\">" << endl;
+  tagFile << "    <name>" << convertToXML(displayName()) << "</name>" << endl;
+  tagFile << "    <path>" << convertToXML(name()) << "</path>" << endl;
+  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
+  QListIterator<LayoutDocEntry> eli(
+      LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
+  LayoutDocEntry *lde;
+  for (eli.toFirst();(lde=eli.current());++eli)
+  {
+    switch (lde->kind())
+    {
+      case LayoutDocEntry::DirSubDirs:
+        {
+          if (m_subdirs.count()>0)
+          {
+            DirDef *dd;
+            QListIterator<DirDef> it(m_subdirs);
+            for (;(dd=it.current());++it)
+            {
+              tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::DirFiles:
+        {
+          if (m_fileList->count()>0)
+          {
+            QListIterator<FileDef> it(*m_fileList);
+            FileDef *fd;
+            for (;(fd=it.current());++it)
+            {
+              tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
+            }
+          }
+        }
+        break;
+      default:
+        break;
+    }
+  }
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "  </compound>" << endl;
+}
+
 void DirDef::writeDocumentation(OutputList &ol)
 {
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
@@ -367,14 +405,6 @@ void DirDef::writeDocumentation(OutputList &ol)
   endTitle(ol,getOutputFileBase(),title);
   ol.startContents();
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    Doxygen::tagFile << "  <compound kind=\"dir\">" << endl;
-    Doxygen::tagFile << "    <name>" << convertToXML(displayName()) << "</name>" << endl;
-    Doxygen::tagFile << "    <path>" << convertToXML(name()) << "</path>" << endl;
-    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
-  }
-  
   //---------------------------------------- start flexible part -------------------------------
 
   SrcLangExt lang = getLanguage();
@@ -450,12 +480,6 @@ void DirDef::writeDocumentation(OutputList &ol)
 
   //---------------------------------------- end flexible part -------------------------------
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
-
   ol.endContents();
 
   endFileWithNavPath(this,ol);
diff --git a/src/dirdef.h b/src/dirdef.h
index 8f4fbc2..9a8a5ad 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -54,7 +54,7 @@ class DirDef : public Definition
     bool isLinkableInProject() const;
     bool isLinkable() const;
     QCString displayName(bool=TRUE) const { return m_dispName; }
-    QCString shortName() const { return m_shortName; }
+    const QCString &shortName() const { return m_shortName; }
     void addSubDir(DirDef *subdir);
     FileList *   getFiles() const        { return m_fileList; }
     void addFile(FileDef *fd);
@@ -72,6 +72,7 @@ class DirDef : public Definition
     // generate output
     void writeDocumentation(OutputList &ol);
     void writeDepGraph(FTextStream &t);
+    void writeTagFile(FTextStream &t);
 
     static DirDef *mergeDirectoryInTree(const QCString &path);
     bool visited;
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index cabb7ad..8530f31 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -178,14 +178,14 @@ class TextGeneratorDocbookImpl : public TextGeneratorIntf
 class DocbookCodeGenerator : public CodeOutputInterface
 {
   public:
-    DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
+    DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_col(0),
     m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) {}
     virtual ~DocbookCodeGenerator() {}
 
     void codify(const char *text)
     {
       Docbook_DB(("(codify \"%s\")\n",text));
-      writeDocbookCodeString(m_t,text,col);
+      writeDocbookCodeString(m_t,text,m_col);
     }
     void writeCodeLink(const char *ref,const char *file,
         const char *anchor,const char *name,
@@ -193,7 +193,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
     {
       Docbook_DB(("(writeCodeLink)\n"));
       writeDocbookLink(m_t,ref,file,anchor,name,tooltip);
-      col+=strlen(name);
+      m_col+=strlen(name);
     }
     void writeTooltip(const char *, const DocLinkInfo &, const char *,
                       const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -217,7 +217,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
         }
       }
       m_insideCodeLine=TRUE;
-      col=0;
+      m_col=0;
     }
     void endCodeLine()
     {
@@ -255,7 +255,6 @@ class DocbookCodeGenerator : public CodeOutputInterface
       {
         m_refId=compId;
         if (anchorId) m_refId+=(QCString)"_1"+anchorId;
-        m_isMemberRef = anchorId!=0;
         if (extRef) m_external=extRef;
       }
     }
@@ -275,8 +274,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
     QCString m_refId;
     QCString m_external;
     int m_lineNumber;
-    bool m_isMemberRef;
-    int col;
+    int m_col;
     bool m_insideCodeLine;
     bool m_insideSpecialHL;
 };
@@ -486,6 +484,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
         }
         t << endl << "}";
         t << "</literallayout>" << endl;
+        if (md->briefDescription())
+        {
+            t << "<para><emphasis>";
+            writeDocbookString(t,md->briefDescription());
+            t << "</emphasis></para>" << endl;
+        }
       }
     }
     else if (md->memberType()==MemberType_Define) 
@@ -538,6 +542,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
           t << memberOutputFileBase(md);
         }
         t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+        if (md->briefDescription())
+        {
+            t << "<para><emphasis>";
+            writeDocbookString(t,md->briefDescription());
+            t << "</emphasis></para>" << endl;
+        }
       }
     }
     else if (md->memberType()==MemberType_Typedef) 
@@ -556,6 +566,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
         t << memberOutputFileBase(md);
       }
       t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+      if (md->briefDescription())
+      {
+          t << "<para><emphasis>";
+          writeDocbookString(t,md->briefDescription());
+          t << "</emphasis></para>" << endl;
+      }
     }
     else if (md->memberType()==MemberType_Function) 
     {
@@ -573,11 +589,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
       t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
       t << " (" << endl;
       ArgumentList *declAl = md->declArgumentList();
-      ArgumentList *defAl = md->argumentList();
       if (declAl && declAl->count()>0)
       {
         ArgumentListIterator declAli(*declAl);
-        ArgumentListIterator defAli(*defAl);
         Argument *a;
         int cnt=0;
         for (declAli.toFirst();(a=declAli.current());++declAli)
@@ -599,6 +613,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
         }
       }
       t << ")";
+      if (md->briefDescription())
+      {
+          t << "<para><emphasis>";
+          writeDocbookString(t,md->briefDescription());
+          t << "</emphasis></para>" << endl;
+      }
     }
     else
     {
@@ -633,7 +653,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
         MemberListIterator emli(*enumFields);
         MemberDef *emd;
         t << "               <formalpara>" << endl;
-        t << "                    <title>Enumerator:</title>" << endl;
+        t << "                    <title>" << theTranslator->trEnumerationValues() << ":</title>" << endl;
         t << "                    <variablelist>" << endl;
         for (emli.toFirst();(emd=emli.current());++emli) 
         {
@@ -643,9 +663,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
           writeDocbookString(t,emd->name());
           t << "</term>" << endl;
           t << "                            <listitem>" << endl;
-          t << "                                <para>";
-          writeDocbookString(t,emd->briefDescription());
-          t << "</para>" << endl;
+          if(Config_getBool("REPEAT_BRIEF"))
+          {
+              t << "                                <para>";
+              writeDocbookString(t,emd->briefDescription());
+              t << "</para>" << endl;
+          }
           t << "                            </listitem>" << endl;
           t << "                        </varlistentry>" << endl;
         }
@@ -683,9 +706,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
       }
       t << "_1" << md->anchor() << "\">" << endl;
       t << "                <title>" << convertToXML(md->definition()) << "</title>";
-      t << " <emphasis>";
-      writeDocbookString(t,md->briefDescription());
-      t << "</emphasis>" << endl;
+      if(Config_getBool("REPEAT_BRIEF"))
+      {
+          t << " <emphasis>";
+          writeDocbookString(t,md->briefDescription());
+          t << "</emphasis>" << endl;
+      }
       t << "                ";
       writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
       t << endl;
@@ -704,9 +730,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
       }
       t << "_1" << md->anchor() << "\">" << endl;
       t << "                <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>";
-      t << " <emphasis>";
-      writeDocbookString(t,md->briefDescription());
-      t << "</emphasis>" << endl;
+      if(Config_getBool("REPEAT_BRIEF"))
+      {
+          t << " <emphasis>";
+          writeDocbookString(t,md->briefDescription());
+          t << "</emphasis>" << endl;
+      }
       t << "                ";
       writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
       t << endl;
@@ -766,9 +795,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
         }
         t << "_1" << md->anchor() << "\">" << endl;
         t << "                <title>" << convertToXML(md->definition()) << "</title>";
-        t << " <emphasis>";
-        writeDocbookString(t,md->briefDescription());
-        t << "</emphasis>" << endl;
+        if(Config_getBool("REPEAT_BRIEF"))
+        {
+            t << " <emphasis>";
+            writeDocbookString(t,md->briefDescription());
+            t << "</emphasis>" << endl;
+        }
         t << "                ";
         writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
         t << endl;
@@ -778,7 +810,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
   }
 }
 
-static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,const char *kind,
+static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,const char *,
     bool detailed=0, const char *header=0,const char *documentation=0)
 {
   if (ml==0) return;
@@ -786,7 +818,6 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
   MemberDef *md;
   int count=0;
   int doc_count=0;
-  QCString compkind = kind;
   QCString title, desctitle;
 
   for (mli.toFirst();(md=mli.current());++mli) 
@@ -798,59 +829,47 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
       count++;
     }
   }
+  
+  if (count==0) return; // empty list
 
   switch (ml->listType())
   {
-    case MemberListType_decDefineMembers:  title="Defines";             desctitle="Define Documentation";              break;
-    case MemberListType_decTypedefMembers: title="Typedefs";            desctitle="Typedef Documentation";             break;
-    case MemberListType_decEnumMembers:    title="Enumerations";        desctitle="Enumeration Type documentation";    break;
-    case MemberListType_decFuncMembers:    title="Functions";           desctitle="Function Documentation";            break;
-    case MemberListType_decVarMembers:     title="Variables";           desctitle="Variable Documentation";            break;
-    case MemberListType_pubAttribs:        title="Public Attributes";   desctitle="Member Documentation";              break;
-    case MemberListType_priAttribs:        title="Private Attributes";  desctitle="Member Documentation";              break;
-    case MemberListType_proAttribs:        title="Protected Attributes";desctitle="Member Documentation";              break;
+    case MemberListType_decDefineMembers:  title=theTranslator->trDefines();             desctitle=theTranslator->trDefineDocumentation();            break;
+    case MemberListType_decTypedefMembers: title=theTranslator->trTypedefs();            desctitle=theTranslator->trTypedefDocumentation();           break;
+    case MemberListType_decEnumMembers:    title=theTranslator->trEnumerations();        desctitle=theTranslator->trEnumerationTypeDocumentation();   break;
+    case MemberListType_decFuncMembers:    title=theTranslator->trFunctions();           desctitle=theTranslator->trFunctionDocumentation();          break;
+    case MemberListType_decVarMembers:     title=theTranslator->trVariables();           desctitle=theTranslator->trVariableDocumentation();          break;
+    case MemberListType_pubAttribs:        title=theTranslator->trPublicAttribs();       desctitle=theTranslator->trMemberDataDocumentation();        break;
+    case MemberListType_priAttribs:        title=theTranslator->trPrivateAttribs();      desctitle=theTranslator->trMemberDataDocumentation();        break;
+    case MemberListType_proAttribs:        title=theTranslator->trProtectedAttribs();    desctitle=theTranslator->trMemberDataDocumentation();        break;
     default:                               title="";                    desctitle="";                                  break;
   }
 
-  if (count==0) return; // empty list
-
-  for (mli.toFirst();(md=mli.current());++mli) 
-  {
-    if (md->documentation()) 
-    {
-      doc_count++;
-    }
-  }
-
   if (detailed) 
   {
-    if (desctitle) 
+    for (mli.toFirst();(md=mli.current());++mli)
     {
-      if (desctitle=="Member Documentation") 
-      {
-        if (doc_count > 0) 
-        {
-          t << "        <simplesect>" << endl;
-          t << "            <title>" << desctitle << "</title>" << endl;
-        }
-      } 
-      else if (desctitle=="Define Documentation") 
-      {
-        if (doc_count > 0) 
+        if (md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
         {
-          t << "        <section>" << endl;
-          t << "            <title>" << desctitle << "</title>" << endl;
+            continue;
         }
-      } 
-      else 
-      {
+        doc_count = 1;
+        break;
+    }
+
+    if(doc_count == 0)
+    {
+        return;
+    }
+
+    if (desctitle)
+    {
         t << "        <section>" << endl;
         t << "            <title>" << desctitle << "</title>" << endl;
-      }
     }
   } else 
   {
-    t << "        <simplesect>" << endl;
+    t << "        <section>" << endl;
     if (header) 
     {
       t << "            <title>" << convertToXML(header) << "</title>" << endl;
@@ -873,36 +892,24 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
     // to prevent this duplication in the Docbook output, we filter those here.
     if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) 
     {
-      generateDocbookForMember(md,t,d,detailed);
+        if (detailed && md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
+        {
+            continue;
+        }
+
+        generateDocbookForMember(md,t,d,detailed);
     }
   }
   if (detailed) 
   {
     if (desctitle) 
     {
-      if (desctitle=="Member Documentation") 
-      {
-        if (doc_count > 0) 
-        {
-          t << "        </simplesect>" << endl;
-        }
-      } 
-      else if (desctitle=="Define Documentation") 
-      {
-        if (doc_count > 0) 
-        {
-          t << "        </section>" << endl;
-        }
-      } 
-      else 
-      {
         t << "        </section>" << endl;
-      }
     }
   } 
   else 
   {
-    t << "        </simplesect>" << endl;
+    t << "        </section>" << endl;
   }
 }
 
@@ -912,11 +919,11 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
   {
     ClassSDict::Iterator cli(*cl);
     ClassDef *cd;
-    QCString title = "Classes";
+    QCString title = theTranslator->trClasses();
 
     if (cli.toFirst()) 
     {
-      t << "        <simplesect>" << endl;
+      t << "        <section>" << endl;
       t << "            <title> " << title << " </title>" << endl;
     }
     for (cli.toFirst();(cd=cli.current());++cli)
@@ -928,6 +935,12 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
         t << "                    <listitem>" << endl;
         t << "                        <para>" << "struct <link linkend=\"" << classOutputFileBase(cd) << "\">" << convertToXML(cd->name()) << "</link>";
         t << "</para>" << endl;
+        if (cd->briefDescription())
+        {
+            t << "<para><emphasis>";
+            writeDocbookString(t,cd->briefDescription());
+            t << "</emphasis></para>" << endl;
+        }
         t << "                    </listitem>" << endl;
         t << "                </itemizedlist>" << endl;
         t << "            </para>" << endl;
@@ -935,7 +948,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
     }
     if (cli.toFirst()) 
     {
-      t << "        </simplesect>" << endl;
+      t << "        </section>" << endl;
     }
   }
 }
@@ -946,7 +959,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t)
   {
     NamespaceSDict::Iterator nli(*nl);
     NamespaceDef *nd;
-    QCString title = "Namespaces";
+    QCString title = theTranslator->trNamespaces();
 
     if (nli.toFirst()) 
     {
@@ -980,7 +993,7 @@ static void writeInnerFiles(const FileList *fl,FTextStream &t)
   {
     QListIterator<FileDef> fli(*fl);
     FileDef *fd;
-    QCString title = "Files";
+    QCString title =  theTranslator->trFile(TRUE,TRUE);
 
     if (fli.toFirst()) 
     {
@@ -1030,7 +1043,7 @@ static void writeInnerGroups(const GroupList *gl,FTextStream &t)
     if (gli.toFirst()) 
     {
       t << "    <simplesect>" << endl;
-      t << "        <title>Modules</title>" << endl;
+      t << "        <title>" << theTranslator->trModules() << "</title>" << endl;
       t << "    </simplesect>" << endl;
       t << "    <para>" << endl;
       t << "        <itemizedlist>" << endl;
@@ -1057,7 +1070,7 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t)
   {
     QListIterator<DirDef> subdirs(*dl);
     DirDef *subdir;
-    QCString title = "Directories";
+    QCString title = theTranslator->trDirectories();
     if (subdirs.toFirst()) 
     {
       t << "        <simplesect>" << endl;
@@ -1219,18 +1232,23 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti)
       generateDocbookSection(cd,t,ml,g_docbookSectionMapper.find(ml->listType()));
     }
   }
-  if (cd->briefDescription()) 
+
+  if(Config_getBool("REPEAT_BRIEF"))
   {
-    t << "    <simplesect>" << endl;
-    t << "        <title>Brief Description</title>" << endl;
-    writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
-    t << "    </simplesect>" << endl;
+      if (cd->briefDescription()) 
+      {
+          t << "    <simplesect>" << endl;
+          // A title as 'Brief Description' may not be necessary.
+          //t << "        <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+          writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
+          t << "    </simplesect>" << endl;
+      }
   }
 
   if (cd->documentation()) 
   {
     t << "        <simplesect>" << endl;
-    t << "            <title>Detailed Description</title>" << endl;
+    t << "            <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
     writeDocbookDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation());
     t << "                <para>Definition at line " << cd->getDefLine() << " of file " << stripPath(cd->getDefFileName()) << "</para>" << endl;
     t << "                <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1338,18 +1356,21 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti)
     }
   }
 
-  if (nd->briefDescription()) 
+  if(Config_getBool("REPEAT_BRIEF"))
   {
-    t << "    <simplesect>" << endl;
-    t << "        <title>Brief Description</title>" << endl;
-    writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
-    t << "    </simplesect>" << endl;
+      if (nd->briefDescription()) 
+      {
+          t << "    <simplesect>" << endl;
+          //t << "        <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+          writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
+          t << "    </simplesect>" << endl;
+      }
   }
 
   if (nd->documentation()) 
   {
     t << "        <simplesect>" << endl;
-    t << "            <title>Detailed Description</title>" << endl;
+    t << "            <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
     writeDocbookDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
     t << "                <para>Definition at line " << nd->getDefLine() << " of file " << stripPath(nd->getDefFileName()) << "</para>" << endl;
     t << "                <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1475,7 +1496,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
   }
 
   t << "    <simplesect>" << endl;
-  t << "        <title>Detailed Description</title>" << endl;
+  t << "        <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
   writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
   writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
   if (Config_getBool("FULL_PATH_NAMES")) 
@@ -1547,18 +1568,18 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
 
   if (gd->briefDescription()) 
   {
-    t << "    <simplesect>" << endl;
-    t << "        <title>Brief Description</title>" << endl;
+    //t << "    <section>" << endl;
+    //t << "        <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
     writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
-    t << "    </simplesect>" << endl;
+    //t << "    </section>" << endl;
   }
 
   if (gd->documentation()) 
   {
-    t << "        <simplesect>" << endl;
-    t << "            <title>Detailed Description</title>" << endl;
+    t << "        <section>" << endl;
+    t << "            <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
     writeDocbookDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation());
-    t << "        </simplesect>" << endl;
+    t << "        </section>" << endl;
   }
 
   writeInnerFiles(gd->getFiles(),t);
@@ -1625,8 +1646,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
   writeDocbookHeader_ID(t, dd->getOutputFileBase());
 
   t << "    <title>";
-  writeDocbookString(t, dd->displayName());
-  t << " Directory Reference";
+  t << theTranslator->trDirReference(dd->displayName());
   t << "</title>" << endl;
   if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
   {
@@ -1639,7 +1659,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
   writeInnerFiles(dd->getFiles(),t);
 
   t << "    <simplesect>" << endl;
-  t << "        <title>Detailed Description</title>" << endl;
+  t << "        <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
   writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
   writeDocbookDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
   t << "    <para>Directory location is " << dd->name() << "</para>" << endl;
@@ -1693,7 +1713,15 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
   } 
   else 
   {
-    QCString pid = pageName+"_1"+pageName;
+    QCString pid;
+    if(isExample)
+    {
+      pid = pageName;
+    }
+    else
+    {
+      pid = pageName+"_1"+pageName;
+    }
     writeDocbookHeader_ID(t, pid);
   }
 
@@ -1851,7 +1879,7 @@ void generateDocbook()
   if (gli.toFirst()) 
   {
     t << "    <chapter>" << endl;
-    t << "        <title>Module Documentation</title>" << endl;
+    t << "        <title>" << theTranslator->trModuleDocumentation() << "</title>" << endl;
   }
 
   for (;(gd=gli.current());++gli)
@@ -1876,7 +1904,7 @@ void generateDocbook()
     if (cli.toFirst()) 
     {
       t << "    <chapter>" << endl;
-      t << "        <title>Class Documentation</title>" << endl;
+      t << "        <title>" << theTranslator->trClassDocumentation() << "</title>" << endl;
     }
 
     for (cli.toFirst();(cd=cli.current());++cli)
@@ -1903,7 +1931,7 @@ void generateDocbook()
     if (fnli.toFirst()) 
     {
       t << "    <chapter>" << endl;
-      t << "        <title>File Documentation</title>" << endl;
+      t << "        <title>" << theTranslator->trFileDocumentation() << "</title>" << endl;
     }
 
     for (;(fn=fnli.current());++fnli)
@@ -1934,7 +1962,7 @@ void generateDocbook()
     if (sdi.toFirst()) 
     {
       t << "    <chapter>" << endl;
-      t << "        <title>Directory Documentation</title>" << endl;
+      t << "        <title>" << theTranslator->trDirDocumentation() << "</title>" << endl;
     }
 
     for (sdi.toFirst();(dir=sdi.current());++sdi)
@@ -1960,7 +1988,7 @@ void generateDocbook()
     if (pdi.toFirst()) 
     {
       t << "    <chapter>" << endl;
-      t << "        <title>Example Documentation</title>" << endl;
+      t << "        <title>" << theTranslator->trExampleDocumentation() << "</title>" << endl;
     }
 
     for (pdi.toFirst();(pd=pdi.current());++pdi)
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 9f2dbe3..29b3ea5 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -36,6 +36,53 @@
 #include "htmlentity.h"
 #include "plantuml.h"
 
+static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name,  QCString width,  QCString height)
+{
+  QCString tmpStr;
+  t << "    <figure>" << endl;
+  t << "        <title></title>" << endl;
+  t << "        <mediaobject>" << endl;
+  t << "            <imageobject>" << endl;
+  t << "                <imagedata";
+  if (!width.isEmpty())
+  {
+    t << " width=\"" << convertToXML(width) << "\"";
+  }
+  else
+  {
+    t << " width=\"50%\"";
+  }
+  if (!height.isEmpty())
+  {
+    t << " depth=\"" << convertToXML(tmpStr) << "\"";
+  }
+  t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << name << "\">";
+  t << "</imagedata>" << endl;
+  t << "            </imageobject>" << endl;
+  if (hasCaption)
+  {
+    t << "        <caption>" << endl;
+  }
+}
+
+static void visitPostEnd(FTextStream &t, const bool hasCaption)
+{
+  t << endl;
+  if (hasCaption)
+  {
+    t << "        </caption>" << endl;
+  }
+  t << "        </mediaobject>" << endl;
+  t << "    </figure>" << endl;
+}
+
+static void visitCaption(DocbookDocVisitor *parent, QList<DocNode> children)
+{
+  QListIterator<DocNode> cli(children);
+  DocNode *n;
+  for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
 DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
   : DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
 {
@@ -205,14 +252,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
         }
         file.writeBlock( stext, stext.length() );
         file.close();
-        m_t << "    <figure>" << endl;
-        m_t << "        <title>" << name << "</title>" << endl;
-        m_t << "        <mediaobject>" << endl;
-        m_t << "            <imageobject>" << endl;
-        writeDotFile(baseName);
-        m_t << "            </imageobject>" << endl;
-        m_t << "       </mediaobject>" << endl;
-        m_t << "    </figure>" << endl;
+        writeDotFile(baseName, s);
         m_t << "</para>" << endl;
       }
       break;
@@ -238,14 +278,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
         text+="}";
         file.writeBlock( text, text.length() );
         file.close();
-        m_t << "    <figure>" << endl;
-        m_t << "        <title>" << name << "</title>" << endl;
-        m_t << "        <mediaobject>" << endl;
-        m_t << "            <imageobject>" << endl;
-        writeMscFile(baseName);
-        m_t << "            </imageobject>" << endl;
-        m_t << "       </mediaobject>" << endl;
-        m_t << "    </figure>" << endl;
+        writeMscFile(baseName,s);
         m_t << "</para>" << endl;
       }
       break;
@@ -259,14 +292,8 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
         {
           shortName=shortName.right(shortName.length()-i-1);
         }
-        m_t << "    <figure>" << endl;
-        m_t << "        <title>" << shortName << "</title>" << endl;
-        m_t << "        <mediaobject>" << endl;
-        m_t << "            <imageobject>" << endl;
-        writePlantUMLFile(baseName);
-        m_t << "            </imageobject>" << endl;
-        m_t << "       </mediaobject>" << endl;
-        m_t << "    </figure>" << endl;
+        m_t << "<para>" << endl;
+        writePlantUMLFile(baseName,s);
         m_t << "</para>" << endl;
       }
       break;
@@ -850,8 +877,13 @@ void DocbookDocVisitor::visitPre(DocImage *img)
   {
     if (m_hide) return;
     m_t << endl;
-    m_t << "    <figure>" << endl;
-    m_t << "        <title>";
+    QCString baseName=img->name();
+    int i;
+    if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
+    {
+      baseName=baseName.right(baseName.length()-i-1);
+    }
+    visitPreStart(m_t, img -> hasCaption(), baseName, img -> width(), img -> height());
   }
   else
   {
@@ -865,39 +897,14 @@ void DocbookDocVisitor::visitPost(DocImage *img)
   if (img->type()==DocImage::DocBook)
   {
     if (m_hide) return;
-    QCString typevar;
-    m_t << "</title>" << endl;
-    m_t << "    <mediaobject>" << endl;
-    m_t << "        <imageobject>" << endl;
+    visitPostEnd(m_t, img -> hasCaption());
+    // copy the image to the output dir
     QCString baseName=img->name();
     int i;
     if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
     {
       baseName=baseName.right(baseName.length()-i-1);
     }
-    m_t << "            <imagedata";
-    if (!img->width().isEmpty())
-    {
-      m_t << " width=\"";
-      filter(img->width());
-      m_t << "\"";
-    }
-    else
-    {
-      m_t << " width=\"50%\"";
-    }
-    if (!img->height().isEmpty())
-    {
-      m_t << " depth=\"";
-      filter(img->height());
-      m_t << "\"";
-    }
-    m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "\">";
-    m_t << "</imagedata>" << endl;
-    m_t << "        </imageobject>" << endl;
-    m_t << "    </mediaobject>" << endl;
-    m_t << "    </figure>" << endl;
-    // copy the image to the output dir
     QCString m_file;
     bool ambig;
     FileDef *fd=findFileDef(Doxygen::imageNameDict, baseName, ambig);
@@ -1028,6 +1035,8 @@ void DocbookDocVisitor::visitPre(DocParamSect *s)
   }
   m_t << "                        </title>" << endl;
   m_t << "                        <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
+  m_t << "                        <colspec colwidth=\"1*\"/>" << endl;
+  m_t << "                        <colspec colwidth=\"4*\"/>" << endl;
   m_t << "                        <tbody>" << endl;
 }
 
@@ -1203,7 +1212,7 @@ void DocbookDocVisitor::popEnabled()
   delete v;
 }
 
-void DocbookDocVisitor::writeMscFile(const QCString &baseName)
+void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1213,13 +1222,12 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName)
   }
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
   writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP);
-  m_t << "                <imagedata";
-  m_t << " width=\"50%\"";
-  m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
-  m_t << "</imagedata>" << endl;
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
-void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName)
+void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1229,10 +1237,9 @@ void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName)
   }
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
   generatePlantUMLOutput(baseName,outDir,PUML_BITMAP);
-  m_t << "                <imagedata";
-  m_t << " width=\"50%\"";
-  m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
-  m_t << "</imagedata>" << endl;
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
 void DocbookDocVisitor::startMscFile(const QCString &fileName,
@@ -1255,50 +1262,17 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName,
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
   writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP);
   m_t << "<para>" << endl;
-  m_t << "    <figure>" << endl;
-  m_t << "        <title></title>" << endl;
-  m_t << "        <mediaobject>" << endl;
-  m_t << "            <imageobject>" << endl;
-  m_t << "                <imagedata";
-  if (!width.isEmpty())
-  {
-    m_t << " width=\"";
-    m_t << width;
-    m_t << "\"";
-  }
-  else
-  {
-    m_t << " width=\"50%\"";
-  }
-  if (!height.isEmpty())
-  {
-    m_t << " depth=\"";
-    m_t << height;
-    m_t << "\"";
-  }
-  m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << ".png" << "\">";
-  m_t << "</imagedata>" << endl;
-  m_t << "            </imageobject>" << endl;
-  if (hasCaption)
-  {
-    m_t << "        <caption>" << endl;
-  }
+  visitPreStart(m_t, hasCaption, baseName + ".png",  width,  height);
 }
 
 void DocbookDocVisitor::endMscFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "endl";
-  if (hasCaption)
-  {
-    m_t << "        </caption>" << endl;
-  }
-  m_t << "        </mediaobject>" << endl;
-  m_t << "    </figure>" << endl;
+  visitPostEnd(m_t, hasCaption);
   m_t << "</para>" << endl;
 }
 
-void DocbookDocVisitor::writeDiaFile(const QCString &baseName)
+void DocbookDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1308,9 +1282,9 @@ void DocbookDocVisitor::writeDiaFile(const QCString &baseName)
   }
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
   writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_BITMAP);
-  m_t << "                <imagedata";
-  m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">";
-  m_t << "</imagedata>" << endl;
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
 void DocbookDocVisitor::startDiaFile(const QCString &fileName,
@@ -1329,50 +1303,21 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName,
   {
     baseName=baseName.left(i);
   }
-  baseName.prepend("msc_");
+  baseName.prepend("dia_");
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
   writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP);
   m_t << "<para>" << endl;
-  m_t << "    <figure>" << endl;
-  m_t << "        <title></title>" << endl;
-  m_t << "        <mediaobject>" << endl;
-  m_t << "            <imageobject>" << endl;
-  m_t << "                <imagedata";
-  if (!width.isEmpty())
-  {
-    m_t << " width=\"";
-    m_t << width;
-    m_t << "\"";
-  }
-  else if (!height.isEmpty())
-  {
-    m_t << " depth=\"";
-    m_t << height;
-    m_t << "\"";
-  }
-  m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">";
-  m_t << "</imagedata>" << endl;
-  m_t << "            </imageobject>" << endl;
-  if (hasCaption)
-  {
-    m_t << "        <caption>" << endl;
-  }
+  visitPreStart(m_t, hasCaption, baseName + ".png",  width,  height);
 }
 
 void DocbookDocVisitor::endDiaFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "endl";
-  if (hasCaption)
-  {
-    m_t << "        </caption>" << endl;
-  }
-  m_t << "        </mediaobject>" << endl;
-  m_t << "    </figure>" << endl;
+  visitPostEnd(m_t, hasCaption);
   m_t << "</para>" << endl;
 }
 
-void DocbookDocVisitor::writeDotFile(const QCString &baseName)
+void DocbookDocVisitor::writeDotFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1381,13 +1326,10 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName)
     shortName=shortName.right(shortName.length()-i-1);
   }
   QCString outDir = Config_getString("DOCBOOK_OUTPUT");
-  QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
   writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP);
-  m_t << "                <imagedata";
-  //If no width is specified use default value for PDF rendering
-  m_t << " width=\"50%\"";
-  m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << "." << imgExt << "\">";
-  m_t << "</imagedata>" << endl;
+  visitPreStart(m_t, s->hasCaption(), baseName + ".dot", s->width(),s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
 void DocbookDocVisitor::startDotFile(const QCString &fileName,
@@ -1411,46 +1353,14 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
   QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
   writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP);
   m_t << "<para>" << endl;
-  m_t << "    <figure>" << endl;
-  m_t << "        <title></title>" << endl;
-  m_t << "        <mediaobject>" << endl;
-  m_t << "            <imageobject>" << endl;
-  m_t << "                <imagedata";
-  if (!width.isEmpty())
-  {
-    m_t << " width=\"";
-    m_t << width;
-    m_t << "\"";
-  }
-  else
-  {
-    m_t << " width=\"50%\"";
-  }
-  if (!height.isEmpty())
-  {
-    m_t << " depth=\"";
-    m_t << height;
-    m_t << "\"";
-  }
-  m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "." << imgExt << "\">";
-  m_t << "</imagedata>" << endl;
-  m_t << "            </imageobject>" << endl;
-  if (hasCaption)
-  {
-    m_t << "        <caption>" << endl;
-  }
+  visitPreStart(m_t, hasCaption, baseName + "." + imgExt,  width,  height);
 }
 
 void DocbookDocVisitor::endDotFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "endl";
-  if (hasCaption)
-  {
-    m_t << "        </caption>" << endl;
-  }
-  m_t << "        </mediaobject>" << endl;
-  m_t << "    </figure>" << endl;
+  m_t << endl;
+  visitPostEnd(m_t, hasCaption);
   m_t << "</para>" << endl;
 }
 
diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h
index dd67aba..3796d8a 100644
--- a/src/docbookvisitor.h
+++ b/src/docbookvisitor.h
@@ -147,16 +147,16 @@ class DocbookDocVisitor : public DocVisitor
     void startMscFile(const QCString &fileName,const QCString &width,
     const QCString &height, bool hasCaption);
     void endMscFile(bool hasCaption);
-    void writeMscFile(const QCString &fileName);
+    void writeMscFile(const QCString &fileName, DocVerbatim *s);
     void startDiaFile(const QCString &fileName,const QCString &width,
                       const QCString &height, bool hasCaption);
     void endDiaFile(bool hasCaption);
-    void writeDiaFile(const QCString &fileName);
+    void writeDiaFile(const QCString &fileName, DocVerbatim *s);
     void startDotFile(const QCString &fileName,const QCString &width,
     const QCString &height, bool hasCaption);
     void endDotFile(bool hasCaption);
-    void writeDotFile(const QCString &fileName);
-    void writePlantUMLFile(const QCString &fileName);
+    void writeDotFile(const QCString &fileName, DocVerbatim *s);
+    void writePlantUMLFile(const QCString &fileName, DocVerbatim *s);
     //--------------------------------------
     // state variables
     //--------------------------------------
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 8be11c6..5208bbe 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -76,7 +76,8 @@ static const char *sectionLevelToName[] =
   "section",
   "subsection",
   "subsubsection",
-  "paragraph"
+  "paragraph",
+  "subparagraph"
 };
 
 //---------------------------------------------------------------------------
@@ -231,6 +232,29 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
 
 //---------------------------------------------------------------------------
 
+// replaces { with < and } with > and also
+// replaces > with < and > with > within string s
+static void unescapeCRef(QCString &s)
+{
+  QCString tmp(s);
+  char *p = tmp.rawData();
+  if (p)
+  {
+    char c;
+    while ((c=*p))
+    {
+      if (c=='{') c='<'; else if (c=='}') c='>';
+      *p++=c;
+    }
+  }
+
+  tmp=substitute(tmp,"<","<");
+  tmp=substitute(tmp,">",">");
+  s = tmp;
+}
+
+//---------------------------------------------------------------------------
+
 /*! search for an image in the imageNameDict and if found
  * copies the image to the output directory (which depends on the \a type
  * parameter).
@@ -818,12 +842,10 @@ static bool defaultHandleToken(DocNode *parent,int tok,
                                QList<DocNode> &children,bool
                                handleWord=TRUE);
 
-
 static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
                                const QCString &cmdName)
 {
   DBG(("handleStyleArgument(%s)\n",qPrint(cmdName)));
-  QCString tokenName = g_token->name;
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
@@ -1026,11 +1048,11 @@ static void handleUnclosedStyleCommands()
   }
 }
 
-static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
+static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignoreAutoLinkFlag=FALSE)
 {
   QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE);
   static bool autolinkSupport = Config_getBool("AUTOLINK_SUPPORT");
-  if (!autolinkSupport) // no autolinking -> add as normal word
+  if (!autolinkSupport && !ignoreAutoLinkFlag) // no autolinking -> add as normal word
   {
     children.append(new DocWord(parent,name));
     return;
@@ -1112,7 +1134,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
     // special case, where matching Foo: fails to be an Obj-C reference, 
     // but Foo itself might be linkable.
     g_token->name=g_token->name.left(len-1);
-    handleLinkedWord(parent,children);
+    handleLinkedWord(parent,children,ignoreAutoLinkFlag);
     children.append(new DocWord(parent,":"));
   }
   else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-p")))
@@ -1157,7 +1179,6 @@ static void handleParameterType(DocNode *parent,QList<DocNode> &children,const Q
 {
   QCString name = g_token->name;
   int p=0,i;
-  QCString type;
   while ((i=paramTypes.find('|',p))!=-1)
   {
     g_token->name = paramTypes.mid(p,i-p);
@@ -1219,10 +1240,84 @@ static DocAnchor *handleAnchor(DocNode *parent)
 }
 
 
+/* Helper function that deals with the title, width, and height arguments of various commands.
+ * @param[in] cmd        Command id for which to extract caption and size info.
+ * @param[in] parent     Parent node, owner of the children list passed as
+ *                       the third argument.
+ * @param[in] children   The list of child nodes to which the node representing
+ *                       the token can be added.
+ * @param[out] width     the extracted width specifier
+ * @param[out] height    the extracted height specifier
+ */
+static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocNode> &children, QCString &width,QCString &height)
+{
+  g_nodeStack.push(parent);
+
+  // parse title
+  doctokenizerYYsetStateTitle();
+  int tok;
+  while ((tok=doctokenizerYYlex()))
+  {
+    if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
+    {
+      // special case: no title, but we do have a size indicator
+      doctokenizerYYsetStateTitleAttrValue();
+      // strip =
+      g_token->name = g_token->name.left(g_token->name.length()-1);
+      break;
+    }
+    if (!defaultHandleToken(parent,tok,children))
+    {
+      switch (tok)
+      {
+        case TK_COMMAND:
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\%s",
+              qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+          break;
+        case TK_SYMBOL:
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
+              qPrint(g_token->name));
+          break;
+        default:
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
+              tokToString(tok));
+          break;
+      }
+    }
+  }
+  // parse size attributes
+  if (tok == 0)
+  {
+    tok=doctokenizerYYlex();
+  }
+  while (tok==TK_WORD) // there are values following the title
+  {
+    if (g_token->name=="width")
+    {
+      width = g_token->chars;
+    }
+    else if (g_token->name=="height")
+    {
+      height = g_token->chars;
+    }
+    else
+    {
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'",
+                     qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+    }
+    tok=doctokenizerYYlex();
+  }
+  doctokenizerYYsetStatePara();
+
+  handlePendingStyleCommands(parent,children);
+  DocNode *n=g_nodeStack.pop();
+  ASSERT(n==parent);
+}
+
 /* Helper function that deals with the most common tokens allowed in
- * title like sections. 
- * @param parent     Parent node, owner of the children list passed as 
- *                   the third argument. 
+ * title like sections.
+ * @param parent     Parent node, owner of the children list passed as
+ *                   the third argument.
  * @param tok        The token to process.
  * @param children   The list of child nodes to which the node representing
  *                   the token can be added.
@@ -1409,6 +1504,17 @@ reparsetoken:
             doctokenizerYYsetStatePara();
           }
           break;
+        case CMD_SETSCOPE:
+          {
+            QCString scope;
+            doctokenizerYYsetStateSetScope();
+            doctokenizerYYlex();
+            scope = g_token->name;
+            g_context = scope;
+            //printf("Found scope='%s'\n",scope.data());
+            doctokenizerYYsetStatePara();
+          }
+          break;
         default:
           return FALSE;
       }
@@ -2031,7 +2137,6 @@ DocXRefItem::DocXRefItem(DocNode *parent,int id,const char *key) :
 
 bool DocXRefItem::parse()
 {
-  QCString listName;
   RefList *refList = Doxygen::xrefLists->find(m_key); 
   if (refList && 
       (
@@ -2088,6 +2193,11 @@ DocFormula::DocFormula(DocNode *parent,int id) :
     m_name.sprintf("form_%d",m_id);
     m_text = formula->getFormulaText();
   }
+  else // wrong \form#<n> command
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Wrong formula id %d",id);
+    m_id = -1;
+  }
 }
 
 //---------------------------------------------------------------------------
@@ -2365,7 +2475,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
       //    compound->definitionType());
       return;
     }
-    else if (compound->definitionType()==Definition::TypeFile && 
+    else if (compound && compound->definitionType()==Definition::TypeFile &&
              ((FileDef*)compound)->generateSourceFile()
             ) // undocumented file that has source code we can link to
     {
@@ -2460,11 +2570,11 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
 {
   static uint numBibFiles = Config_getList("CITE_BIB_FILES").count();
   m_parent = parent;
-  QCString anchor;
   //printf("DocCite::DocCite(target=%s)\n",target.data());
   ASSERT(!target.isEmpty());
   m_relPath = g_relPath;
   CiteInfo *cite = Doxygen::citeDict->find(target);
+  //printf("cite=%p text='%s' numBibFiles=%d\n",cite,cite?cite->text.data():"<null>",numBibFiles);
   if (numBibFiles>0 && cite && !cite->text.isEmpty()) // ref to citation
   {
     m_text         = cite->text;
@@ -2476,17 +2586,28 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
     return;
   }
   m_text = target;
-  warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
-           qPrint(target));
+  if (numBibFiles==0)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"\\cite command found but no bib files specified via CITE_BIB_FILES!");
+  }
+  else if (cite==0)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
+             qPrint(target));
+  }
+  else
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"\\cite command to '%s' does not have an associated number",
+             qPrint(target));
+  }
 }
 
 //---------------------------------------------------------------------------
 
 DocLink::DocLink(DocNode *parent,const QCString &target) 
 {
-  m_parent = parent; 
-  Definition *compound;
-  //PageInfo *page;
+  m_parent = parent;
+  Definition *compound = 0;
   QCString anchor;
   m_refText = target;
   m_relPath = g_relPath;
@@ -2503,7 +2624,7 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
       m_file = compound->getOutputFileBase();
       m_ref  = compound->getReference();
     }
-    else if (compound->definitionType()==Definition::TypeFile && 
+    else if (compound && compound->definitionType()==Definition::TypeFile && 
              ((FileDef*)compound)->generateSourceFile()
             ) // undocumented file that has source code we can link to
     {
@@ -2618,53 +2739,7 @@ DocDotFile::DocDotFile(DocNode *parent,const QCString &name,const QCString &cont
 
 void DocDotFile::parse()
 {
-  g_nodeStack.push(this);
-  DBG(("DocDotFile::parse() start\n"));
-
-  doctokenizerYYsetStateTitle();
-  int tok;
-  while ((tok=doctokenizerYYlex()))
-  {
-    if (!defaultHandleToken(this,tok,m_children))
-    {
-      switch (tok)
-      {
-        case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\dotfile",
-	       qPrint(g_token->name));
-          break;
-        case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
-               qPrint(g_token->name));
-          break;
-        default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
-		tokToString(tok));
-          break;
-      }
-    }
-  }
-  tok=doctokenizerYYlex();
-  while (tok==TK_WORD) // there are values following the title
-  {
-    if (g_token->name=="width") 
-    {
-      m_width=g_token->chars;
-    }
-    else if (g_token->name=="height") 
-    {
-      m_height=g_token->chars;
-    }
-    else 
-    {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
-            qPrint(g_token->name));
-    }
-    tok=doctokenizerYYlex();
-  }
-  ASSERT(tok==0);
-  doctokenizerYYsetStatePara();
-  handlePendingStyleCommands(this,m_children);
+  defaultHandleTitleAndSize(CMD_DOTFILE,this,m_children,m_width,m_height);
 
   bool ambig;
   FileDef *fd = findFileDef(Doxygen::dotFileNameDict,m_name,ambig);
@@ -2688,10 +2763,6 @@ void DocDotFile::parse()
     warn_doc_error(g_fileName,doctokenizerYYlineno,"included dot file %s is not found "
            "in any of the paths specified via DOTFILE_DIRS!",qPrint(m_name));
   }
-
-  DBG(("DocDotFile::parse() end\n"));
-  DocNode *n=g_nodeStack.pop();
-  ASSERT(n==this);
 }
 
 DocMscFile::DocMscFile(DocNode *parent,const QCString &name,const QCString &context) : 
@@ -2702,53 +2773,7 @@ DocMscFile::DocMscFile(DocNode *parent,const QCString &name,const QCString &cont
 
 void DocMscFile::parse()
 {
-  g_nodeStack.push(this);
-  DBG(("DocMscFile::parse() start\n"));
-
-  doctokenizerYYsetStateTitle();
-  int tok;
-  while ((tok=doctokenizerYYlex()))
-  {
-    if (!defaultHandleToken(this,tok,m_children))
-    {
-      switch (tok)
-      {
-        case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
-	       qPrint(g_token->name));
-          break;
-        case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
-               qPrint(g_token->name));
-          break;
-        default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
-		tokToString(tok));
-          break;
-      }
-    }
-  }
-  tok=doctokenizerYYlex();
-  while (tok==TK_WORD) // there are values following the title
-  {
-    if (g_token->name=="width") 
-    {
-      m_width=g_token->chars;
-    }
-    else if (g_token->name=="height") 
-    {
-      m_height=g_token->chars;
-    }
-    else 
-    {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
-            qPrint(g_token->name));
-    }
-    tok=doctokenizerYYlex();
-  }
-  ASSERT(tok==0);
-  doctokenizerYYsetStatePara();
-  handlePendingStyleCommands(this,m_children);
+  defaultHandleTitleAndSize(CMD_MSCFILE,this,m_children,m_width,m_height);
 
   bool ambig;
   FileDef *fd = findFileDef(Doxygen::mscFileNameDict,m_name,ambig);
@@ -2772,10 +2797,6 @@ void DocMscFile::parse()
     warn_doc_error(g_fileName,doctokenizerYYlineno,"included msc file %s is not found "
            "in any of the paths specified via MSCFILE_DIRS!",qPrint(m_name));
   }
-
-  DBG(("DocMscFile::parse() end\n"));
-  DocNode *n=g_nodeStack.pop();
-  ASSERT(n==this);
 }
 
 //---------------------------------------------------------------------------
@@ -2788,53 +2809,7 @@ DocDiaFile::DocDiaFile(DocNode *parent,const QCString &name,const QCString &cont
 
 void DocDiaFile::parse()
 {
-  g_nodeStack.push(this);
-  DBG(("DocDiaFile::parse() start\n"));
-
-  doctokenizerYYsetStateTitle();
-  int tok;
-  while ((tok=doctokenizerYYlex()))
-  {
-    if (!defaultHandleToken(this,tok,m_children))
-    {
-      switch (tok)
-      {
-        case TK_COMMAND:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\diafile",
-	       qPrint(g_token->name));
-          break;
-        case TK_SYMBOL:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
-               qPrint(g_token->name));
-          break;
-        default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
-		tokToString(tok));
-          break;
-      }
-    }
-  }
-  tok=doctokenizerYYlex();
-  while (tok==TK_WORD) // there are values following the title
-  {
-    if (g_token->name=="width")
-    {
-      m_width=g_token->chars;
-    }
-    else if (g_token->name=="height")
-    {
-      m_height=g_token->chars;
-    }
-    else
-    {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
-            qPrint(g_token->name));
-    }
-    tok=doctokenizerYYlex();
-  }
-  ASSERT(tok==0);
-  doctokenizerYYsetStatePara();
-  handlePendingStyleCommands(this,m_children);
+  defaultHandleTitleAndSize(CMD_DIAFILE,this,m_children,m_width,m_height);
 
   bool ambig;
   FileDef *fd = findFileDef(Doxygen::diaFileNameDict,m_name,ambig);
@@ -2858,10 +2833,6 @@ void DocDiaFile::parse()
     warn_doc_error(g_fileName,doctokenizerYYlineno,"included dia file %s is not found "
            "in any of the paths specified via DIAFILE_DIRS!",qPrint(m_name));
   }
-
-  DBG(("DocDiaFile::parse() end\n"));
-  DocNode *n=g_nodeStack.pop();
-  ASSERT(n==this);
 }
 
 //---------------------------------------------------------------------------
@@ -2885,7 +2856,7 @@ void DocVhdlFlow::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\vhdlflow",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
@@ -2924,66 +2895,7 @@ DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString
 
 void DocImage::parse()
 {
-  g_nodeStack.push(this);
-  DBG(("DocImage::parse() start\n"));
-
-  // parse title
-  doctokenizerYYsetStateTitle();
-  int tok;
-  while ((tok=doctokenizerYYlex()))
-  {
-    if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
-    {
-      // special case: no title, but we do have a size indicator
-      doctokenizerYYsetStateTitleAttrValue();
-      // strip =
-      g_token->name=g_token->name.left(g_token->name.length()-1);
-      break;
-    } 
-    if (!defaultHandleToken(this,tok,m_children))
-    {
-      switch (tok)
-      {
-        case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\image",
-              qPrint(g_token->name));
-          break;
-        case TK_SYMBOL: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
-              qPrint(g_token->name));
-          break;
-        default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
-              tokToString(tok));
-          break;
-      }
-    }
-  }
-  // parse size attributes
-  tok=doctokenizerYYlex();
-  while (tok==TK_WORD) // there are values following the title
-  {
-    if (g_token->name=="width") 
-    {
-      m_width=g_token->chars;
-    }
-    else if (g_token->name=="height") 
-    {
-      m_height=g_token->chars;
-    }
-    else 
-    {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
-          qPrint(g_token->name));
-    }
-    tok=doctokenizerYYlex();
-  }
-  doctokenizerYYsetStatePara();
-
-  handlePendingStyleCommands(this,m_children);
-  DBG(("DocImage::parse() end\n"));
-  DocNode *n=g_nodeStack.pop();
-  ASSERT(n==this);
+  defaultHandleTitleAndSize(CMD_IMAGE,this,m_children,m_width,m_height);
 }
 
 
@@ -3307,7 +3219,6 @@ int DocIndexEntry::parse()
         break;
     }
   }
-  if (tok!=0) retval=tok;
   doctokenizerYYsetStatePara();
   m_entry = m_entry.stripWhiteSpace();
 endindexentry:
@@ -4670,12 +4581,15 @@ int DocParamList::parse(const QCString &cmdName)
   DBG(("DocParamList::parse() start\n"));
   g_nodeStack.push(this);
   DocPara *par=0;
+  QCString saveCmdName = cmdName;
 
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
     warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
+    retval=0;
+    goto endparamlist;
   }
   doctokenizerYYsetStateParam();
   tok=doctokenizerYYlex();
@@ -4715,7 +4629,13 @@ int DocParamList::parse(const QCString &cmdName)
     retval=0;
     goto endparamlist;
   }
-  ASSERT(tok==TK_WHITESPACE);
+  if (tok!=TK_WHITESPACE) /* premature end of comment block */
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token in comment block while parsing the "
+        "argument of command %s",qPrint(saveCmdName));
+    retval=0;
+    goto endparamlist;
+  }
 
   par = new DocPara(this);
   m_paragraphs.append(par);
@@ -5039,7 +4959,7 @@ void DocPara::handleImage(const QCString &cmdName)
         "%s is not valid",
         qPrint(imgType),qPrint(cmdName));
     return;
-  } 
+  }
   doctokenizerYYsetStateFile();
   tok=doctokenizerYYlex();
   doctokenizerYYsetStatePara();
@@ -5055,55 +4975,8 @@ void DocPara::handleImage(const QCString &cmdName)
   img->parse();
 }
 
-void DocPara::handleDotFile(const QCString &cmdName)
-{
-  int tok=doctokenizerYYlex();
-  if (tok!=TK_WHITESPACE)
-  {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
-        qPrint(cmdName));
-    return;
-  }
-  doctokenizerYYsetStateFile();
-  tok=doctokenizerYYlex();
-  doctokenizerYYsetStatePara();
-  if (tok!=TK_WORD)
-  {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
-        tokToString(tok),qPrint(cmdName));
-    return;
-  }
-  QCString name = g_token->name;
-  DocDotFile *df = new DocDotFile(this,name,g_context);
-  m_children.append(df);
-  df->parse();
-}
-
-void DocPara::handleMscFile(const QCString &cmdName)
-{
-  int tok=doctokenizerYYlex();
-  if (tok!=TK_WHITESPACE)
-  {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
-        qPrint(cmdName));
-    return;
-  }
-  doctokenizerYYsetStateFile();
-  tok=doctokenizerYYlex();
-  doctokenizerYYsetStatePara();
-  if (tok!=TK_WORD)
-  {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
-        tokToString(tok),qPrint(cmdName));
-    return;
-  }
-  QCString name = g_token->name;
-  DocMscFile *df = new DocMscFile(this,name,g_context);
-  m_children.append(df);
-  df->parse();
-}
-
-void DocPara::handleDiaFile(const QCString &cmdName)
+template<class T>
+void DocPara::handleFile(const QCString &cmdName)
 {
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
@@ -5122,7 +4995,7 @@ void DocPara::handleDiaFile(const QCString &cmdName)
     return;
   }
   QCString name = g_token->name;
-  DocDiaFile *df = new DocDiaFile(this,name,g_context);
+  T *df = new T(this,name,g_context);
   m_children.append(df);
   df->parse();
 }
@@ -5217,6 +5090,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
   QCString blockId;
   if (t==DocInclude::Snippet)
   {
+    if (fileName == "this") fileName=g_fileName;
     doctokenizerYYsetStateSnippet();
     tok=doctokenizerYYlex();
     doctokenizerYYsetStatePara();
@@ -5287,6 +5161,10 @@ int DocPara::handleStartCode()
   {
     lang="."+lang;
   }
+  if (g_xmlComment)
+  {
+    g_token->verb = substitute(substitute(g_token->verb,"<","<"),">",">");
+  }
   // search for the first non-whitespace line, index is stored in li
   int i=0,li=0,l=g_token->verb.length();
   while (i<l && (g_token->verb.at(i)==' ' || g_token->verb.at(i)=='\n'))
@@ -5552,18 +5430,32 @@ int DocPara::handleCommand(const QCString &cmdName)
       break;
     case CMD_DOT:
       {
+        DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName);
+        doctokenizerYYsetStatePara();
+        QCString width,height;
+        defaultHandleTitleAndSize(CMD_DOT,dv,dv->children(),width,height);
         doctokenizerYYsetStateDot();
         retval = doctokenizerYYlex();
-        m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName));
+        dv->setText(g_token->verb);
+        dv->setWidth(width);
+        dv->setHeight(height);
+        m_children.append(dv);
         if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"dot section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
     case CMD_MSC:
       {
+        DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName);
+        doctokenizerYYsetStatePara();
+        QCString width,height;
+        defaultHandleTitleAndSize(CMD_MSC,dv,dv->children(),width,height);
         doctokenizerYYsetStateMsc();
         retval = doctokenizerYYlex();
-        m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
+        dv->setText(g_token->verb);
+        dv->setWidth(width);
+        dv->setHeight(height);
+        m_children.append(dv);
         if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"msc section ended without end marker");
         doctokenizerYYsetStatePara();
       }
@@ -5571,15 +5463,26 @@ int DocPara::handleCommand(const QCString &cmdName)
     case CMD_STARTUML:
       {
         static QCString jarPath = Config_getString("PLANTUML_JAR_PATH");
+        doctokenizerYYsetStatePlantUMLOpt();
+        retval = doctokenizerYYlex();
+        QCString plantFile(g_token->sectionId);
+        DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::PlantUML,FALSE,plantFile);
+        doctokenizerYYsetStatePara();
+        QCString width,height;
+        defaultHandleTitleAndSize(CMD_STARTUML,dv,dv->children(),width,height);
         doctokenizerYYsetStatePlantUML();
         retval = doctokenizerYYlex();
+        dv->setText(g_token->verb);
+        dv->setWidth(width);
+        dv->setHeight(height);
         if (jarPath.isEmpty())
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"ignoring startuml command because PLANTUML_JAR_PATH is not set");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"ignoring \\startuml command because PLANTUML_JAR_PATH is not set");
+          delete dv;
         }
         else
         {
-          m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::PlantUML,FALSE,g_token->sectionId));
+          m_children.append(dv);
         }
         if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"startuml section ended without end marker");
         doctokenizerYYsetStatePara();
@@ -5697,16 +5600,16 @@ int DocPara::handleCommand(const QCString &cmdName)
       handleImage(cmdName);
       break;
     case CMD_DOTFILE:
-      handleDotFile(cmdName);
+      handleFile<DocDotFile>(cmdName);
       break;
     case CMD_VHDLFLOW:
       handleVhdlFlow();
       break;
     case CMD_MSCFILE:
-      handleMscFile(cmdName);
+      handleFile<DocMscFile>(cmdName);
       break;
     case CMD_DIAFILE:
-      handleDiaFile(cmdName);
+      handleFile<DocDiaFile>(cmdName);
       break;
     case CMD_LINK:
       handleLink(cmdName,FALSE);
@@ -5952,6 +5855,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
 
     case XML_SUMMARY:
     case XML_REMARKS:
+    case XML_EXAMPLE:
       g_xmlComment=TRUE;
       // fall through
     case XML_VALUE:
@@ -5961,7 +5865,6 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         retval = TK_NEWPARA;
       }
       break;
-    case XML_EXAMPLE:
     case XML_DESCRIPTION:
       if (insideTable(this))
       {
@@ -5974,6 +5877,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
     case XML_PARAM:
     case XML_TYPEPARAM:
       {
+        g_xmlComment=TRUE;
         QCString paramName;
         if (findAttribute(tagHtmlAttribs,"name",&paramName))
         {
@@ -6017,9 +5921,11 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       break;
     case XML_EXCEPTION:
       {
+        g_xmlComment=TRUE;
         QCString exceptName;
         if (findAttribute(tagHtmlAttribs,"cref",&exceptName))
         {
+          unescapeCRef(exceptName);
           retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE);
         }
         else
@@ -6044,6 +5950,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       }
       break;
     case XML_RETURNS:
+      g_xmlComment=TRUE;
       retval = handleSimpleSection(DocSimpleSect::Return,TRUE);
       g_hasReturnCommand=TRUE;
       break;
@@ -6064,12 +5971,13 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         //printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
         if (findAttribute(tagHtmlAttribs,"cref",&cref))
         {
+          unescapeCRef(cref);
           if (g_token->emptyTag) // <see cref="..."/> style
           {
             bool inSeeBlock = g_inSeeBlock;
             g_token->name = cref;
             g_inSeeBlock = TRUE;
-            handleLinkedWord(this,m_children);
+            handleLinkedWord(this,m_children,TRUE);
             g_inSeeBlock = inSeeBlock;
           }
           else // <see cref="...">...</see> style
@@ -6095,9 +6003,11 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       break;
     case XML_SEEALSO:
       {
+        g_xmlComment=TRUE;
         QCString cref;
         if (findAttribute(tagHtmlAttribs,"cref",&cref))
         {
+          unescapeCRef(cref);
           // Look for an existing "see" section
           DocSimpleSect *ss=0;
           QListIterator<DocNode> cli(m_children);
@@ -6152,6 +6062,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
     case XML_INCLUDE:
     case XML_PERMISSION:
       // These tags are defined in .Net but are currently unsupported
+      g_xmlComment=TRUE;
       break;
     case HTML_UNKNOWN:
       warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag <%s> found", qPrint(tagName));
@@ -6775,17 +6686,13 @@ int DocSection::parse()
   }
   else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
            (m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
-          ) 
+          )
   {
-    int level; 
-    if (retval==RetVal_Subsection) level=2; 
-    else if (retval==RetVal_Subsubsection) level=3;
-    else level=4;
+    int level = (retval==RetVal_Subsubsection) ? 3 : 4;
     warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected %s "
             "command found inside %s!",
             sectionLevelToName[level],sectionLevelToName[m_level]);
     retval=0; // stop parsing
-            
   }
   else
   {
@@ -7030,29 +6937,68 @@ static QCString extractCopyDocId(const char *data, uint &j, uint len)
   }
   e=j;
   QCString id(e-s+1);
-  if (e>s) memcpy(id.data(),data+s,e-s);
+  if (e>s) memcpy(id.rawData(),data+s,e-s);
   id.at(e-s)='\0';
   //printf("extractCopyDocId='%s' input='%s'\n",id.data(),&data[s]);
   return id;
 }
 
+// macro to check if the input starts with a specific command.
+// note that data[i] should point to the start of the command (\ or @ character)
+// and the sizeof(str) returns the size of str including the '\0' terminator;
+// a fact we abuse to skip over the start of the command character.
+#define CHECK_FOR_COMMAND(str,action) \
+   do if ((i+sizeof(str)<len) && qstrncmp(data+i+1,str,sizeof(str)-1)==0) \
+   { j=i+sizeof(str); action; } while(0)
+
 static uint isCopyBriefOrDetailsCmd(const char *data, uint i,uint len,bool &brief)
 {
   int j=0;
   if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
   {
-    if (i+10<len && qstrncmp(data+i+1,"copybrief",9)==0) // @copybrief or \copybrief
-    {
-      j=i+10;
-      brief=TRUE;
-    }
-    else if (i+12<len && qstrncmp(data+i+1,"copydetails",11)==0) // @copydetails or \copydetails
+    CHECK_FOR_COMMAND("copybrief",brief=TRUE);    // @copybrief or \copybrief
+    CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
+  }
+  return j;
+}
+
+static uint isVerbatimSection(const char *data,uint i,uint len,QCString &endMarker)
+{
+  int j=0;
+  if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
+  {
+    CHECK_FOR_COMMAND("dot",endMarker="enddot");
+    CHECK_FOR_COMMAND("code",endMarker="endcode");
+    CHECK_FOR_COMMAND("msc",endMarker="endmsc");
+    CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
+    CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
+    CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
+    CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
+    CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
+    CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
+    CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
+    CHECK_FOR_COMMAND("startuml",endMarker="enduml");
+  }
+  //printf("isVerbatimSection(%s)=%d)\n",QCString(&data[i]).left(10).data(),j);
+  return j;
+}
+
+static uint skipToEndMarker(const char *data,uint i,uint len,const QCString &endMarker)
+{
+  while (i<len)
+  {
+    if ((data[i]=='@' || data[i]=='\\') &&  // start of command character
+        (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
     {
-      j=i+12;
-      brief=FALSE;
+      if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker,endMarker.length())==0)
+      {
+        return i+endMarker.length()+1;
+      }
     }
+    i++;
   }
-  return j;
+  // oops no endmarker found...
+  return i<len ? i+1 : len;
 }
 
 static QCString processCopyDoc(const char *data,uint &len)
@@ -7087,7 +7033,7 @@ static QCString processCopyDoc(const char *data,uint &len)
               uint l=brief.length();
               buf.addStr(processCopyDoc(brief,l));
             }
-            else 
+            else
             {
               uint l=doc.length();
               buf.addStr(processCopyDoc(doc,l));
@@ -7101,13 +7047,30 @@ static QCString processCopyDoc(const char *data,uint &len)
                  isBrief?"brief":"details",id.data());
           }
         }
+        else
+        {
+          warn_doc_error(g_fileName,doctokenizerYYlineno,
+               "@copy%s or @copydoc target '%s' not found", isBrief?"brief":"details",
+               id.data());
+        }
         // skip over command
         i=j;
       }
       else
       {
-        buf.addChar(c);
-        i++;
+        QCString endMarker;
+        uint k = isVerbatimSection(data,i,len,endMarker);
+        if (k>0)
+        {
+          int orgPos = i;
+          i=skipToEndMarker(data,k,len,endMarker);
+          buf.addStr(data+orgPos,i-orgPos);
+        }
+        else
+        {
+          buf.addChar(c);
+          i++;
+        }
       }
     }
     else // not a command, just copy
diff --git a/src/docparser.h b/src/docparser.h
index 3dc3d84..e8ef754 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -447,6 +447,14 @@ class DocVerbatim : public DocNode
     QCString relPath() const     { return m_relPath; }
     QCString language() const    { return m_lang; }
     bool isBlock() const         { return m_isBlock; }
+    bool hasCaption() const      { return !m_children.isEmpty(); }
+    QCString width() const       { return m_width; }
+    QCString height() const      { return m_height; }
+    const QList<DocNode> &children() const { return m_children; }
+    QList<DocNode> &children()   { return m_children; }
+    void setText(const QCString &t)   { m_text=t;   }
+    void setWidth(const QCString &w)  { m_width=w;  }
+    void setHeight(const QCString &h) { m_height=h; }
 
   private:
     QCString  m_context;
@@ -457,6 +465,9 @@ class DocVerbatim : public DocNode
     QCString  m_relPath;
     QCString  m_lang;
     bool      m_isBlock;
+    QCString  m_width;
+    QCString  m_height;
+    QList<DocNode> m_children;
 };
 
 
@@ -686,7 +697,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
   private:
     HtmlAttribList m_attribs;
     QCString  m_name;
-    Type     m_type;
+    Type      m_type;
     QCString  m_width;
     QCString  m_height;
     QCString  m_relPath;
@@ -1114,9 +1125,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
                            int direction);
     void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t);
     void handleImage(const QCString &cmdName);
-    void handleDotFile(const QCString &cmdName);
-    void handleMscFile(const QCString &cmdName);
-    void handleDiaFile(const QCString &cmdName);
+    template<class T> void handleFile(const QCString &cmdName);
     void handleInclude(const QCString &cmdName,DocInclude::Type t);
     void handleLink(const QCString &cmdName,bool isJavaLink);
     void handleCite();
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index c95230b..ead8da1 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -161,5 +161,7 @@ void doctokenizerYYsetStateSnippet();
 void doctokenizerYYstartAutoList();
 void doctokenizerYYendAutoList();
 void doctokenizerYYsetStatePlantUML();
+void doctokenizerYYsetStateSetScope();
+void doctokenizerYYsetStatePlantUMLOpt();
 
 #endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index ea4a1a4..f30e829 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -49,6 +49,7 @@ static int g_inputPos = 0;
 static const char *g_inputString;
 static QCString g_fileName;
 static bool g_insidePre;
+static int g_sharpCount=0;
 
 // context for section finding phase
 static Definition  *g_definition;
@@ -320,9 +321,9 @@ static int yyread(char *buf,int max_size)
 }
 
 //--------------------------------------------------------------------------
-#define REAL_YY_DECL int doctokenizerYYlex (void)
-#define YY_DECL static int local_doctokinizer(void)
-#define LOCAL_YY_DECL local_doctokinizer()
+//#define REAL_YY_DECL int doctokenizerYYlex (void)
+//#define YY_DECL static int local_doctokinizer(void)
+//#define LOCAL_YY_DECL local_doctokinizer()
 
 %}
 
@@ -335,7 +336,7 @@ LABELID   [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
 PHPTYPE   [\\:a-z_A-Z0-9\x80-\xFF\-]+
 CITESCHAR [a-z_A-Z\x80-\xFF]
 CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
-CITEID    {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
+CITEID    {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
 MAILADR   ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
 OPTSTARS  ("//"{BLANK}*)?"*"*{BLANK}*
 LISTITEM  {BLANK}*[-]("#")?{WS}
@@ -370,12 +371,14 @@ SCOPECPP  {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
 SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
 SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
 FUNCARG   "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
+FUNCARG2  "("{FUNCPART}")"({BLANK}*("volatile"|"const"))?
 OPNEW     {BLANK}+"new"({BLANK}*"[]")?
 OPDEL     {BLANK}+"delete"({BLANK}*"[]")?
 OPNORM    {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
 OPCAST    {BLANK}+[^<(\r\n.,][^(\r\n.,]*
 OPMASK    ({BLANK}*{OPNORM}{FUNCARG})
 OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
+OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
 LNKWORD1  ("::"|"#")?{SCOPEMASK}
 CVSPEC    {BLANK}*("const"|"volatile")
 LNKWORD2  (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
@@ -390,9 +393,10 @@ HTMLTAG   "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
 HTMLKEYL  "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
 HTMLKEYU  "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
 HTMLKEYW  {HTMLKEYL}|{HTMLKEYU}
-REFWORD2  ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
+REFWORD2  ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG2}?
 REFWORD3  ({ID}":")*{ID}":"?
-REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
+REFWORD4  (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2})){CVSPEC}?
+REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
 
 %option noyywrap
 %option yylineno
@@ -433,6 +437,8 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 %x St_SkipTitle
 %x St_Anchor
 %x St_Snippet
+%x St_SetScope
+%x St_SetScopeEnd
 
 %x St_Sections
 %s St_SecLabel1
@@ -853,14 +859,28 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 <St_Msc>.              { /* msc text */
   			 g_token->verb+=yytext;
   		       }
-<St_PlantUMLOpt>\n     {
-                         g_token->sectionId=g_token->sectionId.stripWhiteSpace();
-                         BEGIN(St_PlantUML);
+<St_PlantUMLOpt>{BLANK}*"{"[^}]*"}" { // case 1: file name is specified as {filename}
+                         g_token->sectionId = QCString(yytext).stripWhiteSpace();
+                         // skip curly brackets around the optional image name
+			 g_token->sectionId = g_token->sectionId.mid(1,g_token->sectionId.length()-2).stripWhiteSpace();
+                         return RetVal_OK;
+                       }
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/{ID}"=" { // case 2: plain file name specified followed by an attribute
+                         g_token->sectionId = QCString(yytext).stripWhiteSpace();
+                         return RetVal_OK;
+                       }
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/"\"" { // case 3: plain file name specified followed by a quoted title
+                         g_token->sectionId = QCString(yytext).stripWhiteSpace();
+                         return RetVal_OK;
                        }
-<St_PlantUMLOpt>["{}]   { // skip curly brackets or quotes around the optional image name
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}*/\n { // case 4: plain file name specified without title or attributes
+                         g_token->sectionId = QCString(yytext).stripWhiteSpace();
+                         return RetVal_OK;
                        }
 <St_PlantUMLOpt>.      {
-                         g_token->sectionId += yytext;
+                         g_token->sectionId = "";
+                         unput(*yytext);
+                         return RetVal_OK;
                        }
 <St_PlantUML>{CMD}"enduml"  {
                          return RetVal_OK;
@@ -872,7 +892,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
   		       }
 <St_Title>"\""	       { // quoted title
   			 BEGIN(St_TitleQ);
-  		       } 
+  		       }
 <St_Title>[ \t]+       {
                          g_token->chars=yytext;
   			 return TK_WHITESPACE;
@@ -897,6 +917,13 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 			 g_token->paramDir=TokenInfo::Unspecified;
                          return TK_COMMAND;
                        }
+<St_TitleN>{ID}"="     { /* attribute */
+                         if (yytext[0]=='%') // strip % if present
+			   g_token->name = &yytext[1];
+			 else
+                           g_token->name = yytext;
+			 return TK_WORD;
+                       }
 <St_TitleN>{WORD1}     |
 <St_TitleN>{WORD2}     { /* word */
                          if (yytext[0]=='%') // strip % if present
@@ -942,8 +969,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
                        }
 <St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* { // title attribute
   			 g_token->name = yytext;
-			 g_token->name = g_token->name.left(
-			       g_token->name.find('=')).stripWhiteSpace();
+			 g_token->name = g_token->name.left(g_token->name.find('=')).stripWhiteSpace();
   			 BEGIN(St_TitleV);
   		       }
 <St_TitleV>[^ \t\r\n]+ { // attribute value
@@ -1009,6 +1035,34 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 <St_IntRef>{BLANK}+"\"" {
                          BEGIN(St_Ref2);
                        }
+<St_SetScope>{SCOPEMASK}{BLANK} {
+                         g_token->name = yytext;
+                         g_token->name = g_token->name.stripWhiteSpace();
+			 return TK_WORD;
+  		       }
+<St_SetScope>{SCOPEMASK}"<" {
+                         g_token->name = yytext;
+                         g_token->name = g_token->name.stripWhiteSpace();
+                         g_sharpCount=1;
+                         BEGIN(St_SetScopeEnd);
+                       }
+<St_SetScope>{BLANK}   {
+                       }
+<St_SetScopeEnd>"<"    {
+                         g_token->name += yytext;
+                         g_sharpCount++;
+                       }
+<St_SetScopeEnd>">"    {
+                         g_token->name += yytext;
+                         g_sharpCount--;
+                         if (g_sharpCount<=0)
+                         {
+                           return TK_WORD;
+                         }
+                       }
+<St_SetScopeEnd>.      {
+                         g_token->name += yytext;
+                       }
 <St_Ref2>"&"{ID}";"    { /* symbol */
                          g_token->name = yytext;
   		         return TK_SYMBOL;
@@ -1096,8 +1150,8 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 <St_Comment>"-->"      { /* end of html comment */
                          BEGIN(g_commentState); 
                        }
-<St_Comment>[^-\n]+       /* inside html comment */
-<St_Comment>.             /* inside html comment */
+<St_Comment>[^-]+      /* inside html comment */
+<St_Comment>.          /* inside html comment */
 
      /* State for skipping title (all chars until the end of the line) */
 
@@ -1224,7 +1278,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 			 return TK_COMMAND;
                        }
 <*>.                   { 
-                         warn(g_fileName,yylineno,"Unexpected character `%s'",yytext); 
+                         warn(g_fileName,yylineno,"Unexpected character `%s'",yytext);
 		       }
 %%
 
@@ -1341,13 +1395,19 @@ void doctokenizerYYsetStateMsc()
   BEGIN(St_Msc);
 }
 
-void doctokenizerYYsetStatePlantUML()
+void doctokenizerYYsetStatePlantUMLOpt()
 {
   g_token->verb="";
   g_token->sectionId="";
   BEGIN(St_PlantUMLOpt);
 }
 
+void doctokenizerYYsetStatePlantUML()
+{
+  g_token->verb="";
+  BEGIN(St_PlantUML);
+}
+
 void doctokenizerYYsetStateParam()
 {
   BEGIN(St_Param);
@@ -1408,6 +1468,11 @@ void doctokenizerYYsetStateSnippet()
   BEGIN(St_Snippet);
 }
 
+void doctokenizerYYsetStateSetScope()
+{
+  BEGIN(St_SetScope);
+}
+
 void doctokenizerYYcleanup()
 {
   yy_delete_buffer( YY_CURRENT_BUFFER );
@@ -1440,13 +1505,13 @@ void doctokenizerYYendAutoList()
   g_autoListLevel--;
 }
 
-REAL_YY_DECL
-{
-  printlex(yy_flex_debug, TRUE, __FILE__, g_fileName);
-  int retval = LOCAL_YY_DECL;
-  printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
-  return retval;
-}
+//REAL_YY_DECL
+//{
+//  printlex(yy_flex_debug, TRUE, __FILE__, g_fileName);
+//  int retval = LOCAL_YY_DECL;
+//  printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
+//  return retval;
+//}
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
 extern "C" { // some bogus code to keep the compiler happy
     void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
diff --git a/src/dot.cpp b/src/dot.cpp
index c64729a..036cc86 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -156,8 +156,6 @@ static const char svgZoomFooter[] =
 
 //--------------------------------------------------------------------
 
-static const int maxCmdLine = 40960;
-
 /*! mapping from protection levels to color names */
 static const char *normalEdgeColorMap[] =
 {
@@ -383,7 +381,7 @@ static bool convertMapFile(FTextStream &t,const char *mapName,
   while (!f.atEnd()) // foreach line
   {
     QCString buf(maxLineLen);
-    int numBytes = f.readLine(buf.data(),maxLineLen);
+    int numBytes = f.readLine(buf.rawData(),maxLineLen);
     buf[numBytes-1]='\0';
 
     if (buf.left(5)=="<area")
@@ -733,7 +731,7 @@ static bool checkAndUpdateMd5Signature(const QCString &baseName,
   {
     // read checksum
     QCString md5stored(33);
-    int bytesRead=f.readBlock(md5stored.data(),32);
+    int bytesRead=f.readBlock(md5stored.rawData(),32);
     md5stored[32]='\0';
     // compare checksum
     if (bytesRead==32 && md5==md5stored)
@@ -772,18 +770,18 @@ static bool checkDeliverables(const QCString &file1,
 
 //--------------------------------------------------------------------
 
-/** Class representing a list of DotNode objects. */
-class DotNodeList : public QList<DotNode>
+inline int DotNode::findParent( DotNode *n )
 {
-  public:
-    DotNodeList() : QList<DotNode>() {}
-   ~DotNodeList() {}
-  private:
-    int compareValues(const DotNode *n1,const DotNode *n2) const
-    {
-      return qstricmp(n1->m_label,n2->m_label);
-    }
-};
+  if ( !m_parents ) return -1;
+  return m_parents->find(n);
+}
+
+//--------------------------------------------------------------------
+
+int DotNodeList::compareValues(const DotNode *n1,const DotNode *n2) const
+{
+  return qstricmp(n1->m_label,n2->m_label);
+}
 
 //--------------------------------------------------------------------
 
@@ -988,7 +986,7 @@ bool DotFilePatcher::run()
   while (!fi.atEnd()) // foreach line
   {
     QCString line(maxLineLen);
-    int numBytes = fi.readLine(line.data(),maxLineLen);
+    int numBytes = fi.readLine(line.rawData(),maxLineLen);
     if (numBytes<=0)
     {
       break;
@@ -1093,7 +1091,11 @@ bool DotFilePatcher::run()
         Map *map = m_maps.at(mapId);
         //printf("patching FIG %d in file %s with contents of %s\n",
         //   mapId,m_patchFile.data(),map->mapFile.data());
-        writeVecGfxFigure(t,map->label,map->mapFile);
+        if (!writeVecGfxFigure(t,map->label,map->mapFile))
+        {
+          err("problem writing FIG %d figure!\n",mapId);
+          return FALSE;
+        }
       }
       else // error invalid map id!
       {
@@ -1131,11 +1133,12 @@ bool DotFilePatcher::run()
     while (!fi.atEnd()) // foreach line
     {
       QCString line(maxLineLen);
-      int numBytes = fi.readLine(line.data(),maxLineLen);
+      int numBytes = fi.readLine(line.rawData(),maxLineLen);
       if (numBytes<=0)
       {
         break;
       }
+      line.resize(numBytes+1);
       Map *map = m_maps.at(0); // there is only one 'map' for a SVG file
       t << replaceRef(line,map->relPath,map->urlOnly,map->context,"_top");
     }
@@ -1904,7 +1907,7 @@ void DotNode::write(FTextStream &t,
                     bool reNumber
                    )
 {
-  //printf("DotNode::write(%d) name=%s this=%p written=%d\n",distance,m_label.data(),this,m_written);
+  //printf("DotNode::write(%d) name=%s this=%p written=%d visible=%d\n",m_distance,m_label.data(),this,m_written,m_visible);
   if (m_written) return; // node already written to the output
   if (!m_visible) return; // node is not visible
   writeBox(t,gt,format,m_truncated==Truncated,reNumber);
@@ -1960,8 +1963,8 @@ void DotNode::writeXML(FTextStream &t,bool isClassGraph)
   if (!m_url.isEmpty())
   {
     QCString url(m_url);
-    char *refPtr = url.data();
-    char *urlPtr = strchr(url.data(),'$');
+    const char *refPtr = url.data();
+    char *urlPtr = strchr(url.rawData(),'$');
     if (urlPtr)
     {
       *urlPtr++='\0';
@@ -2028,8 +2031,8 @@ void DotNode::writeDocbook(FTextStream &t,bool isClassGraph)
   if (!m_url.isEmpty())
   {
     QCString url(m_url);
-    char *refPtr = url.data();
-    char *urlPtr = strchr(url.data(),'$');
+    const char *refPtr = url.data();
+    char *urlPtr = strchr(url.rawData(),'$');
     if (urlPtr)
     {
       *urlPtr++='\0';
@@ -2101,8 +2104,8 @@ void DotNode::writeDEF(FTextStream &t)
   if (!m_url.isEmpty())
   {
     QCString url(m_url);
-    char *refPtr = url.data();
-    char *urlPtr = strchr(url.data(),'$');
+    const char *refPtr = url.data();
+    char *urlPtr = strchr(url.rawData(),'$');
     if (urlPtr)
     {
       *urlPtr++='\0';
@@ -2257,12 +2260,106 @@ const DotNode *DotNode::findDocNode() const
 
 int DotGfxHierarchyTable::m_curNodeNumber;
 
+void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out,
+       const char *path,const char *fileName,int id) const
+{
+  QDir d(path);
+  QCString baseName;
+  QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+  baseName.sprintf("inherit_graph_%d",id);
+  QCString imgName = baseName+"."+ imgExt;
+  QCString mapName = baseName+".map";
+  QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
+  QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
+  QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
+  QListIterator<DotNode> dnli2(*m_rootNodes);
+  DotNode *node;
+
+  // compute md5 checksum of the graph were are about to generate
+  QGString theGraph;
+  FTextStream md5stream(&theGraph);
+  writeGraphHeader(md5stream,theTranslator->trGraphicalHierarchy());
+  md5stream << "  rankdir=\"LR\";" << endl;
+  for (dnli2.toFirst();(node=dnli2.current());++dnli2)
+  {
+    if (node->m_subgraphId==n->m_subgraphId) 
+    {
+      node->clearWriteFlag();
+    }
+  }
+  for (dnli2.toFirst();(node=dnli2.current());++dnli2)
+  {
+    if (node->m_subgraphId==n->m_subgraphId) 
+    {
+      node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE);
+    }
+  }
+  writeGraphFooter(md5stream);
+  resetReNumbering();
+  uchar md5_sig[16];
+  QCString sigStr(33);
+  MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
+  bool regenerate=FALSE;
+  if (checkAndUpdateMd5Signature(absBaseName,sigStr) || 
+      !checkDeliverables(absImgName,absMapName))
+  {
+    regenerate=TRUE;
+    // image was new or has changed
+    QCString dotName=absBaseName+".dot";
+    QFile f(dotName);
+    if (!f.open(IO_WriteOnly)) return;
+    FTextStream t(&f);
+    t << theGraph;
+    f.close();
+    resetReNumbering();
+
+    DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName);
+    dotRun->addJob(imgExt,absImgName);
+    dotRun->addJob(MAP_CMD,absMapName);
+    DotManager::instance()->addRun(dotRun);
+  }
+  else
+  {
+    removeDotGraph(absBaseName+".dot");
+  }
+  Doxygen::indexList->addImageFile(imgName);
+  // write image and map in a table row
+  QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
+  if (imgExt=="svg") // vector graphics
+  {
+    if (regenerate || !writeSVGFigureLink(out,QCString(),baseName,absImgName))
+    {
+      if (regenerate)
+      {
+        DotManager::instance()->addSVGConversion(absImgName,QCString(),
+            FALSE,QCString(),FALSE,0);
+      }
+      int mapId = DotManager::instance()->addSVGObject(fileName,baseName,
+          absImgName,QCString());
+      out << "<!-- SVG " << mapId << " -->" << endl;
+    }
+  }
+  else // normal bitmap
+  {
+    out << "<img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
+      << mapLabel << "\"/>" << endl;
+
+    if (regenerate || !insertMapFile(out,absMapName,QCString(),mapLabel))
+    {
+      int mapId = DotManager::instance()->addMap(fileName,absMapName,QCString(),
+          FALSE,QCString(),mapLabel);
+      out << "<!-- MAP " << mapId << " -->" << endl;
+    }
+  }
+}
+
 void DotGfxHierarchyTable::writeGraph(FTextStream &out,
                       const char *path,const char *fileName) const
 {
   //printf("DotGfxHierarchyTable::writeGraph(%s)\n",name);
   //printf("m_rootNodes=%p count=%d\n",m_rootNodes,m_rootNodes->count());
-  
+
   if (m_rootSubgraphs->count()==0) return;
 
   QDir d(path);
@@ -2280,97 +2377,8 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
   int count=0;
   for (dnli.toFirst();(n=dnli.current());++dnli)
   {
-    QCString baseName;
-    QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
-    baseName.sprintf("inherit_graph_%d",count++);
-    //baseName = convertNameToFile(baseName);
-    QCString imgName = baseName+"."+ imgExt;
-    QCString mapName = baseName+".map";
-    QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
-    QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
-    QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
-    QListIterator<DotNode> dnli2(*m_rootNodes);
-    DotNode *node;
-
-    // compute md5 checksum of the graph were are about to generate
-    QGString theGraph;
-    FTextStream md5stream(&theGraph);
-    writeGraphHeader(md5stream,theTranslator->trGraphicalHierarchy());
-    md5stream << "  rankdir=\"LR\";" << endl;
-    for (dnli2.toFirst();(node=dnli2.current());++dnli2)
-    {
-      if (node->m_subgraphId==n->m_subgraphId) 
-      {
-        node->clearWriteFlag();
-      }
-    }
-    for (dnli2.toFirst();(node=dnli2.current());++dnli2)
-    {
-      if (node->m_subgraphId==n->m_subgraphId) 
-      {
-        node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE);
-      }
-    }
-    writeGraphFooter(md5stream);
-    resetReNumbering();
-    uchar md5_sig[16];
-    QCString sigStr(33);
-    MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
-    MD5SigToString(md5_sig,sigStr.data(),33);
-    bool regenerate=FALSE;
-    if (checkAndUpdateMd5Signature(absBaseName,sigStr) || 
-        !checkDeliverables(absImgName,absMapName))
-    {
-      regenerate=TRUE;
-      // image was new or has changed
-      QCString dotName=absBaseName+".dot";
-      QFile f(dotName);
-      if (!f.open(IO_WriteOnly)) return;
-      FTextStream t(&f);
-      t << theGraph;
-      f.close();
-      resetReNumbering();
-
-      DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName);
-      dotRun->addJob(imgExt,absImgName);
-      dotRun->addJob(MAP_CMD,absMapName);
-      DotManager::instance()->addRun(dotRun);
-    }
-    else
-    {
-      removeDotGraph(absBaseName+".dot");
-    }
-    Doxygen::indexList->addImageFile(imgName);
-    // write image and map in a table row
-    QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
     out << "<tr><td>";
-    if (imgExt=="svg") // vector graphics
-    {
-      if (regenerate || !writeSVGFigureLink(out,QCString(),baseName,absImgName))
-      {
-        if (regenerate)
-        {
-          DotManager::instance()->addSVGConversion(absImgName,QCString(),
-                                                   FALSE,QCString(),FALSE,0);
-        }
-        int mapId = DotManager::instance()->addSVGObject(fileName,baseName,
-                                                         absImgName,QCString());
-        out << "<!-- SVG " << mapId << " -->" << endl;
-      }
-    }
-    else // normal bitmap
-    {
-      out << "<img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
-        << mapLabel << "\"/>" << endl;
-
-      if (regenerate || !insertMapFile(out,absMapName,QCString(),mapLabel))
-      {
-        int mapId = DotManager::instance()->addMap(fileName,absMapName,QCString(),
-                                                   FALSE,QCString(),mapLabel);
-        out << "<!-- MAP " << mapId << " -->" << endl;
-      }
-    }
-
+    createGraph(n,out,path,fileName,count++);
     out << "</td></tr>" << endl;
   }
   out << "</table>" << endl;
@@ -3019,7 +3027,7 @@ QCString computeMd5Signature(DotNode *root,
   uchar md5_sig[16];
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)buf.data(),buf.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   if (reNumber)
   {
     resetReNumbering();
@@ -3138,8 +3146,6 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
     regenerate=TRUE;
     if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
     {
-      QCString dotArgs(maxCmdLine);
-
       DotRunner *dotRun = new DotRunner(absDotName,
                               d.absPath().data(),TRUE,absImgName);
       dotRun->addJob(imgExt,absImgName);
@@ -3497,7 +3503,6 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
     if (graphFormat==GOF_BITMAP)
     {
       // run dot to create a bitmap image
-      QCString dotArgs(maxCmdLine);
       DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
       dotRun->addJob(imgExt,absImgName);
       if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
@@ -3810,7 +3815,6 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphForma
     if (graphFormat==GOF_BITMAP)
     {
       // run dot to create a bitmap image
-      QCString dotArgs(maxCmdLine);
       DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
       dotRun->addJob(imgExt,absImgName);
       if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
@@ -3953,7 +3957,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
   uchar md5_sig[16];
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   bool regenerate=FALSE;
   if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
       !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
@@ -3975,7 +3979,6 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
     if (graphFormat==GOF_BITMAP)
     {
       // run dot to create a bitmap image
-      QCString dotArgs(maxCmdLine);
       DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
       dotRun->addJob(imgExt,absImgName);
       if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
@@ -4099,7 +4102,7 @@ void generateGraphLegend(const char *path)
   uchar md5_sig[16];
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   QCString absBaseName = (QCString)path+"/graph_legend";
   QCString absDotName  = absBaseName+".dot";
   QCString imgExt      = Config_getEnum("DOT_IMAGE_FORMAT");
@@ -4499,11 +4502,10 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t,
   uchar md5_sig[16];
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   QCString imgExt      = Config_getEnum("DOT_IMAGE_FORMAT");
   QCString baseName    = m_diskName;
   QCString imgName     = baseName+"."+imgExt;
-  QCString mapName     = baseName+".map";
   QCString absPath     = d.absPath().data();
   QCString absBaseName = absPath+"/"+baseName;
   QCString absDotName  = absBaseName+".dot";
@@ -4530,8 +4532,6 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t,
 
     if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
     {
-      QCString dotArgs(maxCmdLine);
-
       DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
       dotRun->addJob(imgExt,absImgName);
       if (writeImageMap) dotRun->addJob(MAP_CMD,absMapName);
@@ -4667,9 +4667,10 @@ void DotGroupCollaboration::Edge::write( FTextStream &t ) const
   }
   switch( eType )
   {
-    case thierarchy :
+    case thierarchy:
       arrowStyle = "dir=\"back\", style=\"solid\"";
-    default :
+      break;
+    default:
       t << ", color=\"" << linkTypeColor[(int)eType] << "\"";
       break;
   }
diff --git a/src/dot.h b/src/dot.h
index 8906199..41a416e 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -122,6 +122,7 @@ class DotNode
     friend class DotNodeList;
     friend class DotCallGraph;
     friend class DotGroupCollaboration;
+    friend class DotInheritanceGraph;
 
     friend QCString computeMd5Signature(
                       DotNode *root, GraphType gt,
@@ -133,12 +134,15 @@ class DotNode
                      );
 };
 
-inline int DotNode::findParent( DotNode *n )
+/** Class representing a list of DotNode objects. */
+class DotNodeList : public QList<DotNode>
 {
-    if( !m_parents )
-        return -1;
-    return m_parents->find(n);
-}
+  public:
+    DotNodeList() : QList<DotNode>() {}
+   ~DotNodeList() {}
+  private:
+    int compareValues(const DotNode *n1,const DotNode *n2) const;
+};
 
 /** Represents a graphical class hierarchy */
 class DotGfxHierarchyTable
@@ -147,6 +151,8 @@ class DotGfxHierarchyTable
     DotGfxHierarchyTable();
    ~DotGfxHierarchyTable();
     void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
+    void createGraph(DotNode *rootNode,FTextStream &t,const char *path,const char *fileName,int id) const;
+    const DotNodeList *subGraphs() const { return m_rootSubgraphs; }
   
   private:
     void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 533e6ef..30ee02b 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -100,6 +100,9 @@
 #include "context.h"
 #include "fileparser.h"
 
+// provided by the generated file resources.cpp
+extern void initResources();
+
 #define RECURSE_ENTRYTREE(func,var) \
   do { if (var->children()) { \
     EntryNavListIterator eli(*var->children()); \
@@ -142,7 +145,6 @@ QDict<void>      Doxygen::expandAsDefinedDict(257); // all macros that should be
 QIntDict<MemberGroupInfo> Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading
 PageDef         *Doxygen::mainPage = 0;
 bool             Doxygen::insideMainPage = FALSE; // are we generating docs for the main page?
-FTextStream      Doxygen::tagFile;
 NamespaceDef    *Doxygen::globalScope = 0;
 QDict<RefList>  *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists
 bool             Doxygen::parseSourcesNeeded = FALSE;
@@ -1008,6 +1010,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
   while (i<level)
   {
     int idx=getScopeFragment(name,p,&l);
+    if (idx==-1) return prevScope;
     QCString nsName = name.mid(idx,l);
     if (nsName.isEmpty()) return prevScope;
     if (!fullScope.isEmpty()) fullScope+="::";
@@ -1037,9 +1040,16 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
     else // scope is a namespace
     {
     }
-    // make the parent/child scope relation
-    prevScope->addInnerCompound(innerScope);
-    innerScope->setOuterScope(prevScope);
+    if (innerScope)
+    {
+      // make the parent/child scope relation
+      prevScope->addInnerCompound(innerScope);
+      innerScope->setOuterScope(prevScope);
+    }
+    else // current scope is a class, so return only the namespace part...
+    {
+      return prevScope;
+    }
     // proceed to the next scope fragment
     p=idx+l+2;
     prevScope=innerScope;
@@ -1303,19 +1313,32 @@ static void addClassToContext(EntryNav *rootNav)
     QCString tagName;
     QCString refFileName;
     TagInfo *tagInfo = rootNav->tagInfo();
+    int i;
     if (tagInfo)
     {
       tagName     = tagInfo->tagName;
       refFileName = tagInfo->fileName;
-      int i;
-      if ((i=fullName.find("::"))!=-1) 
+      if (fullName.find("::")!=-1)
         // symbols imported via tag files may come without the parent scope, 
         // so we artificially create it here
       {
         buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo);
       }
     }
-    cd=new ClassDef(root->fileName,root->startLine,root->startColumn,
+    ArgumentList *tArgList = 0;
+    if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.find('<'))!=-1)
+    {
+      // a Java/C# generic class looks like a C++ specialization, so we need to split the
+      // name and template arguments here
+      tArgList = new ArgumentList;
+      stringToArgumentList(fullName.mid(i),tArgList);
+      fullName=fullName.left(i);
+    }
+    else
+    {
+      tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists);
+    }
+    cd=new ClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
         fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
     Debug::print(Debug::Classes,0,"  New class `%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
         fullName.data(),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo);
@@ -1329,8 +1352,6 @@ static void addClassToContext(EntryNav *rootNav)
     cd->setTypeConstraints(root->typeConstr);   
     //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());    
 
-    ArgumentList *tArgList =    
-      getTemplateArgumentsFromName(fullName,root->tArgLists);   
     //printf("class %s template args=%s\n",fullName.data(),     
     //    tArgList ? tempArgListToString(tArgList).data() : "<none>");          
     cd->setTemplateArguments(tArgList);         
@@ -1652,26 +1673,6 @@ static void processTagLessClasses(ClassDef *rootCd,
   }
 }
 
-static void writeMainPageTagFileData()
-{
-  if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty())
-  {
-    Doxygen::tagFile << "  <compound kind=\"page\">" << endl
-                     << "    <name>"
-                     << convertToXML(Doxygen::mainPage->name())
-                     << "</name>" << endl
-                     << "    <title>"
-                     << convertToXML(Doxygen::mainPage->title())
-                     << "</title>" << endl
-                     << "    <filename>"
-                     << convertToXML(Doxygen::mainPage->getOutputFileBase())
-                     << "</filename>" << endl;
-
-    Doxygen::mainPage->writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
-}
-
 static void findTagLessClasses(ClassDef *cd)
 {
   if (cd->getClassSDict())
@@ -1764,7 +1765,7 @@ static void buildNamespaceList(EntryNav *rootNav)
           tagFileName = tagInfo->fileName;
         }
         //printf("++ new namespace %s lang=%s tagName=%s\n",fullName.data(),langToString(root->lang).data(),tagName.data());
-        NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,
+        NamespaceDef *nd=new NamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
                              root->startColumn,fullName,tagName,tagFileName,
                              root->type,root->spec&Entry::Published);
         nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
@@ -2070,18 +2071,15 @@ static void findUsingDeclarations(EntryNav *rootNav)
             usingCd->name().data(),nd?nd->name().data():fd->name().data());
       }
 
-      if (usingCd) // add the class to the correct scope
+      if (nd)
       {
-        if (nd)
-        {
-          //printf("Inside namespace %s\n",nd->name().data());
-          nd->addUsingDeclaration(usingCd);
-        }
-        else if (fd)
-        {
-          //printf("Inside file %s\n",fd->name().data());
-          fd->addUsingDeclaration(usingCd);
-        }
+        //printf("Inside namespace %s\n",nd->name().data());
+        nd->addUsingDeclaration(usingCd);
+      }
+      else if (fd)
+      {
+        //printf("Inside file %s\n",fd->name().data());
+        fd->addUsingDeclaration(usingCd);
       }
     }
 
@@ -2137,10 +2135,15 @@ static void findUsingDeclImports(EntryNav *rootNav)
                   //printf("found member %s\n",mni->memberName());
                   MemberDef *newMd = 0;
                   {
+                    QCString fileName = root->fileName;
+                    if (fileName.isEmpty() && rootNav->tagInfo())
+                    {
+                      fileName = rootNav->tagInfo()->tagName;
+                    }
                     ArgumentList *templAl = md->templateArguments();
                     ArgumentList *al = md->templateArguments();
                     newMd = new MemberDef(
-                      root->fileName,root->startLine,root->startColumn,
+                      fileName,root->startLine,root->startColumn,
                       md->typeString(),memName,md->argsString(),
                       md->excpString(),root->protection,root->virt,
                       md->isStatic(),Member,md->memberType(),
@@ -2326,9 +2329,15 @@ static MemberDef *addVariableToClass(
     } 
   }
 
+  QCString fileName = root->fileName;
+  if (fileName.isEmpty() && rootNav->tagInfo())
+  {
+    fileName = rootNav->tagInfo()->tagName;
+  }
+
   // new member variable, typedef or enum value
   MemberDef *md=new MemberDef(
-      root->fileName,root->startLine,root->startColumn,
+      fileName,root->startLine,root->startColumn,
       root->type,name,root->args,root->exception,
       prot,Normal,root->stat,related,
       mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0);
@@ -2449,7 +2458,6 @@ static MemberDef *addVariableToFile(
 
   // see if the function is inside a namespace
   NamespaceDef *nd = 0;
-  QCString nscope;
   if (!scope.isEmpty())
   {
     if (scope.find('@')!=-1) return 0; // anonymous scope!
@@ -2561,11 +2569,18 @@ static MemberDef *addVariableToFile(
       }
     } 
   }
+
+  QCString fileName = root->fileName;
+  if (fileName.isEmpty() && rootNav->tagInfo())
+  {
+    fileName = rootNav->tagInfo()->tagName;
+  }
+
   Debug::print(Debug::Variables,0,
     "    new variable, nd=%s!\n",nd?nd->name().data():"<global>");
   // new global variable, enum value or typedef
   MemberDef *md=new MemberDef(
-      root->fileName,root->startLine,root->startColumn,
+      fileName,root->startLine,root->startColumn,
       root->type,name,root->args,0,
       Public, Normal,root->stat,Member,
       mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0);
@@ -2833,14 +2848,14 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
         else if (root->type.find(')',i)!=-1) // function ptr, not variable like "int (*bla)[10]"
         {
           root->type=root->type.left(root->type.length()-1);
-          root->args.prepend(")");
+          root->args.prepend(") ");
           //printf("root->type=%s root->args=%s\n",root->type.data(),root->args.data());
         }
       }
       else if (root->type.find("typedef ")!=-1 && root->type.right(2)=="()") // typedef void (func)(int)
       {
         root->type=root->type.left(root->type.length()-1);
-        root->args.prepend(")");
+        root->args.prepend(") ");
       }
     }
     
@@ -3073,8 +3088,13 @@ static void addInterfaceOrServiceToServiceOrSingleton(
   enum MemberType const type = (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC)
       ? MemberType_Interface
       : MemberType_Service;
+  QCString fileName = root->fileName;
+  if (fileName.isEmpty() && rootNav->tagInfo())
+  {
+    fileName = rootNav->tagInfo()->tagName;
+  }
   MemberDef *const md = new MemberDef(
-      root->fileName, root->startLine, root->startColumn, root->type, rname,
+      fileName, root->startLine, root->startColumn, root->type, rname,
       "", "", root->protection, root->virt, root->stat, Member,
       type, 0, root->argList);
   md->setTagInfo(rootNav->tagInfo());
@@ -3245,13 +3265,19 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
     name=name.left(i); 
   }
 
+  QCString fileName = root->fileName;
+  if (fileName.isEmpty() && rootNav->tagInfo())
+  {
+    fileName = rootNav->tagInfo()->tagName;
+  }
+
   //printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n", 
   //    root->name.data(),root->args.data(),argListToString(root->argList).data()
   //   );
 
   // adding class member
   MemberDef *md=new MemberDef(
-      root->fileName,root->startLine,root->startColumn,
+      fileName,root->startLine,root->startColumn,
       root->type,name,root->args,root->exception,
       root->protection,root->virt,
       root->stat && root->relatesType != MemberOf,
@@ -4100,8 +4126,12 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co
  */
 static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,const QCString &name)
 {
-  FileDef *fd=cd->getFileDef();
   ClassDef *result=0;
+  if (cd==0)
+  {
+    return result;
+  }
+  FileDef *fd=cd->getFileDef();
   if (context && cd!=context)
   {
     result = getResolvedClass(context,0,name,0,0,TRUE,TRUE);
@@ -4114,7 +4144,7 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co
   {
     result = getClass(name);
   }
-  if (result==0 && cd &&
+  if (result==0 &&
       (cd->getLanguage()==SrcLangExt_CSharp || cd->getLanguage()==SrcLangExt_Java) &&
       name.find('<')!=-1)
   {
@@ -4236,13 +4266,10 @@ static void findUsedClassesForClass(EntryNav *rootNav,
                     usedCd->setLanguage(masterCd->getLanguage());
                     Doxygen::hiddenClasses->append(usedName,usedCd);
                   }
-                  if (usedCd)
-                  {
-                    if (isArtificial) usedCd->setArtificial(TRUE);
-                    Debug::print(Debug::Classes,0,"      Adding used class `%s' (1)\n", usedCd->name().data());
-                    instanceCd->addUsedClass(usedCd,md->name(),md->protection());
-                    usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
-                  }
+                  if (isArtificial) usedCd->setArtificial(TRUE);
+                  Debug::print(Debug::Classes,0,"      Adding used class `%s' (1)\n", usedCd->name().data());
+                  instanceCd->addUsedClass(usedCd,md->name(),md->protection());
+                  usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
                 }
               }
             }
@@ -4389,7 +4416,7 @@ static bool findTemplateInstanceRelation(Entry *root,
   //printf("\n");
   
   bool existingClass = (templSpec ==
-                        tempArgListToString(templateClass->templateArguments())
+                        tempArgListToString(templateClass->templateArguments(),root->lang)
                        );
   if (existingClass) return TRUE;
 
@@ -4643,7 +4670,8 @@ static bool findClassRelation(
         if (si==-1) si=0;
         if (baseClass==0 && (root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java))
         {
-          baseClass = Doxygen::genericsDict->find(baseClassName);
+          // for Java/C# strip the template part before looking for matching
+          baseClass = Doxygen::genericsDict->find(baseClassName.left(i));
           //printf("looking for '%s' result=%p\n",baseClassName.data(),baseClass);
         }
         if (baseClass==0 && i!=-1) 
@@ -4705,7 +4733,7 @@ static bool findClassRelation(
           if (found) templSpec = tmpTemplSpec;
         }
         //printf("2. found=%d\n",found);
-        
+
         //printf("root->name=%s biName=%s baseClassName=%s\n",
         //        root->name.data(),biName.data(),baseClassName.data());
         //if (cd->isCSharp() && i!=-1) // C# generic -> add internal -g postfix
@@ -4933,6 +4961,22 @@ static void findClassEntries(EntryNav *rootNav)
   RECURSE_ENTRYTREE(findClassEntries,rootNav);
 }
 
+static QCString extractClassName(EntryNav *rootNav)
+{
+  // strip any anonymous scopes first
+  QCString bName=stripAnonymousNamespaceScope(rootNav->name());
+  bName=stripTemplateSpecifiersFromScope(bName);
+  int i;
+  if ((rootNav->lang()==SrcLangExt_CSharp || rootNav->lang()==SrcLangExt_Java) &&
+      (i=bName.find('<'))!=-1)
+  {
+    // a Java/C# generic class looks like a C++ specialization, so we need to strip the
+    // template part before looking for matches
+    bName=bName.left(i);
+  }
+  return bName;
+}
+
 /*! Using the dictionary build by findClassEntries(), this 
  *  function will look for additional template specialization that
  *  exists as inheritance relations only. These instances will be
@@ -4947,9 +4991,7 @@ static void findInheritedTemplateInstances()
   for (;(rootNav=edi.current());++edi)
   {
     ClassDef *cd;
-    // strip any anonymous scopes first 
-    QCString bName=stripAnonymousNamespaceScope(rootNav->name());
-    bName=stripTemplateSpecifiersFromScope(bName);
+    QCString bName = extractClassName(rootNav);
     Debug::print(Debug::Classes,0,"  Inheritance: Class %s : \n",bName.data());
     if ((cd=getClass(bName)))
     {
@@ -4970,9 +5012,7 @@ static void findUsedTemplateInstances()
   for (;(rootNav=edi.current());++edi)
   {
     ClassDef *cd;
-    // strip any anonymous scopes first 
-    QCString bName=stripAnonymousNamespaceScope(rootNav->name());
-    bName=stripTemplateSpecifiersFromScope(bName);
+    QCString bName = extractClassName(rootNav);
     Debug::print(Debug::Classes,0,"  Usage: Class %s : \n",bName.data());
     if ((cd=getClass(bName)))
     {
@@ -4995,10 +5035,7 @@ static void computeClassRelations()
 
     rootNav->loadEntry(g_storage);
     Entry *root = rootNav->entry();
-
-    // strip any anonymous scopes first 
-    QCString bName=stripAnonymousNamespaceScope(rootNav->name());
-    bName=stripTemplateSpecifiersFromScope(bName);
+    QCString bName = extractClassName(rootNav);
     Debug::print(Debug::Classes,0,"  Relations: Class %s : \n",bName.data());
     if ((cd=getClass(bName)))
     {
@@ -5213,7 +5250,7 @@ static void addListReferences()
       addRefItem(xrefItems,
           name,
           theTranslator->trPage(TRUE,TRUE),
-          name,pd->title(),0);
+          name,pd->title(),0,0);
     }
   }
 
@@ -5230,7 +5267,7 @@ static void addListReferences()
     addRefItem(xrefItems,
         name,
         theTranslator->trDir(TRUE,TRUE),
-        name,dd->displayName(),0);
+        name,dd->displayName(),0,0);
   }
 }
 
@@ -5455,7 +5492,6 @@ static bool findGlobalMember(EntryNav *rootNav,
       {
         Debug::print(Debug::FindMembers,0,"4. Try to add member `%s' to scope `%s'\n",
             md->name().data(),namespaceName.data());
-        QCString nsName = nd ? nd->name().data() : "";
 
         NamespaceDef *rnd = 0;
         if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName);
@@ -6306,7 +6342,7 @@ static void findMember(EntryNav *rootNav,
               for (;(al=alli.current());++alli)
               {
                 warnMsg+="  template ";
-                warnMsg+=tempArgListToString(al);
+                warnMsg+=tempArgListToString(al,root->lang);
                 warnMsg+='\n';
               }
             }
@@ -6329,7 +6365,7 @@ static void findMember(EntryNav *rootNav,
                   if (templAl!=0)
                   {
                     warnMsg+="  'template ";
-                    warnMsg+=tempArgListToString(templAl);
+                    warnMsg+=tempArgListToString(templAl,root->lang);
                     warnMsg+='\n';
                   }
                   warnMsg+="  ";
@@ -6578,7 +6614,7 @@ static void findMember(EntryNav *rootNav,
               funcType,funcName,funcArgs,exceptions,
               root->protection,root->virt,
               root->stat && !isMemberOf,
-              isMemberOf ? Foreign : isRelated ? Related : Member,
+              isMemberOf ? Foreign : Related,
               mtype,
               (root->tArgLists ? root->tArgLists->getLast() : 0),
               funcArgs.isEmpty() ? 0 : root->argList);
@@ -7029,7 +7065,7 @@ static void findEnums(EntryNav *rootNav)
 
     if (cd && !name.isEmpty()) // found a enum inside a compound
     {
-      //printf("Enum `%s'::`%s'\n",cd->name(),name.data());
+      //printf("Enum `%s'::`%s'\n",cd->name().data(),name.data());
       fd=0;
       mnsd=Doxygen::memberNameSDict;
       isGlobal=FALSE;
@@ -7062,17 +7098,17 @@ static void findEnums(EntryNav *rootNav)
       if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
       md->setBodySegment(root->bodyLine,root->endBodyLine);
       md->setBodyDef(rootNav->fileDef());
-      md->setMemberSpecifiers(root->spec); // UNO IDL "published"
+      md->setMemberSpecifiers(root->spec);
       md->setEnumBaseType(root->args);
-      //printf("Enum %s definition at line %d of %s: protection=%d\n",
-      //    root->name.data(),root->bodyLine,root->fileName.data(),root->protection);
+      //printf("Enum %s definition at line %d of %s: protection=%d scope=%s\n",
+      //    root->name.data(),root->bodyLine,root->fileName.data(),root->protection,cd?cd->name().data():"<none>");
       md->addSectionsToDefinition(root->anchors);
       md->setMemberGroupId(root->mGrpId);
       md->enableCallGraph(root->callGraph);
       md->enableCallerGraph(root->callerGraph);
       //printf("%s::setRefItems(%d)\n",md->name().data(),root->sli?root->sli->count():-1);
       md->setRefItems(root->sli);
-      //printf("found enum %s nd=%p\n",name.data(),nd);
+      //printf("found enum %s nd=%p\n",md->name().data(),nd);
       bool defSet=FALSE;
 
       QCString baseType = root->args;
@@ -7246,26 +7282,35 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
             {
               SrcLangExt sle;
               if (
-                   (sle=rootNav->lang())==SrcLangExt_CSharp || 
-                   sle==SrcLangExt_Java || 
+                   (sle=rootNav->lang())==SrcLangExt_CSharp ||
+                   sle==SrcLangExt_Java ||
                    sle==SrcLangExt_XML ||
                    (root->spec&Entry::Strong)
                  )
               {
-                // Unlike classic C/C++ enums, for C++11, C# & Java enum 
-                // values are only visible inside the enum scope, so we must create 
+                // Unlike classic C/C++ enums, for C++11, C# & Java enum
+                // values are only visible inside the enum scope, so we must create
                 // them here and only add them to the enum
                 e->loadEntry(g_storage);
                 Entry *root = e->entry();
                 //printf("md->qualifiedName()=%s rootNav->name()=%s tagInfo=%p name=%s\n",
                 //    md->qualifiedName().data(),rootNav->name().data(),rootNav->tagInfo(),root->name.data());
+                QCString qualifiedName = substitute(rootNav->name(),"::",".");
+                if (!scope.isEmpty() && rootNav->tagInfo())
+                {
+                  qualifiedName=substitute(scope,"::",".")+"."+qualifiedName;
+                }
                 if (substitute(md->qualifiedName(),"::",".")== // TODO: add function to get canonical representation
-                    substitute(rootNav->name(),"::",".") ||    // enum value scope matches that of the enum
-                    rootNav->tagInfo()                         // be less strict for tag files as members can have incomplete scope
-                   ) 
+                    qualifiedName       // enum value scope matches that of the enum
+                   )
                 {
+                  QCString fileName = root->fileName;
+                  if (fileName.isEmpty() && rootNav->tagInfo())
+                  {
+                    fileName = rootNav->tagInfo()->tagName;
+                  }
                   MemberDef *fmd=new MemberDef(
-                      root->fileName,root->startLine,root->startColumn,
+                      fileName,root->startLine,root->startColumn,
                       root->type,root->name,root->args,0,
                       Public, Normal,root->stat,Member,
                       MemberType_EnumValue,0,0);
@@ -8055,13 +8100,14 @@ static void generateClassList(ClassSDict &classSDict)
     ClassDef *cd=cli.current();
    
     //printf("cd=%s getOuterScope=%p global=%p\n",cd->name().data(),cd->getOuterScope(),Doxygen::globalScope);
-    if ((cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file
+    if (cd &&
+        (cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file
          cd->getOuterScope()==Doxygen::globalScope // only look at global classes
         ) && !cd->isHidden() && !cd->isEmbeddedInOuterScope()
-       ) 
+       )
     {
-      // skip external references, anonymous compounds and 
-      // template instances 
+      // skip external references, anonymous compounds and
+      // template instances
       if ( cd->isLinkableInProject() && cd->templateMaster()==0)
       {
         msg("Generating docs for compound %s...\n",cd->name().data());
@@ -8395,7 +8441,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
 
     if (rootNav->tagInfo() && !root->name.isEmpty()) // define read from a tag file
     {
-      MemberDef *md=new MemberDef("<tagfile>",1,1,
+      MemberDef *md=new MemberDef(rootNav->tagInfo()->tagName,1,1,
                     "#define",root->name,root->args,0,
                     Public,Normal,FALSE,Member,MemberType_Define,0,0);
       md->setTagInfo(rootNav->tagInfo());
@@ -8620,7 +8666,7 @@ static void buildPageList(EntryNav *rootNav)
                "page",
                name,
                title,
-               0
+               0,0
                );
 
     rootNav->releaseEntry();
@@ -8996,9 +9042,9 @@ static void generateNamespaceDocs()
 
     // for each class in the namespace...
     ClassSDict::Iterator cli(*nd->getClassSDict());
-    for ( ; cli.current() ; ++cli )
+    ClassDef *cd;
+    for ( ; (cd=cli.current()) ; ++cli )
     {
-      ClassDef *cd=cli.current();
       if ( ( cd->isLinkableInProject() && 
              cd->templateMaster()==0
            ) // skip external references, anonymous compounds and 
@@ -9153,6 +9199,33 @@ static void readTagFile(Entry *root,const char *tl)
 }
 
 //----------------------------------------------------------------------------
+static void copyLatexStyleSheet()
+{
+  QStrList latexExtraStyleSheet = Config_getList("LATEX_EXTRA_STYLESHEET");
+  for (uint i=0; i<latexExtraStyleSheet.count(); ++i)
+  {
+    QCString fileName(latexExtraStyleSheet.at(i));
+    if (!fileName.isEmpty())
+    {
+      QFileInfo fi(fileName);
+      if (!fi.exists())
+      {
+        err("Style sheet '%s' specified by LATEX_EXTRA_STYLESHEET does not exist!\n",fileName.data());
+      }
+      else
+      {
+        QCString destFileName = Config_getString("LATEX_OUTPUT")+"/"+fi.fileName().data();
+        if (!checkExtension(fi.fileName().data(), latexStyleExtension))
+        {
+          destFileName += latexStyleExtension;
+        }
+        copyFile(fileName, destFileName);
+      }
+    }
+  }
+}
+
+//----------------------------------------------------------------------------
 static void copyStyleSheet()
 {
   QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
@@ -9181,6 +9254,10 @@ static void copyStyleSheet()
       {
         err("Style sheet '%s' specified by HTML_EXTRA_STYLESHEET does not exist!\n",fileName.data());
       }
+      else if (fi.fileName()=="doxygen.css" || fi.fileName()=="tabs.css" || fi.fileName()=="navtree.css")
+      {
+        err("Style sheet %s specified by HTML_EXTRA_STYLESHEET is already a built-in stylesheet. Please use a different name\n",fi.fileName().data());
+      }
       else
       {
         QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
@@ -9241,8 +9318,9 @@ static ParserInterface *getParserForFile(const char *fn)
 {
   QCString fileName=fn;
   QCString extension;
+  int sep = fileName.findRev('/');
   int ei = fileName.findRev('.');
-  if (ei!=-1)
+  if (ei!=-1 && (sep==-1 || ei>sep)) // matches dir/file.ext but not dir.1/file
   {
     extension=fileName.right(fileName.length()-ei);
   }
@@ -9291,6 +9369,10 @@ static void parseFile(ParserInterface *parser,
     msg("Reading %s...\n",fn);
     readInputFile(fileName,preBuf);
   }
+  if (preBuf.data() && preBuf.curPos()>0 && *(preBuf.data()+preBuf.curPos()-1)!='\n')
+  {
+    preBuf.addChar('\n'); // add extra newline to help parser
+  }
 
   BufStr convBuf(preBuf.curPos()+1024);
 
@@ -9878,7 +9960,7 @@ static void usage(const char *name)
   msg("    If - is used for configName doxygen will read from standard input.\n\n");
   msg("4) Use doxygen to generate a template file controlling the layout of the\n");
   msg("   generated documentation:\n");
-  msg("    %s -l layoutFileName.xml\n\n",name);
+  msg("    %s -l [layoutFileName.xml]\n\n",name);
   msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
   msg("    RTF:        %s -w rtf styleSheetFile\n",name);
   msg("    HTML:       %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
@@ -9908,6 +9990,7 @@ static const char *getArg(int argc,char **argv,int &optind)
 
 void initDoxygen()
 {
+  initResources();
   const char *lang = portable_getenv("LC_ALL");
   if (lang) portable_setenv("LANG",lang);
   setlocale(LC_ALL,"");
@@ -10527,6 +10610,87 @@ static void stopDoxygen(int)
 }
 #endif
 
+static void writeTagFile()
+{
+  QCString &generateTagFile = Config_getString("GENERATE_TAGFILE");
+  if (generateTagFile.isEmpty()) return;
+
+  QFile tag(generateTagFile);
+  if (!tag.open(IO_WriteOnly))
+  {
+    err("cannot open tag file %s for writing\n",
+        generateTagFile.data()
+       );
+    return;
+  }
+  FTextStream tagFile(&tag);
+  tagFile << "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>" << endl;
+  tagFile << "<tagfile>" << endl;
+
+  // for each file
+  FileNameListIterator fnli(*Doxygen::inputNameList);
+  FileName *fn;
+  for (fnli.toFirst();(fn=fnli.current());++fnli)
+  {
+    FileNameIterator fni(*fn);
+    FileDef *fd;
+    for (fni.toFirst();(fd=fni.current());++fni)
+    {
+      fd->writeTagFile(tagFile);
+    }
+  }
+  // for each class
+  ClassSDict::Iterator cli(*Doxygen::classSDict);
+  ClassDef *cd;
+  for ( ; (cd=cli.current()) ; ++cli )
+  {
+    cd->writeTagFile(tagFile);
+  }
+  // for each namespace
+  NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
+  NamespaceDef *nd;
+  for ( ; (nd=nli.current()) ; ++nli )
+  {
+    nd->writeTagFile(tagFile);
+  }
+  // for each group
+  GroupSDict::Iterator gli(*Doxygen::groupSDict);
+  GroupDef *gd;
+  for (gli.toFirst();(gd=gli.current());++gli)
+  {
+    gd->writeTagFile(tagFile);
+  }
+  // for each page
+  PageSDict::Iterator pdi(*Doxygen::pageSDict);
+  PageDef *pd=0;
+  for (pdi.toFirst();(pd=pdi.current());++pdi)
+  {
+    pd->writeTagFile(tagFile);
+  }
+  if (Doxygen::mainPage) Doxygen::mainPage->writeTagFile(tagFile);
+
+  /*
+  if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty())
+  {
+    tagFile << "  <compound kind=\"page\">" << endl
+                     << "    <name>"
+                     << convertToXML(Doxygen::mainPage->name())
+                     << "</name>" << endl
+                     << "    <title>"
+                     << convertToXML(Doxygen::mainPage->title())
+                     << "</title>" << endl
+                     << "    <filename>"
+                     << convertToXML(Doxygen::mainPage->getOutputFileBase())
+                     << "</filename>" << endl;
+
+    mainPage->writeDocAnchorsToTagFile();
+    tagFile << "  </compound>" << endl;
+  }
+  */
+
+  tagFile << "</tagfile>" << endl;
+}
+
 static void exitDoxygen()
 {
   if (!g_successfulRun)  // premature exit
@@ -10690,7 +10854,6 @@ void searchInputFiles()
 
   g_s.begin("Searching for files to process...\n");
   QDict<void> *killDict = new QDict<void>(10007);
-  int inputSize=0;
   QStrList &inputList=Config_getList("INPUT");
   g_inputFiles.setAutoDelete(TRUE);
   s=inputList.first();
@@ -10702,8 +10865,8 @@ void searchInputFiles()
     {
       // strip trailing slashes
       if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
-  
-      inputSize+=readFileOrDirectory(
+
+      readFileOrDirectory(
           path,
           Doxygen::inputNameList,
           Doxygen::inputNameDict,
@@ -10797,7 +10960,7 @@ void parseInput()
 
   QCString htmlOutput;
   bool &generateHtml = Config_getBool("GENERATE_HTML");
-  if (generateHtml)
+  if (generateHtml || g_useOutputTemplate /* TODO: temp hack */)
     htmlOutput = createOutputDirectory(outputDirectory,"HTML_OUTPUT","/html");
 
   QCString docbookOutput;
@@ -11274,6 +11437,7 @@ void generateOutput()
     g_outputList->add(new LatexGenerator);
     LatexGenerator::init();
 
+    copyLatexStyleSheet();
     // copy static stuff
     copyExtraFiles("LATEX_EXTRA_FILES","LATEX_OUTPUT");
   }
@@ -11301,24 +11465,6 @@ void generateOutput()
    *                        Generate documentation                          *
    **************************************************************************/
 
-  QFile *tag=0;
-  QCString &generateTagFile = Config_getString("GENERATE_TAGFILE");
-  if (!generateTagFile.isEmpty())
-  {
-    tag=new QFile(generateTagFile);
-    if (!tag->open(IO_WriteOnly))
-    {
-      err("cannot open tag file %s for writing\n",
-          generateTagFile.data()
-         );
-      cleanUpDoxygen();
-      exit(1);
-    }
-    Doxygen::tagFile.setDevice(tag);
-    Doxygen::tagFile << "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>" << endl;
-    Doxygen::tagFile << "<tagfile>" << endl;
-  }
-
   if (generateHtml)  writeDoxFont(Config_getString("HTML_OUTPUT"));
   if (generateLatex) writeDoxFont(Config_getString("LATEX_OUTPUT"));
   if (generateRtf)   writeDoxFont(Config_getString("RTF_OUTPUT"));
@@ -11414,8 +11560,6 @@ void generateOutput()
     }
   }
   
-  writeMainPageTagFileData();
-
   if (g_outputList->count()>0)
   {
     writeIndexHierarchy(*g_outputList);
@@ -11425,11 +11569,9 @@ void generateOutput()
   Doxygen::indexList->finalize();
   g_s.end();
 
-  if (!generateTagFile.isEmpty())
-  {
-    Doxygen::tagFile << "</tagfile>" << endl;
-    delete tag;
-  }
+  g_s.begin("writing tag file...\n");
+  writeTagFile();
+  g_s.end();
 
   if (Config_getBool("DOT_CLEANUP"))
   {
diff --git a/src/doxygen.h b/src/doxygen.h
index 6f766c0..aa9b745 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -114,7 +114,6 @@ class Doxygen
     static QStrList                  tagfileList;
     static MemberNameSDict          *memberNameSDict;
     static MemberNameSDict          *functionNameSDict;
-    static FTextStream               tagFile;
     static SectionDict              *sectionDict;
     static StringDict                namespaceAliasDict;
     static GroupSDict               *groupSDict;
diff --git a/src/doxygen.pro b/src/doxygen.pro
deleted file mode 100644
index 0dcff1b..0000000
--- a/src/doxygen.pro
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# This file was generated from doxygen.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-# TMake project file for doxygen
-
-TEMPLATE     =	app.t
-CONFIG       =	console warn_on debug
-HEADERS      =	doxygen.h 
-SOURCES      =	main.cpp 
-unix:LIBS                  += -L../lib -ldoxygen -lvhdlparser -ldoxycfg -lqtools -lmd5 -lpthread  
-win32:INCLUDEPATH          += .
-win32-mingw:LIBS           += -L../lib -ldoxygen -ldoxycfg -lvhdlparser -lqtools -lmd5 -lpthread -llibiconv -lole32  
-win32-msvc:LIBS            += qtools.lib md5.lib doxygen.lib doxycfg.lib vhdlparser.lib shell32.lib iconv.lib
-win32-msvc:TMAKE_LFLAGS    += /LIBPATH:..\lib
-win32-borland:LIBS         += qtools.lib md5.lib doxygen.lib doxycfg.lib vhdlparser.lib shell32.lib iconv.lib
-win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk
-win32:TMAKE_CXXFLAGS       += -DQT_NODLL
-win32-g++:LIBS             = -L../lib -ldoxygen -ldoxycfg -lvhdlparser -lqtools -lmd5 -liconv -lpthread   -Wl,--as-needed -lole32
-win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
-DEPENDPATH                 += ../generated_src/doxygen
-INCLUDEPATH                += ../qtools ../libmd5 . ../vhdlparser
-DESTDIR                    =  ../bin
-TARGET                     =  doxygen
-unix:TARGETDEPS            =  ../lib/libdoxygen.a ../lib/libdoxycfg.a
-win32:TARGETDEPS           =  ..\lib\doxygen.lib ..\lib\doxycfg.lib
-win32-g++:TARGETDEPS       =  ../lib/libdoxygen.a ../lib/libdoxycfg.a
-win32-mingw:TARGETDEPS     =  ../lib/libdoxygen.a ../lib/libdoxycfg.a
-OBJECTS_DIR                =  ../objects/doxygen
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/src/entry.cpp b/src/entry.cpp
index ee3d0ae..b5928b3 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -170,7 +170,7 @@ Entry::Entry(const Entry &e)
     anchors->append(new SectionInfo(*s));
   }
 
-  // deep copy type contraint list
+  // deep copy type constraint list
   if (e.typeConstr)
   {
     typeConstr  = e.typeConstr->deepCopy();
@@ -301,21 +301,7 @@ void Entry::createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd)
 
 void Entry::createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd)
 {
-  //printf("createNavigationIndex(%p) sublist=%p\n",this,m_sublist);
-  if (m_sublist)
-  {
-    //printf("saveEntries: %d children\n",root->sublist->count());
-    // store all child entries of root, but keep the navigation info (=index)
-    QListIterator<Entry> eli(*m_sublist);
-    Entry *e;
-    for (eli.toFirst();(e=eli.current());++eli)
-    {
-      createSubtreeIndex(rootNav,storage,fd);
-    }
-    // remove all entries from root
-    //m_sublist->setAutoDelete(FALSE);
-    m_sublist->clear();
-  }
+  createSubtreeIndex(rootNav,storage,fd);
 }
 
 void Entry::addSpecialListItem(const char *listName,int itemId)
diff --git a/src/entry.h b/src/entry.h
index 2cc2827..c92038f 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -133,7 +133,7 @@ class Entry
     static const uint64 Enum            = (1ULL<<12); // for Java-style enums
     static const uint64 Service         = (1ULL<<13); // UNO IDL
     static const uint64 Singleton       = (1ULL<<14); // UNO IDL
-    static const uint64 ForwardDecl     = (1ULL<<14); // forward declarad template classes
+    static const uint64 ForwardDecl     = (1ULL<<15); // forward declarad template classes
 
     // member specifiers (add new items to the beginning)
     static const uint64 PrivateGettable     = (1ULL<<20); // C# private getter
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 9e8a61c..c582a4b 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -180,6 +180,112 @@ bool FileDef::hasDetailedDescription() const
          );
 }
 
+void FileDef::writeTagFile(FTextStream &tagFile)
+{
+  tagFile << "  <compound kind=\"file\">" << endl;
+  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
+  tagFile << "    <path>" << convertToXML(getPath()) << "</path>" << endl;
+  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << "</filename>" << endl;
+  if (m_includeList && m_includeList->count()>0)
+  {
+    QListIterator<IncludeInfo> ili(*m_includeList);
+    IncludeInfo *ii;
+    for (;(ii=ili.current());++ili)
+    {
+      if (!ii->indirect)
+      {
+        FileDef *fd=ii->fileDef;
+        if (fd && fd->isLinkable() && !fd->isReference()) 
+        {
+          bool isIDLorJava = FALSE;
+          SrcLangExt lang = fd->getLanguage();
+          isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
+          const char *locStr = (ii->local    || isIDLorJava) ? "yes" : "no";
+          const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
+          tagFile << "    <includes id=\"" 
+                  << convertToXML(fd->getOutputFileBase()) << "\" "
+                  << "name=\"" << convertToXML(fd->name()) << "\" "
+                  << "local=\"" << locStr << "\" "
+                  << "imported=\"" << impStr << "\">"
+                  << convertToXML(ii->includeName)
+                  << "</includes>" 
+                  << endl;
+        }
+      }
+    }
+  }
+  QListIterator<LayoutDocEntry> eli(
+      LayoutDocManager::instance().docEntries(LayoutDocManager::File));
+  LayoutDocEntry *lde;
+  for (eli.toFirst();(lde=eli.current());++eli)
+  {
+    switch (lde->kind())
+    {
+      case LayoutDocEntry::FileClasses:
+        {
+          if (m_classSDict)
+          {
+            SDict<ClassDef>::Iterator ci(*m_classSDict);
+            ClassDef *cd;
+            for (ci.toFirst();(cd=ci.current());++ci)
+            {
+              if (cd->isLinkableInProject())
+              {
+                tagFile << "    <class kind=\"" << cd->compoundTypeString() <<
+                  "\">" << convertToXML(cd->name()) << "</class>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::FileNamespaces:
+        {
+          if (m_namespaceSDict)
+          {
+            SDict<NamespaceDef>::Iterator ni(*m_namespaceSDict);
+            NamespaceDef *nd;
+            for (ni.toFirst();(nd=ni.current());++ni)
+            {
+              if (nd->isLinkableInProject())
+              {
+                tagFile << "    <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberDecl:
+        {
+          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+          MemberList * ml = getMemberList(lmd->type);
+          if (ml)
+          {
+            ml->writeTagFile(tagFile);
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberGroups:
+        {
+          if (m_memberGroupSDict)
+          {
+            MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
+            MemberGroup *mg;
+            for (;(mg=mgli.current());++mgli)
+            {
+              mg->writeTagFile(tagFile);
+            }
+          }
+        }
+        break;
+      default:
+        break;
+    }
+  }
+
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "  </compound>" << endl;
+}
+
 void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
 {
   if (hasDetailedDescription())
@@ -221,6 +327,17 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     //printf("Writing source ref for file %s\n",name().data());
     if (Config_getBool("SOURCE_BROWSER")) 
     {
+      //if Latex enabled and LATEX_SOURCE_CODE isn't -> skip, bug_738548
+      ol.pushGeneratorState();
+      if (ol.isEnabled(OutputGenerator::Latex) && !Config_getBool("LATEX_SOURCE_CODE"))
+      { 
+        ol.disable(OutputGenerator::Latex);
+      }
+      if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool("RTF_SOURCE_CODE"))
+      { 
+        ol.disable(OutputGenerator::RTF);
+      }
+
       ol.startParagraph();
       QCString refText = theTranslator->trDefinedInSourceFile();
       int fileMarkerPos = refText.find("@0");
@@ -233,6 +350,8 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
               refText.length()-fileMarkerPos-2)); // text right from marker 2
       }
       ol.endParagraph();
+      //Restore settings, bug_738548
+      ol.popGeneratorState();
     }
     ol.endTextBlock();
   }
@@ -319,19 +438,6 @@ void FileDef::writeIncludeFiles(OutputList &ol)
           ol.writeObjectLink(fd->getReference(),
               fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(),
               0,ii->includeName);
-          if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference()) 
-          {
-            const char *locStr = (ii->local    || isIDLorJava) ? "yes" : "no";
-            const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
-            Doxygen::tagFile << "    <includes id=\"" 
-                             << convertToXML(fd->getOutputFileBase()) << "\" "
-                             << "name=\"" << convertToXML(fd->name()) << "\" "
-                             << "local=\"" << locStr << "\" "
-                             << "imported=\"" << impStr << "\">"
-                             << convertToXML(ii->includeName)
-                             << "</includes>" 
-                             << endl;
-          }
         }
         else
         {
@@ -616,15 +722,6 @@ void FileDef::writeDocumentation(OutputList &ol)
     Doxygen::searchIndex->addWord(localName(),TRUE);
   }
   
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    Doxygen::tagFile << "  <compound kind=\"file\">" << endl;
-    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
-    Doxygen::tagFile << "    <path>" << convertToXML(getPath()) << "</path>" << endl;
-    Doxygen::tagFile << "    <filename>" 
-                     << convertToXML(getOutputFileBase()) 
-                     << "</filename>" << endl;
-  }
 
   //---------------------------------------- start flexible part -------------------------------
   
@@ -738,12 +835,6 @@ void FileDef::writeDocumentation(OutputList &ol)
 
   //---------------------------------------- end flexible part -------------------------------
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
-
   ol.endContents();
 
   endFileWithNavPath(this,ol);
@@ -823,6 +914,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
   static bool generateTreeView  = Config_getBool("GENERATE_TREEVIEW");
   static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
   static bool latexSourceCode   = Config_getBool("LATEX_SOURCE_CODE");
+  static bool rtfSourceCode     = Config_getBool("RTF_SOURCE_CODE");
   DevNullCodeDocInterface devNullIntf;
   QCString title = m_docname;
   if (!m_fileVersion.isEmpty())
@@ -831,8 +923,8 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
   }
   QCString pageTitle = theTranslator->trSourceFile(title);
   ol.disable(OutputGenerator::Man);
-  ol.disable(OutputGenerator::RTF);
   if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
+  if (!rtfSourceCode) ol.disable(OutputGenerator::RTF);
 
   bool isDocFile = isDocumentationFile();
   bool genSourceFile = !isDocFile && generateSourceFile();
@@ -864,10 +956,12 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
   if (isLinkable())
   {
     if (latexSourceCode) ol.disable(OutputGenerator::Latex);
+    if (rtfSourceCode) ol.disable(OutputGenerator::RTF);
     ol.startTextLink(getOutputFileBase(),0);
     ol.parseText(theTranslator->trGotoDocumentation());
     ol.endTextLink();
     if (latexSourceCode) ol.enable(OutputGenerator::Latex);
+    if (rtfSourceCode) ol.enable(OutputGenerator::RTF);
   }
 
   (void)sameTu;
@@ -1202,7 +1296,6 @@ void FileDef::addIncludedUsingDirectives()
   visited=TRUE;
   //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
 
-  NamespaceList nl;
   if (m_includeList) // file contains #includes
   {
     {
@@ -1322,6 +1415,7 @@ void FileDef::addListReferences()
                getOutputFileBase(),
                theTranslator->trFile(TRUE,TRUE),
                getOutputFileBase(),name(),
+               0,
                0
               );
   }
@@ -1447,7 +1541,6 @@ static Directory *findDirNode(Directory *root,const QCString &name)
 
 static void mergeFileDef(Directory *root,FileDef *fd)
 {
-  QCString rootPath = root->name();
   QCString filePath = fd->absFilePath();
   //printf("merging %s\n",filePath.data());
   Directory *dirNode = findDirNode(root,filePath);
@@ -1657,16 +1750,19 @@ void FileDef::acquireFileVersion()
     }
     const int bufSize=1024;
     char buf[bufSize];
-    int numRead = (int)fread(buf,1,bufSize,f);
+    int numRead = (int)fread(buf,1,bufSize-1,f);
     portable_pclose(f);
-    if (numRead>0 && !(m_fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
+    if (numRead>0 && numRead<bufSize)
     {
-      msg("%s\n",m_fileVersion.data());
-    }
-    else 
-    {
-      msg("no version available\n");
+      buf[numRead]='\0';
+      m_fileVersion=QCString(buf,numRead).stripWhiteSpace();
+      if (!m_fileVersion.isEmpty())
+      {
+        msg("%s\n",m_fileVersion.data());
+        return;
+      }
     }
+    msg("no version available\n");
   }
 }
 
@@ -1766,7 +1862,7 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCS
     }
     else
     {
-      ml->writeDeclarations(ol,0,0,this,0,title,0,definitionType());
+      ml->writeDeclarations(ol,0,0,this,0,title,0);
     }
   }
 }
diff --git a/src/filedef.h b/src/filedef.h
index a95cd77..33eae35 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -39,6 +39,7 @@ class NamespaceSDict;
 class MemberGroupSDict;
 class PackageDef;
 class DirDef;
+class FTextStream;
 
 /** Class representing the data associated with a \#include statement. */
 struct IncludeInfo
@@ -95,7 +96,7 @@ class FileDef : public Definition
     QCString absFilePath() const { return m_filePath; }
     
     /*! Returns the name as it is used in the documentation */
-    QCString docName() const { return m_docname; }
+    const QCString &docName() const { return m_docname; }
 
     /*! Returns TRUE if this file is a source file. */
     bool isSource() const { return m_isSource; }
@@ -146,6 +147,7 @@ class FileDef : public Definition
     void writeMemberPages(OutputList &ol);
     void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
     void writeSummaryLinks(OutputList &ol);
+    void writeTagFile(FTextStream &t);
 
     void startParsing();
     void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
diff --git a/src/filename.cpp b/src/filename.cpp
index 35a1841..8719f3c 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -45,9 +45,12 @@ void FileName::generateDiskNames()
   {
     // skip references
     for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
-    // name if unique, so diskname is simply the name
-    //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
-    fd->m_diskName=name;
+    if (fd)
+    {
+      // name if unique, so diskname is simply the name
+      //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
+      fd->m_diskName=name;
+    }
   }
   else if (count>1) // multiple occurrences of the same file name
   {
@@ -57,28 +60,31 @@ void FileName::generateDiskNames()
     while (!found) // search for the common prefix of all paths
     {
       for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
-      char c=fd->m_path.at(i);
-      if (c=='/') j=i; // remember last position of dirname
-      ++it;
-      while ((fd=it.current()) && !found)
+      if (fd)
       {
-        if (!fd->isReference())
+        char c=fd->m_path.at(i);
+        if (c=='/') j=i; // remember last position of dirname
+        ++it;
+        while ((fd=it.current()) && !found)
         {
-          //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
-          if (i==(int)fd->m_path.length())
+          if (!fd->isReference())
           {
-            //warning("Input file %s found multiple times!\n"
-            //        "         The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
-            found=TRUE;
-          }
-          else if (fd->m_path[i]!=c)
-          {
-            found=TRUE;
+            //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
+            if (i==(int)fd->m_path.length())
+            {
+              //warning("Input file %s found multiple times!\n"
+              //        "         The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
+              found=TRUE;
+            }
+            else if (fd->m_path[i]!=c)
+            {
+              found=TRUE;
+            }
           }
+          ++it;
         }
-        ++it;
+        i++;
       }
-      i++;
     }
     for (it.toFirst();(fd=it.current());++it)
     {
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 03baeed..17a28c3 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -114,6 +114,7 @@ class Scope
   
 static QCString  docBlock;                   //!< contents of all lines of a documentation block
 static QCString  currentModule=0;            //!< name of the current enclosing module
+static QCString  currentClass=0;             //!< name of the current enclosing class
 static UseSDict  *useMembers= new UseSDict;  //!< info about used modules
 static UseEntry  *useEntry = 0;              //!< current use statement info
 static QList<Scope> scopeStack;
@@ -386,8 +387,23 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
     }
   }
 }
+//-------------------------------------------------------------------------------
+/**
+  searches for definition of a module (Namespace)
+  @param mname the name of the module
+  @param cd the entry, if found or null
+  @returns true, if module is found
+*/
+static bool getFortranNamespaceDefs(const QCString &mname,
+                               NamespaceDef *&cd)
+{
+  if (mname.isEmpty()) return FALSE; /* empty name => nothing to link */
 
+  // search for module
+  if ((cd=Doxygen::namespaceSDict->find(mname))) return TRUE;
 
+  return FALSE;
+}
 //-------------------------------------------------------------------------------
 /**
   searches for definition of a type
@@ -467,6 +483,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
       {
         FileDef  *fd=md->getFileDef();
         GroupDef *gd=md->getGroupDef();
+        ClassDef *cd=md->getClassDef();
 
  //cout << "found link with same name: " << fd->fileName() << "  " <<  memberName;
  //if (md->getNamespaceDef() != 0) cout << " in namespace " << md->getNamespaceDef()->name();cout << endl;
@@ -477,7 +494,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
 
            if (nspace == 0) 
 	   { // found function in global scope
-             return TRUE;
+             if(cd == 0) { // Skip if bound to type
+                return TRUE;
+              }
            }
            else if (moduleName == nspace->name()) 
 	   { // found in local scope
@@ -534,7 +553,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
 		    CodeOutputInterface &ol,
 		    const char *text)
 {
-  MemberDef *md;
+  MemberDef *md=0;
   QCString memberName= removeRedundantWhiteSpace(memberText);
 
   if (getFortranDefs(memberName, currentModule, md, usedict) && md->isLinkable())
@@ -563,6 +582,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
 static void generateLink(CodeOutputInterface &ol, char *lname)
 {
   ClassDef *cd=0;
+  NamespaceDef *nsd=0;
   QCString tmp = lname;
   tmp = removeRedundantWhiteSpace(tmp.lower());
  
@@ -580,6 +600,12 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
       addToSearchIndex(tmp.data());
     }
   }
+  // check for module
+  else if ( (getFortranNamespaceDefs(tmp, nsd)) && nsd->isLinkable() )
+  { // write module link
+    writeMultiLineCodeLink(ol,nsd,tmp);
+    addToSearchIndex(tmp.data());
+  }
   // check for function/variable
   else if (getLink(useMembers, tmp, ol, tmp)) 
   {
@@ -694,11 +720,11 @@ CHAR      (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
 TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE)
 
 INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED)
+ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED|CONTIGUOUS|VOLATILE)
 ACCESS_SPEC (PROTECTED|PRIVATE|PUBLIC)
 /* Assume that attribute statements are almost the same as attributes. */
 ATTR_STMT {ATTR_SPEC}|DIMENSION
-FLOW      (DO|SELECT|CASE|SELECT{BS}(CASE|TYPE)|WHERE|IF|THEN|ELSE|WHILE|FORALL|ELSEWHERE|ELSEIF|RETURN|CONTINUE|EXIT)
+FLOW      (DO|SELECT|CASE|SELECT{BS}(CASE|TYPE)|WHERE|IF|THEN|ELSE|WHILE|FORALL|ELSEWHERE|ELSEIF|RETURN|CONTINUE|EXIT|GO{BS}TO)
 COMMANDS  (FORMAT|CONTAINS|MODULE{BS_}PROCEDURE|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|PRESENT|DEALLOCATE|NULLIFY|SIZE|INQUIRE|OPEN|CLOSE|FLUSH|DATA|COMMON)
 IGNORE    (CALL)
 PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|IMPURE|PURE|ELEMENTAL)?
@@ -721,6 +747,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 %x UseOnly
 %x Import
 %x Declaration
+%x DeclarationBinding
 %x DeclContLine
 %x Parameterlist
 %x String
@@ -731,8 +758,8 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 
  /*-------- ignore ------------------------------------------------------------*/
 
-<Start>{IGNORE}/{BS}"("?                { // do not search keywords, intrinsics... TODO: complete list
-  					  codifyLines(yytext);
+<Start>{IGNORE}/{BS}"("                 { // do not search keywords, intrinsics... TODO: complete list
+                                          codifyLines(yytext);
                                         }
  /*-------- inner construct ---------------------------------------------------*/
  
@@ -757,12 +784,11 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
                                           codifyLines(yytext);
                                           endFontClass();
                                         }
-<Start>"end"({BS}{FLOW})?/[ \t\n]       { // list is a bit long as not all have possible end
+<Start>{BS}"end"({BS}{FLOW})/[ \t\n]       { // list is a bit long as not all have possible end
   					  startFontClass("keywordflow");
   					  codifyLines(yytext);
 					  endFontClass();
 					}
-
 <Start>"implicit"{BS}"none"             { 
   					  startFontClass("keywordtype"); 
   					  codifyLines(yytext);
@@ -807,10 +833,12 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 <UseOnly,Import>{BS},{BS}               { codifyLines(yytext); }
 <UseOnly,Import>{BS}&{BS}"\n"           { codifyLines(yytext); YY_FTN_RESET}
 <UseOnly>{ID}                           {
+                                          QCString tmp = yytext;
+                                          tmp = tmp.lower();
+                                          useEntry->onlyNames.append(tmp);
                                           g_insideBody=TRUE;
                                           generateLink(*g_code, yytext);
                                           g_insideBody=FALSE;
-                                          useEntry->onlyNames.append(yytext);
                                         }
 <Use,UseOnly,Import>"\n"                {
                                           unput(*yytext);
@@ -845,6 +873,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
             endFontClass();
                                           yy_push_state(YY_START);
             BEGIN(ClassName);
+            currentClass="class";
           }
 <ClassName>{ID}               	        {
 	                                  if (currentModule == "module")
@@ -864,7 +893,11 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
                                           yy_pop_state();
 					  YY_FTN_REJECT;
 					}
-<Start>"end"({BS_}"module").*          { // just reset currentModule, rest is done in following rule
+<Start>^{BS}"end"({BS_}"type").*        { // just reset currentClass, rest is done in following rule
+                                          currentClass=0;
+            YY_FTN_REJECT;
+                                        }
+<Start>^{BS}"end"({BS_}"module").*      { // just reset currentModule, rest is done in following rule
                                           currentModule=0;
 					  YY_FTN_REJECT;
                                         }
@@ -893,7 +926,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
                                           yy_pop_state();
                                           YY_FTN_RESET
                                         }
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface"){BS}     {  // Fortran subroutine or function ends
+<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface")?{BS}     {  // Fortran subroutine or function ends
                                           //cout << "===> end function " << yytext << endl;
                                           endScope();
    					  startFontClass("keyword");
@@ -942,6 +975,14 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
                                             generateLink(*g_code, yytext);
                                           }
 					}
+<Declaration>{BS}("=>"|"="){BS}                        { // Procedure binding
+            BEGIN(DeclarationBinding);
+            g_code->codify(yytext);
+          }
+<DeclarationBinding>{ID}                       { // Type bound procedure link
+                                          generateLink(*g_code, yytext);
+                                          yy_pop_state();
+          }
 <Declaration>[(]			{ // start of array specification
 					  bracketCount++;
 					  g_code->codify(yytext);
@@ -952,7 +993,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 					  g_code->codify(yytext);
 					}
 
-<Declaration>"&"                        { // continuation line
+<Declaration,DeclarationBinding>"&"                        { // continuation line
 					  g_code->codify(yytext);
                                           yy_push_state(YY_START);
 					  BEGIN(DeclContLine);					  
@@ -963,7 +1004,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
                                           yy_pop_state();
                                           YY_FTN_RESET
  				 	}
-<Declaration>"\n"                       { // end declaration line
+<Declaration,DeclarationBinding>"\n"                       { // end declaration line
 					  if (g_endComment)
             {
             g_endComment=FALSE;
@@ -980,9 +1021,11 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
  /*-------- subprog calls  -----------------------------------------*/
 
 <Start>"call"{BS_}                      {
-  					  codifyLines(yytext);
+                                          startFontClass("keyword");
+                                          codifyLines(yytext);
+                                          endFontClass();
                                           yy_push_state(YY_START);
-					  BEGIN(SubCall);
+                                          BEGIN(SubCall);
                                         }
 <SubCall>{ID}                           { // subroutine call
 					  g_insideBody=TRUE;
@@ -991,13 +1034,21 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 	                                  yy_pop_state();
                                         }
 <Start>{ID}{BS}/"("                     { // function call
-					  g_insideBody=TRUE;
-                                          generateLink(*g_code, yytext);
-					  g_insideBody=FALSE;
+                                          if (g_isFixedForm && yy_my_start == 6)
+                                          {
+                                            // fixed form continuation line
+                                            YY_FTN_REJECT;
+                                          }
+                                          else
+                                          {
+					    g_insideBody=TRUE;
+                                            generateLink(*g_code, yytext);
+					    g_insideBody=FALSE;
+                                          }
                                         }
 
  /*-------- comments ---------------------------------------------------*/
-<Start>\n?{BS}"!>"|"!<"                 { // start comment line or comment block
+<Start,Declaration,DeclarationBinding>\n?{BS}"!>"|"!<"                 { // start comment line or comment block
                                           if (yytext[0] == '\n')
                                           {
                                             yy_old_start = 0;
@@ -1010,7 +1061,7 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 					  BEGIN(DocBlock);
                                           docBlock=yytext;
 					}
-<Declaration>{BS}"!<"                   { // start comment line or comment block
+<Declaration,DeclarationBinding>{BS}"!<"                   { // start comment line or comment block
                                           yy_push_state(YY_START);
 					  BEGIN(DocBlock);
                                           docBlock=yytext;
@@ -1136,6 +1187,17 @@ PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
 <*>{LOG_OPER}                           { // Fortran logical comparison keywords
                                           g_code->codify(yytext);
                                         }
+<*><<EOF>>                              {
+                                          if (YY_START == DocBlock) {
+                                            if (!Config_getBool("STRIP_CODE_COMMENTS"))
+                                            {
+                                              startFontClass("comment");
+                                              codifyLines(docBlock);
+                                              endFontClass();
+                                            }
+                                          }
+                                          yyterminate();
+                                        }
 %%
 
 /*@ ----------------------------------------------------------------------------
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 64a49ca..3c35a7d 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -72,7 +72,7 @@
 #define YY_NEVER_INTERACTIVE 1
 #define YY_NO_INPUT 1
 
-enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
+enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER, V_RESULT};
 enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
 
 // {{{ ----- Helper structs -----
@@ -99,13 +99,15 @@ struct SymbolModifiers {
   bool nonoverridable;
   bool nopass;
   bool pass;
+  bool contiguous;
+  bool volat; /* volatile is a reserverd name */
   QCString passVar;
 
   SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
     optional(FALSE), protect(FALSE), dimension(), allocatable(FALSE),
     external(FALSE), intrinsic(FALSE), parameter(FALSE),
     pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE),
-    nopass(FALSE), pass(FALSE), passVar() {}
+    nopass(FALSE), pass(FALSE), contiguous(FALSE), volat(FALSE), passVar() {}
 
   SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
   SymbolModifiers& operator|=(QCString mdfrString);
@@ -163,7 +165,6 @@ static ScanVar          v_type       = V_IGNORE; // type of parsed variable
 static QList<Entry>     moduleProcedures; // list of all interfaces which contain unresolved 
                                           // module procedures
 static QCString         docBlock;
-static QCString         docBlockName;
 static bool             docBlockInBody = FALSE;
 static bool             docBlockJavaStyle;
 
@@ -200,6 +201,7 @@ static int yyread(char *buf,int max_size);
 static void startCommentBlock(bool);
 static void handleCommentBlock(const QCString &doc,bool brief);
 static void subrHandleCommentBlock(const QCString &doc,bool brief);
+static void subrHandleCommentBlockResult(const QCString &doc,bool brief);
 static void addCurrentEntry(int case_insens);
 static void addModule(const char *name, bool isModule=FALSE);
 static void addSubprogram(const char *text);
@@ -258,11 +260,12 @@ CHAR      (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
 TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
 
 INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE)
+ATTR_SPEC (EXTERNAL|ALLOCATABLE|DIMENSION{ARGS}|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE|CONTIGUOUS|VOLATILE)
 ACCESS_SPEC (PRIVATE|PUBLIC)
 LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
 /* Assume that attribute statements are almost the same as attributes. */
 ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
+EXTERNAL_STMT (EXTERNAL)
 
 CONTAINS  CONTAINS
 PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|IMPURE|PURE|ELEMENTAL)?
@@ -469,6 +472,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
                                         }
 
 ^{BS}interface{BS_}{ID}{ARGS}?          { ifType = IF_GENERIC;
+				          current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
                                           yy_push_state(InterfaceBody);
 
                                           // extract generic name
@@ -481,6 +485,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
 
 <InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
                                           // end scope only if GENERIC interface
+                                          last_entry->parent()->endBodyLine = yyLineNr - 1;
                                           if (ifType == IF_GENERIC && !endScope(current_root))
                                             yyterminate();
 
@@ -608,6 +613,7 @@ private                                 {
                                           current->name = yytext;
                                           current->fileName = yyFileName;
                                           current->bodyLine  = yyLineNr; 
+                                          current->startLine  = yyLineNr;
 
                                           /* if type is part of a module, mod name is necessary for output */
                                           if ((current_root) && 
@@ -648,6 +654,7 @@ private                                 {
                                           current->name     = name;
                                           current->fileName = yyFileName;
                                           current->bodyLine = yyLineNr;
+                                          current->startLine  = yyLineNr;
                                           addCurrentEntry(1);
                                         }
 {BS}"=>"[^(\n|\!)]*                     { /* Specific bindings come after the ID. */
@@ -663,6 +670,7 @@ private                                 {
 
 <TypedefBody,TypedefBodyContains>{
 ^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!) { /* end type definition */
+                                          last_entry->parent()->endBodyLine = yyLineNr;
                                           if (!endScope(current_root))
                                             yyterminate();
                                           typeMode = false;
@@ -678,6 +686,7 @@ private                                 {
                                            // in a scope of their own, even if multiple
                                            // are group in one INTERFACE/END INTERFACE block.
                                            //
+                                           last_entry->endBodyLine = yyLineNr - 1;
                                            if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
                                              endScope(current_root);
 
@@ -692,6 +701,8 @@ private                                 {
 }
 <Start,ModuleBody,TypedefBody,SubprogBody>{
 ^{BS}{TYPE_SPEC}/{SEPARATE}             {
+				          current->bodyLine = yyLineNr + 1;
+				          current->endBodyLine = yyLineNr + lineCountPrepass;
                                           /* variable declaration starts */
                                           if(YY_START == Start)
                                           {
@@ -726,6 +737,18 @@ private                                 {
 					  }
 					}
   */
+{EXTERNAL_STMT}/({BS}"::"|{BS_}{ID})   { 
+                                          /* external can be a "type" or an attribute */
+                                          if(YY_START == Start)
+                                          {
+                                            addModule(NULL); 
+                                            yy_push_state(ModuleBody); //anon program
+                                          }
+                                          QCString tmp = yytext;
+                                          currentModifiers |= tmp.stripWhiteSpace();
+					  argType = QCString(yytext).simplifyWhiteSpace().lower();
+					  yy_push_state(AttributeList);
+  				       }
 {ATTR_STMT}/{BS_}{ID}		       |
 {ATTR_STMT}/{BS}"::"                   { 
                                           /* attribute statement starts */
@@ -744,7 +767,7 @@ private                                 {
 <AttributeList>{
 {COMMA}					{}
 {BS}					{}
-{ATTR_SPEC}.				{ /* update current modifierswhen it is an ATTR_SPEC and not a variable name */
+{ATTR_SPEC}.				{ /* update current modifiers when it is an ATTR_SPEC and not a variable name */
             				  /* bug_625519 */
                                           QChar chr = yytext[(int)yyleng-1];
                                           if (chr.isLetter() || chr.isDigit() || (chr == '_'))
@@ -791,6 +814,7 @@ private                                 {
 					    current->type = argType;
 					    current->fileName = yyFileName;
 					    current->bodyLine  = yyLineNr; // used for source reference
+                                            current->startLine  = yyLineNr;
                                             addCurrentEntry(1);
                                           } 
 					  else if (!argType.isEmpty())
@@ -820,6 +844,7 @@ private                                 {
 						QCString rght;
 						if (strt != -1)
 						{
+                                                  v_type = V_RESULT;
 						  lft = "";
 						  rght = "";
 						  if (strt != 0) lft = current_root->type.left(strt).stripWhiteSpace();
@@ -840,6 +865,10 @@ private                                 {
 						  }
 						  if (current_root->type.length() > 0) current_root->type += " ";
 						  current_root->type += "function";
+					          if (!docBlock.isNull()) 
+					          {
+  					            subrHandleCommentBlockResult(docBlock,TRUE);
+					          }
 						}
 						else
 						{
@@ -870,7 +899,8 @@ private                                 {
 					  // locate !< comment
 					  updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
 					}
-<Variable>{BS}"="                       { yy_push_state(YY_START);
+<Variable>{BS}"="                       {
+                                          yy_push_state(YY_START);
                                           initializer="=";
                                           initializerScope = initializerArrayScope = 0;
 					  BEGIN(Initialization);
@@ -957,6 +987,8 @@ private                                 {
                                          result=result.stripWhiteSpace();
                                          addSubprogram(result);
                                          BEGIN(Subprog);
+				         current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
+				         current->startLine = yyLineNr;
                                        }
 
 <Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{SUBPROG}{BS_} {
@@ -971,6 +1003,8 @@ private                                 {
                                          result = QCString(yytext).stripWhiteSpace();
                                          addSubprogram(result);
                                          yy_push_state(Subprog);
+				         current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
+				         current->startLine = yyLineNr;
                                        }
 
 <Subprog>{BS}                          {   /* ignore white space */   }
@@ -1078,6 +1112,10 @@ private                                 {
 					  {
 					    subrHandleCommentBlock(docBlock,TRUE);
                                           }
+					  else if (v_type == V_RESULT) 
+					  {
+					    subrHandleCommentBlockResult(docBlock,TRUE);
+                                          }
 					  yy_pop_state();
 					  docBlock.resize(0);
                                         }
@@ -1478,7 +1516,9 @@ static void copyEntry(Entry *dest, Entry *src)
 {
    dest->type     = src->type;
    dest->fileName = src->fileName;
+   dest->startLine = src->startLine;
    dest->bodyLine = src->bodyLine;
+   dest->endBodyLine = src->endBodyLine;
    dest->args     = src->args;
    dest->argList  = new ArgumentList(*src->argList);
    dest->doc      = src->doc;
@@ -1559,6 +1599,8 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
   nopass |= mdfs.nopass;
   pass |= mdfs.pass;
   passVar = mdfs.passVar;
+  contiguous |= mdfs.contiguous;
+  volat |= mdfs.volat;
   return *this;
 }
 
@@ -1637,6 +1679,14 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
   {
     newMdf.nonoverridable = TRUE;
   }
+  else if (mdfString=="contiguous")
+  {
+    newMdf.contiguous = TRUE;
+  }
+  else if (mdfString=="volatile")
+  {
+    newMdf.volat = TRUE;
+  }
   else if (mdfString.contains("pass"))
   {
     newMdf.pass = TRUE;
@@ -1723,8 +1773,11 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
   }
   if (mdfs.external) 
   {
-    if (!typeName.isEmpty()) typeName += ", ";
-    typeName += "external";
+    if (!typeName.contains("external"))
+    {
+      if (!typeName.isEmpty()) typeName += ", ";
+      typeName += "external";
+    }
   }
   if (mdfs.intrinsic) 
   {
@@ -1788,6 +1841,16 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
     if (!typeName.isEmpty()) typeName += ", ";
     typeName += "protected";
   }
+  if (mdfs.contiguous)
+  {
+    if (!typeName.isEmpty()) typeName += ", ";
+    typeName += "contiguous";
+  }
+  if (mdfs.volat)
+  {
+    if (!typeName.isEmpty()) typeName += ", ";
+    typeName += "volatile";
+  }
 
   return typeName;
 }
@@ -1991,7 +2054,7 @@ static void addModule(const char *name, bool isModule)
   DBG_CTX((stderr, "0=========> got module %s\n", name));
 
   if (isModule)
-    current->section = Entry::CLASS_SEC;
+    current->section = Entry::NAMESPACE_SEC;
   else
     current->section = Entry::FUNCTION_SEC;
 
@@ -2010,6 +2073,7 @@ static void addModule(const char *name, bool isModule)
   current->type = "program";
   current->fileName  = yyFileName;
   current->bodyLine  = yyLineNr; // used for source reference
+  current->startLine  = yyLineNr;
   current->protection = Public ;
   addCurrentEntry(1);
   startScope(last_entry);
@@ -2026,8 +2090,8 @@ static void addSubprogram(const char *text)
   current->type += " " + subtype;
   current->type = current->type.stripWhiteSpace();
   current->fileName  = yyFileName;
-  current->bodyLine  = yyLineNr; // used for source reference
-  current->startLine = -1; // ??? what is startLine for?
+  current->bodyLine  = yyLineNr; // used for source reference start of body of routine
+  current->startLine  = yyLineNr; // used for source reference start of definition
   current->args.resize(0);
   current->argList->clear();
   docBlock.resize(0);
@@ -2075,6 +2139,7 @@ static void addInterface(QCString name, InterfaceType type)
 
   current->fileName = yyFileName;
   current->bodyLine  = yyLineNr; 
+  current->startLine  = yyLineNr;
   addCurrentEntry(1);
 }
 
@@ -2155,79 +2220,147 @@ static void handleCommentBlock(const QCString &doc,bool brief)
 }
 
 //----------------------------------------------------------------------------
-
+/// Handle parameter description as defined after the declaration of the parameter
 static void subrHandleCommentBlock(const QCString &doc,bool brief)
 {
   QCString loc_doc;
+  loc_doc = doc.stripWhiteSpace();
+
   Entry *tmp_entry = current; 
   current = subrCurrent.getFirst(); // temporarily switch to the entry of the subroutine / function
 
   // Still in the specification section so no inbodyDocs yet, but parameter documentation
   current->inbodyDocs = "";
 
-  if (docBlock.stripWhiteSpace().find("\\param") == 0)
-  {
-    handleCommentBlock("\n\n"+doc,brief);
-  }
-  else if (docBlock.stripWhiteSpace().find("@param") == 0)
-  {
-    handleCommentBlock("\n\n"+doc,brief);
-  }
-  else 
+  // strip \\param or @param, so we can do some extra checking. We will add it later on again.
+  if (!loc_doc.stripPrefix("\\param") &&
+      !loc_doc.stripPrefix("@param")
+     ); // Do nothing work has been done by stripPrefix
+  loc_doc.stripWhiteSpace();
+
+  // direction as defined with the declaration of the parameter
+  int dir1 = modifiers[current_root][argName.lower()].direction;
+  // in description [in] is specified
+  if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0)
   {
-    int dir1 = modifiers[current_root][argName.lower()].direction;
-    loc_doc = doc.stripWhiteSpace();
-    if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0)
+    // check if with the declaration intent(in) or nothing has been specified
+    if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
+        (directionParam[dir1] == directionParam[SymbolModifiers::IN]))
     {
-      if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
-          (directionParam[dir1] == directionParam[SymbolModifiers::IN]))
-      {
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::IN] + " " + 
-	                   argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN])),brief);
-      }
-      else
+      // strip direction
+      loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN]));
+      loc_doc.stripWhiteSpace();
+      // in case of emty documentation or (now) just name, consider it as no documemntation
+      if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
       {
-        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
-	                   argName + " " + doc,brief);
+        // reset current back to the part inside the routine
+        current=tmp_entry;
+        return;
       }
+      handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::IN] + " " + 
+                         argName + " " + loc_doc,brief);
+    }
+    else
+    {
+      // something different specified, give warning and leave error.
+      warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args +
+           " inconsistency between intent attribute and documentation for parameter: " + argName);
+      handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
+                         argName + " " + loc_doc,brief);
     }
-    else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0)
+  }
+  // analogous to the [in] case, here [out] direction specified
+  else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0)
+  {
+    if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
+        (directionParam[dir1] == directionParam[SymbolModifiers::OUT]))
     {
-      if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
-          (directionParam[dir1] == directionParam[SymbolModifiers::OUT]))
+      loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT]));
+      loc_doc.stripWhiteSpace();
+      if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
       {
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::OUT] + " " + 
-	                   argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT])),brief);
-      }
-      else
-      {
-        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
-	                   argName + " " + doc,brief);
+        current=tmp_entry;
+        return;
       }
+      handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::OUT] + " " + 
+                         argName + " " + loc_doc,brief);
     }
-    else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0)
+    else
     {
-      if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
-          (directionParam[dir1] == directionParam[SymbolModifiers::INOUT]))
-      {
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::INOUT] + " " + 
-	                   argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT])),brief);
-      }
-      else
+      warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args +
+           " inconsistency between intent attribute and documentation for parameter: " + argName);
+      handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
+                         argName + " " + loc_doc,brief);
+    }
+  }
+  // analogous to the [in] case, here [in,out] direction specified
+  else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0)
+  {
+    if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
+        (directionParam[dir1] == directionParam[SymbolModifiers::INOUT]))
+    {
+      loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT]));
+      loc_doc.stripWhiteSpace();
+      if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
       {
-        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName);
-        handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
-	                   argName + " " + doc,brief);
+        current=tmp_entry;
+        return;
       }
+      handleCommentBlock(QCString("\n\n at param ") + directionParam[SymbolModifiers::INOUT] + " " + 
+                         argName + " " + loc_doc,brief);
     }
     else
     {
+      warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args +
+           " inconsistency between intent attribute and documentation for parameter: " + argName);
       handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
-	                 argName + " " + doc,brief);
+                         argName + " " + loc_doc,brief);
+    }
+  }
+  // analogous to the [in] case; here no direction specified
+  else
+  {
+    if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
+    {
+      current=tmp_entry;
+      return;
     }
+    handleCommentBlock(QCString("\n\n at param ") + directionParam[dir1] + " " + 
+                       argName + " " + loc_doc,brief);
   }
+
+  // reset current back to the part inside the routine
+  current=tmp_entry;
+}
+//----------------------------------------------------------------------------
+/// Handle result description as defined after the declaration of the parameter
+static void subrHandleCommentBlockResult(const QCString &doc,bool brief)
+{
+  QCString loc_doc;
+  loc_doc = doc.stripWhiteSpace();
+
+  Entry *tmp_entry = current; 
+  current = subrCurrent.getFirst(); // temporarily switch to the entry of the subroutine / function
+
+  // Still in the specification section so no inbodyDocs yet, but parameter documentation
+  current->inbodyDocs = "";
+
+  // strip \\returns or @returns. We will add it later on again.
+  if (!loc_doc.stripPrefix("\\returns") &&
+      !loc_doc.stripPrefix("\\return") &&
+      !loc_doc.stripPrefix("@returns") &&
+      !loc_doc.stripPrefix("@return")
+     ); // Do nothing work has been done by stripPrefix
+  loc_doc.stripWhiteSpace();
+
+  if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
+  {
+    current=tmp_entry;
+    return;
+  }
+  handleCommentBlock(QCString("\n\n at returns ") + loc_doc,brief);
+
+  // reset current back to the part inside the routine
   current=tmp_entry;
 }
 
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 4613a92..f45d956 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -36,549 +36,10 @@
 #include "htmldocvisitor.h"
 #include "filedef.h"
 #include "util.h"
+#include "resourcemgr.h"
 
 #define MAX_INDENT 1024
 
-
-static const char navtree_script[]=
-#include "navtree.js.h"
-;
-
-static const char resize_script[]=
-#include "resize.js.h"
-;
-
-static const char navtree_css[]=
-#include "navtree.css.h"
-;
-
-static unsigned char blank_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char folderopen_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
-  255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
-  255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
-  255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
-  255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
-  255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
-  255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
-  255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
-  255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
-  255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
-  255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
-  255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
-  255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderopen_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char folderclosed_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
-  255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
-  255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
-  255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
-  255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
-  255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
-  255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
-  255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
-  255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
-  255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
-  255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
-  255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
-  255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderclosed_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char doc_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
-  255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
-  255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
-  255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
-  255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
-  255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
-  255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
-  255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
-  255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
-  255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
-  255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
-  255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
-  255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
-  255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
-  255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char doc_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-#if 0
-static unsigned char module_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,255,193,128,136,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,255,213,128,170,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,247,247,128,196,255,247,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,213,255,153,230,255,213,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,187,255,187,255,230,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,153,255,247,255,196,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,247,255,255,170,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,213,255,255,136,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,187,255,230,138,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char namespace_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,226,128,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,189,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,244,141,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,255,220,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,226,255,255,220,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,220,255,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,141,250,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,128,198,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,128,128,226,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char class_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,187,247,255,255,230,170,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,196,255,255,255,255,255,255,170,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,145,255,255,230,128,136,230,247,179,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,162,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,145,255,255,221,128,128,221,255,179,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,196,255,255,255,255,255,255,187,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,187,247,255,255,240,179,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-
-static unsigned char letter_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0, 60,156,204,204,204,204,204,204,204,204,156, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0, 78,255,255,255,255,255,255,255,255,255,255,255,252, 72,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,210,255,255,255,255,255,255,255,255,255,255,255,255,207,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,222,255,255,255,255,255,255,255,255,255,255,255,255,219,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,111,255,255,255,255,255,255,255,255,255,255,255,255, 99,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0, 99,198,204,204,204,204,204,204,204,204,195, 90,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-#endif
-
-
-static unsigned char arrow_right_png[352] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_right_a_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,223, 75,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,176, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,248,117,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,211, 60,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,255,255, 77,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,211, 60,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,248,117,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,176, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,223, 75,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char arrow_down_png[352] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
-  255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_down_a_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,231,255,255,255,255,255,255,255,216,  0,  0,  0,  0,
-    0,  0,  0, 87,255,255,255,255,255,255,255, 65,  0,  0,  0,  0,
-    0,  0,  0,  0,186,255,255,255,255,255,164,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 38,251,255,255,255,241, 25,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,127,255,255,255,107,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,221,255,204,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0, 72,253, 52,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0, 77,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-#define SPLITBAR_LINE 170,242,224,202,183,170
-#define SPLITBAR_BLOCK2  SPLITBAR_LINE    , SPLITBAR_LINE 
-#define SPLITBAR_BLOCK4  SPLITBAR_BLOCK2  , SPLITBAR_BLOCK2 
-#define SPLITBAR_BLOCK8  SPLITBAR_BLOCK4  , SPLITBAR_BLOCK4 
-#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8  , SPLITBAR_BLOCK8 
-#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
-
-#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
-#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
-#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1  , SPLITBAR_ALTLINE2 
-#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2 
-#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
-
-static unsigned char splitbar_png[32*32*6] =
-{
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_ALTBLOCK8,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32
-};
-
-struct FTVImageInfo
-{
-  const char *alt;
-  const char *name;
-  const unsigned char *data;
-  //unsigned int len;
-  unsigned short width, height;
-};
-
-//extern FTVImageInfo image_info[];
-
-#if 0
-#define FTVIMG_blank        0
-#define FTVIMG_doc          1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen   3
-#define FTVIMG_lastnode     4
-#define FTVIMG_link         5
-#define FTVIMG_mlastnode    6
-#define FTVIMG_mnode        7
-#define FTVIMG_node         8
-#define FTVIMG_plastnode    9
-#define FTVIMG_pnode       10
-#define FTVIMG_vertline    11
-#define FTVIMG_ns          12
-#define FTVIMG_cl          13
-#define FTVIMG_mo          14
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
-    "src=\"" FTV_ICON_FILE(name) "\" " \
-    "alt=\"" << FTV_INFO(name).alt << "\" " \
-    "width=\"" << FTV_INFO(name).width << "\" " \
-    "height=\"" << FTV_INFO(name).height << "\" "
-
-
-static FTVImageInfo image_info[] =
-{
-  { " ", "ftv2blank.png",    0 /*ftv2blank_png*/        /*,174*/,16,22 },
-  { "*",  "ftv2doc.png",          0 /*ftv2doc_png*/          /*,255*/,24,22 },
-  { "+",  "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ /*,259*/,24,22 },
-  { "-",  "ftv2folderopen.png",   0 /*ftv2folderopen_png*/   /*,261*/,24,22 },
-  { "\\", "ftv2lastnode.png",     0 /*ftv2lastnode_png*/     /*,233*/,16,22 },
-  { "-",  "ftv2link.png",         0 /*ftv2link_png*/         /*,358*/,24,22 },
-  { "\\", "ftv2mlastnode.png",    0 /*ftv2mlastnode_png*/    /*,160*/,16,22 },
-  { "o",  "ftv2mnode.png",        0 /*ftv2mnode_png*/        /*,194*/,16,22 },
-  { "o",  "ftv2node.png",         0 /*ftv2node_png*/         /*,235*/,16,22 },
-  { "\\", "ftv2plastnode.png",    0 /*ftv2plastnode_png*/    /*,165*/,16,22 },
-  { "o",  "ftv2pnode.png",        0 /*ftv2pnode_png*/        /*,200*/,16,22 },
-  { "|",  "ftv2vertline.png",     0 /*ftv2vertline_png*/     /*,229*/,16,22 },
-  { "N",  "ftv2ns.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  { "C",  "ftv2cl.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  { "M",  "ftv2mo.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  {   0,  0,                      0                          /*,  0*/, 0, 0 }
-};
-#endif
-
-static ColoredImgDataItem ftv_image_data[] =
-{
-  { "ftv2blank.png",        16,  22, blank_png,        blank_png          },
-  { "ftv2doc.png",          24,  22, doc_png,          doc_a_png          },
-  { "ftv2folderclosed.png", 24,  22, folderclosed_png, folderclosed_a_png },
-  { "ftv2folderopen.png",   24,  22, folderopen_png,   folderopen_a_png   },
-//  { "ftv2ns.png",           24,  22, namespace_png,    letter_a_png       },
-//  { "ftv2mo.png",           24,  22, module_png,       letter_a_png       },
-//  { "ftv2cl.png",           24,  22, class_png,        letter_a_png       },
-  { "ftv2lastnode.png",     16,  22, blank_png,        blank_png          },
-  { "ftv2link.png",         24,  22, doc_png,          doc_a_png          },
-  { "ftv2mlastnode.png",    16,  22, arrow_down_png,   arrow_down_a_png   },
-  { "ftv2mnode.png",        16,  22, arrow_down_png,   arrow_down_a_png   },
-  { "ftv2node.png",         16,  22, blank_png,        blank_png          },
-  { "ftv2plastnode.png",    16,  22, arrow_right_png,  arrow_right_a_png  },
-  { "ftv2pnode.png",        16,  22, arrow_right_png,  arrow_right_a_png  },
-  { "ftv2vertline.png",     16,  22, blank_png,        blank_png          },
-  { "ftv2splitbar.png",      6,1024, splitbar_png,     0                  },
-  { 0,                       0,   0, 0,                0                  }
-};
-
 static int folderId=1;
 
 struct FTVNode
@@ -1118,7 +579,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
 static void generateJSNavTree(const QList<FTVNode> &nodeList)
 {
   QCString htmlOutput = Config_getString("HTML_OUTPUT");
-  QFile f(htmlOutput+"/navtree.js");
+  QFile f(htmlOutput+"/navtreedata.js");
   NavIndexEntryList navIndex;
   if (f.open(IO_WriteOnly) /*&& fidx.open(IO_WriteOnly)*/)
   {
@@ -1218,8 +679,8 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
     }
     t << endl << "var SYNCONMSG = '"  << theTranslator->trPanelSynchronisationTooltip(FALSE) << "';"; 
     t << endl << "var SYNCOFFMSG = '" << theTranslator->trPanelSynchronisationTooltip(TRUE)  << "';"; 
-    t << endl << navtree_script;
   }
+  ResourceMgr::instance().copyResource("navtree.js",htmlOutput);
 }
 
 //-----------------------------------------------------------
@@ -1228,7 +689,13 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
 void FTVHelp::generateTreeViewImages()
 {
   QCString dname=Config_getString("HTML_OUTPUT");
-  writeColoredImgData(dname,ftv_image_data);
+  const ResourceMgr &rm = ResourceMgr::instance();
+  rm.copyResource("doc.luma",dname);
+  rm.copyResource("folderopen.luma",dname);
+  rm.copyResource("folderclosed.luma",dname);
+  rm.copyResource("arrowdown.luma",dname);
+  rm.copyResource("arrowright.luma",dname);
+  rm.copyResource("splitbar.lum",dname);
 }
 
 // new style scripts
@@ -1239,28 +706,9 @@ void FTVHelp::generateTreeViewScripts()
   // generate navtree.js & navtreeindex.js
   generateJSNavTree(m_indentNodes[0]);
 
-  // generate resize.js
-  {
-    QFile f(htmlOutput+"/resize.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << resize_script;
-    }
-  }
-  // generate navtree.css
-  {
-    QFile f(htmlOutput+"/navtree.css");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << substitute(
-              replaceColorMarkers(navtree_css),
-              "$width",
-              QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px"
-             );
-    }
-  }
+  // copy resize.js & navtree.css
+  ResourceMgr::instance().copyResource("resize.js",htmlOutput);
+  ResourceMgr::instance().copyResource("navtree.css",htmlOutput);
 }
 
 // write tree inside page
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index f1d1877..64a3902 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -151,13 +151,13 @@ bool GroupDef::addClass(const ClassDef *cd)
   static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
   if (cd->isHidden()) return FALSE;
   updateLanguage(cd);
-  if (classSDict->find(cd->qualifiedName())==0)
+  QCString qn = cd->name();
+  if (classSDict->find(qn)==0)
   {
-    QCString qn = cd->qualifiedName();
     //printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs);
     if (sortBriefDocs)
     {
-      classSDict->inSort(cd->qualifiedName(),cd);
+      classSDict->inSort(qn,cd);
     }
     else
     {
@@ -180,13 +180,13 @@ bool GroupDef::addClass(const ClassDef *cd)
             j++;
           }
           //printf("Found scope at index %d\n",j);
-          classSDict->insertAt(j,cd->qualifiedName(),cd);
+          classSDict->insertAt(j,qn,cd);
           found=TRUE;
         }
       }
       if (!found) // no insertion point found -> just append
       {
-        classSDict->append(cd->qualifiedName(),cd);
+        classSDict->append(qn,cd);
       }
     }
     return TRUE;
@@ -508,9 +508,25 @@ void GroupDef::removeMember(MemberDef *md)
   }
 }
 
-bool GroupDef::containsGroup(const GroupDef *def)
+bool GroupDef::findGroup(const GroupDef *def) const
 {
-    return this==def || groupList->find(def) >= 0;
+  if (this==def)
+  {
+    return TRUE;
+  }
+  else if (groupList)
+  {
+    GroupListIterator it(*groupList);
+    GroupDef *gd;
+    for (;(gd=it.current());++it)
+    {
+      if (gd->findGroup(def))
+      {
+        return TRUE;
+      }
+    }
+  }
+  return FALSE;
 }
 
 void GroupDef::addGroup(const GroupDef *def)
@@ -546,6 +562,149 @@ void GroupDef::computeAnchors()
   setAnchors(allMemberList);
 }
 
+void GroupDef::writeTagFile(FTextStream &tagFile)
+{
+  tagFile << "  <compound kind=\"group\">" << endl;
+  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
+  tagFile << "    <title>" << convertToXML(title) << "</title>" << endl;
+  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
+  QListIterator<LayoutDocEntry> eli(
+      LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
+  LayoutDocEntry *lde;
+  for (eli.toFirst();(lde=eli.current());++eli)
+  {
+    switch (lde->kind())
+    {
+      case LayoutDocEntry::GroupClasses:
+        {
+          if (classSDict)
+          {
+            SDict<ClassDef>::Iterator ci(*classSDict);
+            ClassDef *cd;
+            for (ci.toFirst();(cd=ci.current());++ci)
+            {
+              if (cd->isLinkableInProject())
+              {
+                tagFile << "    <class kind=\"" << cd->compoundTypeString()
+                        << "\">" << convertToXML(cd->name()) << "</class>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::GroupNamespaces:
+        {
+          if (namespaceSDict)
+          {
+            SDict<NamespaceDef>::Iterator ni(*namespaceSDict);
+            NamespaceDef *nd;
+            for (ni.toFirst();(nd=ni.current());++ni)
+            {
+              if (nd->isLinkableInProject())
+              {
+                tagFile << "    <namespace>" << convertToXML(nd->name())
+                        << "</namespace>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::GroupFiles:
+        {
+          if (fileList)
+          {
+            QListIterator<FileDef> it(*fileList);
+            FileDef *fd;
+            for (;(fd=it.current());++it)
+            {
+              if (fd->isLinkableInProject())
+              {
+                tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::GroupPageDocs:
+        {
+          if (pageDict)
+          {
+            PageSDict::Iterator pdi(*pageDict);
+            PageDef *pd=0;
+            for (pdi.toFirst();(pd=pdi.current());++pdi)
+            {
+              QCString pageName = pd->getOutputFileBase();
+              if (pd->isLinkableInProject())
+              {
+                tagFile << "    <page>" << convertToXML(pageName) << "</page>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::GroupDirs:
+        {
+          if (dirList)
+          {
+            QListIterator<DirDef> it(*dirList);
+            DirDef *dd;
+            for (;(dd=it.current());++it)
+            {
+              if (dd->isLinkableInProject())
+              {
+                tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::GroupNestedGroups:
+        {
+          if (groupList)
+          {
+            QListIterator<GroupDef> it(*groupList);
+            GroupDef *gd;
+            for (;(gd=it.current());++it)
+            {
+              if (gd->isVisible())
+              {
+                tagFile << "    <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberDecl:
+        {
+          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+          MemberList * ml = getMemberList(lmd->type);
+          if (ml)
+          {
+            ml->writeTagFile(tagFile);
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberGroups:
+        {
+          if (memberGroupSDict)
+          {
+            MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+            MemberGroup *mg;
+            for (;(mg=mgli.current());++mgli)
+            {
+              mg->writeTagFile(tagFile);
+            }
+          }
+        }
+        break;
+      default:
+        break;
+    }
+  }
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "  </compound>" << endl;
+}
+
 void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
 {
   if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) 
@@ -670,10 +829,6 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
       ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
       ol.insertMemberAlign();
       ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-      {
-        Doxygen::tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
-      }
       ol.endMemberItem();
       if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
@@ -728,10 +883,6 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
         //ol.docify(" ");
         ol.insertMemberAlign();
         ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
-        if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-        {
-          Doxygen::tagFile << "    <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
-        }
         ol.endMemberItem();
         if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
         {
@@ -765,10 +916,6 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
       ol.insertMemberAlign();
       ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
       ol.endMemberItem();
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-      {
-        Doxygen::tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
-      }
       if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(dd->getOutputFileBase());
@@ -801,13 +948,6 @@ void GroupDef::writePageDocumentation(OutputList &ol)
   {
     if (!pd->isReference())
     {
-      QCString pageName = pd->getOutputFileBase();
-
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-      {
-        Doxygen::tagFile << "    <page>" << convertToXML(pageName) << "</page>" << endl;
-      }
-
       SectionInfo *si=0;
       if (!pd->title().isEmpty() && !pd->name().isEmpty() &&
           (si=Doxygen::sectionDict->find(pd->name()))!=0)
@@ -941,7 +1081,15 @@ void GroupDef::writeDocumentation(OutputList &ol)
   ol.parseText(title);
   ol.popGeneratorState();
   addGroupListToTitle(ol,this);
+  ol.pushGeneratorState();
+  ol.disable(OutputGenerator::Man);
   ol.endTitleHead(getOutputFileBase(),title);
+  ol.popGeneratorState();
+  ol.pushGeneratorState();
+  ol.disableAllBut(OutputGenerator::Man);
+  ol.endTitleHead(getOutputFileBase(),name());
+  ol.parseText(title);
+  ol.popGeneratorState();
   ol.endHeaderSection();
   ol.startContents();
 
@@ -959,15 +1107,6 @@ void GroupDef::writeDocumentation(OutputList &ol)
 
   Doxygen::indexList->addIndexItem(this,0,0,title);
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    Doxygen::tagFile << "  <compound kind=\"group\">" << endl;
-    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
-    Doxygen::tagFile << "    <title>" << convertToXML(title) << "</title>" << endl;
-    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
-  }
-  
-
   //---------------------------------------- start flexible part -------------------------------
 
   SrcLangExt lang=getLanguage();
@@ -1092,12 +1231,6 @@ void GroupDef::writeDocumentation(OutputList &ol)
 
   ol.popGeneratorState();
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
-  {
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
-
   if (Config_getBool("SEPARATE_MEMBER_PAGES"))
   {
     allMemberList->sort();
@@ -1229,16 +1362,23 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
   for (;(g=gli.current());++gli)
   {
     GroupDef *gd=0;
-    if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) &&
-	!gd->containsGroup(subGroup) )
-    {
-      gd->addGroup(subGroup);
-      subGroup->makePartOfGroup(gd);
-    }
-    else if (gd==subGroup)
+    if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
     {
-      warn(root->fileName,root->startLine,"Trying to add group %s to itself!",
-          gd->name().data());
+      if (gd==subGroup)
+      {
+        warn(root->fileName,root->startLine,"Refusing to add group %s to itself",
+            gd->name().data());
+      }
+      else if (subGroup->findGroup(gd))
+      {
+        warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a "
+                                            "subgroup of the former\n", subGroup->name().data(),gd->name().data());
+      }
+      else if (!gd->findGroup(subGroup))
+      {
+        gd->addGroup(subGroup);
+        subGroup->makePartOfGroup(gd);
+      }
     }
   }
 }
@@ -1386,6 +1526,7 @@ void GroupDef::addListReferences()
              getOutputFileBase(),
              theTranslator->trGroup(TRUE,TRUE),
              getOutputFileBase(),name(),
+             0,
              0
             );
   }
@@ -1472,7 +1613,7 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
   }
   if (ml) 
   {
-    ml->writeDeclarations(ol,0,0,0,this,title,0,definitionType());
+    ml->writeDeclarations(ol,0,0,0,this,title,0);
   }
 }
 
@@ -1519,3 +1660,4 @@ bool GroupDef::hasDetailedDescription() const
   return ((!briefDescription().isEmpty() && repeatBrief) ||
           !documentation().isEmpty());
 }
+
diff --git a/src/groupdef.h b/src/groupdef.h
index bc956da..a6ae533 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -39,6 +39,7 @@ class DirList;
 class FTVHelp;
 class Entry;
 class MemberDef;
+class FTextStream;
 
 /** A model of a group of symbols. */
 class GroupDef : public Definition
@@ -63,10 +64,11 @@ class GroupDef : public Definition
     void addDir(const DirDef *dd);
     bool insertMember(MemberDef *def,bool docOnly=FALSE);
     void removeMember(MemberDef *md);
-    bool containsGroup(const GroupDef *def);    // true if def is already a subgroup
+    bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
     void writeDocumentation(OutputList &ol);
     void writeMemberPages(OutputList &ol);
     void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+    void writeTagFile(FTextStream &);
     int  countMembers() const;
     bool isLinkableInProject() const;
     bool isLinkable() const;
diff --git a/src/htags.cpp b/src/htags.cpp
index 1e18ae1..9535be7 100644
--- a/src/htags.cpp
+++ b/src/htags.cpp
@@ -105,7 +105,6 @@ bool Htags::execute(const QCString &htmldir)
 bool Htags::loadFilemap(const QCString &htmlDir)
 {
   QCString fileMapName = htmlDir+"/HTML/FILEMAP";
-  QCString fileMap;
   QFileInfo fi(fileMapName);
   /*
    * Construct FILEMAP dictionary using QDict.
@@ -126,8 +125,10 @@ bool Htags::loadFilemap(const QCString &htmlDir)
     line.at(maxlen)='\0';
     if (f.open(IO_ReadOnly))
     {
-      while (f.readLine(line.data(),maxlen)>0)
+      int len;
+      while ((len=f.readLine(line.rawData(),maxlen))>0)
       {
+        line.resize(len+1);
         //printf("Read line: %s",line.data());
         int sep = line.find('\t');
         if (sep!=-1)
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index e319a1f..ebef0d4 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -325,6 +325,32 @@ void HtmlDocVisitor::visit(DocStyleChange *s)
 }
 
 
+static void visitPreCaption(FTextStream &t, DocVerbatim *s)
+{
+  if (s->hasCaption())
+  { 
+    t << "<div class=\"caption\">" << endl;
+  }
+}
+
+
+static void visitPostCaption(FTextStream &t, DocVerbatim *s)
+{
+  if (s->hasCaption())
+  {
+    t << "</div>" << endl;
+  }
+}
+
+
+static void visitCaption(HtmlDocVisitor *parent, QList<DocNode> children)
+{
+  QListIterator<DocNode> cli(children);
+  DocNode *n;
+  for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
+
 void HtmlDocVisitor::visit(DocVerbatim *s)
 {
   if (m_hide) return;
@@ -382,6 +408,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
         static int dotindex = 1;
         QCString fileName(4096);
 
+        forceEndParagraph(s);
         fileName.sprintf("%s%d%s", 
             (Config_getString("HTML_OUTPUT")+"/inline_dotgraph_").data(), 
             dotindex++,
@@ -392,16 +419,21 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
         {
           err("Could not open file %s for writing\n",fileName.data());
         }
-        file.writeBlock( s->text(), s->text().length() );
-        file.close();
+        else
+        {
+          file.writeBlock( s->text(), s->text().length() );
+          file.close();
 
-        forceEndParagraph(s);
-        m_t << "<div align=\"center\">" << endl;
-        writeDotFile(fileName,s->relPath(),s->context());
-        m_t << "</div>" << endl;
-        forceStartParagraph(s);
+          m_t << "<div align=\"center\">" << endl;
+          writeDotFile(fileName,s->relPath(),s->context());
+          visitPreCaption(m_t, s);
+          visitCaption(this, s->children());
+          visitPostCaption(m_t, s);
+          m_t << "</div>" << endl;
 
-        if (Config_getBool("DOT_CLEANUP")) file.remove();
+          if (Config_getBool("DOT_CLEANUP")) file.remove();
+        }
+        forceStartParagraph(s);
       }
       break;
     case DocVerbatim::Msc:
@@ -420,17 +452,24 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
         {
           err("Could not open file %s.msc for writing\n",baseName.data());
         }
-        QCString text = "msc {";
-        text+=s->text();
-        text+="}";
+        else
+        {
+          QCString text = "msc {";
+          text+=s->text();
+          text+="}";
 
-        file.writeBlock( text, text.length() );
-        file.close();
+          file.writeBlock( text, text.length() );
+          file.close();
 
-        m_t << "<div align=\"center\">" << endl;
-        writeMscFile(baseName+".msc",s->relPath(),s->context());
-        if (Config_getBool("DOT_CLEANUP")) file.remove();
-        m_t << "</div>" << endl;
+          m_t << "<div align=\"center\">" << endl;
+          writeMscFile(baseName+".msc",s->relPath(),s->context());
+          visitPreCaption(m_t, s);
+          visitCaption(this, s->children());
+          visitPostCaption(m_t, s);
+          m_t << "</div>" << endl;
+
+          if (Config_getBool("DOT_CLEANUP")) file.remove();
+        }
         forceStartParagraph(s);
       }
       break;
@@ -442,6 +481,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
         QCString baseName = writePlantUMLSource(htmlOutput,s->exampleFile(),s->text());
         m_t << "<div align=\"center\">" << endl;
         writePlantUMLFile(baseName,s->relPath(),s->context());
+        visitPreCaption(m_t, s);
+        visitCaption(this, s->children());
+        visitPostCaption(m_t, s);
         m_t << "</div>" << endl;
         forceStartParagraph(s);
       }
@@ -1021,7 +1063,6 @@ void HtmlDocVisitor::visitPost(DocPara *p)
     }
   }
 
-  QCString context;
   // if the last element of a paragraph is something that should be outside of
   // the paragraph (<ul>,<dl>,<table>) then that will already have ended the 
   // paragraph and we don't need to do it here
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index 216b65c..9327526 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -193,7 +193,7 @@ static struct htmlEntityInfo
   { SYM(upsih),    "\xcf\x92",     "ϒ",    "<upsih/>",             "ϒ",        "{$\\Upsilon$}",          NULL,     "\\u978?",     { NULL,         DocSymbol::Perl_unknown }},
   { SYM(piv),      "\xcf\x96",     "ϖ",      "<piv/>",               "ϖ",        "{$\\varpi$}",            NULL,     "\\u982?",     { NULL,         DocSymbol::Perl_unknown }},
   { SYM(bull),     "\xe2\x80\xa2", "•",     "<bull/>",              "•",       "\\textbullet{}",         NULL,     "\\'95",       { NULL,         DocSymbol::Perl_unknown }},
-  { SYM(hellip),   "\xe2\x80\xa6", "…",   "<hellip/>",            "…",       "{$\\cdots$}",            NULL,     "\\'85",       { NULL,         DocSymbol::Perl_unknown }},
+  { SYM(hellip),   "\xe2\x80\xa6", "…",   "<hellip/>",            "…",       "{$\\dots$}",             NULL,     "\\'85",       { NULL,         DocSymbol::Perl_unknown }},
   { SYM(prime),    "\xe2\x80\xb2", "′",    "<prime/>",             "′",       "'",                      NULL,     "\\u8242?",    { "\\\'",       DocSymbol::Perl_string  }},
   { SYM(Prime),    "\xe2\x80\xb3", "″",    "<Prime/>",             "″",       "''",                     NULL,     "\\u8243?",    { "\"",         DocSymbol::Perl_char    }},
   { SYM(oline),    "\xe2\x80\xbe", "‾",    "<oline/>",             "‾",       "{$\\overline{\\,}$}",    NULL,     "\\u8254?",    { NULL,         DocSymbol::Perl_unknown }},
@@ -298,7 +298,7 @@ static struct htmlEntityInfo
 
   // doxygen extension to the HTML4 table of HTML entities
   { SYM(tm),       "\xe2\x84\xa2", "™",    "<trademark/>",         "™",       "\\texttrademark{}",      "(TM)",   "\\'99",       { "trademark",  DocSymbol::Perl_symbol  }},
-  { SYM(apos),     "'",            "'",          "'",                    "'",        "'",                      "'",      "'",           { "\\\'",       DocSymbol::Perl_string  }},
+  { SYM(apos),     "'",            "'",          "'",                    "'",        "\\textquotesingle{}",    "'",      "'",           { "\\\'",       DocSymbol::Perl_string  }},
 
   // doxygen commands represented as HTML entities
   { SYM(BSlash),   "\\",           "\\",         "\\",                   "\\",            "\\textbackslash{}",      "\\\\",   "\\\\",        { "\\\\",       DocSymbol::Perl_string  }},
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 62ae1c7..582da45 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -41,826 +41,16 @@
 #include "image.h"
 #include "ftvhelp.h"
 #include "bufstr.h"
+#include "resourcemgr.h"
 
 
 //#define DBG_HTML(x) x;
-#define DBG_HTML(x) 
-
-static const char defaultHtmlHeader[] =
-#include "header.html.h"
-;
-
-static const char defaultHtmlFooter[] =
-#include "footer.html.h"
-;
-
-static const char defaultStyleSheet[] = 
-#include "doxygen.css.h"
-;
-
-static const char search_functions_script[]=
-#include "search_functions.php.h"
-;
-
-static const char search_opensearch_script[]=
-#include "search_opensearch.php.h"
-;
-
-static const char search_styleSheet[] =
-#include "search.css.h"
-;
-
-static const char search_jquery_script1[]=
-#include "jquery_p1.js.h"
-;
-
-static const char search_jquery_script2[]=
-#include "jquery_p2.js.h"
-;
-
-static const char search_jquery_script3[]=
-#include "jquery_p3.js.h"
-;
-
-static const char search_jquery_script4[]=
-#include "jquery_ui.js.h"
-;
-
-static const char search_jquery_script5[]=
-#include "jquery_fx.js.h"
-;
-
-static const char search_jquery_script6[]=
-#include "jquery_pt.js.h"
-;
-
-static const char svgpan_script[]=
-#include "svgpan.js.h"
-;
-
-static const char dynsections_script[]=
-#include "dynsections.js.h"
-;
-
-static const char extsearch_script[]=
-#include "extsearch.js.h"
-;
+#define DBG_HTML(x)
 
 static QCString g_header;
 static QCString g_footer;
 static QCString g_mathjax_code;
 
-//------------------------- Pictures for the Tabs ------------------------
-
-// active tab background luma
-static unsigned char tab_a_png[36] =
-{
-   31,  42,  59,  69,  73,  74,  75,  77,  77,
-   77,  79,  80,  80,  82,  81,  83,  84,  86,
-   87,  88,  89,  90,  91,  91,  93,  94,  94,
-   96,  96,  97,  98,  98,  99,  99,  99, 100
-};
-
-// normal tab background luma
-static unsigned char tab_b_png[36] =
-{
-    218, 228, 235, 233, 230, 227, 225, 222, 221,
-    218, 217, 215, 214, 213, 212, 211, 210, 209,
-    209, 197, 198, 199, 200, 201, 202, 203, 204,
-    205, 207, 209, 211, 213, 217, 219, 206, 188 
-};
-
-// hovering tab background luma
-static unsigned char tab_h_png[36] =
-{
-    181, 191, 198, 196, 193, 190, 188, 185, 184,
-    181, 180, 178, 177, 176, 175, 174, 173, 172,
-    172, 154, 155, 156, 157, 158, 159, 160, 161,
-    162, 164, 166, 168, 170, 174, 176, 163, 145
-};
-
-// shadowed header
-static unsigned char header_png[12] = 
-{
-  255, 240, 241, 242, 243, 244, 
-  245, 246, 247, 248, 249, 250
-};
-
-// function header
-static unsigned char func_header_png[56] =
-{
-  248, 247, 246, 245, 244, 243, 242, 241,
-  240, 239, 238, 237, 236, 235, 234, 233,
-  232, 231, 230, 229, 228, 223, 223, 223,
-  223, 223, 223, 223, 223, 223, 223, 223,
-  224, 224, 224, 224, 225, 225, 225, 225,
-  225, 226, 226, 226, 227, 227, 227, 227,
-  228, 228, 228, 229, 229, 229, 229, 229
-};
-
-// tab separator
-static unsigned char tab_s_png[36] =
-{
-  187, 186, 185, 183, 182, 181, 180, 178, 176,
-  174, 173, 171, 169, 167, 164, 163, 161, 158,
-  156, 154, 152, 150, 148, 145, 143, 141, 140,
-  138, 136, 134, 131, 131, 128, 126, 125, 124
-};
-
-// breadcrumbs luma
-static unsigned char bc_s_png[240] =
-{
-  150,187,187,148,148,148,148,148,
-  147,175,186,147,147,147,147,147,
-  146,153,185,185,146,146,146,146,
-  144,144,177,183,144,144,144,144,
-  144,144,159,182,144,144,144,144,
-  143,143,144,179,181,143,143,143,
-  142,142,142,165,180,142,142,142,
-  141,141,141,144,178,178,141,141,
-  139,139,139,139,167,176,139,139,
-  137,137,137,137,146,174,137,137,
-  137,137,137,137,137,169,173,137,
-  135,135,135,135,135,150,171,135,
-  133,133,133,133,133,135,167,169,
-  132,132,132,132,132,132,154,167,
-  129,129,129,129,129,129,140,164,
-  129,129,129,129,129,129,154,163,
-  127,127,127,127,127,128,161,161,
-  125,125,125,125,125,141,158,125,
-  123,123,123,123,123,152,156,123,
-  121,121,121,121,129,154,121,121,
-  120,120,120,120,143,152,120,120,
-  118,118,118,120,150,150,118,118,
-  117,117,117,132,148,117,117,117,
-  114,114,114,142,145,114,114,114,
-  113,113,120,143,113,113,113,113,
-  111,111,133,141,111,111,111,111,
-  110,112,140,140,110,110,110,110,
-  109,124,138,109,109,109,109,109,
-  107,133,136,107,107,107,107,107,
-  111,134,106,106,106,106,106,106
-};
-
-// breadcrumbs alpha map
-static unsigned char bc_s_a_png[240] =
-{
-  241,241, 21,  0,  0,  0,  0,  0,
-  162,205,117,  0,  0,  0,  0,  0,
-   54,231,225,  3,  0,  0,  0,  0,
-    0,198,215, 78,  0,  0,  0,  0,
-    0, 93,211,186,  0,  0,  0,  0,
-    0,  6,232,235, 42,  0,  0,  0,
-    0,  0,132,203,147,  0,  0,  0,
-    0,  0, 27,242,241, 15,  0,  0,
-    0,  0,  0,168,205,108,  0,  0,
-    0,  0,  0, 63,228,219,  0,  0,
-    0,  0,  0,  0,207,221, 72,  0,
-    0,  0,  0,  0,102,208,177,  0,
-    0,  0,  0,  0,  9,238,240, 36,
-    0,  0,  0,  0,  0,138,201,138,
-    0,  0,  0,  0,  0, 77,187,158,
-    0,  0,  0,  0,  0,159,204,120,
-    0,  0,  0,  0, 15,241,241, 21,
-    0,  0,  0,  0,111,208,171,  0,
-    0,  0,  0,  0,210,222, 66,  0,
-    0,  0,  0, 60,227,219,  0,  0,
-    0,  0,  0,162,204,114,  0,  0,
-    0,  0, 18,238,238, 21,  0,  0,
-    0,  0,114,205,165,  0,  0,  0,
-    0,  0,216,225, 60,  0,  0,  0,
-    0, 66,226,216,  0,  0,  0,  0,
-    0,165,204,111,  0,  0,  0,  0,
-   21,241,241, 18,  0,  0,  0,  0,
-  117,203,159,  0,  0,  0,  0,  0,
-  219,227, 57,  0,  0,  0,  0,  0,
-  211,201,  0,  0,  0,  0,  0,  0
-};
-
-// doxygen logo luma
-static unsigned char doxygen_png[3224] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
-   32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
-   32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
-   32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
-   32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
-   32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
-   32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
-   32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
-   32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
-   32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
-   32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
-   32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
-   32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
-   32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
-   32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
-   32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
-   32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
-   32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
-   32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
-   32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
-   32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-// doxygen logo alpha map
-static unsigned char doxygen_a_png[3224] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,145,247,247,247,247,145,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 16,115,181,181,132,247,247,247,247,247,247,  0,  0,  0,  0,  0, 99,148,181,181,148, 99,  0,  0,  0,  0, 16, 66, 66, 66, 66, 16,  0,  0,  0,  0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16,  0,  0,  0, 16, 66, 66, 66, 66,  0,  0,  0,  0, 99,165,181,148, 66, 33, 66, 66, 66, 33,  0,  0,  0,  0,  0,  0, 82,132,181,181,181,115, 66,  0,  0,  0,  0,  0, 16, 66, 66, 66, 49,  0, 66,148,181,148, 49,  0,  0,  0,
-    0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,  0,  0,  0,112,214,247,247,247,247,247,247,214,112,  0, 16,247,247,247,247,247,247, 46,  0,  0,145,247,247,247,247,247,247,247,247,247,247, 16,  0, 16,247,247,247,247,247, 66,  0, 63,165,247,247,247,247,247,247,247,247,247,247, 33,  0,  0,  0, 96,198,247,247,247,247,247,247,247,165, 63,  0,  0, 16,247,247,247,247,247,145,247,247,247,247,247,145,  0,  0,
-    0,  0,112,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0,129,247,247,247,247,247,247,247,247,247,247,129,  0,181,247,247,247,247,247,148,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247, 63,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96,  0,
-    0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198,  0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198,  0,
-    0,115,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,181,247,247,247,247,247,247,247,247,247,247,247,247,181,  0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
-    0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33,  0,145,247,247,247,247,247,247,247,247,247,198, 30,  0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
-   16,247,247,247,247,247,231,  0,  0,247,247,247,247,247,247, 82,247,247,247,247,247,165,  0,  0,165,247,247,247,247,247, 82,  0, 30,247,247,247,247,247,247,247,247,247, 96,  0,  0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,198,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0, 96,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,  0,181,247,247,247,247,247,247, 30,  0,  0,  0,  0,148,247,247,247,247,247,247,247,247,247,148,  0,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,145,  0,  0,  0,  0, 82,247,247,247,247,247,247,247,247,247, 82,  0,181,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   33,247,247,247,247,247,247, 14,  0,247,247,247,247,247,247, 66,247,247,247,247,247,181,  0,  0,165,247,247,247,247,247, 66,  0, 79,247,247,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,231,  0,  0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63,  0,  0,  0, 16,112,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79,  0,  0,  0,132,247,247,247,247,247,247,247,148,  0,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,148,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,132,247,247,247,247,247,247,247,247,247,247,247,247,145,  0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14,  0,  0, 49,247,247,247,247,247,247,247, 82,  0,  0,  0,198,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145,  0,  0,  0,214,247,247,247,247,247,231,  0,  0,  0,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,  0,129,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145,  0,112,247,247,247,247,247,247, 49,  0,  0,181,247,247,247,247,247,148,  0,  0,  0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,  0,  0,129,247,247,247,247,181,145,247,247,247,247,145,  0,  0,  0, 46,148,247,247,247,247,247,247,148, 46,  0,  0,112,214,247,247,247,145, 14,  0,  0,145,247,247,247,247,145,  0,  0, 33,247,247,247,247,247,247, 66,  0,  0,  0,  0,  0, 99,132,115,181,181,132,198,247,247,247,247,247, 82,  0,  0,  0,  0, 66,165,247,247,247,247,247,247,198,132, 33,  0,  0,145,247,247,247,181, 79,  0, 79,181,247,247,247,145,  0,
-    0,  0,  0,  0, 33,115,115, 82,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33, 99,115,115, 99, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,247,247,247,247,247,214,  0,  0,  0,  0,  0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16,  0,  0,  0,  0,  0,  0,  0, 49, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-// magnifying glass icon (raw png)
-unsigned char mag_sel_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
-  0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
-  0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
-  0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
-  0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
-  0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
-  0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
-  0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
-  0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
-  0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
-  0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
-  0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
-  0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
-  0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
-  0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
-  0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
-  0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
-  0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
-  0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
-  0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
-  0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
-  0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
-  0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
-  0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
-  0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
-  0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
-  0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
-  0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
-  0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
-  0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
-  0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
-  0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
-  0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
-  0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
-  0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
-  0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
-  0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
-  0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_sel_png_len = 563;
-
-unsigned char mag_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
-  0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
-  0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
-  0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
-  0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
-  0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
-  0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
-  0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
-  0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
-  0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
-  0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
-  0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
-  0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
-  0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
-  0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
-  0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
-  0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
-  0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
-  0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
-  0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
-  0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
-  0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
-  0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
-  0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
-  0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
-  0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
-  0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
-  0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
-  0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
-  0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
-  0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
-  0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
-  0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
-  0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
-  0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_png_len = 524;
-
-unsigned char search_l_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
-  0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
-  0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
-  0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
-  0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
-  0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
-  0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
-  0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
-  0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
-  0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
-  0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
-  0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
-  0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
-  0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
-  0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
-  0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
-  0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
-  0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
-  0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
-  0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
-  0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
-  0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
-  0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
-  0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
-  0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
-  0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
-  0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
-  0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
-  0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
-  0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
-  0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
-  0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
-  0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
-  0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
-  0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
-  0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
-  0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
-  0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
-  0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
-  0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
-  0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
-  0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_l_png_len = 604;
-
-unsigned char search_m_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
-  0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
-  0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
-  0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
-  0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
-  0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
-  0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
-  0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
-  0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
-  0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
-  0x60, 0x82
-};
-unsigned int search_m_png_len = 158;
-
-unsigned char search_r_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
-  0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
-  0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
-  0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
-  0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
-  0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
-  0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
-  0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
-  0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
-  0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
-  0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
-  0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
-  0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
-  0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
-  0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
-  0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
-  0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
-  0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
-  0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
-  0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
-  0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
-  0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
-  0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
-  0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
-  0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
-  0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
-  0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
-  0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
-  0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
-  0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
-  0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
-  0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
-  0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
-  0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
-  0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
-  0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
-  0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
-  0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
-  0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
-  0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
-  0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
-  0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_r_png_len = 612;
-
-static unsigned char close_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
-  0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46,
-  0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35,
-  0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b,
-  0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83,
-  0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a,
-  0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e,
-  0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c,
-  0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91,
-  0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f,
-  0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef,
-  0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae,
-  0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83,
-  0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0,
-  0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94,
-  0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f,
-  0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57,
-  0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a,
-  0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d,
-  0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
-  0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-static unsigned int close_png_len = 273;
-
-
-static unsigned char closed_png[81] =
-{
-  0,  0,  0,  0,142,  0,  0,  0,  0,
-  0,  0,  0,  0,142,142,  0,  0,  0,
-  0,  0,  0,  0,142,142,142,  0,  0,
-  0,  0,  0,  0,142,142,142,142,  0,
-  0,  0,  0,  0,142,142,142,142,142,
-  0,  0,  0,  0,142,142,142,142,  0,
-  0,  0,  0,  0,142,142,142,  0,  0,
-  0,  0,  0,  0,142,142,  0,  0,  0,
-  0,  0,  0,  0,142,  0,  0,  0,  0
-};
-
-static unsigned char closed_a_png[81] =
-{
-  0,  0,  0,  0,255,  0,  0,  0,  0,
-  0,  0,  0,  0,255,255,  0,  0,  0,
-  0,  0,  0,  0,255,255,255,  0,  0,
-  0,  0,  0,  0,255,255,255,255,  0,
-  0,  0,  0,  0,255,255,255,255,255,
-  0,  0,  0,  0,255,255,255,255,  0,
-  0,  0,  0,  0,255,255,255,  0,  0,
-  0,  0,  0,  0,255,255,  0,  0,  0,
-  0,  0,  0,  0,255,  0,  0,  0,  0
-};
-
-static unsigned char open_png[81] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-  142,142,142,142,142,142,142,142,142,
-    0,142,142,142,142,142,142,142,  0,
-    0,  0,142,142,142,142,142,  0,  0,
-    0,  0,  0,142,142,142,  0,  0,  0,
-    0,  0,  0,  0,142,  0,  0,  0,  0
-};
-
-static unsigned char open_a_png[81] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-  255,255,255,255,255,255,255,255,255,
-    0,255,255,255,255,255,255,255,  0,
-    0,  0,255,255,255,255,255,  0,  0,
-    0,  0,  0,255,255,255,  0,  0,  0,
-    0,  0,  0,  0,255,  0,  0,  0,  0
-};
-
-static unsigned char bdwn_png[7*8] =
-{
-    0,  0,  0,142,  0,  0,  0,
-    0,  0,  0,142,  0,  0,  0,
-    0,  0,  0,142,  0,  0,  0,
-  142,  0,  0,142,  0,  0,142,
-  142,142,  0,142,  0,142,142,
-  142,142,142,142,142,142,142,
-    0,142,142,142,142,142,  0,
-    0,  0,142,142,142,  0,  0,
-};
-
-static unsigned char bdwn_a_png[7*8] =
-{
-    0,  0,  0,255,  0,  0,  0,
-    0,  0,  0,255,  0,  0,  0,
-    0,  0,  0,255,  0,  0,  0,
-  128,  0,  0,255,  0,  0,128,
-  255,128,  0,255,  0,128,255,
-  128,255,128,255,128,255,128,
-    0,128,255,255,255,128,  0,
-    0,  0,128,255,128,  0,  0,
-};
-
-static unsigned char sync_on_png[576] =
-{
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,138,128,128,128,128,133,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,129,205,186,128,128,128,128,160,210,134,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,139,217,255,181,128,128,128,128,152,255,229,147,128,128,128,128,128,128,
-  128,128,128,128,128,156,236,255,255,181,128,128,128,128,152,255,255,243,164,128,128,128,128,128,
-  128,128,128,128,175,249,255,255,255,223,196,198,198,197,211,255,255,255,253,186,128,128,128,128,
-  128,128,133,202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,214,137,128,128,
-  128,128,135,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,140,128,128,
-  128,128,128,128,189,255,255,255,255,238,224,225,225,224,232,255,255,255,255,201,131,128,128,128,
-  128,128,128,128,128,167,245,255,255,183,128,128,128,128,155,255,255,250,179,128,128,128,128,128,
-  128,128,128,128,128,128,150,231,255,188,128,128,128,128,161,255,238,158,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,136,216,188,128,128,128,128,161,223,142,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,130,141,128,128,128,128,135,132,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_off_png[576] =
-{
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,138,128,128,128,128,128,128,133,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,129,205,186,128,128,128,128,128,128,160,210,134,128,128,128,128,128,128,
-  128,128,128,128,128,139,217,255,181,128,128,128,128,128,128,152,255,229,147,128,128,128,128,128,
-  128,128,128,128,156,236,255,255,181,128,128,128,128,128,128,152,255,255,243,164,128,128,128,128,
-  128,128,128,175,249,255,255,255,223,196,198,198,128,128,197,211,255,255,255,253,186,128,128,128,
-  128,128,202,255,255,255,255,255,255,255,255,225,128,128,255,255,255,255,255,255,255,214,128,128,
-  128,128,217,255,255,255,255,255,255,255,255,128,128,198,255,255,255,255,255,255,255,225,128,128,
-  128,128,128,189,255,255,255,255,238,224,225,128,128,225,224,232,255,255,255,255,201,128,128,128,
-  128,128,128,128,167,245,255,255,183,128,128,128,128,128,128,155,255,255,250,179,128,128,128,128,
-  128,128,128,128,128,150,231,255,188,128,128,128,128,128,128,161,255,238,158,128,128,128,128,128,
-  128,128,128,128,128,128,136,216,188,128,128,128,128,128,128,161,223,142,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,130,141,128,128,128,128,128,128,135,132,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_a_png[576] =
-{
-    0,  0,  0,  0,  0,  0,  0, 29, 98,157,207,231,234,211,164,104, 38,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0, 21,143,234,255,255,255,255,255,255,255,255,244,155, 33,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 70,221,255,255,255,255,255,255,255,255,255,255,255,255,235, 93,  0,  0,  0,  0,
-    0,  0,  0, 92,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,  0,  0,  0,
-    0,  0, 68,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 96,  0,  0,
-    0, 20,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243, 41,  0,
-    0,143,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,172,  1,
-   28,238,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 42,
-   99,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,133,
-  160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,204,
-  212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,
-  234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,237,255,236,
-  235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,255,236,
-  216,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,226,
-  168,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,
-  107,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,147,
-   39,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 53,
-    0,159,255,255,255,255,255,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,190,  3,
-    0, 31,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249, 54,  0,
-    0,  0, 91,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,  0,  0,
-    0,  0,  0,116,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,  0,  0,  0,
-    0,  0,  0,  0, 98,240,255,255,255,255,255,255,255,255,255,255,255,255,248,119,  0,  0,  0,  0,
-    0,  0,  0,  0,  0, 45,168,252,255,255,255,255,255,255,255,255,255,184, 58,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0, 45,131,201,222,234,236,224,204,142, 54,  0,  0,  0,  0,  0,  0,  0
-};
-
-
-//------------------------------------------------------------------------
-
-static const char tabs_css[] = 
-".tabs, .tabs2, .tabs3 {\n"
-"    background-image: url('tab_b.png');\n"
-"    width: 100%;\n"
-"    z-index: 101;\n"
-"    font-size: 13px;\n"
-"    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
-"}\n"
-"\n"
-".tabs2 {\n"
-"    font-size: 10px;\n"
-"}\n"
-".tabs3 {\n"
-"    font-size: 9px;\n"
-"}\n"
-"\n"
-".tablist {\n"
-"    margin: 0;\n"
-"    padding: 0;\n"
-"    display: table;\n"
-"}\n"
-"\n"
-".tablist li {\n"
-"    float: left;\n"
-"    display: table-cell;\n"
-"    background-image: url('tab_b.png');\n"
-"    line-height: 36px;\n"
-"    list-style: none;\n"
-"}\n"
-"\n"
-".tablist a {\n"
-"    display: block;\n"
-"    padding: 0 20px;\n"
-"    font-weight: bold;\n"
-"    background-image:url('tab_s.png');\n"
-"    background-repeat:no-repeat;\n"
-"    background-position:right;\n"
-"    color: ##30;\n"
-"    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-"    text-decoration: none;\n"
-"    outline: none;\n"
-"}\n"
-"\n"
-".tabs3 .tablist a {\n"
-"    padding: 0 10px;\n"
-"}\n"
-"\n"
-".tablist a:hover {\n"
-"    background-image: url('tab_h.png');\n"
-"    background-repeat:repeat-x;\n"
-"    color: #fff;\n"
-"    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"    text-decoration: none;\n"
-"}\n"
-"\n"
-".tablist li.current a {\n"
-"    background-image: url('tab_a.png');\n"
-"    background-repeat:repeat-x;\n"
-"    color: #fff;\n"
-"    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"}\n"
-;
-
-struct img_data_item
-{
-  const char *name;
-  unsigned char *content;
-  unsigned int len;
-};
-
-
-static void writeImgData(const char *dir,img_data_item *data)
-{
-  while (data->name)
-  {
-    QCString fileName;
-    fileName=(QCString)dir+"/"+data->name;
-    QFile f(fileName);
-    if (f.open(IO_WriteOnly))
-    {
-      f.writeBlock((char*)data->content,
-                    data->len>0 ? data->len : qstrlen((char*)data->content));
-    }
-    else
-    {
-      fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
-    }
-    Doxygen::indexList->addImageFile(QCString("/search/")+data->name);
-    data++;
-  }
-}
-
-static ColoredImgDataItem colored_tab_data[] =
-{
-  // file_name      W   H  luma_data        alpha_data
-  { "tab_a.png",    1, 36, tab_a_png,       0 },
-  { "tab_b.png",    1, 36, tab_b_png,       0 },
-  { "tab_h.png",    1, 36, tab_h_png,       0 },
-  { "tab_s.png",    1, 36, tab_s_png,       0 },
-  { "nav_h.png",    1, 12, header_png,      0 },
-  { "nav_f.png",    1, 56, func_header_png, 0 },
-  { "bc_s.png",     8, 30, bc_s_png,        bc_s_a_png },
-  { "doxygen.png", 104,31, doxygen_png,     doxygen_a_png },
-  { "closed.png",   9,  9, closed_png,      closed_a_png },
-  { "open.png",     9,  9, open_png,        open_a_png },
-  { "bdwn.png",     7,  8, bdwn_png,        bdwn_a_png },
-  { "sync_on.png", 24, 24, sync_on_png,     sync_a_png },
-  { "sync_off.png",24, 24, sync_off_png,    sync_a_png },
-  { 0, 0, 0, 0, 0 }
-};
-
-static img_data_item search_client_data[] =
-{
-  // file_name          raw_data          num bytes
-  { "mag_sel.png",      mag_sel_png,      mag_sel_png_len  },
-  { "search_l.png",     search_l_png,     search_l_png_len },
-  { "search_m.png",     search_m_png,     search_m_png_len },
-  { "search_r.png",     search_r_png,     search_r_png_len },
-  { "close.png",        close_png,        close_png_len    },
-  { 0, 0, 0 }
-};
-
-static img_data_item search_server_data[] =
-{
-  // file_name          raw_data          num bytes
-  { "mag.png",          mag_png,          mag_png_len      },
-  { "search_l.png",     search_l_png,     search_l_png_len },
-  { "search_m.png",     search_m_png,     search_m_png_len },
-  { "search_r.png",     search_r_png,     search_r_png_len },
-  { 0, 0, 0 }
-};
-
-//------------------------------------------------------------------------
 
 static void writeClientSearchBox(FTextStream &t,const char *relPath)
 {
@@ -912,40 +102,6 @@ static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlig
 
 //------------------------------------------------------------------------
 
-/// substitute all occurrences of \a src in \a s by \a dst
-QCString substitute(const char *s,const char *src,const char *dst)
-{
-  if (s==0 || src==0) return s;
-  const char *p, *q;
-  int srcLen = qstrlen(src);
-  int dstLen = dst ? qstrlen(dst) : 0;
-  int resLen;
-  if (srcLen!=dstLen)
-  {
-    int count;
-    for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
-    resLen = (int)(p-s)+qstrlen(p)+count*(dstLen-srcLen);
-  }
-  else // result has same size as s
-  {
-    resLen = qstrlen(s);
-  }
-  QCString result(resLen+1);
-  char *r;
-  for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
-  {
-    int l = (int)(q-p);
-    memcpy(r,p,l);
-    r+=l;
-    if (dst) memcpy(r,dst,dstLen);
-    r+=dstLen;
-  }
-  qstrcpy(r,p);
-  //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
-  return result;
-}
-//----------------------------------------------------------------------
-
 /// Clear a text block \a s from \a begin to \a end markers
 QCString clearBlock(const char *s,const char *begin,const char *end)
 {
@@ -969,7 +125,7 @@ QCString clearBlock(const char *s,const char *begin,const char *end)
 
   QCString result(resLen+1);
   char *r;
-  for (r=result.data(), p=s; (q=strstr(p,begin))!=0; p=q+endLen)
+  for (r=result.rawData(), p=s; (q=strstr(p,begin))!=0; p=q+endLen)
   {
     int l = (int)(q-p);
     memcpy(r,p,l);
@@ -989,6 +145,7 @@ QCString clearBlock(const char *s,const char *begin,const char *end)
 
 QCString selectBlock(const QCString& s,const QCString &name,bool enable)
 {
+  // TODO: this is an expensive function that is called a lot -> optimize it
   const QCString begin = "<!--BEGIN " + name + "-->";
   const QCString end = "<!--END " + name + "-->";
   const QCString nobegin = "<!--BEGIN !" + name + "-->";
@@ -1015,11 +172,13 @@ static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSe
 {
   QGString result;
   FTextStream t(&result);
-  if (serverSide) {
+  if (serverSide)
+  {
     writeServerSearchBox(t, relPath, highlightSearch);
   }
-  else {
-     writeClientSearchBox(t, relPath);
+  else
+  {
+    writeClientSearchBox(t, relPath);
   }
   return QCString(result);
 }
@@ -1027,7 +186,7 @@ static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSe
 static QCString removeEmptyLines(const QCString &s)
 {
   BufStr out(s.length()+1);
-  char *p=s.data();
+  const char *p=s.data();
   if (p)
   {
     char c;
@@ -1035,7 +194,7 @@ static QCString removeEmptyLines(const QCString &s)
     {
       if (c=='\n')
       {
-        char *e = p;
+        const char *e = p;
         while (*e==' ' || *e=='\t') e++;
         if (*e=='\n') 
         {
@@ -1129,6 +288,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
   {
     treeViewCssJs = "<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
                     "<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n"
+                    "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
                     "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n"
                     "<script type=\"text/javascript\">\n"
                     "  $(document).ready(initResizable);\n"
@@ -1139,12 +299,16 @@ static QCString substituteHtmlKeywords(const QCString &s,
   if (searchEngine)
   {
     searchCssJs = "<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+    if (!serverBasedSearch)
+    {
+      searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
+    }
     searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
 
     if (!serverBasedSearch) 
     {
       searchCssJs += "<script type=\"text/javascript\">\n"
-                     "  $(document).ready(function() { searchBox.OnSelectItem(0); });\n"
+                     "  $(document).ready(function() { init_search(); });\n"
                      "</script>";
     }
     else 
@@ -1157,7 +321,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
 
       // OPENSEARCH_PROVIDER {
       searchCssJs += "<link rel=\"search\" href=\"" + relPath +
-                     "search-opensearch.php?v=opensearch.xml\" "
+                     "search_opensearch.php?v=opensearch.xml\" "
                      "type=\"application/opensearchdescription+xml\" title=\"" +
                      (hasProjectName ? projectName : QCString("Doxygen")) + 
                      "\"/>";
@@ -1341,9 +505,11 @@ void HtmlCodeGenerator::writeLineNumber(const char *ref,const char *filename,
                                     const char *anchor,int l)
 {
   if (!m_streamSet) return;
-  QCString lineNumber,lineAnchor;
-  lineNumber.sprintf("%5d",l);
-  lineAnchor.sprintf("l%05d",l);
+  const int maxLineNrStr = 10;
+  char lineNumber[maxLineNrStr];
+  char lineAnchor[maxLineNrStr];
+  qsnprintf(lineNumber,maxLineNrStr,"%5d",l);
+  qsnprintf(lineAnchor,maxLineNrStr,"l%05d",l);
 
   m_t << "<div class=\"line\">";
   m_t << "<a name=\"" << lineAnchor << "\"></a><span class=\"lineno\">"; 
@@ -1535,7 +701,7 @@ void HtmlGenerator::init()
   }
   else 
   {
-    g_header = defaultHtmlHeader;
+    g_header = ResourceMgr::instance().getAsString("header.html");
   }
 
   if (!Config_getString("HTML_FOOTER").isEmpty()) 
@@ -1545,7 +711,7 @@ void HtmlGenerator::init()
   }
   else 
   {
-    g_footer = defaultHtmlFooter;
+    g_footer = ResourceMgr::instance().getAsString("footer.html");
   }
 
   if (Config_getBool("USE_MATHJAX"))
@@ -1558,60 +724,37 @@ void HtmlGenerator::init()
   }
   createSubDirs(d);
 
-  QCString fileName=dname+"/tabs.css";
-  QFile f(fileName);
-  if (f.open(IO_WriteOnly))
-  {
-    FTextStream t(&f);
-    t << replaceColorMarkers(tabs_css);
-  }
-  else
-  {
-    fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
-  }
-
-  {
-    QFile f(dname+"/jquery.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
-      if (Config_getBool("GENERATE_TREEVIEW"))
-      {
-        t << search_jquery_script4 << search_jquery_script5;
-      }
-      if (Config_getBool("SOURCE_BROWSER"))
-      {
-        t << search_jquery_script6;
-      }
-    }
-  }
-
+  ResourceMgr &mgr = ResourceMgr::instance();
+  mgr.copyResource("tabs.css",dname);
+  mgr.copyResource("jquery.js",dname);
   if (Config_getBool("INTERACTIVE_SVG"))
   {
-    QFile f(dname+"/svgpan.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << svgpan_script;
-    }
+    mgr.copyResource("svgpan.js",dname);
   }
 
   {
     QFile f(dname+"/dynsections.js");
     if (f.open(IO_WriteOnly))
     {
-      FTextStream t(&f);
-      t << dynsections_script;
-      if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+      const Resource *res = mgr.get("dynsections.js");
+      if (res)
       {
-        t << endl << 
-          "$(document).ready(function() {\n"
-          "  $('.code,.codeRef').each(function() {\n"
-          "    $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
-          "    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
-          "  });\n"
-          "});\n";
+        FTextStream t(&f);
+        t << (const char *)res->data;
+        if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+        {
+          t << endl <<
+            "$(document).ready(function() {\n"
+            "  $('.code,.codeRef').each(function() {\n"
+            "    $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
+            "    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
+            "  });\n"
+            "});\n";
+        }
+      }
+      else
+      {
+        err("Resource dynsections.js not compiled in");
       }
     }
   }
@@ -1622,57 +765,95 @@ void HtmlGenerator::writeTabData()
 {
   Doxygen::indexList->addStyleSheetFile("tabs.css");
   QCString dname=Config_getString("HTML_OUTPUT");
-  writeColoredImgData(dname,colored_tab_data);
-
-  {
-    unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
-    unsigned char shadow_alpha[6]  = { 80, 60, 40, 20, 10, 0 };
-    ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
-    img.save(dname+"/nav_g.png");
-  }
+  ResourceMgr &mgr = ResourceMgr::instance();
+  //writeColoredImgData(dname,colored_tab_data);
+  mgr.copyResource("tab_a.lum",dname);
+  mgr.copyResource("tab_b.lum",dname);
+  mgr.copyResource("tab_h.lum",dname);
+  mgr.copyResource("tab_s.lum",dname);
+  mgr.copyResource("nav_h.lum",dname);
+  mgr.copyResource("nav_f.lum",dname);
+  mgr.copyResource("bc_s.luma",dname);
+  mgr.copyResource("doxygen.luma",dname);
+  mgr.copyResource("closed.luma",dname);
+  mgr.copyResource("open.luma",dname);
+  mgr.copyResource("bdwn.luma",dname);
+  mgr.copyResource("sync_on.luma",dname);
+  mgr.copyResource("sync_off.luma",dname);
+
+  //{
+  //  unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
+  //  unsigned char shadow_alpha[6]  = { 80, 60, 40, 20, 10, 0 };
+  //  ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
+  //  img.save(dname+"/nav_g.png");
+  //}
+  mgr.copyResource("nav_g.png",dname);
 }
 
 void HtmlGenerator::writeSearchData(const char *dir)
 {
   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
-  writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+  //writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+  ResourceMgr &mgr = ResourceMgr::instance();
+
+  mgr.copyResource("search_l.png",dir);
+  Doxygen::indexList->addImageFile("search/search_l.png");
+  mgr.copyResource("search_m.png",dir);
+  Doxygen::indexList->addImageFile("search/search_m.png");
+  mgr.copyResource("search_r.png",dir);
+  Doxygen::indexList->addImageFile("search/search_r.png");
+  if (serverBasedSearch)
+  {
+    mgr.copyResource("mag.png",dir);
+    Doxygen::indexList->addImageFile("search/mag.png");
+  }
+  else
+  {
+    mgr.copyResource("close.png",dir);
+    Doxygen::indexList->addImageFile("search/close.png");
+    mgr.copyResource("mag_sel.png",dir);
+    Doxygen::indexList->addImageFile("search/mag_sel.png");
+  }
+
   QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
   QFile f(searchDirName+"/search.css");
   if (f.open(IO_WriteOnly))
   {
-    FTextStream t(&f);
-    QCString searchCss = replaceColorMarkers(search_styleSheet);
-    searchCss = substitute(searchCss,"$doxygenversion",versionString);
-    if (Config_getBool("DISABLE_INDEX"))
+    const Resource *res = mgr.get("search.css");
+    if (res)
     {
-      // move up the search box if there are no tabs
-      searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+      FTextStream t(&f);
+      QCString searchCss = replaceColorMarkers((const char *)res->data);
+      searchCss = substitute(searchCss,"$doxygenversion",versionString);
+      if (Config_getBool("DISABLE_INDEX"))
+      {
+        // move up the search box if there are no tabs
+        searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+      }
+      t << searchCss;
+      Doxygen::indexList->addStyleSheetFile("search/search.css");
     }
-    t << searchCss;
   }
-  Doxygen::indexList->addStyleSheetFile("search/search.css");
 }
 
 void HtmlGenerator::writeStyleSheetFile(QFile &file)
 {
   FTextStream t(&file);
-  t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+  t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
 }
 
 void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
 {
   FTextStream t(&file);
   t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
-  QCString contents(defaultHtmlHeader);
-  t << contents;
+  t << ResourceMgr::instance().getAsString("header.html");
 }
 
 void HtmlGenerator::writeFooterFile(QFile &file)
 {
   FTextStream t(&file);
   t << "<!-- HTML footer for doxygen " << versionString << "-->" <<  endl;
-  QCString contents(defaultHtmlFooter);
-  t << contents;
+  t << ResourceMgr::instance().getAsString("footer.html");
 }
 
 void HtmlGenerator::startFile(const char *name,const char *,
@@ -1722,7 +903,6 @@ void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
     t << "     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
     t << "     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
     t << "     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
-    writeSearchCategories(t);
     t << "</div>\n";
     t << "\n";
     t << "<!-- iframe showing the search results (closed by default) -->\n";
@@ -1810,7 +990,7 @@ void HtmlGenerator::writeStyleInfo(int part)
       //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
       //t << "     border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
 
-      t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+      t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
       endPlainFile();
       Doxygen::indexList->addStyleSheetFile("doxygen.css");
     }
@@ -3038,9 +2218,10 @@ void HtmlGenerator::writeSearchPage()
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   static bool disableIndex = Config_getBool("DISABLE_INDEX");
   static QCString projectName = Config_getString("PROJECT_NAME");
+  static QCString htmlOutput = Config_getString("HTML_OUTPUT");
 
   // OPENSEARCH_PROVIDER {
-  QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
+  QCString configFileName = htmlOutput+"/search_config.php";
   QFile cf(configFileName);
   if (cf.open(IO_WriteOnly))
   {
@@ -3066,26 +2247,11 @@ void HtmlGenerator::writeSearchPage()
     t << "</script>\n";
   }
 
-  QCString functionsFileName = Config_getString("HTML_OUTPUT")+"/search-functions.php";
-  QFile ff(functionsFileName);
-  if (ff.open(IO_WriteOnly))
-  {
-    FTextStream t(&ff);
-    // Write stuff from search_functions.php source file...
-    t << search_functions_script;
-  }
-
-  QCString opensearchFileName = Config_getString("HTML_OUTPUT")+"/search-opensearch.php";
-  QFile of(opensearchFileName);
-  if (of.open(IO_WriteOnly))
-  {
-    FTextStream t(&of);
-    // Write stuff from search_opensearch.php source file...
-    t << search_opensearch_script;
-  }
+  ResourceMgr::instance().copyResource("search_functions.php",htmlOutput);
+  ResourceMgr::instance().copyResource("search_opensearch.php",htmlOutput);
   // OPENSEARCH_PROVIDER }
 
-  QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
+  QCString fileName = htmlOutput+"/search.php";
   QFile f(fileName);
   if (f.open(IO_WriteOnly))
   {
@@ -3108,7 +2274,7 @@ void HtmlGenerator::writeSearchPage()
     }
 
     t << "<script language=\"php\">\n";
-    t << "require_once \"search-functions.php\";\n";
+    t << "require_once \"search_functions.php\";\n";
     t << "main();\n";
     t << "</script>\n";
 
@@ -3122,12 +2288,12 @@ void HtmlGenerator::writeSearchPage()
 
     writePageFooter(t,"Search","","");
   }
-  QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
+  QCString scriptName = htmlOutput+"/search/search.js";
   QFile sf(scriptName);
   if (sf.open(IO_WriteOnly))
   {
     FTextStream t(&sf);
-    t << extsearch_script;
+    t << ResourceMgr::instance().getAsString("extsearch.js");
   }
   else
   {
@@ -3219,7 +2385,7 @@ void HtmlGenerator::writeExternalSearchPage()
     }
     if (!first) t << endl;
     t << "};" << endl << endl;
-    t << extsearch_script;
+    t << ResourceMgr::instance().getAsString("extsearch.js");
     t << endl;
     t << "$(document).ready(function() {" << endl;
     t << "  var query = trim(getURLParameter('query'));" << endl;
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index c1e535d..7c12890 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -281,6 +281,7 @@ HtmlHelp::HtmlHelp() : indexFileDict(1009)
 HtmlHelp::~HtmlHelp()
 {
   if (m_fromUtf8!=(void *)(-1))   portable_iconv_close(m_fromUtf8);
+  delete index;
 }
 #if 0
 /*! return a reference to the one and only instance of this class. 
@@ -598,8 +599,8 @@ QCString HtmlHelp::recode(const QCString &s)
   QCString output(oSize);
   size_t iLeft     = iSize;
   size_t oLeft     = oSize;
-  char *iPtr       = s.data();
-  char *oPtr       = output.data();
+  char *iPtr       = s.rawData();
+  char *oPtr       = output.rawData();
   if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
   {
     oSize -= (int)oLeft;
diff --git a/src/index.cpp b/src/index.cpp
index 430f5af..9f7542f 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -800,9 +800,9 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
 static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv,bool addToIndex)
 {
   ClassSDict::Iterator cli(*cl);
-  for (;cli.current(); ++cli)
+  ClassDef *cd;
+  for (;(cd=cli.current());++cli)
   {
-    ClassDef *cd=cli.current();
     //printf("class %s hasVisibleRoot=%d isVisibleInHierarchy=%d\n",
     //             cd->name().data(),
     //              hasVisibleRoot(cd->baseClasses()),
@@ -923,9 +923,9 @@ static int countClassesInTreeList(const ClassSDict &cl)
 {
   int count=0;
   ClassSDict::Iterator cli(cl);
-  for (;cli.current(); ++cli)
+  ClassDef *cd;
+  for (;(cd=cli.current());++cli)
   {
-    ClassDef *cd=cli.current();
     if (!hasVisibleRoot(cd->baseClasses())) // filter on root classes
     {
       if (cd->isVisibleInHierarchy()) // should it be visible
@@ -1601,7 +1601,6 @@ static void writeAnnotatedClassList(OutputList &ol)
     }
     if (cd->isLinkableInProject() && cd->templateMaster()==0)
     {
-      QCString type=cd->compoundTypeString();
       ol.startIndexKey();
       if (cd->getLanguage()==SrcLangExt_VHDL)
       {
@@ -1640,7 +1639,7 @@ static void writeAnnotatedClassList(OutputList &ol)
 
 static QCString letterToLabel(uint startLetter)
 {
-  char s[10];
+  char s[11]; // max 0x12345678 + '\0'
   if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character
   {
     s[0]=(char)startLetter;
@@ -2158,7 +2157,8 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
                             const LetterToIndexMap<MemberIndexList> &memberLists,
                             DefinitionIntf::DefType type)
 {
-  ASSERT((int)type<3);
+  int index = (int)type;
+  ASSERT(index<3);
 
   typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
                                    QCString &prevNamespaceName);
@@ -2238,8 +2238,11 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
         sep = ", ";
         // link to class for other members with the same name
       }
-      // write the link for the specific list type
-      writeLinkForMemberMap[(int)type](ol,md,sep,prevDefName);
+      if (index<3)
+      {
+        // write the link for the specific list type
+        writeLinkForMemberMap[index](ol,md,sep,prevDefName);
+      }
     }
   }
   if (!firstItem) ol.endItemListItem();
@@ -3079,6 +3082,17 @@ static void countRelatedPages(int &docPages,int &indexPages)
 
 //----------------------------------------------------------------------------
 
+static bool mainPageHasOwnTitle()
+{
+  static QCString projectName = Config_getString("PROJECT_NAME");
+  QCString title;
+  if (Doxygen::mainPage)
+  {
+    title = filterTitle(Doxygen::mainPage->title());
+  }
+  return !projectName.isEmpty() && mainPageHasTitle() && qstricmp(title,projectName)!=0;
+}
+
 static void writePages(PageDef *pd,FTVHelp *ftv)
 {
   //printf("writePages()=%s pd=%p mainpage=%p\n",pd->name().data(),pd,Doxygen::mainPage);
@@ -3115,8 +3129,8 @@ static void writePages(PageDef *pd,FTVHelp *ftv)
     }
   }
   if (hasSubPages && ftv) ftv->incContentsDepth();
-  bool doIndent = (hasSections || hasSubPages) &&  
-                  (pd!=Doxygen::mainPage || mainPageHasTitle());
+  bool doIndent = (hasSections || hasSubPages) &&
+                  (pd!=Doxygen::mainPage || mainPageHasOwnTitle());
   if (doIndent)
   {
     Doxygen::indexList->incContentsDepth();
diff --git a/src/jquery_fx.js b/src/jquery_fx.js
deleted file mode 100644
index 97e5843..0000000
--- a/src/jquery_fx.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentEl [...]
\ No newline at end of file
diff --git a/src/jquery_p1.js b/src/jquery_p1.js
deleted file mode 100644
index 06eb7e6..0000000
--- a/src/jquery_p1.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/ [...]
-}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.createElemen [...]
-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);re [...]
diff --git a/src/jquery_p2.js b/src/jquery_p2.js
deleted file mode 100644
index bc16cf6..0000000
--- a/src/jquery_p2.js
+++ /dev/null
@@ -1,10 +0,0 @@
-}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:functio [...]
-/*!
- * 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 [...]
-},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: [...]
-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 [...]
diff --git a/src/jquery_p3.js b/src/jquery_p3.js
deleted file mode 100644
index c0f18ce..0000000
--- a/src/jquery_p3.js
+++ /dev/null
@@ -1,3 +0,0 @@
-if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[ [...]
-}}}}})}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.d [...]
-})}})(window);
\ No newline at end of file
diff --git a/src/jquery_pt.js b/src/jquery_pt.js
deleted file mode 100644
index cbc428d..0000000
--- a/src/jquery_pt.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- PowerTip - v1.2.0 - 2013-04-03
- http://stevenbenner.github.com/jquery-powertip/
- Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
- Released under MIT license.
- https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
-*/
-(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouse [...]
\ No newline at end of file
diff --git a/src/jquery_ui.js b/src/jquery_ui.js
deleted file mode 100644
index 0ef321d..0000000
--- a/src/jquery_ui.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn [...]
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Wid [...]
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseD [...]
-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("resizab [...]
- * jQuery hashchange event - v1.3 - 7/21/2010
- * http://benalman.com/projects/jquery-hashchange-plugin/
- * 
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function() [...]
\ No newline at end of file
diff --git a/src/lang_cfg.py b/src/lang_cfg.py
old mode 100644
new mode 100755
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index af1a5fd..4cba261 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -71,6 +71,75 @@ static const char *getSectionName(int level)
   return secLabels[QMIN(maxLevels-1,l)];
 }
 
+static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name,  QCString width,  QCString height)
+{
+    if (hasCaption)
+    {
+      t << "\n\\begin{DoxyImage}\n";
+    }
+    else
+    {
+      t << "\n\\begin{DoxyImageNoCaption}\n"
+             "  \\mbox{";
+    }
+
+    t << "\\includegraphics";
+    if (!width.isEmpty() || !height.isEmpty())
+    {
+      t << "[";
+    }
+    if (!width.isEmpty())
+    {
+      t << "width=" << width;
+    }
+    if (!width.isEmpty() && !height.isEmpty())
+    {
+      t << ",";
+    }
+    if (!height.isEmpty())
+    {
+      t << "height=" << height;
+    }
+    if (width.isEmpty() && height.isEmpty())
+    {
+      /* default setting */
+      t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
+    }
+    else
+    {
+      t << "]";
+    }
+
+    t << "{" << name << "}";
+
+    if (hasCaption)
+    {
+      t << "\n\\caption{";
+    }
+}
+
+
+
+static void visitPostEnd(FTextStream &t, const bool hasCaption)
+{
+    t << "}\n"; // end mbox or caption
+    if (hasCaption)
+    {
+      t << "\\end{DoxyImage}\n";
+    }
+    else{
+      t << "\\end{DoxyImageNoCaption}\n";
+    }
+}
+
+
+static void visitCaption(LatexDocVisitor *parent, QList<DocNode> children)
+{
+  QListIterator<DocNode> cli(children);
+  DocNode *n;
+  for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
 QCString LatexDocVisitor::escapeMakeIndexChars(const char *s)
 {
   QCString result;
@@ -284,15 +353,17 @@ void LatexDocVisitor::visit(DocVerbatim *s)
         {
           err("Could not open file %s for writing\n",fileName.data());
         }
-        file.writeBlock( s->text(), s->text().length() );
-        file.close();
+        else
+        {
+          file.writeBlock( s->text(), s->text().length() );
+          file.close();
 
-        m_t << "\\begin{center}\n";
-        startDotFile(fileName,"","",FALSE);
-        endDotFile(FALSE);
-        m_t << "\\end{center}\n";
+          startDotFile(fileName,s->width(),s->height(),s->hasCaption());
+          visitCaption(this, s->children());
+          endDotFile(s->hasCaption());
 
-        if (Config_getBool("DOT_CLEANUP")) file.remove();
+          if (Config_getBool("DOT_CLEANUP")) file.remove();
+        }
       }
       break;
     case DocVerbatim::Msc: 
@@ -309,17 +380,18 @@ void LatexDocVisitor::visit(DocVerbatim *s)
         {
           err("Could not open file %s.msc for writing\n",baseName.data());
         }
-        QCString text = "msc {";
-        text+=s->text();
-        text+="}";
-        file.writeBlock( text, text.length() );
-        file.close();
+        else
+        {
+          QCString text = "msc {";
+          text+=s->text();
+          text+="}";
+          file.writeBlock( text, text.length() );
+          file.close();
 
-        m_t << "\\begin{center}\n";
-        writeMscFile(baseName);
-        m_t << "\\end{center}\n";
+          writeMscFile(baseName, s);
 
-        if (Config_getBool("DOT_CLEANUP")) file.remove();
+          if (Config_getBool("DOT_CLEANUP")) file.remove();
+        }
       }
       break;
     case DocVerbatim::PlantUML: 
@@ -327,9 +399,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
         QCString latexOutput = Config_getString("LATEX_OUTPUT");
         QCString baseName = writePlantUMLSource(latexOutput,s->exampleFile(),s->text());
 
-        m_t << "\\begin{center}\n";
-        writePlantUMLFile(baseName);
-        m_t << "\\end{center}\n";
+        writePlantUMLFile(baseName, s);
       }
       break;
   }
@@ -825,7 +895,7 @@ static const char *getTableName(const DocNode *n)
   bool isNested=FALSE;
   while (n && !isNested)
   {
-    isNested = n->kind()==DocNode::Kind_HtmlTable;
+    isNested = n->kind()==DocNode::Kind_HtmlTable || n->kind()==DocNode::Kind_ParamSect;
     n  = n->parent();
   }
   return isNested ? "TabularNC" : "TabularC";
@@ -1098,40 +1168,18 @@ void LatexDocVisitor::visitPost(DocHtmlHeader *)
   if (m_hide) return;
   m_t << "}";
 }
-
 void LatexDocVisitor::visitPre(DocImage *img)
 {
   if (img->type()==DocImage::Latex)
   {
     if (m_hide) return;
-    if (img->hasCaption())
-    {
-      m_t << "\n\\begin{DoxyImage}\n";
-    }
-    else
-    {
-      m_t << "\n\\begin{DoxyImageNoCaption}\n"
-             "  \\mbox{";
-    }
     QCString gfxName = img->name();
     if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
     {
       gfxName=gfxName.left(gfxName.length()-4);
     }
-    m_t << "\\includegraphics";
-    if (!img->width().isEmpty())
-    {
-      m_t << "[width=" << img->width() << "]";
-    }
-    else if (!img->height().isEmpty())
-    {
-      m_t << "[height=" << img->height() << "]";
-    }
-    m_t << "{" << gfxName << "}";
-    if (img->hasCaption())
-    {
-      m_t << "\n\\caption{";
-    }
+
+    visitPreStart(m_t,img->hasCaption(), gfxName, img->width(),  img->height());
   }
   else // other format -> skip
   {
@@ -1145,14 +1193,7 @@ void LatexDocVisitor::visitPost(DocImage *img)
   if (img->type()==DocImage::Latex)
   {
     if (m_hide) return;
-    m_t << "}\n"; // end mbox or caption
-    if (img->hasCaption())
-    {
-      m_t << "\\end{DoxyImage}\n";
-    }
-    else{
-      m_t << "\\end{DoxyImageNoCaption}\n";
-    }
+    visitPostEnd(m_t,img->hasCaption());
   }
   else // other format
   {
@@ -1610,57 +1651,13 @@ void LatexDocVisitor::startDotFile(const QCString &fileName,
   QCString outDir = Config_getString("LATEX_OUTPUT");
   QCString name = fileName;
   writeDotGraphFromFile(name,outDir,baseName,GOF_EPS);
-  if (hasCaption)
-  {
-    m_t << "\n\\begin{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\n\\begin{DoxyImageNoCaption}\n"
-           "  \\mbox{";
-  }
-  m_t << "\\includegraphics";
-  if (!width.isEmpty())
-  {
-    m_t << "[width=" << width << "]";
-  }
-  else if (!height.isEmpty())
-  {
-    m_t << "[height=" << height << "]";
-  }
-  else
-  {
-    m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
-  }
-  m_t << "{" << baseName;
-  //if (Config_getBool("USE_PDFLATEX"))
-  //{
-  //  m_t << ".pdf";
-  //}
-  //else
-  //{
-  //  m_t << ".eps";
-  //}
-  m_t << "}";
-
-  if (hasCaption)
-  {
-    m_t << "\n\\caption{";
-  }
+  visitPreStart(m_t,hasCaption, baseName, width, height);
 }
 
 void LatexDocVisitor::endDotFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "}\n"; // end caption or mbox
-  if (hasCaption)
-  {
-    m_t << "\\end{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\\end{DoxyImageNoCaption}\n";
-  }
+  visitPostEnd(m_t,hasCaption);
 }
 
 void LatexDocVisitor::startMscFile(const QCString &fileName,
@@ -1683,61 +1680,17 @@ void LatexDocVisitor::startMscFile(const QCString &fileName,
 
   QCString outDir = Config_getString("LATEX_OUTPUT");
   writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS); 
-  if (hasCaption)
-  {
-    m_t << "\n\\begin{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\n\\begin{DoxyImageNoCaption}\n"
-           "  \\mbox{";
-  }
-  m_t << "\\includegraphics";
-  if (!width.isEmpty())
-  {
-    m_t << "[width=" << width << "]";
-  }
-  else if (!height.isEmpty())
-  {
-    m_t << "[height=" << height << "]";
-  }
-  else
-  {
-    m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
-  }
-  m_t << "{" << baseName;
-  //if (Config_getBool("USE_PDFLATEX"))
-  //{
-  //  m_t << ".pdf";
-  //}
-  //else
-  //{
-  //  m_t << ".eps";
-  //}
-  m_t << "}";
-
-  if (hasCaption)
-  {
-    m_t << "\n\\caption{";
-  }
+  visitPreStart(m_t,hasCaption, baseName, width, height);
 }
 
 void LatexDocVisitor::endMscFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "}\n"; // end caption or mbox
-  if (hasCaption)
-  {
-    m_t << "\\end{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\\end{DoxyImageNoCaption}\n";
-  }
+  visitPostEnd(m_t,hasCaption);
 }
 
 
-void LatexDocVisitor::writeMscFile(const QCString &baseName)
+void LatexDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1747,11 +1700,9 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
   } 
   QCString outDir = Config_getString("LATEX_OUTPUT");
   writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS);
-  m_t << "\n\\begin{DoxyImageNoCaption}"
-         "  \\mbox{\\includegraphics";
-  m_t << "{" << shortName << "}";
-  m_t << "}\n"; // end mbox
-  m_t << "\\end{DoxyImageNoCaption}\n";
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
 
@@ -1775,61 +1726,17 @@ void LatexDocVisitor::startDiaFile(const QCString &fileName,
 
   QCString outDir = Config_getString("LATEX_OUTPUT");
   writeDiaGraphFromFile(fileName,outDir,baseName,DIA_EPS);
-  if (hasCaption)
-  {
-    m_t << "\n\\begin{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\n\\begin{DoxyImageNoCaption}\n"
-           "  \\mbox{";
-  }
-  m_t << "\\includegraphics";
-  if (!width.isEmpty())
-  {
-    m_t << "[width=" << width << "]";
-  }
-  else if (!height.isEmpty())
-  {
-    m_t << "[height=" << height << "]";
-  }
-  else
-  {
-    m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
-  }
-  m_t << "{" << baseName;
-  //if (Config_getBool("USE_PDFLATEX"))
-  //{
-  //  m_t << ".pdf";
-  //}
-  //else
-  //{
-  //  m_t << ".eps";
-  //}
-  m_t << "}";
-
-  if (hasCaption)
-  {
-    m_t << "\n\\caption{";
-  }
+  visitPreStart(m_t,hasCaption, baseName, width, height);
 }
 
 void LatexDocVisitor::endDiaFile(bool hasCaption)
 {
   if (m_hide) return;
-  m_t << "}\n"; // end caption or mbox
-  if (hasCaption)
-  {
-    m_t << "\\end{DoxyImage}\n";
-  }
-  else
-  {
-    m_t << "\\end{DoxyImageNoCaption}\n";
-  }
+  visitPostEnd(m_t,hasCaption);
 }
 
 
-void LatexDocVisitor::writeDiaFile(const QCString &baseName)
+void LatexDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1839,14 +1746,12 @@ void LatexDocVisitor::writeDiaFile(const QCString &baseName)
   }
   QCString outDir = Config_getString("LATEX_OUTPUT");
   writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_EPS);
-  m_t << "\n\\begin{DoxyImageNoCaption}"
-         "  \\mbox{\\includegraphics";
-  m_t << "{" << shortName << "}";
-  m_t << "}\n"; // end mbox
-  m_t << "\\end{DoxyImageNoCaption}\n";
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
-void LatexDocVisitor::writePlantUMLFile(const QCString &baseName)
+void LatexDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s)
 {
   QCString shortName = baseName;
   int i;
@@ -1856,10 +1761,8 @@ void LatexDocVisitor::writePlantUMLFile(const QCString &baseName)
   }
   QCString outDir = Config_getString("LATEX_OUTPUT");
   generatePlantUMLOutput(baseName,outDir,PUML_EPS);
-  m_t << "\n\\begin{DoxyImageNoCaption}"
-         "  \\mbox{\\includegraphics";
-  m_t << "{" << shortName << "}";
-  m_t << "}\n"; // end mbox
-  m_t << "\\end{DoxyImageNoCaption}\n";
+  visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height());
+  visitCaption(this, s->children());
+  visitPostEnd(m_t, s->hasCaption());
 }
 
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 64560b9..0391dcd 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -170,13 +170,13 @@ class LatexDocVisitor : public DocVisitor
     void startMscFile(const QCString &fileName,const QCString &width,
                       const QCString &height, bool hasCaption);
     void endMscFile(bool hasCaption);
-    void writeMscFile(const QCString &fileName);
+    void writeMscFile(const QCString &fileName, DocVerbatim *s);
 
     void startDiaFile(const QCString &fileName,const QCString &width,
                       const QCString &height, bool hasCaption);
     void endDiaFile(bool hasCaption);
-    void writeDiaFile(const QCString &fileName);
-    void writePlantUMLFile(const QCString &fileName);
+    void writeDiaFile(const QCString &fileName, DocVerbatim *s);
+    void writePlantUMLFile(const QCString &fileName, DocVerbatim *s);
 
     void pushEnabled();
     void popEnabled();
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 086e012..d4d8fae 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -36,30 +36,7 @@
 #include "classlist.h"
 #include "namespacedef.h"
 #include "filename.h"
-
-static const char doxygenLatexStyle[] =
-#include "doxygen.sty.h"
-;
-
-//static QCString filterTitle(const char *s)
-//{
-//  QCString tmp=s,result;
-//  uint i;for (i=0;i<tmp.length();i++)
-//  {
-//    char c=tmp.at(i);
-//    switch(c)
-//    {
-//      case '#': result+="\\#";  break;
-//      case '"': result+="\\\""; break;
-//      case '%': result+="\\%";  break;
-//      case '[': result+="{";    break;
-//      case ']': result+="}";    break;
-//      default:  result+=c;      break;
-//    }
-//  }
-//  return result;  
-//}
-
+#include "resourcemgr.h"
 
 
 LatexGenerator::LatexGenerator() : OutputGenerator()
@@ -293,7 +270,29 @@ static void writeDefaultHeaderPart1(FTextStream &t)
        "\\usepackage{fixltx2e}\n" // for \textsubscript
        "\\usepackage{calc}\n"
        "\\usepackage{doxygen}\n"
-       "\\usepackage{graphicx}\n"
+       "\\usepackage[export]{adjustbox} % also loads graphicx\n";
+  QStrList extraLatexStyle = Config_getList("LATEX_EXTRA_STYLESHEET");
+  for (uint i=0; i<extraLatexStyle.count(); ++i)
+  {
+    QCString fileName(extraLatexStyle.at(i));
+    if (!fileName.isEmpty())
+    {
+      QFileInfo fi(fileName);
+      if (fi.exists())
+      {
+        if (checkExtension(fi.fileName().data(), latexStyleExtension))
+        {
+          // strip the extension, it will be added by the usepackage in the tex conversion process
+          t << "\\usepackage{" << stripExtensionGeneral(fi.fileName().data(), latexStyleExtension) << "}\n";
+        }
+        else
+        {
+          t << "\\usepackage{" << fi.fileName().utf8() << "}\n";
+        }
+      }
+    }
+  }
+  t << "\\usepackage{graphicx}\n"
        "\\usepackage[utf8]{inputenc}\n"
        "\\usepackage{makeidx}\n"
        "\\usepackage{multicol}\n"
@@ -316,7 +315,6 @@ static void writeDefaultHeaderPart1(FTextStream &t)
   // Define default fonts
   t << "% Font selection\n"
        "\\usepackage[T1]{fontenc}\n"
-       "\\usepackage{mathptmx}\n"
        "\\usepackage[scaled=.90]{helvet}\n"
        "\\usepackage{courier}\n"
        "\\usepackage{amssymb}\n"
@@ -525,7 +523,7 @@ static void writeDefaultHeaderPart3(FTextStream &t)
 
 static void writeDefaultStyleSheet(FTextStream &t)
 {
-  t << doxygenLatexStyle;
+  t << ResourceMgr::instance().getAsString("doxygen.sty");
 }
 
 static void writeDefaultFooter(FTextStream &t)
@@ -543,8 +541,10 @@ static void writeDefaultFooter(FTextStream &t)
   else
     unit = "chapter";
   t << "% Index\n"
+       "\\backmatter\n"
        "\\newpage\n"
        "\\phantomsection\n"
+       "\\clearemptydoublepage\n"
        "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trRTFGeneralIndex() << "}\n"
        "\\printindex\n"
        "\n"
@@ -1087,7 +1087,7 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn)
 {
   if (!ref && fn)
   {
-    t << "}{\\pageref{" << fn << "}}{}" << endl;
+    t << "}{\\pageref{" << stripPath(fn) << "}}{}" << endl;
   }
 }
 
@@ -1260,7 +1260,7 @@ void LatexGenerator::startTitleHead(const char *fileName)
   static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
   if (usePDFLatex && pdfHyperlinks && fileName)
   {
-    t << "\\hypertarget{" << stripPath(fileName) << "}{";
+    t << "\\hypertarget{" << stripPath(fileName) << "}{}";
   }
   if (Config_getBool("COMPACT_LATEX")) 
   {
@@ -1274,8 +1274,6 @@ void LatexGenerator::startTitleHead(const char *fileName)
 
 void LatexGenerator::endTitleHead(const char *fileName,const char *name)
 {
-  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
-  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
   t << "}" << endl;
   if (name)
   {
@@ -1285,10 +1283,6 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
     escapeMakeIndexChars(name);
     t << "}}" << endl;
   }
-  if (usePDFLatex && pdfHyperlinks && fileName)
-  {
-    t << "}" << endl;
-  }
 }
 
 void LatexGenerator::startTitle()
@@ -1428,18 +1422,12 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
     t << "\\hypertarget{";
     if (fName) t << stripPath(fName);
     if (anchor) t << "_" << anchor;
-    t << "}{";
+    t << "}{}";
   }
 }
 
 void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
 {
-  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
-  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
-  if (usePDFLatex && pdfHyperlinks)
-  {
-    t << "}";
-  }
   t << "\\label{";
   if (fName) t << stripPath(fName);
   if (anchor) t << "_" << anchor;
@@ -1964,10 +1952,10 @@ void LatexGenerator::exceptionEntry(const char* prefix,bool closeBracket)
 
 void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
 {
-  LatexDocVisitor *visitor = 
+  LatexDocVisitor *visitor =
     new LatexDocVisitor(t,*this,ctx?ctx->getDefFileExtension():QCString(""),insideTabbing);
   n->accept(visitor);
-  delete visitor; 
+  delete visitor;
 }
 
 void LatexGenerator::startConstraintList(const char *header)
diff --git a/src/latexgen.h b/src/latexgen.h
index f68612d..60c649a 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -22,6 +22,8 @@
 
 class QFile;
 
+static const char *latexStyleExtension = ".sty";
+
 /** Generator for LaTeX output. */
 class LatexGenerator : public OutputGenerator
 {
diff --git a/src/layout.cpp b/src/layout.cpp
index 739a2a3..c364886 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -1104,7 +1104,7 @@ class LayoutParser : public QXmlDefaultHandler
         }
       }
       // create new item and make it the new root
-      m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro);
+      m_rootNav = new LayoutNavEntry(m_rootNav,kind,isVisible,baseFile,title,intro);
     }
 
     void endNavEntry()
diff --git a/src/layout_default.h b/src/layout_default.h
deleted file mode 100644
index d775926..0000000
--- a/src/layout_default.h
+++ /dev/null
@@ -1,194 +0,0 @@
-"<doxygenlayout version=\"1.0\">\n"
-"  <!-- Generated by doxygen $doxygenversion -->\n"
-"  <!-- Navigation index tabs for HTML output -->\n"
-"  <navindex>\n"
-"    <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
-"    <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    <tab type=\"modules\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n"
-"      <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"files\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"examples\" visible=\"yes\" title=\"\" intro=\"\"/>  \n"
-"  </navindex>\n"
-"\n"
-"  <!-- Layout definition for a class page -->\n"
-"  <class>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-"    <inheritancegraph visible=\"$CLASS_GRAPH\"/>\n"
-"    <collaborationgraph visible=\"$COLLABORATION_GRAPH\"/>\n"
-"    <memberdecl>\n"
-"      <nestedclasses visible=\"yes\" title=\"\"/>\n"
-"      <publictypes title=\"\"/>\n"
-"      <services title=\"\"/>\n"
-"      <interfaces title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicmethods title=\"\"/>\n"
-"      <publicstaticmethods title=\"\"/>\n"
-"      <publicattributes title=\"\"/>\n"
-"      <publicstaticattributes title=\"\"/>\n"
-"      <protectedtypes title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <protectedmethods title=\"\"/>\n"
-"      <protectedstaticmethods title=\"\"/>\n"
-"      <protectedattributes title=\"\"/>\n"
-"      <protectedstaticattributes title=\"\"/>\n"
-"      <packagetypes title=\"\"/>\n"
-"      <packagemethods title=\"\"/>\n"
-"      <packagestaticmethods title=\"\"/>\n"
-"      <packageattributes title=\"\"/>\n"
-"      <packagestaticattributes title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <privatetypes title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <privatemethods title=\"\"/>\n"
-"      <privatestaticmethods title=\"\"/>\n"
-"      <privateattributes title=\"\"/>\n"
-"      <privatestaticattributes title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"      <related title=\"\" subtitle=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <services title=\"\"/>\n"
-"      <interfaces title=\"\"/>\n"
-"      <constructors title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <related title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"    </memberdef>\n"
-"    <allmemberslink visible=\"yes\"/>\n"
-"    <usedfiles visible=\"$SHOW_USED_FILES\"/>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </class>\n"
-"\n"
-"  <!-- Layout definition for a namespace page -->\n"
-"  <namespace>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <nestednamespaces visible=\"yes\" title=\"\"/>\n"
-"      <constantgroups visible=\"yes\" title=\"\"/>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </namespace>\n"
-"\n"
-"  <!-- Layout definition for a file page -->\n"
-"  <file>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-"    <includegraph visible=\"$INCLUDE_GRAPH\"/>\n"
-"    <includedbygraph visible=\"$INCLUDED_BY_GRAPH\"/>\n"
-"    <sourcelink visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <namespaces visible=\"yes\" title=\"\"/>\n"
-"      <constantgroups visible=\"yes\" title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection/>\n"
-"  </file>\n"
-"\n"
-"  <!-- Layout definition for a group page -->\n"
-"  <group>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <groupgraph visible=\"$GROUP_GRAPHS\"/>\n"
-"    <memberdecl>\n"
-"      <nestedgroups visible=\"yes\" title=\"\"/>\n"
-"      <dirs visible=\"yes\" title=\"\"/>\n"
-"      <files visible=\"yes\" title=\"\"/>\n"
-"      <namespaces visible=\"yes\" title=\"\"/>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <enumvalues title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <pagedocs/>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <enumvalues title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </group>\n"
-"\n"
-"  <!-- Layout definition for a directory page -->\n"
-"  <directory>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <directorygraph visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <dirs visible=\"yes\"/>\n"
-"      <files visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"  </directory>\n"
-"</doxygenlayout>\n"
diff --git a/src/libdoxycfg.pro b/src/libdoxycfg.pro
deleted file mode 100644
index 4379ef3..0000000
--- a/src/libdoxycfg.pro
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# This file was generated from libdoxycfg.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-# TMake project file for doxygen
-
-TEMPLATE     =	libdoxycfg.t
-CONFIG       =	console warn_on staticlib debug
-HEADERS      =  config.h configoptions.h portable.h
-SOURCES      =	../generated_src/doxygen/config.cpp ../generated_src/doxygen/configoptions.cpp portable.cpp portable_c.c
-win32:TMAKE_CXXFLAGS       += -DQT_NODLL
-win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
-DEPENDPATH                 += ../generated_src/doxygen
-INCLUDEPATH                += ../generated_src/doxygen . ../qtools
-DESTDIR                    =  ../lib
-TARGET                     =  doxycfg
-OBJECTS_DIR                =  ../objects/doxygen
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/src/libdoxycfg.t b/src/libdoxycfg.t
deleted file mode 100644
index 3a40b63..0000000
--- a/src/libdoxycfg.t
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#!
-#! doxygen.t: This is a custom template for building Doxygen
-#!
-#$ IncludeTemplate("lib.t");
-
-LEX     =   /usr/bin/flex
-YACC    =   /opt/local/bin/bison
-PYTHON  =   /opt/local/bin/python2
-
-#${
-sub GenerateDep {
-    my($obj,$src,$dep) = @_;
-    my(@objv,$srcv,$i,$s,$o,$d,$c);
-    @objv = split(/\s+/,$obj);
-    @srcv = split(/\s+/,$src);
-    for $i ( 0..$#objv ) {
-        $s = $srcv[$i];
-        $o = $objv[$i];
-        next if $s eq "";
-        $text .= $o . ": " . $s;
-	$text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
-        if ( $moc_output{$s} ne "" ) {
-            $text .= " ${linebreak}\n\t\t" . $moc_output{$s};
-        }
-        $d = &make_depend($s);
-        $text .= " ${linebreak}\n\t\t" . $d if $d ne "";
-	$text .= "\n";
-    }
-    chop $text;
-}
-#$} 
-
-####################
-
-#$ GenerateDep("../generated_src/doxygen/config.cpp","config.l");
-	$(LEX) -PconfigYY -t config.l >../generated_src/doxygen/config.cpp 
-
-../generated_src/doxygen/configoptions.cpp: config.xml configgen.py
-	$(PYTHON) configgen.py -cpp config.xml >../generated_src/doxygen/configoptions.cpp
-
diff --git a/src/libdoxygen.pro b/src/libdoxygen.pro
deleted file mode 100644
index 923c6ad..0000000
--- a/src/libdoxygen.pro
+++ /dev/null
@@ -1,245 +0,0 @@
-#
-# This file was generated from libdoxygen.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-# TMake project file for doxygen
-
-TEMPLATE     =	libdoxygen.t
-CONFIG       =	console warn_on staticlib debug
-HEADERS      =	arguments.h \
-                bufstr.h \
-		cite.h \
-		clangparser.h \
-                classdef.h \
-                classlist.h \
-                cmdmapper.h \
-                code.h \
-		commentcnv.h \
-		commentscan.h \
-		condparser.h \
-                config.h \
-		context.h \
-		constexp.h \
-		cppvalue.h \
-		debug.h \
-                declinfo.h \
-                defargs.h \
-                defgen.h \
-                define.h \
-                definition.h \
-                diagram.h \
-                dirdef.h \
-                docparser.h \
-		docsets.h \
-                doctokenizer.h \
-                docvisitor.h \
-		dot.h \
-		doxygen.h \
-		eclipsehelp.h \
-		entry.h \
-		example.h \
-		filedef.h \
-		filename.h \
-		fileparser.h \
-		formula.h \
-		ftextstream.h \
-		ftvhelp.h \
-		groupdef.h \
-		htags.h \
-		htmlattrib.h \
-                htmldocvisitor.h \
-		htmlgen.h \
-		htmlhelp.h \
-		htmlentity.h \
-		image.h \
-		index.h \
-		language.h \
-                latexdocvisitor.h \
-		latexgen.h \
-                layout.h \
-		logos.h \
-		mandocvisitor.h \
-		mangen.h \
-		sqlite3gen.h \
-		markdown.h \
-                marshal.h \
-		memberdef.h \
-		membergroup.h \
-		memberlist.h \
-		membername.h \
-		message.h \
-                msc.h \
-                dia.h \
-		namespacedef.h \
-                objcache.h \
-		outputgen.h \
-		outputlist.h \
-		pagedef.h \
-		perlmodgen.h \
-		lodepng.h \
-		plantuml.h \
-		pre.h \
-                printdocvisitor.h \
-                pycode.h \
-                pyscanner.h \
-                fortrancode.h \
-                fortranscanner.h \
-                dbusxmlscanner.h \
-		qhp.h \
-		qhpxmlwriter.h \
-		reflist.h \
-                rtfdocvisitor.h \
-		rtfgen.h \
-		rtfstyle.h \
-		scanner.h \
-		searchindex.h \
-		section.h \
-		sortdict.h \
-                store.h \
-		tagreader.h \
-		tclscanner.h \
-		template.h \
-                textdocvisitor.h \
-		tooltip.h \
-		translator.h \
-		translator_adapter.h \
-		util.h \
-		version.h \
-		vhdlcode.h \
-		vhdldocgen.h \
-		xmldocvisitor.h \
-                xmlgen.h \
-                docbookvisitor.h \
-                docbookgen.h \
-		vhdljjparser.h 
-		
-
-SOURCES      =	arguments.cpp \
-		cite.cpp \
-		clangparser.cpp \
-		classdef.cpp \
-		classlist.cpp \
-                cmdmapper.cpp \
-		condparser.cpp \
-		context.cpp \
-		cppvalue.cpp \
-                dbusxmlscanner.cpp \
-		debug.cpp \
-                defgen.cpp \
-		define.cpp \
-		definition.cpp \
-		diagram.cpp \
-                dirdef.cpp \
-                docparser.cpp \
-		docsets.cpp \
-		dot.cpp \
-		doxygen.cpp \
-		eclipsehelp.cpp \
-		entry.cpp \
-		filedef.cpp \
-		filename.cpp \
-		fileparser.cpp \
-		formula.cpp \
-		ftextstream.cpp \
-		ftvhelp.cpp \
-		groupdef.cpp \
-		htags.cpp \
-                htmldocvisitor.cpp \
-		htmlgen.cpp \
-		htmlhelp.cpp \
-		htmlentity.cpp \
-		image.cpp \
-		index.cpp \
-		language.cpp \
-                latexdocvisitor.cpp \
-		latexgen.cpp \
-                layout.cpp \
-		lodepng.cpp \
-		logos.cpp \
-		plantuml.cpp \
-		mandocvisitor.cpp \
-		mangen.cpp \
-		sqlite3gen.cpp \
-		markdown.cpp \
-                marshal.cpp \
-		memberdef.cpp \
-		membergroup.cpp \
-		memberlist.cpp \
-		membername.cpp \
-		message.cpp \
-                msc.cpp \
-                dia.cpp \
-		namespacedef.cpp \
-                objcache.cpp \
-		outputgen.cpp \
-		outputlist.cpp \
-		pagedef.cpp \
-		perlmodgen.cpp \
-		qhp.cpp \
-		qhpxmlwriter.cpp \
-		reflist.cpp \
-                rtfdocvisitor.cpp \
-		rtfgen.cpp \
-		rtfstyle.cpp \
-		searchindex.cpp \
-                store.cpp \
-		tagreader.cpp \
-		template.cpp \
-                textdocvisitor.cpp \
-                tooltip.cpp \
-		util.cpp \
-		vhdldocgen.cpp \
-		xmldocvisitor.cpp \
-                xmlgen.cpp \
-                docbookvisitor.cpp \
-                docbookgen.cpp \
-                vhdljjparser.cpp \
-	        ../generated_src/doxygen/ce_parse.cpp \
-                ../generated_src/doxygen/constexp.cpp \
-		../generated_src/doxygen/vhdlcode.cpp \
-		../generated_src/doxygen/code.cpp \
-		../generated_src/doxygen/commentcnv.cpp \
-		../generated_src/doxygen/commentscan.cpp \
-		../generated_src/doxygen/declinfo.cpp \
-		../generated_src/doxygen/defargs.cpp \
-                ../generated_src/doxygen/doctokenizer.cpp \
-		../generated_src/doxygen/pre.cpp \
-		../generated_src/doxygen/pycode.cpp \
-		../generated_src/doxygen/pyscanner.cpp \
-		../generated_src/doxygen/scanner.cpp \
-                ../generated_src/doxygen/tclscanner.cpp \
-		../generated_src/doxygen/fortrancode.cpp \
-		../generated_src/doxygen/fortranscanner.cpp \
-		../generated_src/doxygen/version.cpp 
-		
-		
-
-win32:TMAKE_CXXFLAGS       += -DQT_NODLL
-win32-msvc:TMAKE_CXXFLAGS  += -Zm200
-win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions
-linux-g++:TMAKE_CXXFLAGS   += -fno-exceptions
-INCLUDEPATH                += ../generated_src/doxygen ../src ../qtools ../libmd5 ../vhdlparser
-INCLUDEPATH                += 
-DEPENDPATH                 += ../generated_src/doxygen
-win32:INCLUDEPATH          += .
-DESTDIR                    =  ../lib
-TARGET                     =  doxygen
-OBJECTS_DIR                =  ../objects/doxygen
-
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 703b885..39df3cd 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -98,6 +98,7 @@ HEADERS      =	arguments.h \
 		qhp.h \
 		qhpxmlwriter.h \
 		reflist.h \
+		resourcemgr.h \
                 rtfdocvisitor.h \
 		rtfgen.h \
 		rtfstyle.h \
@@ -188,6 +189,7 @@ SOURCES      =	arguments.cpp \
 		qhp.cpp \
 		qhpxmlwriter.cpp \
 		reflist.cpp \
+		resourcemgr.cpp \
                 rtfdocvisitor.cpp \
 		rtfgen.cpp \
 		rtfstyle.cpp \
@@ -220,7 +222,8 @@ SOURCES      =	arguments.cpp \
                 ../generated_src/doxygen/tclscanner.cpp \
 		../generated_src/doxygen/fortrancode.cpp \
 		../generated_src/doxygen/fortranscanner.cpp \
-		../generated_src/doxygen/version.cpp 
+		../generated_src/doxygen/version.cpp \
+		../generated_src/doxygen/resources.cpp 
 		
 		
 
@@ -230,7 +233,8 @@ win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions
 linux-g++:TMAKE_CXXFLAGS   += -fno-exceptions
 INCLUDEPATH                += ../generated_src/doxygen ../src ../qtools ../libmd5 ../vhdlparser
 INCLUDEPATH                += %%SQLITE3_INC%%
-DEPENDPATH                 += ../generated_src/doxygen
+INCLUDEPATH                += %%LIBCLANG_INC%%
+DEPENDPATH                 += ../generated_src/doxygen ../qtools ../libmd5 ../vhdlparser
 win32:INCLUDEPATH          += .
 DESTDIR                    =  ../lib
 TARGET                     =  doxygen
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
deleted file mode 100644
index 0f496bd..0000000
--- a/src/libdoxygen.t
+++ /dev/null
@@ -1,208 +0,0 @@
-#
-# 
-#
-# Copyright (C) 1997-2014 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#!
-#! doxygen.t: This is a custom template for building Doxygen
-#!
-#$ IncludeTemplate("lib.t");
-
-LEX        = /usr/bin/flex
-YACC       = /opt/local/bin/bison
-PYTHON     = /opt/local/bin/python2
-PERL       = %%PERL%%
-INCBUFSIZE = $(PYTHON) increasebuffer.py
-GENERATED_SRC = ../generated_src/doxygen
-GENERATED_OBJ = ../objects/doxygen
-
-#${
-sub GenerateDep {
-    my($obj,$src, at deps) = @_;
-    my(@objv,$srcv,$i,$s,$o,$d,$c);
-    @objv = split(/\s+/,$obj);
-    @srcv = split(/\s+/,$src);
-    for $i ( 0..$#objv ) {
-        $s = $srcv[$i];
-        $o = $objv[$i];
-        next if $s eq "";
-        $text .= $o . ": " . $s;
-        foreach my $dep (@deps) {
-	  $text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
-        }
-        if ( $moc_output{$s} ne "" ) {
-            $text .= " ${linebreak}\n\t\t" . $moc_output{$s};
-        }
-        $d = &make_depend($s);
-        $text .= " ${linebreak}\n\t\t" . $d if $d ne "";
-	$text .= "\n";
-    }
-    chop $text;
-}
-sub GenerateLex {
-    my($name,$caseOpt) = @_;
-    $text = "\t\$(LEX) ";
-    if ($caseOpt) {
-        $text .= "-i ";
-    }
-    $text .= "-P".$name."YY -t ".$name.".l | \$(INCBUFSIZE) > \$(GENERATED_SRC)/".$name.".cpp";
-}
-#$} 
-
-####################
-
-#$ GenerateDep("\$(GENERATED_SRC)/scanner.cpp","scanner.l");
-#$ GenerateLex("scanner",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/code.cpp","code.l");
-#$ GenerateLex("code",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/pyscanner.cpp","pyscanner.l");
-#$ GenerateLex("pyscanner",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/pycode.cpp","pycode.l");
-#$ GenerateLex("pycode",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/fortranscanner.cpp","fortranscanner.l");
-#$ GenerateLex("fortranscanner",1);
-
-#$ GenerateDep("\$(GENERATED_SRC)/fortrancode.cpp","fortrancode.l");
-#$ GenerateLex("fortrancode",1);
-
-#$ GenerateDep("\$(GENERATED_SRC)/vhdlcode.cpp","vhdlcode.l");
-#$ GenerateLex("vhdlcode",1);
-
-#$ GenerateDep("\$(GENERATED_SRC)/tclscanner.cpp","tclscanner.l");
-#$ GenerateLex("tclscanner",1);
-
-#$ GenerateDep("\$(GENERATED_SRC)/pre.cpp","pre.l");
-#$ GenerateLex("pre",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/declinfo.cpp","declinfo.l");
-#$ GenerateLex("declinfo",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/defargs.cpp","defargs.l");
-#$ GenerateLex("defargs",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/doctokenizer.cpp","doctokenizer.l");
-#$ GenerateLex("doctokenizer",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/commentcnv.cpp","commentcnv.l");
-#$ GenerateLex("commentcnv",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/commentscan.cpp","commentscan.l");
-#$ GenerateLex("commentscan",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/constexp.cpp","constexp.l","\$(GENERATED_SRC)/ce_parse.h");
-#$ GenerateLex("constexp",0);
-
-#$ GenerateDep("\$(GENERATED_SRC)/ce_parse.cpp","constexp.y");
-	$(YACC) -l -p constexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.cpp 
-
-#$ GenerateDep("\$(GENERATED_SRC)/ce_parse.h","constexp.y");
-	$(YACC) -l -d -p ce_parsexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.c 
-	-rm $(GENERATED_SRC)/ce_parse.c
-
-
-
-TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
-
-#$ GenerateDep("layout.cpp","\$(GENERATED_SRC)/layout_default.xml.h");
-
-#$ GenerateDep("cite.cpp","\$(GENERATED_SRC)/doxygen.bst.h","\$(GENERATED_SRC)/bib2xhtml.pl.h");
-
-#$ GenerateDep("ftvhelp.cpp","\$(GENERATED_SRC)/navtree.js.h","\$(GENERATED_SRC)/resize.js.h","\$(GENERATED_SRC)/navtree.css.h");
-
-#$ GenerateDep("htmlgen.cpp","\$(GENERATED_SRC)/header.html.h","\$(GENERATED_SRC)/footer.html.h","\$(GENERATED_SRC)/doxygen.css.h","\$(GENERATED_SRC)/search_functions.php.h","\$(GENERATED_SRC)/search_opensearch.php.h","\$(GENERATED_SRC)/search.css.h","\$(GENERATED_SRC)/jquery_p1.js.h","\$(GENERATED_SRC)/jquery_p2.js.h","\$(GENERATED_SRC)/jquery_p3.js.h","\$(GENERATED_SRC)/jquery_ui.js.h","\$(GENERATED_SRC)/jquery_fx.js.h","\$(GENERATED_SRC)/jquery_pt.js.h","\$(GENERATED_SRC)/svgpan.js.h" [...]
-
-#$ GenerateDep("xmlgen.cpp","\$(GENERATED_SRC)/index.xsd.h","\$(GENERATED_SRC)/compound.xsd.h");
-
-#$ GenerateDep("latexgen.cpp","\$(GENERATED_SRC)/doxygen.sty.h");
-
-#$ GenerateDep("searchindex.cpp","\$(GENERATED_SRC)/search.js.h");
-
-$(GENERATED_SRC)/index.xsd.h: index.xsd
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/compound.xsd.h: compound.xsd
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/layout_default.xml.h: layout_default.xml
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/header.html.h: header.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/footer.html.h: footer.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_functions.php.h: search_functions.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_opensearch.php.h: search_opensearch.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.js.h: search.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.css.h: search.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/extsearch.js.h: extsearch.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.css.h: doxygen.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.sty.h: doxygen.sty
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.js.h: navtree.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/resize.js.h: resize.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p1.js.h: jquery_p1.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p2.js.h: jquery_p2.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p3.js.h: jquery_p3.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_ui.js.h: jquery_ui.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_fx.js.h: jquery_fx.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_pt.js.h: jquery_pt.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.css.h: navtree.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/svgpan.js.h: svgpan.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/dynsections.js.h: dynsections.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.bst.h: doxygen.bst
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/bib2xhtml.pl.h: bib2xhtml.pl
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/version.cpp: ../configure
-	$(PYTHON) version.py $(GENERATED_SRC)
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 314e94c..1d242d0 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -111,98 +111,16 @@ sub GenerateLex {
 	$(YACC) -l -d -p ce_parsexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.c 
 	-rm $(GENERATED_SRC)/ce_parse.c
 
-
-
-TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
-
 #$ GenerateDep("layout.cpp","\$(GENERATED_SRC)/layout_default.xml.h");
 
-#$ GenerateDep("cite.cpp","\$(GENERATED_SRC)/doxygen.bst.h","\$(GENERATED_SRC)/bib2xhtml.pl.h");
-
-#$ GenerateDep("ftvhelp.cpp","\$(GENERATED_SRC)/navtree.js.h","\$(GENERATED_SRC)/resize.js.h","\$(GENERATED_SRC)/navtree.css.h");
-
-#$ GenerateDep("htmlgen.cpp","\$(GENERATED_SRC)/header.html.h","\$(GENERATED_SRC)/footer.html.h","\$(GENERATED_SRC)/doxygen.css.h","\$(GENERATED_SRC)/search_functions.php.h","\$(GENERATED_SRC)/search_opensearch.php.h","\$(GENERATED_SRC)/search.css.h","\$(GENERATED_SRC)/jquery_p1.js.h","\$(GENERATED_SRC)/jquery_p2.js.h","\$(GENERATED_SRC)/jquery_p3.js.h","\$(GENERATED_SRC)/jquery_ui.js.h","\$(GENERATED_SRC)/jquery_fx.js.h","\$(GENERATED_SRC)/jquery_pt.js.h","\$(GENERATED_SRC)/svgpan.js.h" [...]
-
-#$ GenerateDep("xmlgen.cpp","\$(GENERATED_SRC)/index.xsd.h","\$(GENERATED_SRC)/compound.xsd.h");
-
-#$ GenerateDep("latexgen.cpp","\$(GENERATED_SRC)/doxygen.sty.h");
-
-#$ GenerateDep("searchindex.cpp","\$(GENERATED_SRC)/search.js.h");
-
-$(GENERATED_SRC)/index.xsd.h: index.xsd
-	$(TO_C_CMD)
+$(GENERATED_SRC)/version.cpp: ../configure
+	$(PYTHON) version.py $(GENERATED_SRC)
 
-$(GENERATED_SRC)/compound.xsd.h: compound.xsd
-	$(TO_C_CMD)
+TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
 
 $(GENERATED_SRC)/layout_default.xml.h: layout_default.xml
 	$(TO_C_CMD)
 
-$(GENERATED_SRC)/header.html.h: header.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/footer.html.h: footer.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_functions.php.h: search_functions.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_opensearch.php.h: search_opensearch.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.js.h: search.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.css.h: search.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/extsearch.js.h: extsearch.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.css.h: doxygen.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.sty.h: doxygen.sty
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.js.h: navtree.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/resize.js.h: resize.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p1.js.h: jquery_p1.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p2.js.h: jquery_p2.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p3.js.h: jquery_p3.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_ui.js.h: jquery_ui.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_fx.js.h: jquery_fx.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_pt.js.h: jquery_pt.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.css.h: navtree.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/svgpan.js.h: svgpan.js
-	$(TO_C_CMD)
+../generated_src/doxygen/resources.cpp: res2cc_cmd.py $(wildcard ../templates/html/*) $(wildcard ../templates/xml) $(wildcard ../templates/latex)
+	$(PYTHON) res2cc_cmd.py ../templates ../generated_src/doxygen/resources.cpp
 
-$(GENERATED_SRC)/dynsections.js.h: dynsections.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.bst.h: doxygen.bst
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/bib2xhtml.pl.h: bib2xhtml.pl
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/version.cpp: ../configure
-	$(PYTHON) version.py $(GENERATED_SRC)
diff --git a/src/lodepng.cpp b/src/lodepng.cpp
index b237d5a..084f1c8 100644
--- a/src/lodepng.cpp
+++ b/src/lodepng.cpp
@@ -1406,7 +1406,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
     for(i = 0; i < numcodes; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codes, (unsigned)i));
     for(i = 0; i < numcodesD; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codesD, (unsigned)i));
     
-    /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeroes), 18 (11-138 zeroes)*/
+    /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeros), 18 (11-138 zeros)*/
     for(i = 0; i < (unsigned)lldll.size; i++)
     {
       unsigned j = 0;
@@ -2547,7 +2547,7 @@ unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_In
   return 0;
 }
 
-/*Paeth predicter, used by PNG filter type 4*/
+/*Path predictor, used by PNG filter type 4*/
 static int paethPredictor(int a, int b, int c)
 {
   int p = a + b - c;
@@ -2795,7 +2795,7 @@ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, cons
 {
   /*
   This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. Steps:
-  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+  *) if no Adam7: 1) unfilter 2) remove padding bits (= possible extra bits per scanline if bpp < 8)
   *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
   NOTE: the in buffer will be overwritten with intermediate data!
   */
@@ -3535,20 +3535,11 @@ static void filterScanline(unsigned char* out, const unsigned char* scanline, co
   switch(filterType)
   {
     case 0:
-      if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i];
-      else         for(i = 0; i < length; i++) out[i] = scanline[i];
+      for(i = 0; i < length; i++) out[i] = scanline[i];
       break;
     case 1:
-      if(prevline)
-      {
-        for(i =         0; i < bytewidth; i++) out[i] = scanline[i];
-        for(i = bytewidth; i < length   ; i++) out[i] = scanline[i] - scanline[i - bytewidth];
-      }
-      else
-      {
-        for(i =         0; i < bytewidth; i++) out[i] = scanline[i];
-        for(i = bytewidth; i <    length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
-      }
+      for(i =         0; i < bytewidth; i++) out[i] = scanline[i];
+      for(i = bytewidth; i <    length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
       break;
     case 2:
       if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i];
@@ -3772,7 +3763,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
 {
   /*
   This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
-  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+  *) if no Adam7: 1) add padding bits (= possible extra bits per scanline if bpp < 8) 2) filter
   *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
   */
   unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color);
@@ -3800,7 +3791,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
         }
         ucvector_cleanup(&padded);
       }
-      else error = filter(*out, in, w, h, &infoPng->color); /*we can immediatly filter into the out buffer, no other steps needed*/
+      else error = filter(*out, in, w, h, &infoPng->color); /*we can immediately filter into the out buffer, no other steps needed*/
     }
   }
   else /*interlaceMethod is 1 (Adam7)*/
@@ -4134,9 +4125,12 @@ unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* file
   rewind(file);
   
   /*read contents of the file into the vector*/
-  *outsize = 0;
-  *out = (unsigned char*)malloc((size_t)size);
-  if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file);
+  if (size>0)
+  {
+    *outsize = 0;
+    *out = (unsigned char*)malloc((size_t)size);
+    if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file);
+  }
 
   fclose(file);
   if(!(*out) && size) return 80; /*the above malloc failed*/
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 352ef15..b5c2d4d 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -107,7 +107,6 @@ ManGenerator::~ManGenerator()
 
 void ManGenerator::init()
 {
-  QCString ext = getExtension();
   QCString &manOutput = Config_getString("MAN_OUTPUT");
   
   QDir d(manOutput);
@@ -194,6 +193,7 @@ void ManGenerator::endTitleHead(const char *,const char *name)
   t << ".SH NAME" << endl;
   t << name << " \\- ";
   firstCol=FALSE;
+  paragraph=TRUE;
   inHeader=TRUE;
 }
 
@@ -340,7 +340,7 @@ void ManGenerator::codify(const char *str)
                     break;
         case '\n':  t << "\n"; firstCol=TRUE; col=0; break;
         case '\\':  t << "\\"; col++; break;
-        case '\"':  c = '\''; // no break!
+        case '\"':  // no break!
         default:    p=writeUtf8Char(t,p-1); firstCol=FALSE; col++; break;
       }
     }
@@ -828,10 +828,4 @@ void ManGenerator::endLabels()
 
 void ManGenerator::endHeaderSection()
 {
-  if (!firstCol) 
-  { 
-    t<< endl; firstCol=TRUE; 
-  }
 }
-
-
diff --git a/src/markdown.cpp b/src/markdown.cpp
index cc86af4..ee66127 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -132,7 +132,7 @@ static void convertStringFragment(QCString &result,const char *data,int size)
 {
   if (size<0) size=0;
   result.resize(size+1);
-  memcpy(result.data(),data,size);
+  memcpy(result.rawData(),data,size);
   result.at(size)='\0';
 }
 
@@ -810,7 +810,6 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
   {
     return 0;
   }
-  static QRegExp re("^[@\\]ref ");
   if (isToc) // special case for [TOC]
   {
     if (g_current) g_current->stat=TRUE;
@@ -1540,7 +1539,7 @@ static bool isTableBlock(const char *data,int size)
 
   i+=ret; // goto next line
   int cc2;
-  ret = findTableColumns(data+i,size-i,start,end,cc2);
+  findTableColumns(data+i,size-i,start,end,cc2);
 
   //printf("isTableBlock: %d\n",cc1==cc2);
   return cc1==cc2;
@@ -2374,8 +2373,8 @@ void MarkdownFileParser::parseInput(const char *fileName,
   bool markdownEnabled = Doxygen::markdownSupport;
   Doxygen::markdownSupport = TRUE;
 
-  bool needsEntry;
-  Protection prot;
+  bool needsEntry = FALSE;
+  Protection prot=Public;
   while (parseCommentBlock(
         this,
         current,
diff --git a/src/marshal.cpp b/src/marshal.cpp
index 04f426d..af14978 100644
--- a/src/marshal.cpp
+++ b/src/marshal.cpp
@@ -456,7 +456,7 @@ QCString unmarshalQCString(StorageIntf *s)
   result.at(len)='\0';
   if (len>0)
   {
-    s->read(result.data(),len);
+    s->read(result.rawData(),len);
   }
   //printf("unmarshalQCString: result=%s\n",result.data());
   return result;
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index a25528a..9198960 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -118,8 +118,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
 //   ol.endMemberDoc(hasArgs=FALSE);
 //
 
-static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
-                                 const QCString & /*scopeName*/,MemberDef *md)
+static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md)
 {
   ArgumentList *defArgList=(md->isDocsForDefinition()) ?
                              md->argumentList() : md->declArgumentList();
@@ -182,9 +181,9 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
   //printf("===> name=%s isDefine=%d\n",md->name().data(),md->isDefine());
 
   QCString cName;
-  if (cd)
+  if (scope)
   {
-    cName=cd->name();
+    cName=scope->name();
     int il=cName.find('<');
     int ir=cName.findRev('>');
     if (il!=-1 && ir!=-1 && ir>il)
@@ -192,9 +191,9 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
       cName=cName.mid(il,ir-il+1);
       //printf("1. cName=%s\n",cName.data());
     }
-    else if (cd->templateArguments())
+    else if (scope->definitionType()==Definition::TypeClass && ((ClassDef*)scope)->templateArguments())
     {
-      cName=tempArgListToString(cd->templateArguments());
+      cName=tempArgListToString(((ClassDef*)scope)->templateArguments(),scope->getLanguage());
       //printf("2. cName=%s\n",cName.data());
     }
     else // no template specifier
@@ -238,8 +237,8 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
       QCString n=a->type.left(vp);
       if (hasFuncPtrType) n=a->type.left(wp);
       if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
-      if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
-      linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n);
+      if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
+      linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
     }
     else // non-function pointer type
     {
@@ -247,8 +246,8 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
       if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
       if (a->type!="...")
       {
-        if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
-        linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n);
+        if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
+        linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
       }
     }
     if (!isDefine)
@@ -270,8 +269,11 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
       //{
       //  ol.docify(" ");
       //}
-      ol.disable(OutputGenerator::Man);
       ol.disable(OutputGenerator::Latex);
+      ol.disable(OutputGenerator::Html);
+      ol.docify(" "); /* man page */
+      if (htmlOn) ol.enable(OutputGenerator::Html);
+      ol.disable(OutputGenerator::Man);
       ol.startEmphasis();
       ol.enable(OutputGenerator::Man);
       if (latexOn) ol.enable(OutputGenerator::Latex);
@@ -289,17 +291,17 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     if (hasFuncPtrType) // write the part of the argument type
                         // that comes after the name
     {
-      linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),
+      linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),
                   md,a->type.right(a->type.length()-vp));
     }
     if (!a->defval.isEmpty()) // write the default value
     {
       QCString n=a->defval;
-      if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
+      if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
       ol.docify(" = ");
 
       ol.startTypewriter();
-      linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n,FALSE,TRUE,TRUE);
+      linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n,FALSE,TRUE,TRUE);
       ol.endTypewriter();
 
     }
@@ -358,7 +360,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
   if (!defArgList->trailingReturnType.isEmpty())
   {
     linkifyText(TextGeneratorOLImpl(ol), // out
-                cd,                      // scope
+                scope,                   // scope
                 md->getBodyDef(),        // fileScope
                 md,                      // self
                 defArgList->trailingReturnType, // text
@@ -573,8 +575,6 @@ class MemberDefImpl
                               // FALSE => block is put before declaration.
     ClassDef *category;
     MemberDef *categoryRelation;
-
-    unsigned tagDataWritten;
 };
 
 MemberDefImpl::MemberDefImpl() :
@@ -704,7 +704,6 @@ void MemberDefImpl::init(Definition *def,
   hasDocumentedReturnType = FALSE;
   docProvider = 0;
   isDMember = def->getDefFileName().right(2).lower()==".d";
-  tagDataWritten = 0; // save separate written status for file, group, class, etc.
 }
 
 
@@ -738,7 +737,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
                      const char *t,const char *na,const char *a,const char *e,
                      Protection p,Specifier v,bool s,Relationship r,MemberType mt,
                      const ArgumentList *tal,const ArgumentList *al
-                    ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na))
+                    ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na)), visited(FALSE)
 {
   //printf("MemberDef::MemberDef(%s)\n",na);
   m_impl = new MemberDefImpl;
@@ -748,7 +747,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
   m_isDestructorCached  = 0;
 }
 
-MemberDef::MemberDef(const MemberDef &md) : Definition(md)
+MemberDef::MemberDef(const MemberDef &md) : Definition(md), visited(FALSE)
 {
   m_impl = new MemberDefImpl;
   m_isLinkableCached    = 0;
@@ -1410,8 +1409,7 @@ QCString MemberDef::getDeclType() const
 
 void MemberDef::writeDeclaration(OutputList &ol,
                ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-               bool inGroup, const DefType compoundType,
-               ClassDef *inheritedFrom,const char *inheritId)
+               bool inGroup, ClassDef *inheritedFrom,const char *inheritId)
 {
   //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
 
@@ -1423,7 +1421,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
   ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
   if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
 
-  _writeTagData(compoundType);
+  //_writeTagData(compoundType);
   _addToSearchIndex();
 
   QCString cname  = d->name();
@@ -1531,9 +1529,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
                     getBodyDef(),            // fileScope
                     this,                    // self
                     ltype.left(i),           // text
-                    TRUE                     // autoBreak
+                    FALSE                    // autoBreak
                    );
-        getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType);
+        getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd);
         //ol+=*getAnonymousEnumType()->enumDecl();
         linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,this,ltype.right(ltype.length()-i-l),TRUE);
       }
@@ -1545,7 +1543,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
                     getBodyDef(),            // fileScope
                     this,                    // self
                     ltype,                   // text
-                    TRUE                     // autoBreak
+                    FALSE                    // autoBreak
                    );
       }
     }
@@ -1566,7 +1564,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
                 getBodyDef(),            // fileScope
                 this,                    // self
                 ltype,                   // text
-                TRUE                     // autoBreak
+                FALSE                    // autoBreak
                );
   }
   bool htmlOn = ol.isEnabled(OutputGenerator::Html);
@@ -1666,12 +1664,16 @@ void MemberDef::writeDeclaration(OutputList &ol,
   // *** write arguments
   if (argsString() && !isObjCMethod())
   {
-    if (!isDefine()) ol.writeString(" ");
+    if (!isDefine() && !isTypedef()) ol.writeString(" ");
     linkifyText(TextGeneratorOLImpl(ol), // out
                 d,                       // scope
                 getBodyDef(),            // fileScope
                 this,                    // self
-                argsString(),            // text
+                isDefine() ?
+                   (const char*)substitute(argsString(),",",", ") :
+                isTypedef() ?
+                   (const char*)substitute(argsString(),")(",") (") :
+                   argsString(),         // text
                 m_impl->annMemb,         // autoBreak
                 TRUE,                    // external
                 FALSE,                   // keepSpaces
@@ -2551,7 +2553,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
 
   QCString cname   = container->name();
   QCString cfname  = getOutputFileBase();
-  QCString cfiname = container->getOutputFileBase();
 
   // get member name
   QCString doxyName=name();
@@ -2611,7 +2612,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
         ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
         ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline);
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i));
-        vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),definitionType());
+        vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef());
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l));
 
         found=TRUE;
@@ -2646,6 +2647,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     ol.startMemberDoc(ciname,name(),memAnchor,title,showInline);
 
     ClassDef *cd=getClassDef();
+    NamespaceDef *nd=getNamespaceDef();
     if (!Config_getBool("HIDE_SCOPE_NAMES"))
     {
       bool first=TRUE;
@@ -2756,7 +2758,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
                   this,
                   substitute(ldef,"::",sep)
                  );
-      hasParameterList=writeDefArgumentList(ol,cd,scopeName,this);
+      Definition *scope = cd;
+      if (scope==0) scope = nd;
+      hasParameterList=writeDefArgumentList(ol,scope,this);
     }
 
     if (hasOneLineInitializer()) // add initializer
@@ -3207,9 +3211,9 @@ void MemberDef::warnIfUndocumented()
   static bool extractAll = Config_getBool("EXTRACT_ALL");
 
   //printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d "
-  //       "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
+  //       "isDocumentedFriendClass()=%d name()=%s prot=%d isReference=%d\n",
   //       d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
-  //       name().data(),prot);
+  //       name().data(),m_impl->prot,isReference());
   if ((!hasUserDocumentation() && !extractAll) &&
       !isFriendClass() &&
       name().find('@')==-1 && d && d->name().find('@')==-1 &&
@@ -3326,7 +3330,7 @@ void MemberDef::setAnchor()
   QCString sigStr(33);
   MD5Buffer((const unsigned char *)memAnchor.data(),memAnchor.length(),md5_sig);
   //printf("memAnchor=%s\n",memAnchor.data());
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   m_impl->anc = "a"+sigStr;
 }
 
@@ -3504,7 +3508,7 @@ void MemberDef::addListReference(Definition *)
     addRefItem(xrefItems,
         qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
         memLabel,
-        getOutputFileBase()+"#"+anchor(),memName,memArgs);
+        getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
   }
 }
 
@@ -3547,89 +3551,83 @@ Specifier MemberDef::virtualness(int count) const
   return v;
 }
 
-void MemberDef::_writeTagData(const DefType compoundType)
+void MemberDef::writeTagFile(FTextStream &tagFile)
 {
-  unsigned typeMask = 1 << compoundType;
-  if ((m_impl->tagDataWritten) & typeMask) return; // member already written for this type
-  if (m_impl->mtype==MemberType_EnumValue && m_impl->enumScope &&
-      m_impl->enumScope->isStrong()) return; // enum value is part of enum
-  static bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty();
-  // write tag file information of this member
-  if (generateTagFile && isLinkableInProject())
+  if (!isLinkableInProject()) return;
+  tagFile << "    <member kind=\"";
+  switch (m_impl->mtype)
   {
-    Doxygen::tagFile << "    <member kind=\"";
-    switch (m_impl->mtype)
-    {
-      case MemberType_Define:      Doxygen::tagFile << "define";      break;
-      case MemberType_EnumValue:   Doxygen::tagFile << "enumvalue";   break;
-      case MemberType_Property:    Doxygen::tagFile << "property";    break;
-      case MemberType_Event:       Doxygen::tagFile << "event";       break;
-      case MemberType_Variable:    Doxygen::tagFile << "variable";    break;
-      case MemberType_Typedef:     Doxygen::tagFile << "typedef";     break;
-      case MemberType_Enumeration: Doxygen::tagFile << "enumeration"; break;
-      case MemberType_Function:    Doxygen::tagFile << "function";    break;
-      case MemberType_Signal:      Doxygen::tagFile << "signal";      break;
-      case MemberType_Friend:      Doxygen::tagFile << "friend";      break;
-      case MemberType_DCOP:        Doxygen::tagFile << "dcop";        break;
-      case MemberType_Slot:        Doxygen::tagFile << "slot";        break;
-      case MemberType_Interface:   Doxygen::tagFile << "interface";   break;
-      case MemberType_Service:     Doxygen::tagFile << "service";     break;
-    }
-    if (m_impl->prot!=Public)
-    {
-      Doxygen::tagFile << "\" protection=\"";
-      if (m_impl->prot==Protected)    Doxygen::tagFile << "protected";
-      else if (m_impl->prot==Package) Doxygen::tagFile << "package";
-      else /* Private */              Doxygen::tagFile << "private";
-    }
-    if (m_impl->virt!=Normal)
-    {
-      Doxygen::tagFile << "\" virtualness=\"";
-      if (m_impl->virt==Virtual) Doxygen::tagFile << "virtual";
-      else /* Pure */            Doxygen::tagFile << "pure";
-    }
-    if (isStatic())
-    {
-      Doxygen::tagFile << "\" static=\"yes";
-    }
-    Doxygen::tagFile << "\">" << endl;
-    Doxygen::tagFile << "      <type>" << convertToXML(typeString()) << "</type>" << endl;
-    Doxygen::tagFile << "      <name>" << convertToXML(name()) << "</name>" << endl;
-    Doxygen::tagFile << "      <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
-    Doxygen::tagFile << "      <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
-    QCString idStr = id();
-    if (!idStr.isEmpty())
-    {
-      Doxygen::tagFile << "      <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
-    }
-    Doxygen::tagFile << "      <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
-    if (isStrong())
+    case MemberType_Define:      tagFile << "define";      break;
+    case MemberType_EnumValue:   tagFile << "enumvalue";   break;
+    case MemberType_Property:    tagFile << "property";    break;
+    case MemberType_Event:       tagFile << "event";       break;
+    case MemberType_Variable:    tagFile << "variable";    break;
+    case MemberType_Typedef:     tagFile << "typedef";     break;
+    case MemberType_Enumeration: tagFile << "enumeration"; break;
+    case MemberType_Function:    tagFile << "function";    break;
+    case MemberType_Signal:      tagFile << "signal";      break;
+    case MemberType_Friend:      tagFile << "friend";      break;
+    case MemberType_DCOP:        tagFile << "dcop";        break;
+    case MemberType_Slot:        tagFile << "slot";        break;
+    case MemberType_Interface:   tagFile << "interface";   break;
+    case MemberType_Service:     tagFile << "service";     break;
+  }
+  if (m_impl->prot!=Public)
+  {
+    tagFile << "\" protection=\"";
+    if (m_impl->prot==Protected)    tagFile << "protected";
+    else if (m_impl->prot==Package) tagFile << "package";
+    else /* Private */              tagFile << "private";
+  }
+  if (m_impl->virt!=Normal)
+  {
+    tagFile << "\" virtualness=\"";
+    if (m_impl->virt==Virtual) tagFile << "virtual";
+    else /* Pure */            tagFile << "pure";
+  }
+  if (isStatic())
+  {
+    tagFile << "\" static=\"yes";
+  }
+  tagFile << "\">" << endl;
+  if (typeString()!=QCString("@"))
+  {
+    tagFile << "      <type>" << convertToXML(typeString()) << "</type>" << endl;
+  }
+  tagFile << "      <name>" << convertToXML(name()) << "</name>" << endl;
+  tagFile << "      <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
+  tagFile << "      <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
+  QCString idStr = id();
+  if (!idStr.isEmpty())
+  {
+    tagFile << "      <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+  }
+  tagFile << "      <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
+  if (isStrong())
+  {
+    MemberList *fmdl=m_impl->enumFields;
+    if (fmdl)
     {
-      MemberList *fmdl=m_impl->enumFields;
-      if (fmdl)
+      MemberListIterator mli(*fmdl);
+      MemberDef *fmd;
+      for (mli.toFirst();(fmd=mli.current());++mli)
       {
-        MemberListIterator mli(*fmdl);
-        MemberDef *fmd;
-        for (mli.toFirst();(fmd=mli.current());++mli)
+        if (!fmd->isReference())
         {
-          if (!fmd->isReference())
+          tagFile << "      <enumvalue file=\"" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension);
+          tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
+          QCString idStr = fmd->id();
+          if (!idStr.isEmpty())
           {
-            Doxygen::tagFile << "      <enumvalue file=\"" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension);
-            Doxygen::tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
-            QCString idStr = fmd->id();
-            if (!idStr.isEmpty())
-            {
-              Doxygen::tagFile << "\" clangid=\"" << convertToXML(idStr);
-            }
-            Doxygen::tagFile  << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl;
+            tagFile << "\" clangid=\"" << convertToXML(idStr);
           }
+          tagFile  << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl;
         }
       }
     }
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "    </member>" << endl;
   }
-  m_impl->tagDataWritten |= typeMask;
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "    </member>" << endl;
 }
 
 void MemberDef::_computeIsConstructor()
@@ -3728,8 +3726,7 @@ bool MemberDef::isDestructor() const
 }
 
 void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
-     ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-     const DefType compoundType)
+     ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
 {
   int enumMemCount=0;
 
@@ -3756,7 +3753,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
   {
     if (isLinkableInProject() || hasDocumentedEnumValues())
     {
-      _writeTagData(compoundType);
+      //_writeTagData(compoundType);
       _addToSearchIndex();
       writeLink(typeDecl,cd,nd,fd,gd);
     }
@@ -3784,7 +3781,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
     {
       MemberListIterator mli(*fmdl);
       MemberDef *fmd=mli.current();
-      bool fmdVisible = fmd->isBriefSectionVisible();
+      bool fmdVisible = fmd ? fmd->isBriefSectionVisible() : TRUE;
       while (fmd)
       {
         if (fmdVisible)
@@ -3805,7 +3802,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
 
           if (fmd->hasDocumentation()) // enum value has docs
           {
-            fmd->_writeTagData(compoundType);
+            //fmd->_writeTagData(compoundType);
             fmd->_addToSearchIndex();
             fmd->writeLink(typeDecl,cd,nd,fd,gd);
           }
@@ -5096,3 +5093,9 @@ bool MemberDef::isRelatedOrFriend() const
   return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
 }
 
+bool MemberDef::isReference() const
+{
+  return Definition::isReference() ||
+         (m_impl->templateMaster && m_impl->templateMaster->isReference());
+}
+
diff --git a/src/memberdef.h b/src/memberdef.h
index 4f6028a..b68149f 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -263,6 +263,7 @@ class MemberDef : public Definition
     QCString documentation() const;
     QCString briefDescription(bool abbr=FALSE) const;
     QCString fieldType() const;
+    bool isReference() const;
 
 
     //-----------------------------------------------------------------------------------
@@ -376,16 +377,15 @@ class MemberDef : public Definition
     // output generation
     void writeDeclaration(OutputList &ol,
                    ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-                   bool inGroup, const DefType compoundType,
-                   ClassDef *inheritFrom=0,const char *inheritId=0); 
+                   bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0); 
     void writeDocumentation(MemberList *ml,OutputList &ol,
                             const char *scopeName,Definition *container,
                             bool inGroup,bool showEnumValues=FALSE,bool
                             showInline=FALSE);
     void writeMemberDocSimple(OutputList &ol,Definition *container);
     void writeEnumDeclaration(OutputList &typeDecl,
-            ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, 
-            const DefType compoundType);
+            ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
+    void writeTagFile(FTextStream &);
     void warnIfUndocumented();
     
     MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 84567e2..d073173 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -112,7 +112,7 @@ void MemberGroup::writeDeclarations(OutputList &ol,
   //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
   QCString ldoc = doc;
   if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\" id=\""+anchor()+"\"></a>");
-  memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,DefinitionIntf::TypeGroup,FALSE,showInline);
+  memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,FALSE,showInline);
 }
 
 void MemberGroup::writePlainDeclarations(OutputList &ol,
@@ -121,7 +121,7 @@ void MemberGroup::writePlainDeclarations(OutputList &ol,
               )
 {
   //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count());
-  memberList->writePlainDeclarations(ol,cd,nd,fd,gd,DefinitionIntf::TypeGroup,inheritedFrom,inheritId);
+  memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
 }
 
 void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName,
@@ -150,7 +150,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
     {
       MemberList ml(lt);
       ml.append(md);
-      ml.writePlainDeclarations(ol,cd,0,0,0,DefinitionIntf::TypeGroup,inheritedFrom,inheritId);
+      ml.writePlainDeclarations(ol,cd,0,0,0,inheritedFrom,inheritId);
     }
   }
 }
@@ -312,7 +312,7 @@ QCString MemberGroup::anchor() const
   QCString locHeader = grpHeader;
   if (locHeader.isEmpty()) locHeader="[NOHEADER]";
   MD5Buffer((const unsigned char *)locHeader.data(),locHeader.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5SigToString(md5_sig,sigStr.rawData(),33);
   return "amgrp"+sigStr;
 }
 
@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def)
         name,
         theTranslator->trGroup(TRUE,TRUE),
         name,
-        grpHeader,0);
+        grpHeader,0,def);
   }
 }
 
@@ -388,6 +388,12 @@ void MemberGroup::setRefItems(const QList<ListItemInfo> *sli)
     } 
   }
 }
+
+void MemberGroup::writeTagFile(FTextStream &tagFile)
+{
+  memberList->writeTagFile(tagFile);
+}
+
 //--------------------------------------------------------------------------
 
 void MemberGroupInfo::setRefItems(const QList<ListItemInfo> *sli)
diff --git a/src/membergroup.h b/src/membergroup.h
index 42e60c5..daf8ccb 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -33,6 +33,7 @@ class GroupDef;
 class OutputList;
 class Definition;
 class StorageIntf;
+class FTextStream;
 struct ListItemInfo;
 
 /** A class representing a group of members. */
@@ -57,11 +58,12 @@ class MemberGroup
                Definition *container,bool showEnumValues,bool showInline);
     void writeDocumentationPage(OutputList &ol,const char *scopeName,
                Definition *container);
+    void writeTagFile(FTextStream &);
     void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
                MemberListType lt,
                ClassDef *inheritedFrom,const QCString &inheritId);
 
-    QCString documentation() const { return doc; }
+    const QCString &documentation() const { return doc; }
     bool allMembersInSameSection() const { return inSameSection; }
     void addToDeclarationSection();
     int countDecMembers(GroupDef *gd=0);
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 28ed37e..95726a0 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -33,16 +33,35 @@
 #include "config.h"
 #include "docparser.h"
 
-MemberList::MemberList()
+MemberList::MemberList() : m_listType(MemberListType_pubMethods)
 {
   memberGroupList=0;
+  m_varCnt=0;
+  m_funcCnt=0;
+  m_enumCnt=0;
+  m_enumValCnt=0;
+  m_typeCnt=0;
+  m_protoCnt=0;
+  m_defCnt=0;
+  m_friendCnt=0;
   m_numDecMembers=-1; // special value indicating that value needs to be computed
   m_numDocMembers=-1; // special value indicating that value needs to be computed
+  m_inGroup=FALSE;
+  m_inFile=FALSE;
+  m_needsSorting=FALSE;
 }
 
 MemberList::MemberList(MemberListType lt) : m_listType(lt)
 {
   memberGroupList=0;
+  m_varCnt=0;
+  m_funcCnt=0;
+  m_enumCnt=0;
+  m_enumValCnt=0;
+  m_typeCnt=0;
+  m_protoCnt=0;
+  m_defCnt=0;
+  m_friendCnt=0;
   m_numDecMembers=-1; // special value indicating that value needs to be computed
   m_numDocMembers=-1; // special value indicating that value needs to be computed
   m_inGroup=FALSE;
@@ -301,8 +320,7 @@ bool MemberList::declVisible() const
 
 void MemberList::writePlainDeclarations(OutputList &ol,
                        ClassDef *cd,NamespaceDef *nd,FileDef *fd,
-                       GroupDef *gd, const DefinitionIntf::DefType compoundType,
-                       ClassDef *inheritedFrom,const char *inheritId
+                       GroupDef *gd,ClassDef *inheritedFrom,const char *inheritId
                       )
 {
   //printf("----- writePlainDeclaration() ----\n");
@@ -344,7 +362,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
         case MemberType_Event:  
           {
             if (first) ol.startMemberList(),first=FALSE;
-            md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId);
+            md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
             break;
           }
         case MemberType_Enumeration: 
@@ -386,7 +404,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
               }
               ol.writeString("enum ");
               ol.insertMemberAlign();
-              md->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType);
+              md->writeEnumDeclaration(ol,cd,nd,fd,gd);
               if (!detailsLinkable)
               {
                 ol.endDoxyAnchor(md->getOutputFileBase(),md->anchor());
@@ -431,7 +449,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
               ol.startMemberList();
               first=FALSE;
             }
-            md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId);
+            md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
             break;
           }
         case MemberType_EnumValue: 
@@ -440,7 +458,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
             {
               //printf("EnumValue!\n");
               if (first) ol.startMemberList(),first=FALSE;
-              md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId);
+              md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
             }
           }
           break;
@@ -466,7 +484,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
             ol.startMemberList();
             first=FALSE;
           }
-          md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType);
+          md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
         }
         md->setFromAnonymousScope(TRUE);
       }
@@ -490,7 +508,6 @@ void MemberList::writePlainDeclarations(OutputList &ol,
  *  @param gd non-null if this list is part of group documentation.
  *  @param title Title to use for the member list.
  *  @param subtitle Sub title to use for the member list.
- *  @param compoundType Container type for this member list.
  *  @param showEnumValues Obsolete, always set to FALSE.
  *  @param showInline if set to TRUE if title is rendered differently
  *  @param inheritedFrom if not 0, the list is shown inside the
@@ -500,8 +517,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
  */
 void MemberList::writeDeclarations(OutputList &ol,
              ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-             const char *title,const char *subtitle,
-             const DefinitionIntf::DefType compoundType,bool showEnumValues,
+             const char *title,const char *subtitle, bool showEnumValues,
              bool showInline,ClassDef *inheritedFrom,MemberListType lt)
 {
   (void)showEnumValues; // unused
@@ -587,7 +603,7 @@ void MemberList::writeDeclarations(OutputList &ol,
     }
     else
     {
-      writePlainDeclarations(ol,cd,nd,fd,gd,compoundType,inheritedFrom,inheritId);
+      writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
     }
 
     //printf("memberGroupList=%p\n",memberGroupList);
@@ -943,6 +959,31 @@ QCString MemberList::listTypeAsString(MemberListType type)
   return "";
 }
 
+void MemberList::writeTagFile(FTextStream &tagFile)
+{
+  MemberListIterator mli(*this);
+  MemberDef *md;
+  for ( ; (md=mli.current()) ; ++mli)
+  {
+    if (md->getLanguage()!=SrcLangExt_VHDL)
+    {
+      md->writeTagFile(tagFile);
+    }
+    else
+    {
+      VhdlDocGen::writeTagFile(md,tagFile);
+    }
+  }
+  if (memberGroupList)
+  {
+    MemberGroupListIterator mgli(*memberGroupList);
+    MemberGroup *mg;
+    for (;(mg=mgli.current());++mgli)
+    {
+      mg->writeTagFile(tagFile);
+    }
+  }
+}
 
 //--------------------------------------------------------------------------
 
diff --git a/src/memberlist.h b/src/memberlist.h
index 607eb01..4cccadc 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -55,12 +55,11 @@ class MemberList : public QList<MemberDef>
     void countDocMembers(bool countEnumValues=FALSE);
     int countInheritableMembers(ClassDef *inheritedFrom) const;
     void writePlainDeclarations(OutputList &ol,
-               ClassDef *cd,NamespaceDef *nd,FileDef *fd,
-               GroupDef *gd,const DefinitionIntf::DefType compoundType,
+               ClassDef *cd,NamespaceDef *nd,FileDef *fd, GroupDef *gd,
                ClassDef *inheritedFrom,const char *inheritId);
     void writeDeclarations(OutputList &ol,
                ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-               const char *title,const char *subtitle,const DefinitionIntf::DefType compoundType,
+               const char *title,const char *subtitle,
                bool showEnumValues=FALSE,bool showInline=FALSE,
                ClassDef *inheritedFrom=0,MemberListType lt=MemberListType_pubMethods);
     void writeDocumentation(OutputList &ol,const char *scopeName,
@@ -68,6 +67,7 @@ class MemberList : public QList<MemberDef>
     void writeSimpleDocumentation(OutputList &ol,Definition *container);
     void writeDocumentationPage(OutputList &ol,
                const char *scopeName, Definition *container);
+    void writeTagFile(FTextStream &);
     bool declVisible() const;
     void addMemberGroup(MemberGroup *mg);
     void setInGroup(bool inGroup) { m_inGroup=inGroup; }
diff --git a/src/message.cpp b/src/message.cpp
index 11b4502..4156720 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -152,15 +152,16 @@ static void format_warn(const char *file,int line,const char *text)
 static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args)
 {
   if (!Config_getBool(tag)) return; // warning type disabled
-  char text[40960];
+  const int bufSize = 40960;
+  char text[bufSize];
   int l=0;
   if (prefix)
   {
-    strcpy(text,prefix);
+    qstrncpy(text,prefix,bufSize);
     l=strlen(prefix);
   }
-  vsnprintf(text+l, 40960-l, fmt, args);
-  text[40960-1]='\0';
+  vsnprintf(text+l, bufSize-l, fmt, args);
+  text[bufSize-1]='\0';
   format_warn(file,line,text);
 }
 
diff --git a/src/msc.cpp b/src/msc.cpp
index ebbba0f..3dd8841 100644
--- a/src/msc.cpp
+++ b/src/msc.cpp
@@ -74,6 +74,7 @@ static bool convertMapFile(FTextStream &t,const char *mapName,const QCString rel
         t << externalRef(relPath,df->ref(),TRUE);
         if (!df->file().isEmpty()) t << df->file() << Doxygen::htmlFileExtension;
         if (!df->anchor().isEmpty()) t << "#" << df->anchor();
+        delete df;
       }
       else
       {
@@ -168,7 +169,6 @@ QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir,
   QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension();
   QCString mscArgs = "-T ismap -i \"";
   mscArgs+=inFile;
-  QFileInfo fi(inFile);
   mscArgs+="\" -o \"";
   mscArgs+=outFile + "\"";
 
@@ -200,7 +200,6 @@ void writeMscImageMapFromFile(FTextStream &t,const QCString &inFile,
  			    )
 {
   QCString mapName = baseName+".map";
-  QCString mapFile = inFile+".map";
   t << "<img src=\"" << relPath << baseName << ".";
   switch (format)
   {
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 2aa5728..f7c8123 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -259,6 +259,85 @@ bool NamespaceDef::hasDetailedDescription() const
           !documentation().isEmpty());
 }
 
+void NamespaceDef::writeTagFile(FTextStream &tagFile)
+{
+  tagFile << "  <compound kind=\"namespace\">" << endl;
+  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
+  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
+  QCString idStr = id();
+  if (!idStr.isEmpty())
+  {
+    tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+  }
+  QListIterator<LayoutDocEntry> eli(
+      LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
+  LayoutDocEntry *lde;
+  for (eli.toFirst();(lde=eli.current());++eli)
+  {
+    switch (lde->kind())
+    {
+      case LayoutDocEntry::NamespaceNestedNamespaces:
+        {
+          if (namespaceSDict)
+          {
+            SDict<NamespaceDef>::Iterator ni(*namespaceSDict);
+            NamespaceDef *nd;
+            for (ni.toFirst();(nd=ni.current());++ni)
+            {
+              if (nd->isLinkableInProject())
+              {
+                tagFile << "    <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
+              }
+            }
+          }
+        }
+        break;
+      case LayoutDocEntry::NamespaceClasses:
+        {
+          if (classSDict)
+          {
+            SDict<ClassDef>::Iterator ci(*classSDict);
+            ClassDef *cd;
+            for (ci.toFirst();(cd=ci.current());++ci)
+            {
+              if (cd->isLinkableInProject())
+              {
+                tagFile << "    <class kind=\"" << cd->compoundTypeString()
+                        << "\">" << convertToXML(cd->name()) << "</class>" << endl;
+              }
+            }
+          }
+        }
+      case LayoutDocEntry::MemberDecl:
+        {
+          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+          MemberList * ml = getMemberList(lmd->type);
+          if (ml)
+          {
+            ml->writeTagFile(tagFile);
+          }
+        }
+        break;
+      case LayoutDocEntry::MemberGroups:
+        {
+          if (memberGroupSDict)
+          {
+            MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+            MemberGroup *mg;
+            for (;(mg=mgli.current());++mgli)
+            {
+              mg->writeTagFile(tagFile);
+            }
+          }
+        }
+        break;
+      default:
+        break;
+    }
+  }
+  writeDocAnchorsToTagFile(tagFile);
+  tagFile << "  </compound>" << endl;
+}
 
 void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
 {
@@ -496,19 +575,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
     Doxygen::searchIndex->addWord(localName(),TRUE);
   }
 
-  bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty();
-  if (generateTagFile)
-  {
-    Doxygen::tagFile << "  <compound kind=\"namespace\">" << endl;
-    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
-    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
-    QCString idStr = id();
-    if (!idStr.isEmpty())
-    {
-      Doxygen::tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
-    }
-  }
-
   Doxygen::indexList->addIndexItem(this,0);
 
   //---------------------------------------- start flexible part -------------------------------
@@ -619,12 +685,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
 
   endFileWithNavPath(this,ol);
 
-  if (generateTagFile)
-  {
-    writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "  </compound>" << endl;
-  }
-
   if (Config_getBool("SEPARATE_MEMBER_PAGES"))
   {
     MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
@@ -772,7 +832,8 @@ void NamespaceDef::addListReferences()
           theTranslator->trModule(TRUE,TRUE) : 
           theTranslator->trNamespace(TRUE,TRUE),
         getOutputFileBase(),displayName(),
-        0
+        0,
+        this
         );
   }
   MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -939,10 +1000,6 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
         name = nd->displayName();
       }
       ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
-      if (!Config_getString("GENERATE_TAGFILE").isEmpty() && nd->isLinkableInProject()) 
-      {
-        Doxygen::tagFile << "    <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
-      }
       ol.endMemberItem();
       if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
@@ -1031,7 +1088,7 @@ MemberList *NamespaceDef::getMemberList(MemberListType lt) const
 void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
 {
   MemberList * ml = getMemberList(lt);
-  if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0,DefinitionIntf::TypeNamespace);
+  if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
 }
 
 void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
diff --git a/src/namespacedef.h b/src/namespacedef.h
index ceb3bd7..800f639 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -33,6 +33,7 @@ class MemberDef;
 class NamespaceList;
 class MemberGroupSDict;
 class NamespaceSDict;
+class FTextStream;
 
 /** A model of a namespace symbol. */
 class NamespaceDef : public Definition
@@ -51,6 +52,7 @@ class NamespaceDef : public Definition
     void writeDocumentation(OutputList &ol);
     void writeMemberPages(OutputList &ol);
     void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+    void writeTagFile(FTextStream &);
 
     void insertClass(ClassDef *cd);
     void insertNamespace(NamespaceDef *nd);
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index e75327c..919a2d7 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -99,6 +99,30 @@ bool PageDef::hasParentPage() const
          getOuterScope()->definitionType()==Definition::TypePage;
 }
 
+void PageDef::writeTagFile(FTextStream &tagFile)
+{
+  bool found = name()=="citelist";
+  QDictIterator<RefList> rli(*Doxygen::xrefLists);
+  RefList *rl;
+  for (rli.toFirst();(rl=rli.current()) && !found;++rli)
+  {
+    if (rl->listName()==name())
+    {
+      found=TRUE;
+      break;
+    }
+  }
+  if (!found) // not one of the generated related pages
+  {
+    tagFile << "  <compound kind=\"page\">" << endl;
+    tagFile << "    <name>" << name() << "</name>" << endl;
+    tagFile << "    <title>" << convertToXML(title()) << "</title>" << endl;
+    tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << "</filename>" << endl;
+    writeDocAnchorsToTagFile(tagFile);
+    tagFile << "  </compound>" << endl;
+  }
+}
+
 void PageDef::writeDocumentation(OutputList &ol)
 {
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
@@ -200,30 +224,6 @@ void PageDef::writeDocumentation(OutputList &ol)
   ol.popGeneratorState();
   //1.}
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
-  {
-    bool found = name()=="citelist";
-    QDictIterator<RefList> rli(*Doxygen::xrefLists);
-    RefList *rl;
-    for (rli.toFirst();(rl=rli.current()) && !found;++rli)
-    {
-      if (rl->listName()==name())
-      {
-        found=TRUE;
-        break;
-      }
-    }
-    if (!found) // not one of the generated related pages
-    {
-      Doxygen::tagFile << "  <compound kind=\"page\">" << endl;
-      Doxygen::tagFile << "    <name>" << name() << "</name>" << endl;
-      Doxygen::tagFile << "    <title>" << convertToXML(title()) << "</title>" << endl;
-      Doxygen::tagFile << "    <filename>" << getOutputFileBase() << "</filename>" << endl;
-      writeDocAnchorsToTagFile();
-      Doxygen::tagFile << "  </compound>" << endl;
-    }
-  }
-
   Doxygen::indexList->addIndexItem(this,0,0,filterTitle(title()));
 }
 
diff --git a/src/pagedef.h b/src/pagedef.h
index 890829e..694d081 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -23,6 +23,7 @@
 
 class PageSDict;
 class OutputList;
+class FTextStream;
 
 /** @brief A model of a page symbol. */
 class PageDef : public Definition
@@ -64,6 +65,7 @@ class PageDef : public Definition
     QCString displayName(bool=TRUE) const { return !m_title.isEmpty() ? m_title : Definition::name(); }
 
     void writeDocumentation(OutputList &ol);
+    void writeTagFile(FTextStream &);
 
   private:
     void setNestingLevel(int l);
diff --git a/src/parserintf.h b/src/parserintf.h
index 019b4a9..989fdcf 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -147,6 +147,10 @@ class ParserManager
      */
     ParserManager()
       : m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
+   ~ParserManager()
+    {
+      delete m_defaultParser;
+    }
 
     void registerDefaultParser(ParserInterface *parser)
     {
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index c636cdf..c903d3d 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1371,7 +1371,6 @@ void PerlModDocVisitor::visitPost(DocParBlock *)
 
 static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const char *)
 {
-  QCString indentStr;
   if (!al)
     return;
   output.openList("template_parameters");
diff --git a/src/plantuml.cpp b/src/plantuml.cpp
index 18f028b..87e70e1 100644
--- a/src/plantuml.cpp
+++ b/src/plantuml.cpp
@@ -20,7 +20,7 @@
 
 #include <qdir.h>
 
-//static const int maxCmdLine = 40960;
+static const int maxCmdLine = 40960;
 
 QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,const QCString &content)
 {
@@ -56,7 +56,24 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp
   static QCString plantumlJarPath = Config_getString("PLANTUML_JAR_PATH");
 
   QCString pumlExe = "java";
-  QCString pumlArgs = "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" ";
+  QCString pumlArgs = "";
+
+  QStrList &pumlIncludePathList = Config_getList("PLANTUML_INCLUDE_PATH");
+  char *s=pumlIncludePathList.first();
+  if (s)
+  {
+    pumlArgs += "-Dplantuml.include.path=\"";
+    pumlArgs += s;
+    s = pumlIncludePathList.next(); 
+  }
+  while (s)
+  {
+    pumlArgs += portable_pathListSeparator();
+    pumlArgs += s;
+    s = pumlIncludePathList.next(); 
+  }
+  if (pumlIncludePathList.first()) pumlArgs += "\" ";
+  pumlArgs += "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" ";
   pumlArgs+="-o \"";
   pumlArgs+=outDir;
   pumlArgs+="\" ";
@@ -79,19 +96,31 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp
   pumlArgs+=" \"";
   pumlArgs+=baseName;
   pumlArgs+=".pu\" ";
+  pumlArgs+="-charset " + Config_getString("INPUT_ENCODING") + " ";
   int exitCode;
   //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,outFile);
   msg("Running PlantUML on generated file %s.pu\n",baseName);
   portable_sysTimerStart();
   if ((exitCode=portable_system(pumlExe,pumlArgs,FALSE))!=0)
   {
-    err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line\n",
-        plantumlJarPath.data());
+    err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line. Exit code: %d\n",
+        plantumlJarPath.data(),exitCode);
   }
   else if (Config_getBool("DOT_CLEANUP"))
   {
     QFile(QCString(baseName)+".pu").remove();
   }
   portable_sysTimerStop();
+  if ( (format==PUML_EPS) && (Config_getBool("USE_PDFLATEX")) )
+  {
+    QCString epstopdfArgs(maxCmdLine);
+    epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",baseName,baseName);
+    portable_sysTimerStart();
+    if ((exitCode=portable_system("epstopdf",epstopdfArgs))!=0)
+    {
+      err("Problems running epstopdf. Check your TeX installation! Exit code: %d\n",exitCode);
+    }
+    portable_sysTimerStop();
+  }
 }
 
diff --git a/src/portable.cpp b/src/portable.cpp
index 258c50f..ff29303 100644
--- a/src/portable.cpp
+++ b/src/portable.cpp
@@ -169,10 +169,16 @@ int portable_system(const char *command,const char *args,bool commandHasConsole)
     else if (sInfo.hProcess)      /* executable was launched, wait for it to finish */
     {
       WaitForSingleObject(sInfo.hProcess,INFINITE); 
+      /* get process exit code */
+      DWORD exitCode;
+      if (!GetExitCodeProcess(sInfo.hProcess,&exitCode))
+      {
+        exitCode = -1;
+      }
       CloseHandle(sInfo.hProcess);
+      return exitCode;
     }
   }
-  return 0;
 #endif
 
 }
@@ -188,7 +194,10 @@ uint portable_pid()
   return pid;
 }
 
-static char **last_environ;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#else
+  static char **last_environ;
+#endif
 
 void portable_setenv(const char *name,const char *value)
 {
diff --git a/src/pre.l b/src/pre.l
index c3eeb2a..9e88b0d 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -71,8 +71,8 @@ struct CondCtx
 
 struct FileState
 {
-  FileState(int size) : fileBuf(size), 
-                        oldFileBuf(0), oldFileBufPos(0) {}
+  FileState(int size) : lineNr(1), fileBuf(size),
+                        oldFileBuf(0), oldFileBufPos(0), bufState(0) {}
   int lineNr;
   BufStr fileBuf;
   BufStr *oldFileBuf;
@@ -207,6 +207,7 @@ class DefineManager
       if (dpf==0)
       {
 	dpf = new DefinesPerFile;
+	m_fileMap.insert(fileName,dpf);
       }
       dpf->addDefine(def);
     }
@@ -223,6 +224,7 @@ class DefineManager
       if (dpf==0)
       {
 	dpf = new DefinesPerFile;
+	m_fileMap.insert(fromFileName,dpf);
       }
       dpf->addInclude(toFileName);
     }
@@ -2283,6 +2285,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					}
 <DefName>{ID}/("\\\n")*"("		{ // define with argument
   					  //printf("Define() `%s'\n",yytext);
+					  delete g_argDict;
 					  g_argDict = new QDict<int>(31);
 					  g_argDict->setAutoDelete(TRUE);
 					  g_defArgs = 0; 
@@ -2296,7 +2299,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					}
 <DefName>{ID}{B}+"1"/[ \r\t\n]		{ // special case: define with 1 -> can be "guard"
   					  //printf("Define `%s'\n",yytext);
-  					  g_argDict = 0;
+					  delete g_argDict; g_argDict=0;
 					  g_defArgs = -1;
                                           g_defArgsStr.resize(0);
 					  g_defName = yytext;
@@ -2325,7 +2328,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_expectGuard=FALSE;
   					}
 <DefName>{ID}/{B}*"\n"			{ // empty define
-  					  g_argDict = 0;
+					  delete g_argDict; g_argDict=0;
 					  g_defArgs = -1;
 					  g_defName = yytext;
                                           g_defArgsStr.resize(0);
@@ -2354,7 +2357,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					}
 <DefName>{ID}/{B}*			{ // define with content
   					  //printf("Define `%s'\n",yytext);
-  					  g_argDict = 0;
+					  delete g_argDict; g_argDict=0;
 					  g_defArgs = -1;
                                           g_defArgsStr.resize(0);
 					  g_defText.resize(0);
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 1d384b1..43b6bde 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -483,7 +483,7 @@ class PrintDocVisitor : public DocVisitor
         case DocImage::Rtf:     printf("rtf"); break;
         case DocImage::DocBook: printf("docbook"); break;
       }
-      printf("\" width=%s height=%s>\n",img->width().data(),img->height().data());
+      printf("\" %s %s>\n",img->width().data(),img->height().data());
     }
     void visitPost(DocImage *) 
     {
diff --git a/src/pycode.l b/src/pycode.l
index 585b587..4f9e396 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -79,7 +79,6 @@ static int           g_paramParens;
 
 static bool          g_exampleBlock;
 static QCString      g_exampleName;
-static QCString      g_exampleFile;
 
 static QCString      g_type;
 static QCString      g_name;
diff --git a/src/pyscanner.l b/src/pyscanner.l
index c67875e..6b68849 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -83,7 +83,6 @@ static Specifier 	virt;
 
 static int              docBlockContext;
 static QCString         docBlock;
-static QCString         docBlockName;
 static bool             docBlockInBody;
 static bool             docBlockJavaStyle;
 static bool             docBrief;
@@ -97,7 +96,6 @@ static int              g_indent = 0;
 static int              g_curIndent = 0;
 
 static QDict<QCString>  g_packageNameCache(257);
-static QCString         g_packageScope;
 
 static char             g_atomStart;
 static char             g_atomEnd;
@@ -931,13 +929,13 @@ STARTDOCSYMS      "##"
     "="		        { // default value
                           // TODO: this rule is too simple, need to be able to
                           // match things like =")" as well!
-      			  QCString defVal=&yytext[1];
 			  g_defVal.resize(0);
 			  g_braceCount=0;
 			  BEGIN(FunctionParamDefVal);
       			}
 
      ")"                { // end of parameter list
+        		  current->args = argListToString(current->argList);
                         }
 
      ":"{B}             {
@@ -1268,6 +1266,19 @@ STARTDOCSYMS      "##"
 			  BEGIN(VariableEnd);
 			}
                       }
+    {TRIDOUBLEQUOTE}  { // start of a comment block
+                        g_specialBlock = FALSE;
+			current->program+=yytext;
+			initTriDoubleQuoteBlock();
+			BEGIN(TripleComment);
+                      }
+
+    {TRISINGLEQUOTE}  { // start of a comment block
+                        g_specialBlock = FALSE;
+			current->program+=yytext;
+			initTriSingleQuoteBlock();
+			BEGIN(TripleComment);
+                      }
    "\""	              {
        			g_stringContext=YY_START;
 			current->initializer+="\"";
diff --git a/src/qhp.cpp b/src/qhp.cpp
index 9e6cc5d..757f547 100644
--- a/src/qhp.cpp
+++ b/src/qhp.cpp
@@ -53,7 +53,7 @@ static QCString makeRef(const char * withoutExtension, const char * anchor)
   return result+"#"+anchor;
 }
 
-Qhp::Qhp() : m_prevSectionLevel(0), m_sectionLevel(0)
+Qhp::Qhp() : m_prevSectionLevel(0), m_sectionLevel(0), m_skipMainPageSection(FALSE)
 {
   m_doc.setIndentLevel(0);
   m_toc.setIndentLevel(2);
@@ -177,14 +177,13 @@ void Qhp::finalize()
 void Qhp::incContentsDepth()
 {
   m_sectionLevel++;
-  //printf("Qhp::incContentsDepth() %d->%d\n",m_sectionLevel-1,m_sectionLevel);
 }
 
 void Qhp::decContentsDepth()
 {
-  //printf("Qhp::decContentsDepth() %d->%d\n",m_sectionLevel,m_sectionLevel-1);
-  if (m_sectionLevel <= 0)
+  if (m_sectionLevel<=0 || (m_sectionLevel==1 && m_skipMainPageSection))
   {
+    m_skipMainPageSection=FALSE;
     return;
   }
   m_sectionLevel--;
@@ -208,6 +207,7 @@ void Qhp::addContentsItem(bool /*isDir*/, const char * name,
   setPrevSection(name, f, anchor, m_sectionLevel);
 
   // Close sections as needed
+  //printf("Qhp::addContentsItem() closing %d sections\n",diff);
   for (; diff > 0; diff--)
   {
     m_toc.close("section");
@@ -331,6 +331,10 @@ void Qhp::handlePrevSection()
       m_toc.openClose("section", attributes);
     }
   }
+  else
+  {
+    m_skipMainPageSection=TRUE;
+  }
 
   clearPrevSection();
 }
diff --git a/src/qhp.h b/src/qhp.h
index a428ac4..2c4e2c9 100644
--- a/src/qhp.h
+++ b/src/qhp.h
@@ -64,8 +64,7 @@ class Qhp : public IndexIntf
     int m_prevSectionLevel;
     int m_sectionLevel;
 
-    //QCString m_prevIdName;
-    //QCString m_prevIdRef;
+    bool m_skipMainPageSection;
 };
 
 #endif // DOXYGEN_QHP_H
diff --git a/src/reflist.cpp b/src/reflist.cpp
index ee6ac91..3cc7694 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -20,6 +20,7 @@
 #include "reflist.h"
 #include "util.h"
 #include "ftextstream.h"
+#include "definition.h"
 
 /*! Create a list of items that are cross referenced with documentation blocks
  *  @param listName String representing the name of the list.
@@ -144,6 +145,12 @@ void RefList::generatePage()
     doc +=  "\\anchor ";
     doc += item->listAnchor;
     doc += "\n";
+    if (item->scope)
+    {
+      doc += "\\_setscope ";
+      doc += item->scope->name();
+      doc += " ";
+    }
     doc += item->prefix;
     doc += " \\_internalref ";
     doc += item->name;
@@ -166,6 +173,7 @@ void RefList::generatePage()
     doc += "</dd>";
   }
   doc += "</dl>\n";
+  //printf("generatePage('%s')\n",doc.data());
   addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
 }
 
diff --git a/src/reflist.h b/src/reflist.h
index 97b1420..5b647ea 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -23,14 +23,17 @@
 #include <qlist.h>
 #include "sortdict.h"
 
+class Definition;
+
 /** This struct represents an item in the list of references. */
 struct RefItem
 {
-  RefItem() /*: written(FALSE)*/ {}
+  RefItem() : scope(0) {}
   QCString text;           //!< text of the item.
   QCString listAnchor;     //!< anchor in the list
 
   QCString prefix;         //!< type prefix for the name
+  Definition *scope;       //!< scope to use for references.
   QCString name;           //!< name of the entity containing the reference
   QCString title;          //!< display name of the entity
   QCString args;           //!< optional arguments for the entity (if function)
diff --git a/src/res2cc_cmd.py b/src/res2cc_cmd.py
new file mode 100755
index 0000000..772ac84
--- /dev/null
+++ b/src/res2cc_cmd.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+# Script that compiles a set of resources into a single C++ source file. The C++ file
+# offers an initResources() function, which registers the resources with the resource
+# manager (class ResourceMgr)
+#
+# Copyright (C) 1997-2014 by Dimitri van Heesch.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation under the terms of the GNU General Public License is hereby
+# granted. No representations are made about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied warranty.
+# See the GNU General Public License for more details.
+#
+# Documents produced by Doxygen are derivative works derived from the
+# input used in their production; they are not affected by this license.
+#
+from __future__ import print_function
+from os         import listdir, stat, walk
+from os.path    import isfile, join, splitext
+import sys
+
+class File(object):
+	def __init__(self,directory,subdir,fileName,mode):
+		self.directory = directory
+		self.subdir    = subdir
+		self.fileName  = fileName
+		filePath  = join(directory,subdir,fileName)
+		self.fileSize  = stat(filePath).st_size
+		self.bareName  = fileName.replace('.','_')
+		self.inputFile = open(filePath,mode)
+
+	def formatByte(self,byte):
+		if isinstance(byte,int):
+			return "%02x" % byte
+		else:
+			return format(ord(byte),'02x')
+
+	def writeBytes(self,data,outputFile):
+		bytes_per_line=16
+		print("static const unsigned char %s_data[] = " % self.bareName,file=outputFile)
+		print("{",file=outputFile)
+		lines = [data[x:x+bytes_per_line] for x in range(0,len(data),bytes_per_line)]
+		linesAsString = ',\n  '.join([', '.join(['0x'+self.formatByte(byte) for byte in line]) for line in lines])
+		print('  %s' % linesAsString,file=outputFile)
+		print("};",file=outputFile)
+		print("const int %s_len = %d;\n" % (self.bareName,len(data)),file=outputFile)
+
+	def convertToBytes(self,outputFile):
+		lines = [x for x in self.inputFile.readlines() if not x.startswith('#')]
+		w,h = (int(x) for x in lines[0].split())
+		data = "".join(map(chr,[int(w>>8),int(w&0xFF),int(h>>8),int(h&0xFF)]+
+		                       [int(x) for line in lines[1:] for x in line.split()]))
+		self.writeBytes(data,outputFile)
+
+	@staticmethod
+	def factory(directory,subdir,fname):
+		ext = splitext(fname)[1]
+		if ext=='.lum':  return LumFile(directory,subdir,fname)
+		if ext=='.luma': return LumaFile(directory,subdir,fname)
+		if ext=='.css':  return CSSFile(directory,subdir,fname)
+		return VerbatimFile(directory,subdir,fname)
+
+class VerbatimFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"rb")
+	def writeContents(self,outputFile):
+		self.writeBytes(self.inputFile.read(),outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::Verbatim }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class CSSFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.writeBytes(self.inputFile.read(),outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::CSS }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.convertToBytes(outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::Luminance }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumaFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.convertToBytes(outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::LumAlpha }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+def main():
+	if len(sys.argv)<3:
+		sys.exit('Usage: %s directory output_file.cpp' % sys.argv[0])
+	directory = sys.argv[1]
+	files = []
+	for dirName, subdirList, fileList in walk(directory):
+		for fname in sorted(fileList):
+			subdir = dirName[len(directory)+1:] if dirName.startswith(directory) else dirName
+			if subdir:
+				files.append(File.factory(directory,subdir,fname))
+	outputFile = open(sys.argv[2],"w")
+	print("#include \"resourcemgr.h\"\n",file=outputFile)
+	for f in files:
+		f.writeContents(outputFile)
+	print("static Resource resourceDir[] =",file=outputFile)
+	print("{",file=outputFile)
+	for f in files:
+		f.writeDirEntry(outputFile)
+	print("};",file=outputFile)
+	print("static int resourceDir_len = %s;" % len(files), file=outputFile)
+	print("void initResources() { ResourceMgr::instance().registerResources(resourceDir,resourceDir_len); }",file=outputFile)
+
+if __name__ == '__main__':
+	main()
diff --git a/src/resize_js.h b/src/resize_js.h
deleted file mode 100644
index 160b16c..0000000
--- a/src/resize_js.h
+++ /dev/null
@@ -1,93 +0,0 @@
-"var cookie_namespace = 'doxygen'; \n"
-"var sidenav,navtree,content,header;\n"
-"\n"
-"function readCookie(cookie) \n"
-"{\n"
-"  var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
-"  if (document.cookie) \n"
-"  {\n"
-"    var index = document.cookie.indexOf(myCookie);\n"
-"    if (index != -1) \n"
-"    {\n"
-"      var valStart = index + myCookie.length;\n"
-"      var valEnd = document.cookie.indexOf(\";\", valStart);\n"
-"      if (valEnd == -1) \n"
-"      {\n"
-"        valEnd = document.cookie.length;\n"
-"      }\n"
-"      var val = document.cookie.substring(valStart, valEnd);\n"
-"      return val;\n"
-"    }\n"
-"  }\n"
-"  return 0;\n"
-"}\n"
-"\n"
-"function writeCookie(cookie, val, expiration) \n"
-"{\n"
-"  if (val==undefined) return;\n"
-"  if (expiration == null) \n"
-"  {\n"
-"    var date = new Date();\n"
-"    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
-"    expiration = date.toGMTString();\n"
-"  }\n"
-"  document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
-"}\n"
-" \n"
-"function resizeWidth() \n"
-"{\n"
-"  var windowWidth = $(window).width() + \"px\";\n"
-"  var sidenavWidth = $(sidenav).outerWidth();\n"
-"  content.css({marginLeft:parseInt(sidenavWidth)+\"px\"}); \n"
-"  writeCookie('width',sidenavWidth, null);\n"
-"}\n"
-"\n"
-"function restoreWidth(navWidth)\n"
-"{\n"
-"  var windowWidth = $(window).width() + \"px\";\n"
-"  content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
-"  sidenav.css({width:navWidth + \"px\"});\n"
-"}\n"
-"\n"
-"function resizeHeight() \n"
-"{\n"
-"  var headerHeight = header.outerHeight();\n"
-"  var footerHeight = footer.outerHeight();\n"
-"  var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-"  content.css({height:windowHeight + \"px\"});\n"
-"  navtree.css({height:windowHeight + \"px\"});\n"
-"  sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
-"}\n"
-"\n"
-"function initResizable()\n"
-"{\n"
-"  header  = $(\"#top\");\n"
-"  sidenav = $(\"#side-nav\");\n"
-"  content = $(\"#doc-content\");\n"
-"  navtree = $(\"#nav-tree\");\n"
-"  footer  = $(\"#nav-path\");\n"
-"  $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
-"  $(window).resize(function() { resizeHeight(); });\n"
-"  var width = readCookie('width');\n"
-"  if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
-"  resizeHeight();\n"
-"  var url = location.href;\n"
-"  var i=url.indexOf(\"#\");\n"
-"  if (i>=0) window.location.hash=url.substr(i);\n"
-"  var _preventDefault = function(evt) { evt.preventDefault(); };\n"
-"  $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
-"  $(document).bind('touchmove',function(e){\n"
-"    try {\n"
-"      var target = e.target;\n"
-"      while (target) {\n"
-"        if ($(target).css('-webkit-overflow-scrolling')=='touch') return;\n"
-"        target = target.parentNode;\n"
-"      }\n"
-"      e.preventDefault();\n"
-"    } catch(err) {\n"
-"      e.preventDefault();\n"
-"    }\n"
-"  });\n"
-"}\n"
-"\n"
-"\n"
diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp
new file mode 100644
index 0000000..4b504e4
--- /dev/null
+++ b/src/resourcemgr.cpp
@@ -0,0 +1,183 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#include <qdict.h>
+#include <qfile.h>
+#include <qcstring.h>
+#include <qglobal.h>
+#include <string.h>
+
+#include "resourcemgr.h"
+#include "util.h"
+#include "version.h"
+#include "ftextstream.h"
+#include "message.h"
+#include "config.h"
+
+class ResourceMgr::Private
+{
+  public:
+    Private() : resources(257) {}
+    QDict<Resource> resources;
+};
+
+ResourceMgr &ResourceMgr::instance()
+{
+  static ResourceMgr theInstance;
+  return theInstance;
+}
+
+ResourceMgr::ResourceMgr()
+{
+  p = new Private;
+}
+
+ResourceMgr::~ResourceMgr()
+{
+  delete p;
+}
+
+void ResourceMgr::registerResources(const Resource resources[],int numResources)
+{
+  for (int i=0;i<numResources;i++)
+  {
+    p->resources.insert(resources[i].name,&resources[i]);
+  }
+}
+
+bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) const
+{
+  QDictIterator<Resource> it(p->resources);
+  const Resource *res;
+  for (it.toFirst();(res=it.current());++it)
+  {
+    if (qstrcmp(res->category,categoryName)==0)
+    {
+      if (!copyResource(res->name,targetDir))
+      {
+        return FALSE;
+      }
+    }
+  }
+  return TRUE;
+}
+
+bool ResourceMgr::copyResourceAs(const char *name,const char *targetDir,const char *targetName) const
+{
+  QCString pathName = QCString(targetDir)+"/"+targetName;
+  const Resource *res = get(name);
+  if (res)
+  {
+    switch (res->type)
+    {
+      case Resource::Verbatim:
+        {
+          QFile f(pathName);
+          if (f.open(IO_WriteOnly) && f.writeBlock((const char *)res->data,res->size)==res->size)
+          {
+            return TRUE;
+          }
+        }
+        break;
+      case Resource::Luminance:
+        {
+          QCString n = name;
+          n = n.left(n.length()-4)+".png"; // replace .lum by .png
+          uchar *p = (uchar*)res->data;
+          int width   = (p[0]<<8)+p[1];
+          int height  = (p[2]<<8)+p[3];
+          ColoredImgDataItem images[2];
+          images[0].name    = n;
+          images[0].width   = width;
+          images[0].height  = height;
+          images[0].content = &p[4];
+          images[0].alpha   = 0;
+          images[1].name    = 0; // terminator
+          writeColoredImgData(targetDir,images);
+          return TRUE;
+        }
+        break;
+      case Resource::LumAlpha:
+        {
+          QCString n = name;
+          n = n.left(n.length()-5)+".png"; // replace .luma by .png
+          uchar *p = (uchar*)res->data;
+          int width   = (p[0]<<8)+p[1];
+          int height  = (p[2]<<8)+p[3];
+          ColoredImgDataItem images[2];
+          images[0].name    = n;
+          images[0].width   = width;
+          images[0].height  = height;
+          images[0].content = &p[4];
+          images[0].alpha   = &p[4+width*height];
+          images[1].name    = 0; // terminator
+          writeColoredImgData(targetDir,images);
+          return TRUE;
+        }
+        break;
+      case Resource::CSS:
+        {
+          QFile f(pathName);
+          if (f.open(IO_WriteOnly))
+          {
+            QCString buf(res->size+1);
+            memcpy(buf.rawData(),res->data,res->size);
+            FTextStream t(&f);
+            buf = replaceColorMarkers(buf);
+            if (qstrcmp(name,"navtree.css")==0)
+            {
+              t << substitute(buf,"$width",QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px");
+            }
+            else
+            {
+              t << substitute(buf,"$doxygenversion",versionString);
+            }
+            return TRUE;
+          }
+        }
+        break;
+    }
+  }
+  else
+  {
+    err("requested resource '%s' not compiled in!\n",name);
+  }
+  return FALSE;
+}
+
+bool ResourceMgr::copyResource(const char *name,const char *targetDir) const
+{
+  return copyResourceAs(name,targetDir,name);
+}
+
+const Resource *ResourceMgr::get(const char *name) const
+{
+  return p->resources.find(name);
+}
+
+QCString ResourceMgr::getAsString(const char *name) const
+{
+  const Resource *res = get(name);
+  if (res)
+  {
+    QCString result(res->size+1);
+    memcpy(result.rawData(),res->data,res->size);
+    return result;
+  }
+  else
+  {
+    return QCString();
+  }
+}
+
diff --git a/src/resourcemgr.h b/src/resourcemgr.h
new file mode 100644
index 0000000..6347e70
--- /dev/null
+++ b/src/resourcemgr.h
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#ifndef RESOURCEMGR_H
+#define RESOURCEMGR_H
+
+#include <qcstring.h>
+
+/** @brief Compiled resource */
+struct Resource
+{
+  enum Type { Verbatim, Luminance, LumAlpha, CSS };
+  const char *category;
+  const char *name;
+  const unsigned char *data;
+  int size;
+  Type type;
+};
+
+/** @brief Singleton for managing resources compiled into an executable */
+class ResourceMgr
+{
+  public:
+    /** Returns the one and only instance of this class */
+    static ResourceMgr &instance();
+
+    /** Registers an array of resources */
+    void registerResources(const Resource resources[],int numResources);
+
+    /** Copies all resource belonging to a given category to a given target directory */
+    bool copyCategory(const char *categoryName,const char *targetDir) const;
+
+    /** Copies a registered resource to a given target directory */
+    bool copyResource(const char *name,const char *targetDir) const;
+
+    /** Copies a registered resource to a given target directory under a given target name */
+    bool copyResourceAs(const char *name,const char *targetDir,const char *targetName) const;
+
+    /** Returns a pointer to the resource object with the given name. */
+    const Resource *get(const char *name) const;
+
+    /** Gets the resource data as a C string */
+    QCString getAsString(const char *name) const;
+
+  private:
+    ResourceMgr();
+   ~ResourceMgr();
+    class Private;
+    Private *p;
+};
+
+#endif
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 5e27137..20fbf53 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -299,11 +299,12 @@ void RTFDocVisitor::visit(DocVerbatim *s)
         static int mscindex = 1;
         QCString baseName(4096);
 
-        baseName.sprintf("%s%d", 
+        baseName.sprintf("%s%d%s",
             (Config_getString("RTF_OUTPUT")+"/inline_mscgraph_").data(), 
-            mscindex++
+            mscindex++,
+            ".msc"
            );
-        QFile file(baseName+".msc");
+        QFile file(baseName);
         if (!file.open(IO_WriteOnly))
         {
           err("Could not open file %s for writing\n",baseName.data());
@@ -1413,6 +1414,11 @@ void RTFDocVisitor::visitPre(DocXRefItem *x)
   if (x->title().isEmpty()) return;
   bool anonymousEnum = x->file()=="@";
   DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocXRefItem)}\n");
+  if (!m_lastIsPara)
+  {
+    m_t << "\\par" << endl;
+    m_lastIsPara=TRUE;
+  }
   m_t << "{"; // start param list
   //m_t << "{\\b "; // start bold
   m_t << "{" << rtf_Style["Heading5"]->reference << endl;
@@ -1685,7 +1691,7 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName)
     baseName=baseName.right(baseName.length()-i-1);
   } 
   QCString outDir = Config_getString("RTF_OUTPUT");
-  writeMscGraphFromFile(fileName+".msc",outDir,baseName,MSC_BITMAP);
+  writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP);
   if (!m_lastIsPara) m_t << "\\par" << endl;
   m_t << "{" << endl;
   m_t << rtf_Style_Reset;
@@ -1705,7 +1711,7 @@ void RTFDocVisitor::writeDiaFile(const QCString &fileName)
     baseName=baseName.right(baseName.length()-i-1);
   }
   QCString outDir = Config_getString("RTF_OUTPUT");
-  writeDiaGraphFromFile(fileName+".dia",outDir,baseName,DIA_BITMAP);
+  writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP);
   if (!m_lastIsPara) m_t << "\\par" << endl;
   m_t << "{" << endl;
   m_t << rtf_Style_Reset;
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index ccdadcf..3f09eec 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -66,6 +66,7 @@ RTFGenerator::RTFGenerator() : OutputGenerator()
   m_bstartedBody = FALSE;
   m_omitParagraph = FALSE;
   m_numCols = 0;
+  m_prettyCode=Config_getBool("RTF_SOURCE_CODE");
 }
 
 RTFGenerator::~RTFGenerator()
@@ -539,6 +540,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
 {
   bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
   bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");  
+  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+
   switch (is)
   {
     case isTitlePageStart:
@@ -810,6 +813,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
                 t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
                 t << fd->getOutputFileBase();
                 t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+                if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+                {
+                  t << "\\par " << rtf_Style_Reset << endl;
+                  t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+                }
                 isFirst=FALSE;
               }
               else
@@ -819,6 +827,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
                 t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
                 t << fd->getOutputFileBase();
                 t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+                if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+                {
+                  t << "\\par " << rtf_Style_Reset << endl;
+                  t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+                }
               }
             }
           }
@@ -2268,11 +2281,12 @@ bool isLeadBytes(int c)
 
 
 // note: function is not reentrant!
-static void encodeForOutput(FTextStream &t,const QCString &s)
+static void encodeForOutput(FTextStream &t,const char *s)
 {
+  if (s==0) return;
   QCString encoding;
   bool converted=FALSE;
-  int l = s.length();
+  int l = qstrlen(s);
   static QByteArray enc;
   if (l*4>(int)enc.size()) enc.resize(l*4); // worst case
   encoding.sprintf("CP%s",theTranslator->trRTFansicp().data());
@@ -2284,7 +2298,7 @@ static void encodeForOutput(FTextStream &t,const QCString &s)
     {
       size_t iLeft=l;
       size_t oLeft=enc.size();
-      char *inputPtr = s.data();
+      char *inputPtr = (char*)s;
       char *outputPtr = enc.data();
       if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
       {
@@ -2296,7 +2310,7 @@ static void encodeForOutput(FTextStream &t,const QCString &s)
   }
   if (!converted) // if we did not convert anything, copy as is.
   {
-    memcpy(enc.data(),s.data(),l);
+    memcpy(enc.data(),s,l);
     enc.resize(l);
   }
   uint i;
@@ -2348,19 +2362,24 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
   // this is EXTREEEEEEEMLY brittle.  It works on OUR rtf
   // files because the first line before the body
   // ALWAYS contains "{\comment begin body}"
+  int len;
   do
   {
-    if (f.readLine(lineBuf.data(),maxLineLength)==-1)
+    lineBuf.resize(maxLineLength);
+    if ((len=f.readLine(lineBuf.rawData(),maxLineLength))==-1)
     {
       err("read error in %s before end of RTF header!\n",infName.data());
       return FALSE;
     }
-    if (bIncludeHeader) encodeForOutput(t,lineBuf);
+    lineBuf.resize(len+1);
+    if (bIncludeHeader) encodeForOutput(t,lineBuf.data());
   } while (lineBuf.find("\\comment begin body")==-1);
 
 
-  while (f.readLine(lineBuf.data(),maxLineLength)!=-1)
+  lineBuf.resize(maxLineLength);
+  while ((len=f.readLine(lineBuf.rawData(),maxLineLength))!=-1)
   {
+    lineBuf.resize(len+1);
     int pos;
     if ((pos=lineBuf.find("INCLUDETEXT"))!=-1)
     {
@@ -2392,6 +2411,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
         encodeForOutput(t,lineBuf);
       }
     }
+    lineBuf.resize(maxLineLength);
   }
   f.close();
   // remove temporary file
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 7b31673..2617ee6 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -126,7 +126,7 @@ class RTFGenerator : public OutputGenerator
     void writeAnchor(const char *fileName,const char *name);
     void startCodeFragment();
     void endCodeFragment();
-    void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
+    void writeLineNumber(const char *,const char *,const char *,int l) { t << QString("%1").arg(l,5) << " "; }
     void startCodeLine(bool) { col=0; }
     void endCodeLine() { lineBreak(); }
     void startEmphasis() { t << "{\\i ";  }
@@ -277,6 +277,7 @@ class RTFGenerator : public OutputGenerator
     void incrementIndentLevel();
     void decrementIndentLevel();
     int  col;
+    bool m_prettyCode;
 
     bool m_bstartedBody;  // has startbody been called yet?
     int  m_listLevel; // // RTF does not really have a addative indent...manually set list level.
diff --git a/src/rtfstyle.h b/src/rtfstyle.h
index 4f0a03f..ae7e456 100644
--- a/src/rtfstyle.h
+++ b/src/rtfstyle.h
@@ -65,7 +65,7 @@ struct StyleData
 
   unsigned index;   // index in style-sheet, i.e. number in s-clause
   char* reference;  // everything required to apply the style
-  char* definition; // aditional tags like \snext and style name
+  char* definition; // additional tags like \snext and style name
 
   StyleData(const char* reference, const char* definition);
   ~StyleData();
diff --git a/src/scanner.l b/src/scanner.l
index 8370f13..821959c 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -83,7 +83,6 @@ static int		roundCount   = 0 ;
 static int		curlyCount   = 0 ;
 static int		squareCount  = 0 ;
 static int              padCount     = 0 ;
-static QCString         slString;
 static Entry*		current_root = 0 ;
 static Entry*		global_root  = 0 ;
 static Entry*		current      = 0 ;
@@ -114,7 +113,6 @@ static QCString         aliasName;
 static QCString         baseName;
 static QCString*        specName;
 static QCString         formulaText;
-static QCString         formulaEnd;
 static bool             useOverrideCommands = FALSE;
 
 static SrcLangExt       language;
@@ -162,13 +160,7 @@ static bool             needsSemi;
 
 //static int              depthIf;
 static int  	        initBracketCount;
-static QCString         memberGroupRelates;
-static QCString         memberGroupInside;
-static QCString         xrefItemKey;
-static QCString         xrefItemTitle;
-static QCString         xrefListTitle;
 
-static QCString         g_skipBlockName;
 static QCString         oldStyleArgType;
 static QCString         docBackup;
 static QCString         briefBackup;
@@ -1228,7 +1220,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 					  {
   					    lineCount();
 					    lastSkipRoundContext = YY_START;
-					    roundCount=1;
+					    roundCount=0;
 					    BEGIN( SkipRound );
 					  }
 					  else if (qstrncmp(yytext,"@property",9)==0) // ObjC 2.0 property
@@ -2245,7 +2237,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 <FindMembers>"Q_OBJECT"			{ // Qt object macro
   					}
 <FindMembers>"Q_PROPERTY"		{ // Qt property declaration
-					  //current->protection = protection = Public ; // see bug734245
+					  current->protection = Public ; // see bug734245 & bug735462
   					  current->mtype = mtype = Property;
 					  current->type.resize(0);
   					  BEGIN(QtPropType);
@@ -2444,7 +2436,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 					}
 <StaticAssert>"("                       {
 					  lastSkipRoundContext = FindMembers;
-					  roundCount=1;
+					  roundCount=0;
                                           BEGIN(SkipRound);
                                         }
 <StaticAssert>{BN}+                     { lineCount(); }
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index a550eb1..d8ec491 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -36,6 +36,7 @@
 #include "memberdef.h"
 #include "filename.h"
 #include "membername.h"
+#include "resourcemgr.h"
 
 // file format: (all multi-byte values are stored in big endian format)
 //   4 byte header
@@ -309,7 +310,6 @@ void SearchIndex::write(const char *fileName)
   padding = size - padding;
 
   //int statsOffset = size;
-  QDictIterator<IndexWord> wdi(m_words);
   //IndexWord *iw;
   int *wordStatOffsets = new int[m_words.count()];
   
@@ -444,7 +444,7 @@ SearchIndexExternal::~SearchIndexExternal()
 
 static QCString definitionToName(Definition *ctx)
 {
-  if (ctx->definitionType()==Definition::TypeMember)
+  if (ctx && ctx->definitionType()==Definition::TypeMember)
   {
     MemberDef *md = (MemberDef*)ctx;
     if (md->isFunction())
@@ -583,9 +583,9 @@ void SearchIndexExternal::write(const char *fileName)
 #include "doxygen.h"
 #include "message.h"
 
-static const char search_script[]=
-#include "search.js.h"
-;
+//static const char search_script[]=
+//#include "search.js.h"
+//;
 
 #define SEARCH_INDEX_ALL         0
 #define SEARCH_INDEX_CLASSES     1
@@ -1076,7 +1076,6 @@ void writeJavascriptSearchIndex()
         for (li.toFirst();(dl=li.current());++li)
         {
           Definition *d = dl->getFirst();
-          QCString id = d->localName();
 
           if (!firstEntry)
           {
@@ -1265,15 +1264,10 @@ void writeJavascriptSearchIndex()
   }
 
   {
-    QFile f(searchDirName+"/search.js");
+    QFile f(searchDirName+"/searchdata.js");
     if (f.open(IO_WriteOnly))
     {
       FTextStream t(&f);
-      t << "// Search script generated by doxygen" << endl;
-      t << "// Copyright (C) 2009 by Dimitri van Heesch." << endl << endl;
-      t << "// The code in this file is loosly based on main.js, part of Natural Docs," << endl;
-      t << "// which is Copyright (C) 2003-2008 Greg Valure" << endl;
-      t << "// Natural Docs is licensed under the GPL." << endl << endl;
       t << "var indexSectionsWithContent =" << endl;
       t << "{" << endl;
       bool first=TRUE;
@@ -1314,8 +1308,25 @@ void writeJavascriptSearchIndex()
       }
       if (!first) t << "\n";
       t << "};" << endl << endl;
-      t << search_script;
+      t << "var indexSectionLabels =" << endl;
+      t << "{" << endl;
+      first=TRUE;
+      static SearchIndexCategoryMapping map;
+      j=0;
+      for (i=0;i<NUM_SEARCH_INDICES;i++)
+      {
+        if (g_searchIndexCount[i]>0)
+        {
+          if (!first) t << "," << endl;
+          t << "  " << j << ": \"" << convertToXML(map.categoryLabel[i]) << "\"";
+          first=FALSE;
+          j++;
+        }
+      }
+      if (!first) t << "\n";
+      t << "};" << endl << endl;
     }
+    ResourceMgr::instance().copyResource("search.js",searchDirName);
   }
   {
     QFile f(searchDirName+"/nomatches.html");
@@ -1341,24 +1352,6 @@ void writeJavascriptSearchIndex()
   Doxygen::indexList->addStyleSheetFile("search/search.js");
 }
 
-void writeSearchCategories(FTextStream &t)
-{
-  static SearchIndexCategoryMapping map;
-  int i,j=0;
-  for (i=0;i<NUM_SEARCH_INDICES;i++)
-  {
-    if (g_searchIndexCount[i]>0)
-    {
-      t << "<a class=\"SelectItem\" href=\"javascript:void(0)\" "
-        << "onclick=\"searchBox.OnSelectItem(" << j << ")\">"
-        << "<span class=\"SelectionMark\"> </span>"
-        << convertToXML(map.categoryLabel[i])
-        << "</a>";
-      j++;
-    }
-  }
-}
-
 //---------------------------------------------------------------------------------------------
 
 void initSearchIndexer()
diff --git a/src/searchindex.h b/src/searchindex.h
index 872c0d3..17d39a2 100644
--- a/src/searchindex.h
+++ b/src/searchindex.h
@@ -110,6 +110,5 @@ class SearchIndexExternal : public SearchIndexIntf
 //------- client side search index ----------------------
 
 void writeJavascriptSearchIndex();
-void writeSearchCategories(FTextStream &t);
 
 #endif
diff --git a/src/store.cpp b/src/store.cpp
index 8916015..8d9a0cd 100644
--- a/src/store.cpp
+++ b/src/store.cpp
@@ -382,9 +382,9 @@ int Store::read(char *buf,uint size)
 void Store::printFreeList()
 {
   printf("FreeList: ");
-  portable_off_t pos = m_head->pos;
-  while (pos)
+  while (m_head)
   {
+    portable_off_t pos = m_head->pos;
     printf("%x ",(int)pos);
     m_head = m_head->next;
   }
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 23b8f13..be0472a 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -95,7 +95,7 @@ class TagMemberInfo
 class TagClassInfo
 {
   public:
-    enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category };
+    enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category, Enum, Service, Singleton };
     TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; }
    ~TagClassInfo() { delete bases; delete templateArguments; }
     QCString name;
@@ -251,8 +251,20 @@ class TagFileParser : public QXmlDefaultHandler
     {
       m_startElementHandlers.setAutoDelete(TRUE);
       m_endElementHandlers.setAutoDelete(TRUE);
+      m_curClass=0;
+      m_curFile=0;
+      m_curNamespace=0;
+      m_curPackage=0;
+      m_curGroup=0;
+      m_curPage=0;
+      m_curDir=0;
+      m_curMember=0;
+      m_curEnumValue=0;
+      m_curIncludes=0;
+      m_state = Invalid;
+      m_locator = 0;
     }
-    
+
     void setDocumentLocator ( QXmlLocator * locator )
     {
       m_locator = locator;
@@ -301,6 +313,12 @@ class TagFileParser : public QXmlDefaultHandler
         m_curClass->kind = TagClassInfo::Interface;
         m_state = InClass;
       }
+      else if (kind=="enum")
+      {
+        m_curClass = new TagClassInfo;
+        m_curClass->kind = TagClassInfo::Enum;
+        m_state = InClass;
+      }
       else if (kind=="exception")
       {
         m_curClass = new TagClassInfo;
@@ -319,6 +337,18 @@ class TagFileParser : public QXmlDefaultHandler
         m_curClass->kind = TagClassInfo::Category;
         m_state = InClass;
       }
+      else if (kind=="service")
+      {
+        m_curClass = new TagClassInfo;
+        m_curClass->kind = TagClassInfo::Service;
+        m_state = InClass;
+      }
+      else if (kind=="singleton")
+      {
+        m_curClass = new TagClassInfo;
+        m_curClass->kind = TagClassInfo::Singleton;
+        m_state = InClass;
+      }
       else if (kind=="file")
       {
         m_curFile = new TagFileInfo;
@@ -1286,9 +1316,12 @@ void TagFileParser::buildLists(Entry *root)
       case TagClassInfo::Struct:    ce->spec = Entry::Struct;    break;
       case TagClassInfo::Union:     ce->spec = Entry::Union;     break;
       case TagClassInfo::Interface: ce->spec = Entry::Interface; break;
+      case TagClassInfo::Enum:      ce->spec = Entry::Enum;      break;
       case TagClassInfo::Exception: ce->spec = Entry::Exception; break;
       case TagClassInfo::Protocol:  ce->spec = Entry::Protocol;  break;
       case TagClassInfo::Category:  ce->spec = Entry::Category;  break;
+      case TagClassInfo::Service:   ce->spec = Entry::Service;   break;
+      case TagClassInfo::Singleton: ce->spec = Entry::Singleton; break;
     }
     ce->name     = tci->name;
     if (tci->kind==TagClassInfo::Protocol)
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 88e3d1d..6ad2e26 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -657,7 +657,7 @@ static void tcl_font_end()
 }
 
 //! Codify 'str' with special font class 's'.
-static void tcl_codify(const char *s,char *str)
+static void tcl_codify(const char *s,const char *str)
 {
   if (!tcl.code || !str) return;
   if (s && qstrcmp(s,"NULL")!=0)
@@ -666,7 +666,7 @@ static void tcl_codify(const char *s,char *str)
     tcl.code->startFontClass(s);
     tcl.code_font=s;
   }
-  char *p=str,*sp=p;
+  const char *p=str,*sp=p;
   char c;
   bool done=FALSE;
   while (!done)
@@ -676,7 +676,7 @@ static void tcl_codify(const char *s,char *str)
     if (c=='\n')
     {
       tcl.code_line++;
-      *(p-1)='\0';
+      // *(p-1)='\0'; // Dimitri: is this really needed?
       tcl.code->codify(sp);
       if (tcl.code_font)
       {
@@ -719,7 +719,6 @@ static void tcl_codify(const char *s,const QString &str)
   if (tcl.code==NULL) return;
   tcl_codify(s,str.utf8());
 }
-#endif
 
 //! Codify 'str' with special font class 's'.
 static void tcl_codify(const char *s,const QCString &str)
@@ -727,6 +726,7 @@ static void tcl_codify(const char *s,const QCString &str)
   if (!tcl.code) return;
   tcl_codify(s,str.data());
 }
+#endif
 
 static void tcl_codify_cmd(const char *s,int i)
 {
@@ -1123,7 +1123,6 @@ D
 static tcl_scan *tcl_scan_start(char type, QString content, QCString ns, Entry *entry_cl, Entry *entry_fn)
 {
   tcl_scan *myScan=tcl.scan.at(0);
-  QCString myName;
 tcl_inf("line=%d type=%d '%s'\n",tcl.line_body0,type,content.ascii());
 
   myScan->line1=yylineno;
@@ -2298,7 +2297,7 @@ D
 static void tcl_command_ITCL_CLASS()
 {
 D
-  QCString myNs, myName, myStr;
+  QCString myNs, myName;
   Entry *myEntryCl;
   tcl_scan *myScan = tcl.scan.at(0);
 
@@ -2327,7 +2326,7 @@ D
 static void tcl_command_OO_CLASS()
 {
 D
-  QCString myNs, myName, myStr;
+  QCString myNs, myName;
   //Entry *myEntryNs;
   Entry *myEntryCl;
   tcl_scan *myScan = tcl.scan.at(0);
@@ -2833,14 +2832,18 @@ tcl_inf("TCL_SUBST: use '%s'\n",s);
     }
   }
 
-  if (tcl.input_string.at(tcl.input_string.length()-1) == '\n') 
+  if (tcl.input_string.at(tcl.input_string.length()-1) == 0x1A)
+  {
+  }
+  else if (tcl.input_string.at(tcl.input_string.length()-1) == '\n')
   {
     tcl.input_string[tcl.input_string.length()-1] = 0x1A;
-  } 
-  else 
+  }
+  else
   {
     tcl.input_string += 0x1A;
   }
+
   tcl.code = NULL;
   tcl.code_font=NULL;
   tcl.code_line=1;
diff --git a/src/template.cpp b/src/template.cpp
index ec8554b..2a73b89 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -33,6 +33,7 @@
 #include "ftextstream.h"
 #include "message.h"
 #include "util.h"
+#include "resourcemgr.h"
 
 #define ENABLE_TRACING 0
 
@@ -115,7 +116,7 @@ static QCString replace(const char *s,char csrc,char cdst)
 class TemplateVariant::Private
 {
   public:
-    Private() : raw(FALSE) {}
+    Private(Type t) : type(t), intVal(0), boolVal(TRUE), strukt(0), list(0), raw(FALSE) {}
     Type                type;
     int                 intVal;
     QCString            strVal;
@@ -128,60 +129,52 @@ class TemplateVariant::Private
 
 TemplateVariant::TemplateVariant()
 {
-  p = new Private;
-  p->type=None;
+  p = new Private(None);
 }
 
 TemplateVariant::TemplateVariant(bool b)
 {
-  p = new Private;
-  p->type = Bool;
+  p = new Private(Bool);
   p->boolVal = b;
 }
 
 TemplateVariant::TemplateVariant(int v)
 {
-  p = new Private;
-  p->type = Integer;
+  p = new Private(Integer);
   p->intVal = v;
 }
 
 TemplateVariant::TemplateVariant(const char *s,bool raw)
 {
-  p = new Private;
-  p->type = String;
+  p = new Private(String);
   p->strVal = s;
   p->raw = raw;
 }
 
 TemplateVariant::TemplateVariant(const QCString &s,bool raw)
 {
-  p = new Private;
-  p->type = String;
+  p = new Private(String);
   p->strVal = s;
   p->raw = raw;
 }
 
 TemplateVariant::TemplateVariant(TemplateStructIntf *s)
 {
-  p = new Private;
-  p->type = Struct;
+  p = new Private(Struct);
   p->strukt = s;
   p->strukt->addRef();
 }
 
 TemplateVariant::TemplateVariant(TemplateListIntf *l)
 {
-  p = new Private;
-  p->type = List;
+  p = new Private(List);
   p->list = l;
   p->list->addRef();
 }
 
 TemplateVariant::TemplateVariant(const TemplateVariant::Delegate &delegate)
 {
-  p = new Private;
-  p->type = Function;
+  p = new Private(Function);
   p->delegate = delegate;
 }
 
@@ -194,8 +187,7 @@ TemplateVariant::~TemplateVariant()
 
 TemplateVariant::TemplateVariant(const TemplateVariant &v)
 {
-  p = new Private;
-  p->type    = v.p->type;
+  p = new Private(v.p->type);
   p->raw     = v.p->raw;
   switch (p->type)
   {
@@ -1165,7 +1157,7 @@ class FilterAlphaIndex
     }
     static QCString keyToLabel(uint startLetter)
     {
-      char s[10];
+      char s[11]; // 0x12345678 + '\0'
       if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character
       {
         s[0]=tolower((char)startLetter);
@@ -1319,7 +1311,15 @@ class FilterDivisibleBy
       }
       if (v.type()==TemplateVariant::Integer && n.type()==TemplateVariant::Integer)
       {
-        return TemplateVariant((v.toInt()%n.toInt())==0);
+        int ni = n.toInt();
+        if (ni>0)
+        {
+          return TemplateVariant((v.toInt()%ni)==0);
+        }
+        else
+        {
+          return TemplateVariant(FALSE);
+        }
       }
       else
       {
@@ -1427,11 +1427,11 @@ class ExprAstVariable : public ExprAst
     const QCString &name() const { return m_name; }
     virtual TemplateVariant resolve(TemplateContext *c)
     {
-      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
       TemplateVariant v = c->get(m_name);
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
       if (!v.isValid())
       {
-        ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
+        if (ci) ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
       }
       return v;
     }
@@ -1478,6 +1478,7 @@ class ExprAstFilter : public ExprAst
     TemplateVariant apply(const TemplateVariant &v,TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return v; // should not happen
       TRACE(("Applying filter '%s' to '%s' (type=%d)\n",m_name.data(),v.toString().data(),v.type()));
       TemplateVariant arg;
       if (m_arg) arg = m_arg->resolve(c);
@@ -1569,6 +1570,7 @@ class ExprAstBinary : public ExprAst
     virtual TemplateVariant resolve(TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return TemplateVariant(); // should not happen
       TemplateVariant lhs = m_lhs->resolve(c);
       TemplateVariant rhs = m_rhs ? m_rhs->resolve(c) : TemplateVariant();
       switch(m_operator)
@@ -1974,10 +1976,21 @@ class ExpressionParser
     ExprAst *parseLiteral()
     {
       TRACE(("{parseLiteral(%s)\n",m_curToken.id.data()));
-      ExprAst *lit = new ExprAstLiteral(m_curToken.id);
+      ExprAst *expr = new ExprAstLiteral(m_curToken.id);
       getNextToken();
+      if (expr)
+      {
+        while (m_curToken.type==ExprToken::Operator &&
+               m_curToken.op==Operator::Filter)
+        {
+          getNextToken();
+          ExprAstFilter *filter = parseFilter();
+          if (!filter) break;
+          expr = new ExprAstFilterAppl(expr,filter);
+        }
+      }
       TRACE(("}parseLiteral()\n"));
-      return lit;
+      return expr;
     }
 
     ExprAst *parseIdentifierOptionalArgs()
@@ -2052,6 +2065,11 @@ class ExpressionParser
       if (p==0 || *p=='\0') return FALSE;
       while (*p==' ') p++; // skip over spaces
       char c=*p;
+      if (*p=='\0') // only spaces...
+      {
+        m_tokenStream = p;
+        return FALSE;
+      }
       const char *q = p;
       switch (c)
       {
@@ -2230,7 +2248,7 @@ class ExpressionParser
         char s[2];
         s[0]=c;
         s[1]=0;
-        warn(m_parser->templateName(),m_line,"Found unknown token %s while parsing %s",s,m_tokenStream);
+        warn(m_parser->templateName(),m_line,"Found unknown token '%s' (%d) while parsing %s",s,c,m_tokenStream);
         m_curToken.id = s;
         p++;
       }
@@ -2289,7 +2307,7 @@ class TemplateNodeList : public QList<TemplateNode>
 class TemplateImpl : public TemplateNode, public Template
 {
   public:
-    TemplateImpl(TemplateEngine *e,const QCString &name,const QCString &data);
+    TemplateImpl(TemplateEngine *e,const QCString &name,const char *data,int size);
     void render(FTextStream &ts, TemplateContext *c);
 
     TemplateEngine *engine() const { return m_engine; }
@@ -2395,7 +2413,7 @@ TemplateVariant TemplateContextImpl::get(const QCString &name) const
         warn(m_templateName,m_line,"using . on an object '%s' is not an struct or list",objName.data());
         return TemplateVariant();
       }
-    } while (i!=-1);
+    }
     return v;
   }
 }
@@ -2595,6 +2613,7 @@ class TemplateNodeText : public TemplateNode
     {
       //printf("TemplateNodeText::render(%s)\n",m_data.data());
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       if (ci->spacelessEnabled())
       {
         ts << ci->spacelessIntf()->remove(m_data);
@@ -2633,6 +2652,7 @@ class TemplateNodeVariable : public TemplateNode
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (m_var)
       {
@@ -2687,6 +2707,37 @@ template<class T> class TemplateNodeCreator : public TemplateNode
       return dynamic_cast<TemplateImpl*>(root);
     }
   protected:
+    void mkpath(TemplateContextImpl *ci,const QCString &fileName)
+    {
+      int i=fileName.find('/');
+      QCString outputDir = ci->outputDirectory();
+      QDir d(outputDir);
+      if (!d.exists())
+      {
+        QDir rootDir;
+        rootDir.setPath(QDir::currentDirPath());
+        if (!rootDir.mkdir(outputDir))
+        {
+          err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+	      "exist and cannot be created\n",outputDir.data());
+          return;
+        }
+        d.setPath(outputDir);
+      }
+      int j=0;
+      while (i!=-1) // fileName contains path part
+      {
+        if (d.exists())
+        {
+          bool ok = d.mkdir(fileName.mid(j,i-j));
+          if (!ok) break;
+          QCString dirName = outputDir+'/'+fileName.left(i);
+          d = QDir(dirName);
+          j = i+1;
+        }
+        i=fileName.find('/',i+1);
+      }
+    }
     QCString m_templateName;
     int m_line;
 };
@@ -2752,6 +2803,7 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       //printf("TemplateNodeIf::render #trueNodes=%d #falseNodes=%d\n",m_trueNodes.count(),m_falseNodes.count());
       bool processed=FALSE;
@@ -2816,6 +2868,7 @@ class TemplateNodeRepeat : public TemplateNodeCreator<TemplateNodeRepeat>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       TemplateVariant v;
       if (m_expr && (v=m_expr->resolve(c)).type()==TemplateVariant::Integer)
@@ -2852,7 +2905,7 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
 {
   public:
     TemplateNodeRange(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
-      : TemplateNodeCreator<TemplateNodeRange>(parser,parent,line)
+      : TemplateNodeCreator<TemplateNodeRange>(parser,parent,line), m_down(FALSE)
     {
       TRACE(("{TemplateNodeRange(%s)\n",data.data()));
       QCString start,end;
@@ -2928,6 +2981,7 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       //printf("TemplateNodeRange::render #loopNodes=%d\n",
       //    m_loopNodes.count());
@@ -2944,7 +2998,6 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
           {
             c->push();
             //int index = m_reversed ? list.count() : 0;
-            TemplateVariant v;
             const TemplateVariant *parentLoop = c->getRef("forloop");
             uint index = 0;
             int i = m_down ? e : s;
@@ -3022,7 +3075,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
 {
   public:
     TemplateNodeFor(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
-      : TemplateNodeCreator<TemplateNodeFor>(parser,parent,line)
+      : TemplateNodeCreator<TemplateNodeFor>(parser,parent,line), m_reversed(FALSE)
     {
       TRACE(("{TemplateNodeFor(%s)\n",data.data()));
       QCString exprStr;
@@ -3089,6 +3142,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       //printf("TemplateNodeFor::render #loopNodes=%d #emptyNodes=%d\n",
       //    m_loopNodes.count(),m_emptyNodes.count());
@@ -3184,12 +3238,13 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
       QStrList stopAt;
       stopAt.append("endmsg");
       parser->parse(this,line,stopAt,m_nodes);
-      parser->removeNextToken(); // skip over endmarkers
+      parser->removeNextToken(); // skip over endmsg
       TRACE(("}TemplateNodeMsg()\n"));
     }
     void render(FTextStream &, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       TemplateEscapeIntf *escIntf = ci->escapeIntf();
       ci->setActiveEscapeIntf(0); // avoid escaping things we send to standard out
@@ -3231,6 +3286,7 @@ class TemplateNodeBlock : public TemplateNodeCreator<TemplateNodeBlock>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       TemplateImpl *t = getTemplate();
       if (t)
@@ -3311,6 +3367,7 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (m_extendExpr==0) return;
 
@@ -3329,7 +3386,6 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
         if (baseTemplate)
         {
           // fill block context
-          TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
           TemplateBlockContext *bc = ci->blockContext();
 
           // add overruling blocks to the context
@@ -3390,6 +3446,7 @@ class TemplateNodeInclude : public TemplateNodeCreator<TemplateNodeInclude>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (m_includeExpr)
       {
@@ -3430,7 +3487,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
 {
   public:
     TemplateNodeCreate(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
-      : TemplateNodeCreator<TemplateNodeCreate>(parser,parent,line)
+      : TemplateNodeCreator<TemplateNodeCreate>(parser,parent,line), m_templateExpr(0), m_fileExpr(0)
     {
       TRACE(("TemplateNodeCreate(%s)\n",data.data()));
       ExpressionParser ep(parser,line);
@@ -3466,28 +3523,10 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
       delete m_templateExpr;
       delete m_fileExpr;
     }
-    void mkpath(TemplateContextImpl *ci,const QCString &fileName)
-    {
-      int i=fileName.find('/');
-      QCString outputDir = ci->outputDirectory();
-      QDir d(outputDir);
-      int j=0;
-      while (i!=-1) // fileName contains path part
-      {
-        if (d.exists())
-        {
-          bool ok = d.mkdir(fileName.mid(j,i-j));
-          if (!ok) break;
-          QCString dirName = outputDir+'/'+fileName.left(i);
-          d = QDir(dirName);
-          j = i+1;
-        }
-        i=fileName.find('/',i+1);
-      }
-    }
     void render(FTextStream &, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (m_templateExpr && m_fileExpr)
       {
@@ -3510,7 +3549,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
             TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
             if (createTemplate)
             {
-              //mkpath(ci,outputFile);
+              mkpath(ci,outputFile);
               QCString extension=outputFile;
               int i=extension.findRev('.');
               if (i!=-1)
@@ -3521,6 +3560,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
               {
                 outputFile.prepend(ci->outputDirectory()+"/");
               }
+              //printf("NoteCreate(%s)\n",outputFile.data());
               QFile f(outputFile);
               if (f.open(IO_WriteOnly))
               {
@@ -3593,9 +3633,11 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
     {
       //printf("TemplateNodeTree::renderChildren(%d)\n",ctx->list->count());
       // render all children of node to a string and return it
+      TemplateContext *c = ctx->templateCtx;
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return QCString(); // should not happen
       QGString result;
       FTextStream ss(&result);
-      TemplateContext *c = ctx->templateCtx;
       c->push();
       TemplateVariant node;
       TemplateListIntf::ConstIterator *it = ctx->list->createIterator();
@@ -3613,14 +3655,21 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
             if (list && list->count()>0) // non-empty list
             {
               TreeContext childCtx(this,list,ctx->templateCtx);
-//              TemplateVariant children(&childCtx,renderChildrenStub);
               TemplateVariant children(TemplateVariant::Delegate::fromFunction(&childCtx,renderChildrenStub));
               children.setRaw(TRUE);
               c->set("children",children);
               m_treeNodes.render(ss,c);
               hasChildren=TRUE;
             }
+            else if (list==0)
+            {
+              ci->warn(m_templateName,m_line,"recursetree: children attribute has type '%s' instead of list\n",v.typeAsString().data());
+            }
           }
+          //else
+          //{
+          //  ci->warn(m_templateName,m_line,"recursetree: children attribute is not valid");
+          //}
         }
         if (!hasChildren)
         {
@@ -3635,6 +3684,7 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
     {
       //printf("TemplateNodeTree::render()\n");
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       TemplateVariant v = m_treeExpr->resolve(c);
       const TemplateListIntf *list = v.toList();
@@ -3706,9 +3756,10 @@ class TemplateNodeIndexEntry : public TemplateNodeCreator<TemplateNodeIndexEntry
     }
     void render(FTextStream &, TemplateContext *c)
     {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       if (!m_name.isEmpty())
       {
-        TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
         ci->setLocation(m_templateName,m_line);
         QListIterator<Mapping> it(m_args);
         Mapping *mapping;
@@ -3749,9 +3800,10 @@ class TemplateNodeOpenSubIndex : public TemplateNodeCreator<TemplateNodeOpenSubI
     }
     void render(FTextStream &, TemplateContext *c)
     {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       if (!m_name.isEmpty())
       {
-        TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
         ci->setLocation(m_templateName,m_line);
         ci->openSubIndex(m_name);
       }
@@ -3784,9 +3836,10 @@ class TemplateNodeCloseSubIndex : public TemplateNodeCreator<TemplateNodeCloseSu
     }
     void render(FTextStream &, TemplateContext *c)
     {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       if (!m_name.isEmpty())
       {
-        TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
         ci->setLocation(m_templateName,m_line);
         ci->closeSubIndex(m_name);
       }
@@ -3847,6 +3900,7 @@ class TemplateNodeWith : public TemplateNodeCreator<TemplateNodeWith>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       c->push();
       QListIterator<Mapping> it(m_args);
@@ -3958,6 +4012,7 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
     void render(FTextStream &, TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (m_mapping)
       {
@@ -3988,6 +4043,7 @@ class TemplateNodeSpaceless : public TemplateNodeCreator<TemplateNodeSpaceless>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       bool wasSpaceless = ci->spacelessEnabled();
       ci->enableSpaceless(TRUE);
@@ -4005,7 +4061,7 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
 {
   public:
     TemplateNodeMarkers(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
-      : TemplateNodeCreator<TemplateNodeMarkers>(parser,parent,line)
+      : TemplateNodeCreator<TemplateNodeMarkers>(parser,parent,line), m_listExpr(0), m_patternExpr(0)
     {
       TRACE(("{TemplateNodeMarkers(%s)\n",data.data()));
       int i = data.find(" in ");
@@ -4030,6 +4086,7 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
     void render(FTextStream &ts, TemplateContext *c)
     {
       TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
       ci->setLocation(m_templateName,m_line);
       if (!m_var.isEmpty() && m_listExpr && m_patternExpr)
       {
@@ -4098,6 +4155,81 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
 
 //----------------------------------------------------------
 
+/** @brief Class representing an 'markers' tag in a template */
+class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
+{
+  public:
+    TemplateNodeResource(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeResource>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeResource(%s)\n",data.data()));
+      ExpressionParser ep(parser,line);
+      int i;
+      if (data.isEmpty())
+      {
+        parser->warn(m_templateName,line,"resource tag is missing resource file argument");
+        m_resExpr=0;
+        m_asExpr=0;
+      }
+      else if ((i=data.find(" as "))!=-1) // resource a as b
+      {
+        m_resExpr = ep.parse(data.left(i));  // part before as
+        m_asExpr  = ep.parse(data.mid(i+4)); // part after as
+      }
+      else // resource a
+      {
+        m_resExpr = ep.parse(data);
+        m_asExpr  = 0;
+      }
+      TRACE(("}TemplateNodeResource(%s)\n",data.data()));
+    }
+    ~TemplateNodeResource()
+    {
+      delete m_resExpr;
+      delete m_asExpr;
+    }
+    void render(FTextStream &, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci==0) return; // should not happen
+      ci->setLocation(m_templateName,m_line);
+      if (m_resExpr)
+      {
+        QCString resourceFile = m_resExpr->resolve(c).toString();
+        if (resourceFile.isEmpty())
+        {
+          ci->warn(m_templateName,m_line,"invalid parameter for resource command\n");
+        }
+        else
+        {
+          QCString outputDirectory = ci->outputDirectory();
+          if (m_asExpr)
+          {
+            QCString targetFile = m_asExpr->resolve(c).toString();
+            mkpath(ci,targetFile);
+            if (targetFile.isEmpty())
+            {
+              ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n");
+            }
+            else
+            {
+              ResourceMgr::instance().copyResourceAs(resourceFile,outputDirectory,targetFile);
+            }
+          }
+          else
+          {
+            ResourceMgr::instance().copyResource(resourceFile,outputDirectory);
+          }
+        }
+      }
+    }
+  private:
+    ExprAst *m_resExpr;
+    ExprAst *m_asExpr;
+};
+
+//----------------------------------------------------------
+
 /** @brief Factory class for creating tag AST nodes found in a template */
 class TemplateNodeFactory
 {
@@ -4144,23 +4276,24 @@ class TemplateNodeFactory
 };
 
 // register a handler for each start tag we support
-static TemplateNodeFactory::AutoRegister<TemplateNodeIf>        autoRefIf("if");
-static TemplateNodeFactory::AutoRegister<TemplateNodeFor>       autoRefFor("for");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMsg>       autoRefMsg("msg");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSet>       autoRefSet("set");
-static TemplateNodeFactory::AutoRegister<TemplateNodeTree>      autoRefTree("recursetree");
-static TemplateNodeFactory::AutoRegister<TemplateNodeWith>      autoRefWith("with");
-static TemplateNodeFactory::AutoRegister<TemplateNodeBlock>     autoRefBlock("block");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCycle>     autoRefCycle("cycle");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRange>     autoRefRange("range");
-static TemplateNodeFactory::AutoRegister<TemplateNodeExtend>    autoRefExtend("extend");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCreate>    autoRefCreate("create");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat>    autoRefRepeat("repeat");
-static TemplateNodeFactory::AutoRegister<TemplateNodeInclude>   autoRefInclude("include");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers>   autoRefMarkers("markers");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless");
-static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry");
-static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIf>            autoRefIf("if");
+static TemplateNodeFactory::AutoRegister<TemplateNodeFor>           autoRefFor("for");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMsg>           autoRefMsg("msg");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSet>           autoRefSet("set");
+static TemplateNodeFactory::AutoRegister<TemplateNodeTree>          autoRefTree("recursetree");
+static TemplateNodeFactory::AutoRegister<TemplateNodeWith>          autoRefWith("with");
+static TemplateNodeFactory::AutoRegister<TemplateNodeBlock>         autoRefBlock("block");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCycle>         autoRefCycle("cycle");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRange>         autoRefRange("range");
+static TemplateNodeFactory::AutoRegister<TemplateNodeExtend>        autoRefExtend("extend");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCreate>        autoRefCreate("create");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat>        autoRefRepeat("repeat");
+static TemplateNodeFactory::AutoRegister<TemplateNodeInclude>       autoRefInclude("include");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers>       autoRefMarkers("markers");
+static TemplateNodeFactory::AutoRegister<TemplateNodeResource>      autoRefResource("resource");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless>     autoRefSpaceless("spaceless");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry>    autoRefIndexEntry("indexentry");
+static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex>  autoRefOpenSubIndex("opensubindex");
 static TemplateNodeFactory::AutoRegister<TemplateNodeCloseSubIndex> autoRefCloseSubIndex("closesubindex");
 
 //----------------------------------------------------------
@@ -4245,7 +4378,7 @@ void TemplateBlockContext::push(TemplateNodeBlock *block)
 class TemplateLexer
 {
   public:
-    TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data);
+    TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size);
     void tokenize(QList<TemplateToken> &tokens);
   private:
     void addToken(QList<TemplateToken> &tokens,
@@ -4257,9 +4390,12 @@ class TemplateLexer
     QCString m_data;
 };
 
-TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data) :
-  m_engine(engine), m_fileName(fileName), m_data(data)
+TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size) :
+  m_engine(engine), m_fileName(fileName)
 {
+  m_data.resize(size+1);
+  memcpy(m_data.rawData(),data,size);
+  m_data[size]=0;
 }
 
 void TemplateLexer::tokenize(QList<TemplateToken> &tokens)
@@ -4464,9 +4600,8 @@ void TemplateLexer::addToken(QList<TemplateToken> &tokens,
   if (startPos<endPos)
   {
     int len = endPos-startPos+1;
-    QCString text(len+1);
-    qstrncpy(text.data(),data+startPos,len);
-    text[len]='\0';
+    QCString text(len);
+    qstrncpy(text.rawData(),data+startPos,len);
     if (type!=TemplateToken::Text) text = text.stripWhiteSpace();
     tokens.append(new TemplateToken(type,text,line));
   }
@@ -4599,12 +4734,12 @@ void TemplateParser::warn(const char *fileName,int line,const char *fmt,...) con
 //----------------------------------------------------------
 
 
-TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCString &data)
+TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const char *data,int size)
   : TemplateNode(0)
 {
   m_name = name;
   m_engine = engine;
-  TemplateLexer lexer(engine,name,data);
+  TemplateLexer lexer(engine,name,data,size);
   QList<TemplateToken> tokens;
   tokens.setAutoDelete(TRUE);
   lexer.tokenize(tokens);
@@ -4614,12 +4749,13 @@ TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCS
 
 void TemplateImpl::render(FTextStream &ts, TemplateContext *c)
 {
+  TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+  if (ci==0) return; // should not happen
   if (!m_nodes.isEmpty())
   {
     TemplateNodeExtend *ne = dynamic_cast<TemplateNodeExtend*>(m_nodes.getFirst());
     if (ne==0) // normal template, add blocks to block context
     {
-      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
       TemplateBlockContext *bc = ci->blockContext();
       QListIterator<TemplateNode> li(m_nodes);
       TemplateNode *n;
@@ -4673,6 +4809,13 @@ class TemplateEngine::Private
       Template *templ = m_templateCache.find(fileName);
       if (templ==0)
       {
+        const Resource *res = ResourceMgr::instance().get(fileName);
+        if (res)
+        {
+          templ = new TemplateImpl(m_engine,fileName,(const char *)res->data,res->size);
+          m_templateCache.insert(fileName,templ);
+        }
+#if 0
         QFile f(fileName);
         if (f.open(IO_ReadOnly))
         {
@@ -4689,6 +4832,7 @@ class TemplateEngine::Private
             delete[] data;
           }
         }
+#endif
         else
         {
           err("Cound not open template file %s\n",fileName.data());
diff --git a/src/tooltip.cpp b/src/tooltip.cpp
index 8085bff..8db0394 100644
--- a/src/tooltip.cpp
+++ b/src/tooltip.cpp
@@ -59,7 +59,7 @@ void TooltipManager::clearTooltips()
 static QCString escapeId(const char *s)
 {
   QCString res=s;
-  char *p=res.data();
+  char *p=res.rawData();
   while (*p)
   {
     if (!isId(*p)) *p='_';
diff --git a/src/translator_br.h b/src/translator_br.h
index b381495..b7bd604 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ * Copyright (C) 1997-2013 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby
@@ -15,26 +15,30 @@
  *    Thanks to Jorge Ramos, Fernando Carijo and others for their contributions.
  *
  * History:
- *   20110628:
- *	- Updated to 1.7.5;
- *   20100531:
- *	- Updated to 1.6.3;
- *   20091218:
- *      - Updated to 1.6.1;
- *      - Copyright year updated;
- *      - Translation updates suggested by Fernando Carijó added;
- *   20080709:
+ * 20131129:
+ *  - Updated to 1.8.5;
+ *  - Translation in the method trFileMembers() fixed;
+ *  - Translation in the method trEnumerationValues() fixed;
+ * 20110628:
+ *  - Updated to 1.7.5;
+ * 20100531:
+ *  - Updated to 1.6.3;
+ * 20091218:
+ *  - Updated to 1.6.1;
+ *  - Copyright year updated;
+ *  - Translation updates suggested by Fernando Carijó added;
+ * 20080709:
  *	- References to MAX_DOT_GRAPH_HEIGHT removed from trLegendDocs().
- *   20080206:
- *      - Method trTypeContraints() renamed to trTypeConstraints().
- *   20071216:
+ * 20080206:
+ *  - Method trTypeContraints() renamed to trTypeConstraints().
+ * 20071216:
  * 	- New methods since 1.5.4 updated.
- *   Previous history removed from this version.
+ * Previous history removed from this version.
  */
 #ifndef TRANSLATOR_BR_H
 #define TRANSLATOR_BR_H
 
-class TranslatorBrazilian : public TranslatorAdapter_1_8_0
+class TranslatorBrazilian : public Translator
 {
   public:
 
@@ -194,7 +198,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0
       }
       else
       {
-        return "Arquivos Membros";
+        return "Membros dos Arquivos";
       }
     }
 
@@ -432,7 +436,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0
      *  list of (global) variables
      */
     virtual QCString trEnumerationValues()
-    { return "Valores enumerados"; }
+    { return "Valores de enumerações"; }
 
     /*! This is used in the documentation of a file before the list of
      *  documentation blocks for defines
@@ -1834,5 +1838,185 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0
     /*! Header for the graph showing the directory dependencies */
     virtual QCString trDirDepGraph(const char *name)
     { return QCString("Grafo de dependências do diretório ")+name+":"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.0
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Detail level selector shown for hierarchical indices */
+    virtual QCString trDetailLevel()
+    { return "nível de detalhes"; }
+
+    /*! Section header for list of template parameters */
+    virtual QCString trTemplateParameters()
+    { return "Parâmetros de template"; }
+
+    /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
+    virtual QCString trAndMore(const QCString &number)
+    { return "e "+number+" mais..."; }
+
+    /*! Used file list for a Java enum */
+    virtual QCString trEnumGeneratedFromFiles(bool single)
+    { QCString result = "A documentação para esta enumeração foi gerada a partir";
+      if (single) {
+        result += "do seguinte arquivo:";
+      } else {
+        result += "dos seguintes arquivos:";
+      }
+      return result;
+    }
+
+    /*! Header of a Java enum page (Java enums are represented as classes). */
+    virtual QCString trEnumReference(const char *name)
+    {
+      QCString result = "Referência da enumeração ";
+      return result + name;
+    }
+
+    /*! Used for a section containing inherited members */
+    virtual QCString trInheritedFrom(const char *members,const char *what)
+    { return QCString(members)+" herdados de "+what; }
+
+    /*! Header of the sections with inherited members specific for the
+     *  base class(es)
+     */
+    virtual QCString trAdditionalInheritedMembers()
+    { return "Outros membros herdados"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a tooltip for the toggle button that appears in the
+     *  navigation tree in the HTML output when GENERATE_TREEVIEW is
+     *  enabled. This tooltip explains the meaning of the button.
+     */
+    virtual QCString trPanelSynchronisationTooltip(bool enable)
+    {
+      QCString opt = enable ? "ativar" : "desativar";
+      return "clique para "+opt+" a sincronização do painel";
+    }
+
+    /*! Used in a method of an Objective-C class that is declared in a
+     *  a category. Note that the @1 marker is required and is replaced
+     *  by a link.
+     */
+    virtual QCString trProvidedByCategory()
+    {
+      return "Provido pela categoria @1.";
+    }
+
+    /*! Used in a method of an Objective-C category that extends a class.
+     *  Note that the @1 marker is required and is replaced by a link to
+     *  the class method.
+     */
+    virtual QCString trExtendsClass()
+    {
+      return "estende a classe @1.";
+    }
+
+    /*! Used as the header of a list of class methods in Objective-C.
+     *  These are similar to static public member functions in C++.
+     */
+    virtual QCString trClassMethods()
+    {
+      return "Métodos de classe";
+    }
+
+    /*! Used as the header of a list of instance methods in Objective-C.
+     *  These are similar to public member functions in C++.
+     */
+    virtual QCString trInstanceMethods()
+    {
+      return "Métodos de instância";
+    }
+
+    /*! Used as the header of the member functions of an Objective-C class.
+     */
+    virtual QCString trMethodDocumentation()
+    {
+      return "Documentação do método";
+    }
+
+    /*! Used as the title of the design overview picture created for the
+     *  VHDL output.
+     */
+    virtual QCString trDesignOverview()
+    {
+      // I'm not sure how to accurately translate it
+      return "Visão geral do design";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+    /** old style UNO IDL services: implemented interfaces */
+    virtual QCString trInterfaces()
+    { return "Interfaces Exportadas"; }
+
+    /** old style UNO IDL services: inherited services */
+    virtual QCString trServices()
+    { return "Serviços Incluídos"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroups()
+    { return "Grupos de Constantes"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroupReference(const char *namespaceName)
+    {
+      QCString result = "Referência do grupo de constantes ";
+      result += namespaceName;
+      return result;
+    }
+
+    /** UNO IDL service page title */
+    virtual QCString trServiceReference(const char *sName)
+    {
+      QCString result = "Referência do serviço ";
+      result += sName;
+      return result;
+    }
+
+    /** UNO IDL singleton page title */
+    virtual QCString trSingletonReference(const char *sName)
+    {
+      QCString result = "Referência do Singleton ";
+      result += sName;
+      return result;
+    }
+
+    /** UNO IDL service page */
+    virtual QCString trServiceGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"A documentação para este serviço "
+                                "foi gerada a partir ";
+      if (single) {
+        result+="do seguinte arquivo:";
+      } else {
+        result+="dos: seguintes arquivos:";
+      }
+      return result;
+    }
+
+    /** UNO IDL singleton page */
+    virtual QCString trSingletonGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"A documentação para este singleton "
+                                "foi gerada a partir ";
+      if (single) {
+        result+="do seguinte arquivo:";
+      } else {
+        result+="dos: seguintes arquivos:";
+      }
+
+      return result;
+    }
+
+//////////////////////////////////////////////////////////////////////////
 };
 #endif
+
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 70dba21..98a746a 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -943,9 +943,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trMember(bool first_capital, bool singular)
+    virtual QCString trMember(bool, bool singular)
     {
-      QCString result((first_capital ? "član" : "član"));
+      QCString result("član");
       if (!singular)  result+="ovi";
       return result;
     }
diff --git a/src/translator_kr.h b/src/translator_kr.h
index 6919763..18337a5 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -677,10 +677,10 @@ class TranslatorKorean : public Translator
 
         if (i!=numEntries-1)  // not the last entry, so we need a separator
         {
-          if (i<numEntries-2) // not the fore last entry
-            result+=", ";
-          else                // the fore last entry
+          //if (i<numEntries-2) // not the fore last entry
             result+=", ";
+          //else                // the fore last entry
+          //  result+=", ";     // TODO: does the 'and' need to be translated here?
         }
       }
       return result;
@@ -1203,9 +1203,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trClass(bool first_capital, bool singular)
+    virtual QCString trClass(bool, bool singular)
     {
-      QCString result((first_capital ? "클래스" : "클래스"));
+      QCString result("클래스");
       if (!singular)  result+="들";
       return result;
     }
@@ -1214,9 +1214,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trFile(bool first_capital, bool singular)
+    virtual QCString trFile(bool, bool singular)
     {
-      QCString result((first_capital ? "파일" : "파일"));
+      QCString result("파일");
       if (!singular)  result+="들";
       return result;
     }
@@ -1225,9 +1225,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trNamespace(bool first_capital, bool singular)
+    virtual QCString trNamespace(bool, bool singular)
     {
-      QCString result((first_capital ? "네임스페이스" : "네임스페이스"));
+      QCString result("네임스페이스");
       if (!singular)  result+="들";
       return result;
     }
@@ -1236,9 +1236,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trGroup(bool first_capital, bool singular)
+    virtual QCString trGroup(bool, bool singular)
     {
-      QCString result((first_capital ? "그룹" : "그룹"));
+      QCString result("그룹");
       if (!singular)  result+="들";
       return result;
     }
@@ -1247,9 +1247,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trPage(bool first_capital, bool singular)
+    virtual QCString trPage(bool, bool singular)
     {
-      QCString result((first_capital ? "페이지" : "페이지"));
+      QCString result("페이지");
       if (!singular)  result+="들";
       return result;
     }
@@ -1258,9 +1258,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trMember(bool first_capital, bool singular)
+    virtual QCString trMember(bool, bool singular)
     {
-      QCString result((first_capital ? "멤버" : "멤버"));
+      QCString result("멤버");
       if (!singular)  result+="들";
       return result;
     }
@@ -1269,9 +1269,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trGlobal(bool first_capital, bool singular)
+    virtual QCString trGlobal(bool, bool singular)
     {
-      QCString result((first_capital ? "전역" : "전역"));
+      QCString result("전역");
       if (!singular)  result+="";
       return result;
     }
@@ -1282,9 +1282,9 @@ class TranslatorKorean : public Translator
 
     /*! This text is generated when the \\author command is used and
      *  for the author section in man pages. */
-    virtual QCString trAuthor(bool first_capital, bool singular)
+    virtual QCString trAuthor(bool, bool singular)
     {
-      QCString result((first_capital ? "작성자" : "작성자"));
+      QCString result("작성자");
       if (!singular)  result+="들";
       return result;
     }
@@ -1509,9 +1509,9 @@ class TranslatorKorean : public Translator
     /*! This returns the word directory with or without starting capital
      *  (\a first_capital) and in sigular or plural form (\a singular).
      */
-    virtual QCString trDir(bool first_capital, bool singular)
+    virtual QCString trDir(bool, bool singular)
     {
-      QCString result((first_capital ? "디렉토리" : "디렉토리"));
+      QCString result("디렉토리");
       if (singular) result+=""; else result+="들";
       return result;
     }
@@ -1690,9 +1690,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trModule(bool first_capital, bool singular)
+    virtual QCString trModule(bool, bool singular)
     {
-      QCString result((first_capital ? "모듈" : "모듈"));
+      QCString result("모듈");
       if (!singular)  result+="들";
       return result;
     }
@@ -1725,9 +1725,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trType(bool first_capital, bool singular)
+    virtual QCString trType(bool, bool singular)
     {
-      QCString result((first_capital ? "타입" : "타입"));
+      QCString result("타입");
       if (!singular)  result+="들";
       return result;
     }
@@ -1735,9 +1735,9 @@ class TranslatorKorean : public Translator
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trSubprogram(bool first_capital, bool singular)
+    virtual QCString trSubprogram(bool, bool singular)
     {
-      QCString result((first_capital ? "서브프로그램" : "서브프로그램"));
+      QCString result("서브프로그램");
       if (!singular)  result+="들";
       return result;
     }
diff --git a/src/translator_lt.h b/src/translator_lt.h
index 000dc6e..174170e 100644
--- a/src/translator_lt.h
+++ b/src/translator_lt.h
@@ -197,7 +197,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6
       }
       else
       {
-        return "Globalūs Nariai";
+        return "Failų Nariai";
       }
     }
 
diff --git a/src/translator_pt.h b/src/translator_pt.h
index 95a62b0..13422f6 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ * Copyright (C) 1997-2013 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby
@@ -24,6 +24,9 @@
  * VERSION HISTORY
  * ---------------
  * History:
+ * 20131129:
+ *  - Updated to 1.8.5;
+ *  - Translation in the method trFileMembers() fixed;
  * 20110628:
  *	- Updated to 1.7.5;
  *      - All obsolete methods have been removed;
@@ -52,7 +55,7 @@
 #define TRANSLATOR_PT_H
 
 
-class TranslatorPortuguese : public TranslatorAdapter_1_8_0
+class TranslatorPortuguese : public Translator
 {
   public:
 
@@ -216,7 +219,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0
       }
       else
       {
-        return "Ficheiros membro";
+        return "Membros dos Ficheiros";
       }
     }
 
@@ -442,7 +445,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0
      *  list of (global) variables
      */
     QCString trEnumerationValues()
-    { return "Valores da enumeração"; }
+    { return "Valores de enumerações"; }
 
     /*! This is used in the documentation of a file before the list of
      *  documentation blocks for defines
@@ -1835,6 +1838,185 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0
     /*! Header for the graph showing the directory dependencies */
     virtual QCString trDirDepGraph(const char *name)
     { return QCString("Grafo de dependências do directório ")+name+":"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.0
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Detail level selector shown for hierarchical indices */
+    virtual QCString trDetailLevel()
+    { return "nível de detalhes"; }
+
+    /*! Section header for list of template parameters */
+    virtual QCString trTemplateParameters()
+    { return "Parâmetros de template"; }
+
+    /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
+    virtual QCString trAndMore(const QCString &number)
+    { return "e "+number+" mais..."; }
+
+    /*! Used file list for a Java enum */
+    virtual QCString trEnumGeneratedFromFiles(bool single)
+    { QCString result = "A documentação para esta enumeração foi gerada a partir";
+      if (single) {
+        result += "do seguinte ficheiro:";
+      } else {
+        result += "dos seguintes ficheiros:";
+      }
+      return result;
+    }
+
+    /*! Header of a Java enum page (Java enums are represented as classes). */
+    virtual QCString trEnumReference(const char *name)
+    {
+      QCString result = "Referência da enumeração ";
+      return result + name;
+    }
+
+    /*! Used for a section containing inherited members */
+    virtual QCString trInheritedFrom(const char *members,const char *what)
+    { return QCString(members)+" herdados de "+what; }
+
+    /*! Header of the sections with inherited members specific for the
+     *  base class(es)
+     */
+    virtual QCString trAdditionalInheritedMembers()
+    { return "Outros membros herdados"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a tooltip for the toggle button that appears in the
+     *  navigation tree in the HTML output when GENERATE_TREEVIEW is
+     *  enabled. This tooltip explains the meaning of the button.
+     */
+    virtual QCString trPanelSynchronisationTooltip(bool enable)
+    {
+      QCString opt = enable ? "ativar" : "desativar";
+      return "clique para "+opt+" a sincronização do painel";
+    }
+
+    /*! Used in a method of an Objective-C class that is declared in a
+     *  a category. Note that the @1 marker is required and is replaced
+     *  by a link.
+     */
+    virtual QCString trProvidedByCategory()
+    {
+      return "Provido pela categoria @1.";
+    }
+
+    /*! Used in a method of an Objective-C category that extends a class.
+     *  Note that the @1 marker is required and is replaced by a link to
+     *  the class method.
+     */
+    virtual QCString trExtendsClass()
+    {
+      return "estende a classe @1.";
+    }
+
+    /*! Used as the header of a list of class methods in Objective-C.
+     *  These are similar to static public member functions in C++.
+     */
+    virtual QCString trClassMethods()
+    {
+      return "Métodos de classe";
+    }
+
+    /*! Used as the header of a list of instance methods in Objective-C.
+     *  These are similar to public member functions in C++.
+     */
+    virtual QCString trInstanceMethods()
+    {
+      return "Métodos de instância";
+    }
+
+    /*! Used as the header of the member functions of an Objective-C class.
+     */
+    virtual QCString trMethodDocumentation()
+    {
+      return "Documentação do método";
+    }
+
+    /*! Used as the title of the design overview picture created for the
+     *  VHDL output.
+     */
+    virtual QCString trDesignOverview()
+    {
+      // I'm not sure how to accurately translate it
+      return "Visão geral do design";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+    /** old style UNO IDL services: implemented interfaces */
+    virtual QCString trInterfaces()
+    { return "Interfaces Exportadas"; }
+
+    /** old style UNO IDL services: inherited services */
+    virtual QCString trServices()
+    { return "Serviços Incluídos"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroups()
+    { return "Grupos de Constantes"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroupReference(const char *namespaceName)
+    {
+      QCString result = "Referência do grupo de constantes ";
+      result += namespaceName;
+      return result;
+    }
+
+    /** UNO IDL service page title */
+    virtual QCString trServiceReference(const char *sName)
+    {
+      QCString result = "Referência do serviço ";
+      result += sName;
+      return result;
+    }
+
+    /** UNO IDL singleton page title */
+    virtual QCString trSingletonReference(const char *sName)
+    {
+      QCString result = "Referência do Singleton ";
+      result += sName;
+      return result;
+    }
+
+    /** UNO IDL service page */
+    virtual QCString trServiceGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"A documentação para este serviço "
+                                "foi gerada a partir ";
+      if (single) {
+        result+="do seguinte ficheiro:";
+      } else {
+        result+="dos: seguintes ficheiros:";
+      }
+      return result;
+    }
+
+    /** UNO IDL singleton page */
+    virtual QCString trSingletonGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"A documentação para este singleton "
+                                "foi gerada a partir ";
+      if (single) {
+        result+="do seguinte ficheiro:";
+      } else {
+        result+="dos: seguintes ficheiros:";
+      }
+
+      return result;
+    }
+
+//////////////////////////////////////////////////////////////////////////
 };
 
 #endif
diff --git a/src/translator_ru.h b/src/translator_ru.h
index 54174d7..c06d911 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -1605,7 +1605,7 @@ class TranslatorRussian : public Translator
       }
       else
       {
-	if (isTemplate) result+=" Шаблон ";
+	result+=" Шаблон ";
 	switch(compType)
 	{
 	  case ClassDef::Class:      result+="модуля"; break;
diff --git a/src/translator_sr.h b/src/translator_sr.h
index f58ac13..09b6534 100644
--- a/src/translator_sr.h
+++ b/src/translator_sr.h
@@ -188,14 +188,14 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0
     /*! This is put above each page as a link to all members of files. */
     virtual QCString trFileMembers()
     {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-       return "Članovi datoteke";
-      }
-      else
-      {
-       return "Članovi datoteke";
-      }
+      //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      //{
+      // return "Članovi datoteke"; // TODO: translate me
+      //}
+      //else
+      //{
+      return "Članovi datoteke";
+      //}
     }
 
     /*! This is put above each page as a link to all related pages. */
diff --git a/src/translator_tw.h b/src/translator_tw.h
index 581d7fe..9da3365 100644
--- a/src/translator_tw.h
+++ b/src/translator_tw.h
@@ -749,8 +749,7 @@ class TranslatorChinesetraditional : public Translator
     /*! This is put at the bottom of a class documentation page and is
      *  followed by a list of files that were used to generate the page.
      */
-    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
-        bool single)
+    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,bool)
     { // here s is one of " Class", " Struct" or " Union"
       // single is true implies a single file
       QCString result=(QCString)"此";
@@ -766,7 +765,7 @@ class TranslatorChinesetraditional : public Translator
         default: break;
       }
       result+=" 文件是由下列檔案中產生";
-      if (single) result+=":"; else result+=":";
+      result+=":";
       return result;
     }
 
@@ -1948,21 +1947,21 @@ class TranslatorChinesetraditional : public Translator
       return result;
     }
     /** UNO IDL service page */
-    virtual QCString trServiceGeneratedFromFiles(bool single)
+    virtual QCString trServiceGeneratedFromFiles(bool)
     {
       // single is true implies a single file
       QCString result=(QCString)"本服務的文件由以下的檔案"
                                 "所產生";
-      if (single) result+=":"; else result+=":";
+      result+=":";
       return result;
     }
     /** UNO IDL singleton page */
-    virtual QCString trSingletonGeneratedFromFiles(bool single)
+    virtual QCString trSingletonGeneratedFromFiles(bool)
     {
       // single is true implies a single file
       QCString result=(QCString)"本singleton的文件由下面的檔案"
                                 "所產生";
-      if (single) result+=":"; else result+=":";
+      result+=":";
       return result;
     }
 
diff --git a/src/translator_ua.h b/src/translator_ua.h
index b7ca86a..45efd6e 100644
--- a/src/translator_ua.h
+++ b/src/translator_ua.h
@@ -1596,7 +1596,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4
       }
       else
       {
-	if (isTemplate) result+=" Шаблон ";
+	result+=" Шаблон ";
 	switch(compType)
 	{
 	  case ClassDef::Class:      result+="модуля"; break;
diff --git a/src/translator_vi.h b/src/translator_vi.h
index 54c68b8..dd0a8f1 100644
--- a/src/translator_vi.h
+++ b/src/translator_vi.h
@@ -749,8 +749,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0
     /*! This is put at the bottom of a class documentation page and is
      *  followed by a list of files that were used to generate the page.
      */
-    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
-        bool single)
+    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,bool)
     { // here s is one of " Class", " Struct" or " Union"
       // single is true implies a single file
       QCString result=(QCString)"Thông tin cho ";
@@ -766,7 +765,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0
         default: break;
       }
       result+=" được biên soạn từ các file sau đây";
-      if (single) result+=":"; else result+=":";
+      result+=":";
       return result;
     }
 
@@ -1501,10 +1500,9 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0
     /*! This returns the word directory with or without starting capital
      *  (\a first_capital) and in sigular or plural form (\a singular).
      */
-    virtual QCString trDir(bool first_capital, bool singular)
+    virtual QCString trDir(bool first_capital, bool)
     {
       QCString result((first_capital ? "Thư mục" : "thư mục"));
-      if (singular) result+=""; else result+="";
       return result;
     }
 
diff --git a/src/util.cpp b/src/util.cpp
index a524922..00173fb 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -264,8 +264,9 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
  */
 QCString generateMarker(int id)
 {
-  QCString result;
-  result.sprintf("@%d",id);
+  const int maxMarkerStrLen = 20;
+  char result[maxMarkerStrLen];
+  qsnprintf(result,maxMarkerStrLen,"@%d",id);
   return result;
 }
 
@@ -1447,7 +1448,7 @@ static ClassDef *getResolvedClassRec(Definition *scope,
   // below is a more efficient coding of
   // QCString key=scope->name()+"+"+name+"+"+explicitScopePart;
   QCString key(scopeNameLen+nameLen+explicitPartLen+fileScopeLen+1);
-  char *p=key.data();
+  char *p=key.rawData();
   qstrcpy(p,scope->name()); *(p+scopeNameLen-1)='+';
   p+=scopeNameLen;
   qstrcpy(p,name); *(p+nameLen-1)='+';
@@ -2190,7 +2191,7 @@ QCString argListToString(ArgumentList *al,bool useCanonicalType,bool showDefVals
   return removeRedundantWhiteSpace(result);
 }
 
-QCString tempArgListToString(ArgumentList *al)
+QCString tempArgListToString(ArgumentList *al,SrcLangExt lang)
 {
   QCString result;
   if (al==0) return result;
@@ -2209,6 +2210,10 @@ QCString tempArgListToString(ArgumentList *al)
       {
         result+="in ";
       }
+      if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
+      {
+        result+=a->type+" ";
+      }
       result+=a->name;
     }
     else // extract name from type
@@ -2374,8 +2379,8 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
   {
     size_t iLeft=inputSize;
     size_t oLeft=outputSize;
-    char *inputPtr = input.data();
-    char *outputPtr = output.data();
+    char *inputPtr = input.rawData();
+    char *outputPtr = output.rawData();
     if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
     {
       outputSize-=(int)oLeft;
@@ -2413,12 +2418,12 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
       QCString contents(bSize);
       int totalSize=0;
       int size;
-      while ((size=f.readBlock(contents.data()+totalSize,bSize))==bSize)
+      while ((size=f.readBlock(contents.rawData()+totalSize,bSize))==bSize)
       {
         totalSize+=bSize;
-        contents.resize(totalSize+bSize); 
+        contents.resize(totalSize+bSize);
       }
-      totalSize = filterCRLF(contents.data(),totalSize+size)+2;
+      totalSize = filterCRLF(contents.rawData(),totalSize+size)+2;
       contents.resize(totalSize);
       contents.at(totalSize-2)='\n'; // to help the scanner
       contents.at(totalSize-1)='\0';
@@ -3232,7 +3237,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
   // all arguments.
   ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
   Argument *srcA,*dstA;
-  for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
+  for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
   { 
     if (!matchArgument(srcA,dstA,className,namespaceName,
           usingNamespaces,usingClasses))
@@ -3312,7 +3317,7 @@ static QCString getCanonicalTypeForIdentifier(
 {
   if (count>10) return word; // oops recursion
 
-  QCString symName,scope,result,templSpec,tmpName;
+  QCString symName,result,templSpec,tmpName;
   //DefinitionList *defList=0;
   if (tSpec && !tSpec->isEmpty()) 
     templSpec = stripDeclKeywords(getCanonicalTemplateSpec(d,fs,*tSpec));
@@ -3665,7 +3670,7 @@ bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *sr
   // all arguments.
   ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
   Argument *srcA,*dstA;
-  for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
+  for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
   { 
     if (!matchArgument2(srcScope,srcFileScope,srcA,
           dstScope,dstFileScope,dstA)
@@ -3695,7 +3700,7 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr
 
   ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
   Argument *srcA,*dstA;
-  for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
+  for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
   {
     if (srcA->defval.isEmpty() && !dstA->defval.isEmpty())
     {
@@ -4106,8 +4111,6 @@ bool getDefs(const QCString &scName,
 
       if (!args) break;
 
-      QCString className = mmd->getClassDef()->name();
-
       ArgumentList *mmdAl = mmd->argumentList();
       if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
             Doxygen::globalScope,mmd->getFileDef(),argList,
@@ -4711,6 +4714,7 @@ bool resolveLink(/* in */ const char *scName,
   *resContext=0;
 
   QCString linkRef=lr;
+  QCString linkRefWithoutTemplates = stripTemplateSpecifiersFromScope(linkRef,FALSE);
   //printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock);
   FileDef  *fd;
   GroupDef *gd;
@@ -4767,6 +4771,12 @@ bool resolveLink(/* in */ const char *scName,
     resAnchor=cd->anchor();
     return TRUE;
   }
+  else if ((cd=getClass(linkRefWithoutTemplates))) // C#/Java generic class link
+  {
+    *resContext=cd;
+    resAnchor=cd->anchor();
+    return TRUE;
+  }
   else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link
   {
     *resContext=cd;
@@ -4909,8 +4919,10 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
   ambig=FALSE;
   if (n==0) return 0;
 
-  QCString key;
-  key.sprintf("%p:",fnDict);
+  const int maxAddrSize = 20;
+  char addr[maxAddrSize];
+  qsnprintf(addr,maxAddrSize,"%p:",fnDict);
+  QCString key = addr;
   key+=n;
 
   g_findFileDefCache.setAutoDelete(TRUE);
@@ -5026,6 +5038,41 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
 
 //----------------------------------------------------------------------
 
+/// substitute all occurrences of \a src in \a s by \a dst
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst)
+{
+  if (s.isEmpty() || src.isEmpty()) return s;
+  const char *p, *q;
+  int srcLen = src.length();
+  int dstLen = dst.length();
+  int resLen;
+  if (srcLen!=dstLen)
+  {
+    int count;
+    for (count=0, p=s.data(); (q=strstr(p,src))!=0; p=q+srcLen) count++;
+    resLen = s.length()+count*(dstLen-srcLen);
+  }
+  else // result has same size as s
+  {
+    resLen = s.length();
+  }
+  QCString result(resLen+1);
+  char *r;
+  for (r=result.rawData(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
+  {
+    int l = (int)(q-p);
+    memcpy(r,p,l);
+    r+=l;
+    if (dst) memcpy(r,dst,dstLen);
+    r+=dstLen;
+  }
+  qstrcpy(r,p);
+  //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
+  return result;
+}
+
+//----------------------------------------------------------------------
+
 QCString substituteKeywords(const QCString &s,const char *title,
          const char *projName,const char *projNum,const char *projBrief)
 {
@@ -5291,7 +5338,7 @@ QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore)
       uchar md5_sig[16];
       QCString sigStr(33);
       MD5Buffer((const unsigned char *)result.data(),resultLen,md5_sig);
-      MD5SigToString(md5_sig,sigStr.data(),33);
+      MD5SigToString(md5_sig,sigStr.rawData(),33);
       result=result.left(128-32)+sigStr; 
     }
   }
@@ -5985,10 +6032,11 @@ QCString substituteTemplateArgumentsInString(
     // for its template instance argument.
     bool found=FALSE;
     for (formAli.toFirst();
-        (formArg=formAli.current()) && !found && (actArg=actAli.current());
+        (formArg=formAli.current()) && !found;
         ++formAli,++actAli
         )
     {
+      actArg = actAli.current();
       if (formArg->type.left(6)=="class " && formArg->name.isEmpty())
       {
         formArg->name = formArg->type.mid(6);
@@ -6004,7 +6052,7 @@ QCString substituteTemplateArgumentsInString(
         //printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
         //  n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
         //printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
-        //    formArg->name.data(),actArg->type.data(),actArg->name.data()
+        //    formArg->name.data(),actArg ? actArg->type.data() : "",actArg ? actArg->name.data() : ""
         //    );
         if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
         {
@@ -6245,7 +6293,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
   {
     // append documentation block to the page.
     pd->setDocumentation(doc,fileName,startLine);
-    //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pi,name);
+    //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pd,name);
   }
   else // new page
   {
@@ -6322,7 +6370,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
 
 void addRefItem(const QList<ListItemInfo> *sli,
     const char *key, 
-    const char *prefix, const char *name,const char *title,const char *args)
+    const char *prefix, const char *name,const char *title,const char *args,Definition *scope)
 {
   //printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
   if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
@@ -6347,6 +6395,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
         ASSERT(item!=0);
 
         item->prefix = prefix;
+        item->scope  = scope;
         item->name   = name;
         item->title  = title;
         item->args   = args;
@@ -6458,6 +6507,8 @@ void filterLatexString(FTextStream &t,const char *str,
                    break;           
         case '"':  t << "\\char`\\\"{}";
                    break;
+        case '\'': t << "\\textquotesingle{}";
+                   break;
 
         default:   
                    //if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ')
@@ -6497,7 +6548,7 @@ QCString rtfFormatBmkStr(const char *name)
     g_tagDict.insert( key, tag );
 
     // This is the increment part
-    char* nxtTag = g_nextTag.data() + g_nextTag.length() - 1;
+    char* nxtTag = g_nextTag.rawData() + g_nextTag.length() - 1;
     for ( unsigned int i = 0; i < g_nextTag.length(); ++i, --nxtTag )
     {
       if ( ( ++(*nxtTag) ) > 'Z' )
@@ -6515,16 +6566,25 @@ QCString rtfFormatBmkStr(const char *name)
   return *tag;
 }
 
-QCString stripExtension(const char *fName)
+bool checkExtension(const char *fName, const char *ext)
+{
+  return (QCString(fName).right(QCString(ext).length())==ext);
+}
+
+QCString stripExtensionGeneral(const char *fName, const char *ext)
 {
   QCString result=fName;
-  if (result.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
+  if (result.right(QCString(ext).length())==QCString(ext))
   {
-    result=result.left(result.length()-Doxygen::htmlFileExtension.length());
+    result=result.left(result.length()-QCString(ext).length());
   }
   return result;
 }
 
+QCString stripExtension(const char *fName)
+{
+  return stripExtensionGeneral(fName, Doxygen::htmlFileExtension);
+}
 
 void replaceNamespaceAliases(QCString &scope,int i)
 {
diff --git a/src/util.h b/src/util.h
index f74fad0..937b222 100644
--- a/src/util.h
+++ b/src/util.h
@@ -192,7 +192,7 @@ void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE)
 
 QCString substituteClassNames(const QCString &s);
 
-QCString substitute(const char *s,const char *src,const char *dst);
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst);
 
 QCString clearBlock(const char *s,const char *begin,const char *end);
 
@@ -229,7 +229,7 @@ QCString removeRedundantWhiteSpace(const QCString &s);
 
 QCString argListToString(ArgumentList *al,bool useCanonicalType=FALSE,bool showDefVals=TRUE);
 
-QCString tempArgListToString(ArgumentList *al);
+QCString tempArgListToString(ArgumentList *al,SrcLangExt lang);
 
 QCString generateMarker(int id);
 
@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len);
 
 void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
                 const char *key,
-                const char *name,const char *title,const char *args);
+                const char *name,const char *title,const char *args,Definition *scope);
 
 PageDef *addRelatedPage(const char *name,const QCString &ptitle,
                            const QCString &doc,QList<SectionInfo> *anchors,
@@ -340,6 +340,10 @@ QCString rtfFormatBmkStr(const char *name);
 
 QCString linkToText(SrcLangExt lang,const char *link,bool isFileName);
 
+bool checkExtension(const char *fName, const char *ext);
+
+QCString stripExtensionGeneral(const char *fName, const char *ext);
+
 QCString stripExtension(const char *fName);
 
 void replaceNamespaceAliases(QCString &scope,int i);
diff --git a/src/version.cpp b/src/version.cpp
index 33e8787..8f25241 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -1 +1 @@
-char versionString[]="1.8.8";
+char versionString[]="1.8.9.1";
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index fa199d1..2b0841e 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -68,7 +68,6 @@ static bool       g_startCode = FALSE;
 static QCString   g_PrevString;
 static QCString   g_CurrClass;
 static QDict<QCString>g_vhdlKeyDict;   
-static QCString   g_tempClass;
 static QCString   g_tempComp;
 static QCString   g_PortMapComp;
 static MemberDef *g_vhdlMember;
@@ -77,7 +76,6 @@ static QCString   g_FuncProto;
 //-----------------------------------------------------------
   
 static CodeOutputInterface * g_code;
-static QCString      g_curClassName;
 static QCString      g_parmType;
 static QCString      g_parmName;
 static const char *  g_inputString;     //!< the code fragment as text
@@ -90,9 +88,6 @@ static Definition   *g_searchCtx;
 static QCString      g_exampleName;
 static QCString      g_exampleFile;
 
-static QCString      g_type;
-static QCString      g_name;
-static QCString      g_args;
 static QCString      g_classScope;
    
 static QCString      g_CurrScope;
@@ -620,7 +615,7 @@ static void appStringLower(QCString& qcs,const char* text)
 static QCString g_temp;
 
 /* writes and links a port map statement */
-static void codifyMapLines(char *text)
+static void codifyMapLines(const char *text)
 {
   if (text==0) return;
   g_temp.resize(0);       
@@ -628,7 +623,7 @@ static void codifyMapLines(char *text)
   int wordCounter=0;
   QCString ctemp;
   //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
-  char *p=text; //,*sp=p;
+  const char *p=text; //,*sp=p;
   char c;
   bool done=FALSE;
   while (!done)
@@ -1055,7 +1050,6 @@ XILINX      "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
 
 
 <ClassesName>{FUNCNAME} {
-                         QDict<QCString> mem;
                          appStringLower(g_PrevString,vhdlcodeYYtext);
                          g_CurrClass.resize(0);
                          g_CurrClass.append(vhdlcodeYYtext);
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index 0617ea6..170bf5b 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -70,7 +70,6 @@ static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
 static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
 static QDict<QCString> g_vhdlKeyDict2(17,FALSE);
 static QDict<QCString> g_vhdlKeyDict3(17,FALSE);
-static QDict<QCString> g_xilinxUcfDict(17,FALSE);
 
 static void initUCF(Entry* root,const char* type,QCString &  qcs,int line,QCString & fileName,QCString & brief);
 static void writeUCFLink(const MemberDef* mdef,OutputList &ol);
@@ -170,7 +169,6 @@ static void createSVG()
     QCString dir="-o \""+ov+"/vhdl_design_overview.html\"";
     ov+="/vhdl_design.dot";
 
-    QRegExp ep("[\\s]");
     QCString vlargs="-Tsvg \""+ov+"\" "+dir ;
 
     if (portable_system("dot",vlargs)!=0)
@@ -200,7 +198,6 @@ void VhdlDocGen::writeOverview()
   QCString ov =Config_getString("HTML_OUTPUT");
   QCString fileName=ov+"/vhdl_design.dot";
   QFile f(fileName);
-  QStringList qli;
   FTextStream  t(&f);
 
   if (!f.open(IO_WriteOnly))
@@ -479,7 +476,11 @@ static QList<MemberDef>* getPorts(ClassDef *cd)
   QList<MemberDef> *portList=new QList<MemberDef>;
   MemberList *ml=cd->getMemberList(MemberListType_variableMembers);
 
-  if (ml==0) return NULL;
+  if (ml==0)
+  {
+    delete portList;
+    return 0;
+  }
 
   MemberListIterator fmni(*ml);
 
@@ -498,7 +499,6 @@ static QList<MemberDef>* getPorts(ClassDef *cd)
 
 static void writeTable(QList<MemberDef>* port,FTextStream & t)
 {
-  QCString space(" ");
   MemberDef *md;
   uint len=port->count();
 
@@ -708,7 +708,6 @@ ClassDef *VhdlDocGen::getClass(const char *name)
 ClassDef* VhdlDocGen::getPackageName(const QCString & name)
 {
   ClassDef* cd=0;
-  QStringList ql=QStringList::split(".",name,FALSE);
   cd=getClass(name);
 
   return cd;
@@ -733,7 +732,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
   if (mdef) return mdef;
 
   // nothing found so far
-  // if we are an architecture or package body search in entitiy
+  // if we are an architecture or package body search in entity
 
   if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
       (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
@@ -796,12 +795,9 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
     if (!packages.contains(ecd)) VhdlDocGen::findAllPackages(ecd);
   }
 
-  uint len=packages.count();
-  for (uint j=0;j<len;j++)
-  {
-    for (QMap<ClassDef*,QList<ClassDef> >::Iterator cList=packages.begin();cList != packages.end();cList++)
-    {
-      if (cList.key()==0) continue;
+ QMap<ClassDef*,QList<ClassDef> >::Iterator cList=packages.find(ecd);
+      if (cList.key()!=0)
+	  {
       QList<ClassDef> mlist=cList.data();
       for (uint j=0;j<mlist.count();j++)
       {
@@ -810,8 +806,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
         mdef=VhdlDocGen::findMemberDef(mlist.at(j),memName,MemberListType_pubMethods);
         if (mdef) return mdef;
       }
-    }
-  }
+	  }
   return 0;
 
 }//findMember
@@ -937,9 +932,8 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
         Argument *arg,*arg1;
         int equ=0;
 
-        for (;(arg=ali.current());++ali)
+        for (;(arg=ali.current()) && (arg1=ali1.current());++ali,++ali1)
         {
-          arg1=ali1.current(); ++ali1;
           equ+=abs(compareString(arg->type,arg1->type));
 
           QCString s1=arg->type;
@@ -1124,7 +1118,6 @@ ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd)
 void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& type,QCString& nn,QCString& behav)
 {
   if (ccd==0)  return;
-  QCString temp=ccd->getOutputFileBase();
   ol.startBold();
   ol.docify(type.data());
   ol.endBold();
@@ -1182,7 +1175,6 @@ void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
 
   if ((end-index)>0)
   {
-    QCString tt=s1.mid(index,(end-index+1));
     temp=s1.mid(index+1,(end-index-1));
     //getFuncParams(qlist,temp);
   }
@@ -1442,7 +1434,7 @@ bool VhdlDocGen::isNumber(const QCString& s)
 void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef* mdef)
 {
   QCString qcs = s;
-  QCString temp(qcs.length());
+  QCString temp;
   qcs.stripPrefix(":");
   qcs.stripPrefix("is");
   qcs.stripPrefix("IS");
@@ -1461,7 +1453,7 @@ void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef*
     if (j>0) b=qcs[j-1];
     if (c=='"' || c==',' || c=='\''|| c=='(' || c==')'  || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
     {
-      if (temp.at(index-1) != ' ')
+      if (temp.length()>=index && temp.at(index-1) != ' ')
       {
         temp+=" ";
       }
@@ -1782,21 +1774,6 @@ QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool fun
 void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
     OutputList& ol,GroupDef* gd,ClassDef* cd,FileDef *fd,NamespaceDef* nd)
 {
-  static ClassDef *cdef;
-  //static GroupDef* gdef;
-  if (cd && cdef!=cd)
-  { // only one inline link
-    VhdlDocGen::writeInlineClassLink(cd,ol);
-    cdef=cd;
-  }
-
-  /*
-     if (gd && gdef==gd) return;
-     if (gd && gdef!=gd)
-     {
-     gdef=gd;
-     }
-   */
   VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY);
   VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE);
   VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION);
@@ -1832,8 +1809,6 @@ static void setGlobalType(MemberList *ml)
   MemberListIterator mmli(*ml);
   for ( ; (mdd=mmli.current()); ++mmli )
   {
-    QCString l=mdd->typeString();
-
     if (qstrcmp(mdd->argsString(),"package")==0)
     {
  	mdd->setMemberSpecifiers(VhdlDocGen::INSTANTIATION);
@@ -1946,17 +1921,56 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
   return hasParams;
 }
 
+void VhdlDocGen::writeTagFile(MemberDef *mdef,FTextStream &tagFile)
+{
+  tagFile << "    <member kind=\"";
+  if (VhdlDocGen::isGeneric(mdef))      tagFile << "generic";
+  if (VhdlDocGen::isPort(mdef))         tagFile << "port";
+  if (VhdlDocGen::isEntity(mdef))       tagFile << "entity";
+  if (VhdlDocGen::isComponent(mdef))    tagFile << "component";
+  if (VhdlDocGen::isVType(mdef))        tagFile << "type";
+  if (VhdlDocGen::isConstant(mdef))     tagFile << "constant";
+  if (VhdlDocGen::isSubType(mdef))      tagFile << "subtype";
+  if (VhdlDocGen::isVhdlFunction(mdef)) tagFile << "function";
+  if (VhdlDocGen::isProcedure(mdef))    tagFile << "procedure";
+  if (VhdlDocGen::isProcess(mdef))      tagFile << "process";
+  if (VhdlDocGen::isSignals(mdef))      tagFile << "signal";
+  if (VhdlDocGen::isAttribute(mdef))    tagFile << "attribute";
+  if (VhdlDocGen::isRecord(mdef))       tagFile << "record";
+  if (VhdlDocGen::isLibrary(mdef))      tagFile << "library";
+  if (VhdlDocGen::isPackage(mdef))      tagFile << "package";
+  if (VhdlDocGen::isVariable(mdef))     tagFile << "shared variable";
+  if (VhdlDocGen::isFile(mdef))         tagFile << "file";
+  if (VhdlDocGen::isGroup(mdef))        tagFile << "group";
+  if (VhdlDocGen::isCompInst(mdef))     tagFile << "instantiation";
+  if (VhdlDocGen::isAlias(mdef))        tagFile << "alias";
+  if (VhdlDocGen::isCompInst(mdef))     tagFile << "configuration";
+
+  tagFile << "\">" << endl;
+  tagFile << "      <type>" << convertToXML(mdef->typeString()) << "</type>" << endl;
+  tagFile << "      <name>" << convertToXML(mdef->name()) << "</name>" << endl;
+  tagFile << "      <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
+  tagFile << "      <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl;
+
+  if (VhdlDocGen::isVhdlFunction(mdef))
+    tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl;
+  else if (VhdlDocGen::isProcedure(mdef))
+    tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl;
+  else
+    tagFile << "      <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl;
+
+  mdef->writeDocAnchorsToTagFile(tagFile);
+  tagFile << "    </member>" << endl;
+}
+
 /* writes a vhdl type declaration */
 
 void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
     ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
     bool /*inGroup*/)
 {
-  static QRegExp reg("[%]");
-
   Definition *d=0;
 
-
   ASSERT(cd!=0 || nd!=0 || fd!=0 || gd!=0 ||
       mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY ||
       mdef->getMemberSpecifiers()==VhdlDocGen::USE
@@ -1967,50 +1981,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
   else if (gd) d=gd;
   else d=(Definition*)mdef;
 
-  // write tag file information of this member
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
-  {
-    Doxygen::tagFile << "    <member kind=\"";
-    if (VhdlDocGen::isGeneric(mdef))      Doxygen::tagFile << "generic";
-    if (VhdlDocGen::isPort(mdef))         Doxygen::tagFile << "port";
-    if (VhdlDocGen::isEntity(mdef))       Doxygen::tagFile << "entity";
-    if (VhdlDocGen::isComponent(mdef))    Doxygen::tagFile << "component";
-    if (VhdlDocGen::isVType(mdef))        Doxygen::tagFile << "type";
-    if (VhdlDocGen::isConstant(mdef))     Doxygen::tagFile << "constant";
-    if (VhdlDocGen::isSubType(mdef))      Doxygen::tagFile << "subtype";
-    if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function";
-    if (VhdlDocGen::isProcedure(mdef))    Doxygen::tagFile << "procedure";
-    if (VhdlDocGen::isProcess(mdef))      Doxygen::tagFile << "process";
-    if (VhdlDocGen::isSignals(mdef))      Doxygen::tagFile << "signal";
-    if (VhdlDocGen::isAttribute(mdef))    Doxygen::tagFile << "attribute";
-    if (VhdlDocGen::isRecord(mdef))       Doxygen::tagFile << "record";
-    if (VhdlDocGen::isLibrary(mdef))      Doxygen::tagFile << "library";
-    if (VhdlDocGen::isPackage(mdef))      Doxygen::tagFile << "package";
-    if (VhdlDocGen::isVariable(mdef))     Doxygen::tagFile << "shared variable";
-    if (VhdlDocGen::isFile(mdef))         Doxygen::tagFile << "file";
-    if (VhdlDocGen::isGroup(mdef))        Doxygen::tagFile << "group";
-    if (VhdlDocGen::isCompInst(mdef))     Doxygen::tagFile << " instantiation";
-    if (VhdlDocGen::isAlias(mdef))        Doxygen::tagFile << "alias";
-    if (VhdlDocGen::isCompInst(mdef))     Doxygen::tagFile << "configuration";
-
-    Doxygen::tagFile << "\">" << endl;
-    Doxygen::tagFile << "      <type>" << convertToXML(mdef->typeString()) << "</type>" << endl;
-    Doxygen::tagFile << "      <name>" << convertToXML(mdef->name()) << "</name>" << endl;
-    Doxygen::tagFile << "      <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
-    Doxygen::tagFile << "      <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl;
-
-    if (VhdlDocGen::isVhdlFunction(mdef))
-      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl;
-    else if (VhdlDocGen::isProcedure(mdef))
-      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl;
-    else
-      Doxygen::tagFile << "      <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl;
-
-    mdef->writeDocAnchorsToTagFile();
-    Doxygen::tagFile << "    </member>" << endl;
-
-  }
-
   // write search index info
   if (Doxygen::searchIndex)
   {
@@ -2321,6 +2291,7 @@ void VhdlDocGen::writePlainVHDLDeclarations(
 {
 
   SDict<QCString> pack(1009);
+  pack.setAutoDelete(TRUE);
 
   bool first=TRUE;
   MemberDef *md;
@@ -2674,7 +2645,6 @@ void VhdlDocGen::parseUCF(const char*  input,  Entry* entity,QCString fileName,b
 {
   QCString ucFile(input);
   int lineNo=0;
-  QCString newLine="\n";
   QCString comment("#!");
   QCString brief;
 
@@ -2730,7 +2700,6 @@ void VhdlDocGen::parseUCF(const char*  input,  Entry* entity,QCString fileName,b
 static void initUCF(Entry* root,const char*  type,QCString &  qcs,int line,QCString & fileName,QCString & brief)
 {
   if (qcs.isEmpty())return;
-  QRegExp sp("\\s");
   QRegExp reg("[\\s=]");
   QCString n;
   // bool bo=(qstricmp(type,qcs.data())==0);
@@ -2853,7 +2822,6 @@ QCString  VhdlDocGen::parseForConfig(QCString & entity,QCString & arch)
 {
   int index;
   QCString label;
-  QCString ent("entity");
   if (!entity.contains(":")) return "";
 
   QRegExp exp("[:()\\s]");
@@ -2943,7 +2911,7 @@ void assignBinding(VhdlConfNode * conf)
   QListIterator<Entry> eli(instList);
   Entry *cur=0;
   ClassDef *archClass=0,*entClass=0;
-  QCString archName,entityName;
+  QCString archName;
   QCString arcBind,entBind;
 
   bool others,all;
@@ -3008,7 +2976,7 @@ void assignBinding(VhdlConfNode * conf)
   {
     if (cur->exception.lower()==label || conf->isInlineConf)
     {
-      QCString sign,archy;
+      QCString archy;
 
       if (all || others)
       {
@@ -4010,7 +3978,6 @@ void FlowChart::writeShape(FTextStream &t,const FlowChart* fl)
   }
 
   t<<getNodeName(fl->id).data();
-  QCString q=getNodeType(fl->type);
 
 #ifdef DEBUGFLOW
   QCString qq(getNodeName(fl->id).data());
@@ -4066,7 +4033,6 @@ void FlowChart::writeShape(FTextStream &t,const FlowChart* fl)
   {
     if (fl->text.isEmpty()) return;
     bool var=(fl->type & FlowChart::VARIABLE_NO);
-    QCString repl("<BR ALIGN=\"LEFT\"/>");
     QCString q=fl->text;
 
     if (exit)
diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
index b9f9afb..7f87ce5 100644
--- a/src/vhdldocgen.h
+++ b/src/vhdldocgen.h
@@ -119,6 +119,7 @@ class VhdlDocGen
     static QCString getClassTitle(const ClassDef*);
     static void writeInlineClassLink(const ClassDef*,
                                      OutputList &ol);
+    static void writeTagFile(MemberDef *mdef,FTextStream &tagFile);
 
     static bool isConstraint(const MemberDef *mdef);
     static bool isConfig(const MemberDef *mdef);
diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp
index f31c9fb..f3bfb62 100644
--- a/src/vhdljjparser.cpp
+++ b/src/vhdljjparser.cpp
@@ -42,26 +42,6 @@ static int              iDocLine      = -1;
 static QCString         inputString;
 static Entry            gBlock;
 static Entry*           previous      = 0;
-#if 0
-int iLine;
-QStringList      qrl;
-ParserInterface *g_thisParser;
-int              inputPosition;
-int              inputLen;
-int              startComment  = 0;
-QFile            inputFile;
-QCString         inbuf;
-
-QCString         yyFileName;
-bool             g_lexInit     = FALSE;
-int              yyLineNr      = 1;
-int              g_lastCommentContext = 0;
-bool             docBlockAutoBrief;
-char             docBlockTerm;
-int              iDocLine      = -1;
-int              num_chars;
-int*             lineParse;
-#endif
 //-------------------------------------------------------
 
 static Entry* oldEntry;
@@ -92,7 +72,7 @@ int VhdlParser::levelCounter;
 
 static QList<VhdlConfNode> configL;
 
-struct
+static struct
 {
   QCString doc;
   bool brief;
@@ -124,7 +104,6 @@ void startCodeBlock(int index)
   int ll=strComment.length();
   iCodeLen=inputString.findRev(strComment.data())+ll;
   // fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
-  //assert(false);
   gBlock.reset();
   int len=strComment.length();
   QCString name=strComment.right(len-index);//
@@ -134,8 +113,6 @@ void startCodeBlock(int index)
   else
     gBlock.name=name;
 
-  //int li=strComment.contains('\n');
-
   gBlock.startLine=yyLineNr;
   gBlock.bodyLine=yyLineNr;
 
@@ -217,7 +194,7 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,En
   VhdlParser::current=new Entry();
   VhdlParser::initEntry(VhdlParser::current);
   groupEnterFile(fileName,yyLineNr);
-  lineParse=new int[200];
+  lineParse=new int[200]; // Dimitri: dangerous constant: should be bigger than largest token id in VhdlParserConstants.h
   VhdlParserIF::parseVhdlfile(fileBuf,inLine);
 
   delete VhdlParser::current;
@@ -226,13 +203,16 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,En
   if (!inLine)
   VhdlParser::mapLibPackage(root);
 
-  delete lineParse;
+  delete[] lineParse;
   yyFileName.resize(0);
   libUse.clear();
   VhdlDocGen::resetCodeVhdlParserState();
 }
 
-void VhdlParser::lineCount(){ yyLineNr++; }
+void VhdlParser::lineCount()
+{
+  yyLineNr++;
+}
 
 void VhdlParser::lineCount(const char* text)
 {
@@ -309,7 +289,6 @@ bool checkInlineCode(QCString & doc)
 
 void VhdlParser::handleFlowComment(const char* doc)
 {
-  lineCount(doc);
   if (VhdlDocGen::getFlowMember())
   {
     QCString qcs(doc);
@@ -319,6 +298,7 @@ void VhdlParser::handleFlowComment(const char* doc)
   }
 }
 
+
 void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
 {
   int position=0;
@@ -328,7 +308,7 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
 
   if (checkMultiComment(doc,yyLineNr))
   {
-    lineCount(doc1);
+    strComment.resize(0);
     return;
   }
 
@@ -345,7 +325,6 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
   if (isIn)
   {
     isIn=false;
-    lineCount(doc1);
     return;
   }
 
@@ -353,7 +332,9 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
 
   bool needsEntry=FALSE;
   Protection protection=Public;
-  int lineNr = iDocLine;
+  int lineNr;
+  if (iDocLine==-1)
+    lineNr=yyLineNr;
 
   if (oldEntry==current)
   {
@@ -375,13 +356,13 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
   {
     current->docLine = yyLineNr;
   }
-  //  printf("parseCommentBlock file<%s>\n [%s]\n",yyFileName.data(),doc.data());
+  //  printf("parseCommentBlock file<%s>\n [%s]\n at line [%d] \n ",yyFileName.data(),doc.data(),iDocLine);
   while (parseCommentBlock(
         g_thisParser,
         current,
         doc,        // text
         yyFileName, // file
-        lineNr,     // line of block start
+        iDocLine,   // line of block start
         brief,
         0,
         FALSE,
@@ -405,7 +386,8 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
     }
     newEntry();
   }
-  lineCount(doc1);
+  iDocLine=-1;
+  strComment.resize(0);
 }
 
 void VHDLLanguageScanner::parsePrototype(const char *text)
@@ -414,7 +396,7 @@ void VHDLLanguageScanner::parsePrototype(const char *text)
   varr=TRUE;
 }
 
-void VhdlParser::addCompInst(char *n, char* instName, char* comp,int iLine)
+void VhdlParser::addCompInst(const char *n, const char* instName, const char* comp,int iLine)
 {
   current->spec=VhdlDocGen::INSTANTIATION;
   current->section=Entry::VARIABLE_SEC;
@@ -455,7 +437,6 @@ void VhdlParser::addCompInst(char *n, char* instName, char* comp,int iLine)
 void VhdlParser::addVhdlType(const char *n,int startLine,int section,
     uint64 spec,const char* args,const char* type,Protection prot)
 {
-  static QRegExp reg("[\\s]");
   QCString name(n);
   if (isFuncProcProced() || VhdlDocGen::getFlowMember())  return;
 
@@ -558,7 +539,6 @@ void VhdlParser::pushLabel( QCString &label,QCString & val)
 
  QCString  VhdlParser::popLabel(QCString & q)
 {
-  QCString u=q;
   int i=q.findRev("|");
   if (i<0) return "";
   q = q.left(i);
@@ -568,15 +548,12 @@ void VhdlParser::pushLabel( QCString &label,QCString & val)
 void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf)
 {
   VhdlConfNode* co=0;
-  QCString ent,arch,lab;
-  QCString l=genLabels;
+  QCString ent;
   ent=a;
- // lab =  VhdlDocGen::parseForConfig(ent,arch);
 
   if (b)
   {
     ent=b;
-   // lab=VhdlDocGen::parseForBinding(ent,arch);
   }
   int level=0;
 
@@ -619,15 +596,13 @@ void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,b
   }
 
   configL.append(co);
-
-}// addConfigure
+}
 
 
 void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
     const char *s4,const char *s5,const char *s6)
 {
   (void)s5; // avoid unused warning
-  static QRegExp reg("[\\s]");
   QCString name=s2;
   QStringList ql=QStringList::split(",",name,FALSE);
 
@@ -788,23 +763,55 @@ void VhdlParser::createFlow()
   currP=0;
 }
 
+void VhdlParser::setMultCommentLine()
+{
+  iDocLine=yyLineNr;
+}
+
+void VhdlParser::oneLineComment(QCString qcs)
+{
+  bool isEndCode=qcs.contains("\\endcode");
+
+  int index = qcs.find("\\code");
+  if (isEndCode)
+  {
+    int end = inputString.find(qcs.data(),iCodeLen);
+    makeInlineDoc(end);
+  }
+  else if (index > 0)
+  {
+    // assert(false);
+    strComment=qcs;
+    startCodeBlock(index);
+    strComment.resize(0);
+  }
+
+  if (!isEndCode && index==-1)
+  {
+    int j=qcs.find("--!");
+    qcs=qcs.right(qcs.length()-3-j);
+    if (!checkMultiComment(qcs,iDocLine))
+    {
+      handleCommentBlock(qcs,TRUE);
+    }
+  }
+}
+
+
 bool  checkMultiComment(QCString& qcs,int line)
 {
   QList<Entry> *pTemp=getEntryAtLine(VhdlParser::current_root,line);
 
   if (pTemp->isEmpty()) return false;
 
-  //int ii=pTemp->count();
-  // qcs.stripPrefix("--!");
   VhdlDocGen::prepareComment(qcs);
   while (!pTemp->isEmpty())
   {
     Entry *e=(Entry*)pTemp->getFirst();
     e->briefLine=line;
     e->brief+=qcs;
-    iDocLine=-1;
+
     pTemp->removeFirst();
-    //ii=pTemp->count();
   }
   return true;
 }
@@ -819,7 +826,7 @@ QList<Entry>* getEntryAtLine(const Entry* ce,int line)
     if (rt->bodyLine==line)
     {
       lineEntry.insert(0,rt);
-    } // if
+    }
 
     getEntryAtLine(rt,line);
   }
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index f2da28c..c9a6fb8 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -32,6 +32,57 @@
 #include "config.h"
 #include "htmlentity.h"
 
+static void visitCaption(XmlDocVisitor *parent, QList<DocNode> children)
+{
+  QListIterator<DocNode> cli(children);
+  DocNode *n;
+  for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
+static void visitPreStart(FTextStream &t, const char *cmd, const bool doCaption, 
+                          XmlDocVisitor *parent, QList<DocNode> children, 
+                          const QCString &name, bool writeType, DocImage::Type type, const QCString &width, 
+                          const QCString &height)
+{
+  t << "<" << cmd;
+  if (writeType)
+  {
+    t << " type=\"";
+    switch(type)
+    {
+      case DocImage::Html:    t << "html"; break;
+      case DocImage::Latex:   t << "latex"; break;
+      case DocImage::Rtf:     t << "rtf"; break;
+      case DocImage::DocBook: t << "docbook"; break;
+    }
+    t << "\"";
+  }
+  if (!name.isEmpty())
+  {
+    t << " name=\"" << name << "\"";
+  }
+  if (!width.isEmpty())
+  {
+    t << " width=\"" << convertToXML(width) << "\"";
+  }
+  else if (!height.isEmpty())
+  {
+    t << " height=\"" << convertToXML(height) << "\"";
+  }
+  if (doCaption)
+  {
+    t << " caption=\"";
+    visitCaption(parent, children);
+    t << "\"";
+  }
+  t << ">";
+}
+
+static void visitPostEnd(FTextStream &t, const char *cmd)
+{
+  t << "</" << cmd << ">" << endl;
+}
+
 XmlDocVisitor::XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci) 
   : DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) 
 {
@@ -199,20 +250,20 @@ void XmlDocVisitor::visit(DocVerbatim *s)
       filter(s->text());
       m_t << "</docbookonly>";
       break;
-    case DocVerbatim::Dot: 
-      m_t << "<dot>";
+    case DocVerbatim::Dot:
+      visitPreStart(m_t, "dot", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
       filter(s->text());
-      m_t << "</dot>";
+      visitPostEnd(m_t, "dot");
       break;
-    case DocVerbatim::Msc: 
-      m_t << "<msc>";
+    case DocVerbatim::Msc:
+      visitPreStart(m_t, "msc", s->hasCaption(), this, s->children(),  QCString(""), FALSE, DocImage::Html, s->width(), s->height());
       filter(s->text());
-      m_t << "</msc>";
+      visitPostEnd(m_t, "msc");
       break;
     case DocVerbatim::PlantUML:
-      m_t << "<plantuml>";
+      visitPreStart(m_t, "plantuml", s->hasCaption(), this, s->children(),  QCString(""), FALSE, DocImage::Html, s->width(), s->height());
       filter(s->text());
-      m_t << "</plantuml>";
+      visitPostEnd(m_t, "plantuml");
       break;
   }
 }
@@ -682,15 +733,6 @@ void XmlDocVisitor::visitPost(DocHtmlHeader *)
 void XmlDocVisitor::visitPre(DocImage *img)
 {
   if (m_hide) return;
-  m_t << "<image type=\"";
-  switch(img->type())
-  {
-    case DocImage::Html:    m_t << "html"; break;
-    case DocImage::Latex:   m_t << "latex"; break;
-    case DocImage::Rtf:     m_t << "rtf"; break;
-    case DocImage::DocBook: m_t << "docbook"; break;
-  }
-  m_t << "\"";
 
   QCString baseName=img->name();
   int i;
@@ -698,20 +740,7 @@ void XmlDocVisitor::visitPre(DocImage *img)
   {
     baseName=baseName.right(baseName.length()-i-1);
   }
-  m_t << " name=\"" << baseName << "\"";
-  if (!img->width().isEmpty())
-  {
-    m_t << " width=\"";
-    filter(img->width());
-    m_t << "\"";
-  }
-  else if (!img->height().isEmpty())
-  {
-    m_t << " height=\"";
-    filter(img->height());
-    m_t << "\"";
-  }
-  m_t << ">";
+  visitPreStart(m_t, "image", FALSE, this, img->children(), baseName, TRUE, img->type(), img->width(), img->height());
 
   // copy the image to the output dir
   QFile inImage(img->name());
@@ -732,43 +761,43 @@ void XmlDocVisitor::visitPre(DocImage *img)
 void XmlDocVisitor::visitPost(DocImage *) 
 {
   if (m_hide) return;
-  m_t << "</image>" << endl;
+  visitPostEnd(m_t, "image");
 }
 
 void XmlDocVisitor::visitPre(DocDotFile *df)
 {
   if (m_hide) return;
-  m_t << "<dotfile name=\"" << df->file() << "\">";
+  visitPreStart(m_t, "dotfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
 }
 
 void XmlDocVisitor::visitPost(DocDotFile *) 
 {
   if (m_hide) return;
-  m_t << "</dotfile>" << endl;
+  visitPostEnd(m_t, "dotfile");
 }
 
 void XmlDocVisitor::visitPre(DocMscFile *df)
 {
   if (m_hide) return;
-  m_t << "<mscfile name=\"" << df->file() << "\">";
+  visitPreStart(m_t, "mscfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
 }
 
 void XmlDocVisitor::visitPost(DocMscFile *) 
 {
   if (m_hide) return;
-  m_t << "</mscfile>" << endl;
+  visitPostEnd(m_t, "mscfile");
 }
 
 void XmlDocVisitor::visitPre(DocDiaFile *df)
 {
   if (m_hide) return;
-  m_t << "<diafile name=\"" << df->file() << "\">";
+  visitPreStart(m_t, "diafile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
 }
 
 void XmlDocVisitor::visitPost(DocDiaFile *)
 {
   if (m_hide) return;
-  m_t << "</diafile>" << endl;
+  visitPostEnd(m_t, "diafile");
 }
 
 void XmlDocVisitor::visitPre(DocLink *lnk)
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 549ff0f..8319922 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -46,6 +46,7 @@
 #include "dirdef.h"
 #include "section.h"
 #include "htmlentity.h"
+#include "resourcemgr.h"
 
 // no debug info
 #define XML_DB(x) do {} while(0)
@@ -56,18 +57,6 @@
 
 //------------------
 
-static const char index_xsd[] =
-#include "index.xsd.h"
-;
-
-//------------------
-//
-static const char compound_xsd[] =
-#include "compound.xsd.h"
-;
-
-//------------------
-
 /** Helper class mapping MemberList::ListType to a string representing */
 class XmlSectionMapper : public QIntDict<char>
 {
@@ -235,12 +224,11 @@ class XMLCodeGenerator : public CodeOutputInterface
 {
   public:
 
-    XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
-      m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE), 
-      m_insideSpecialHL(FALSE) {}
+    XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_isMemberRef(FALSE), m_col(0),
+      m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE), m_insideSpecialHL(FALSE) {}
     virtual ~XMLCodeGenerator() { }
-    
-    void codify(const char *text) 
+
+    void codify(const char *text)
     {
       XML_DB(("(codify \"%s\")\n",text));
       if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -248,11 +236,11 @@ class XMLCodeGenerator : public CodeOutputInterface
         m_t << "<highlight class=\"normal\">";
         m_normalHLNeedStartTag=FALSE;
       }
-      writeXMLCodeString(m_t,text,col);
+      writeXMLCodeString(m_t,text,m_col);
     }
     void writeCodeLink(const char *ref,const char *file,
                        const char *anchor,const char *name,
-                       const char *tooltip) 
+                       const char *tooltip)
     {
       XML_DB(("(writeCodeLink)\n"));
       if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -261,7 +249,7 @@ class XMLCodeGenerator : public CodeOutputInterface
         m_normalHLNeedStartTag=FALSE;
       }
       writeXMLLink(m_t,ref,file,anchor,name,tooltip);
-      col+=qstrlen(name);
+      m_col+=qstrlen(name);
     }
     void writeTooltip(const char *, const DocLinkInfo &, const char *,
                       const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -269,7 +257,7 @@ class XMLCodeGenerator : public CodeOutputInterface
     {
       XML_DB(("(writeToolTip)\n"));
     }
-    void startCodeLine(bool) 
+    void startCodeLine(bool)
     {
       XML_DB(("(startCodeLine)\n"));
       m_t << "<codeline";
@@ -293,11 +281,11 @@ class XMLCodeGenerator : public CodeOutputInterface
           m_t << " external=\"" << m_external << "\"";
         }
       }
-      m_t << ">"; 
+      m_t << ">";
       m_insideCodeLine=TRUE;
-      col=0;
+      m_col=0;
     }
-    void endCodeLine() 
+    void endCodeLine()
     {
       XML_DB(("(endCodeLine)\n"));
       if (!m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -311,7 +299,7 @@ class XMLCodeGenerator : public CodeOutputInterface
       m_external.resize(0);
       m_insideCodeLine=FALSE;
     }
-    void startFontClass(const char *colorClass) 
+    void startFontClass(const char *colorClass)
     {
       XML_DB(("(startFontClass)\n"));
       if (m_insideCodeLine && !m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -336,7 +324,7 @@ class XMLCodeGenerator : public CodeOutputInterface
                          const char *anchorId,int l)
     {
       XML_DB(("(writeLineNumber)\n"));
-      // we remember the information provided here to use it 
+      // we remember the information provided here to use it
       // at the <codeline> start tag.
       m_lineNumber = l;
       if (compId)
@@ -360,12 +348,12 @@ class XMLCodeGenerator : public CodeOutputInterface
     }
 
   private:
-    FTextStream &m_t;  
+    FTextStream &m_t;
     QCString m_refId;
     QCString m_external;
     int m_lineNumber;
     bool m_isMemberRef;
-    int col;
+    int m_col;
 
     bool m_insideCodeLine;
     bool m_normalHLNeedStartTag;
@@ -1262,7 +1250,8 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
   writeXMLHeader(t);
   t << "  <compounddef id=\"" 
     << classOutputFileBase(cd) << "\" kind=\"" 
-    << cd->compoundTypeString() << "\" prot=\"";
+    << cd->compoundTypeString() << "\" language=\""
+    << langToString(cd->getLanguage()) << "\" prot=\"";
   switch (cd->protection())
   {
     case Public:    t << "public";    break;
@@ -1387,37 +1376,6 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
       generateXMLSection(cd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(cd,ti,t,cd->pubTypes,"public-type");
-  generateXMLSection(cd,ti,t,cd->pubMethods,"public-func");
-  generateXMLSection(cd,ti,t,cd->pubAttribs,"public-attrib");
-  generateXMLSection(cd,ti,t,cd->pubSlots,"public-slot");
-  generateXMLSection(cd,ti,t,cd->signals,"signal");
-  generateXMLSection(cd,ti,t,cd->dcopMethods,"dcop-func");
-  generateXMLSection(cd,ti,t,cd->properties,"property");
-  generateXMLSection(cd,ti,t,cd->events,"event");
-  generateXMLSection(cd,ti,t,cd->pubStaticMethods,"public-static-func");
-  generateXMLSection(cd,ti,t,cd->pubStaticAttribs,"public-static-attrib");
-  generateXMLSection(cd,ti,t,cd->proTypes,"protected-type");
-  generateXMLSection(cd,ti,t,cd->proMethods,"protected-func");
-  generateXMLSection(cd,ti,t,cd->proAttribs,"protected-attrib");
-  generateXMLSection(cd,ti,t,cd->proSlots,"protected-slot");
-  generateXMLSection(cd,ti,t,cd->proStaticMethods,"protected-static-func");
-  generateXMLSection(cd,ti,t,cd->proStaticAttribs,"protected-static-attrib");
-  generateXMLSection(cd,ti,t,cd->pacTypes,"package-type");
-  generateXMLSection(cd,ti,t,cd->pacMethods,"package-func");
-  generateXMLSection(cd,ti,t,cd->pacAttribs,"package-attrib");
-  generateXMLSection(cd,ti,t,cd->pacStaticMethods,"package-static-func");
-  generateXMLSection(cd,ti,t,cd->pacStaticAttribs,"package-static-attrib");
-  generateXMLSection(cd,ti,t,cd->priTypes,"private-type");
-  generateXMLSection(cd,ti,t,cd->priMethods,"private-func");
-  generateXMLSection(cd,ti,t,cd->priAttribs,"private-attrib");
-  generateXMLSection(cd,ti,t,cd->priSlots,"private-slot");
-  generateXMLSection(cd,ti,t,cd->priStaticMethods,"private-static-func");
-  generateXMLSection(cd,ti,t,cd->priStaticAttribs,"private-static-attrib");
-  generateXMLSection(cd,ti,t,cd->friends,"friend");
-  generateXMLSection(cd,ti,t,cd->related,"related");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
@@ -1490,8 +1448,9 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
   //t.setEncoding(FTextStream::UnicodeUTF8);
   
   writeXMLHeader(t);
-  t << "  <compounddef id=\"" 
-    << nd->getOutputFileBase() << "\" kind=\"namespace\">" << endl;
+  t << "  <compounddef id=\"" << nd->getOutputFileBase() 
+    << "\" kind=\"namespace\" language=\"" 
+    << langToString(nd->getLanguage()) << "\">" << endl;
   t << "    <compoundname>";
   writeXMLString(t,nd->name());
   t << "</compoundname>" << endl;
@@ -1519,14 +1478,6 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
       generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(nd,ti,t,&nd->decDefineMembers,"define");
-  generateXMLSection(nd,ti,t,&nd->decProtoMembers,"prototype");
-  generateXMLSection(nd,ti,t,&nd->decTypedefMembers,"typedef");
-  generateXMLSection(nd,ti,t,&nd->decEnumMembers,"enum");
-  generateXMLSection(nd,ti,t,&nd->decFuncMembers,"func");
-  generateXMLSection(nd,ti,t,&nd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
@@ -1578,8 +1529,9 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
   //t.setEncoding(FTextStream::UnicodeUTF8);
 
   writeXMLHeader(t);
-  t << "  <compounddef id=\"" 
-    << fd->getOutputFileBase() << "\" kind=\"file\">" << endl;
+  t << "  <compounddef id=\"" << fd->getOutputFileBase()
+    << "\" kind=\"file\" language=\"" 
+    << langToString(fd->getLanguage()) << "\">" << endl;
   t << "    <compoundname>";
   writeXMLString(t,fd->name());
   t << "</compoundname>" << endl;
@@ -1663,14 +1615,6 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
       generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(fd,ti,t,fd->decDefineMembers,"define");
-  generateXMLSection(fd,ti,t,fd->decProtoMembers,"prototype");
-  generateXMLSection(fd,ti,t,fd->decTypedefMembers,"typedef");
-  generateXMLSection(fd,ti,t,fd->decEnumMembers,"enum");
-  generateXMLSection(fd,ti,t,fd->decFuncMembers,"func");
-  generateXMLSection(fd,ti,t,fd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
@@ -1753,14 +1697,6 @@ static void generateXMLForGroup(GroupDef *gd,FTextStream &ti)
       generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(gd,ti,t,&gd->decDefineMembers,"define");
-  generateXMLSection(gd,ti,t,&gd->decProtoMembers,"prototype");
-  generateXMLSection(gd,ti,t,&gd->decTypedefMembers,"typedef");
-  generateXMLSection(gd,ti,t,&gd->decEnumMembers,"enum");
-  generateXMLSection(gd,ti,t,&gd->decFuncMembers,"func");
-  generateXMLSection(gd,ti,t,&gd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
@@ -1906,18 +1842,11 @@ void generateXML()
   QCString outputDirectory = Config_getString("XML_OUTPUT");
   QDir xmlDir(outputDirectory);
   createSubDirs(xmlDir);
-  QCString fileName=outputDirectory+"/index.xsd";
-  QFile f(fileName);
-  if (!f.open(IO_WriteOnly))
-  {
-    err("Cannot open file %s for writing!\n",fileName.data());
-    return;
-  }
-  f.writeBlock(index_xsd,qstrlen(index_xsd));
-  f.close();
 
-  fileName=outputDirectory+"/compound.xsd";
-  f.setName(fileName);
+  ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
+
+  QCString fileName=outputDirectory+"/compound.xsd";
+  QFile f(fileName);
   if (!f.open(IO_WriteOnly))
   {
     err("Cannot open file %s for writing!\n",fileName.data());
@@ -1925,7 +1854,8 @@ void generateXML()
   }
 
   // write compound.xsd, but replace special marker with the entities
-  const char *startLine = compound_xsd;
+  QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
+  const char *startLine = compound_xsd.data();
   while (*startLine)
   {
     // find end of the line
@@ -1935,7 +1865,7 @@ void generateXML()
     if (len>0)
     {
       QCString s(len+1);
-      qstrncpy(s.data(),startLine,len);
+      qstrncpy(s.rawData(),startLine,len);
       s[len]='\0';
       if (s.find("<!-- Automatically insert here the HTML entities -->")!=-1)
       {
diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma
new file mode 100644
index 0000000..df7834c
--- /dev/null
+++ b/templates/html/arrowdown.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 255 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 152 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 231 255 255 255 255 255 255 255 216   0   0   0   0
+  0   0   0  87 255 255 255 255 255 255 255  65   0   0   0   0
+  0   0   0   0 186 255 255 255 255 255 164   0   0   0   0   0
+  0   0   0   0  38 251 255 255 255 241  25   0   0   0   0   0
+  0   0   0   0   0 127 255 255 255 107   0   0   0   0   0   0
+  0   0   0   0   0   0 221 255 204   0   0   0   0   0   0   0
+  0   0   0   0   0   0  72 253  52   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0  77   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/arrowright.luma b/templates/html/arrowright.luma
new file mode 100644
index 0000000..63209b0
--- /dev/null
+++ b/templates/html/arrowright.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 223  75   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 255 255 176  33   0   0   0   0   0   0   0   0   0
+  0   0   0 255 255 255 248 117   0   0   0   0   0   0   0   0
+  0   0   0 255 255 255 255 255 211  60   0   0   0   0   0   0
+  0   0   0 255 255 255 255 255 255 255  77   0   0   0   0   0
+  0   0   0 255 255 255 255 255 211  60   0   0   0   0   0   0
+  0   0   0 255 255 255 248 117   0   0   0   0   0   0   0   0
+  0   0   0 255 255 176  33   0   0   0   0   0   0   0   0   0
+  0   0   0 223  75   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/bc_s.luma b/templates/html/bc_s.luma
new file mode 100644
index 0000000..2aac5d6
--- /dev/null
+++ b/templates/html/bc_s.luma
@@ -0,0 +1,66 @@
+# breadcrumb tabs
+# width & height
+8 30
+# luma data
+150 187 187 148 148 148 148 148
+147 175 186 147 147 147 147 147
+146 153 185 185 146 146 146 146
+144 144 177 183 144 144 144 144
+144 144 159 182 144 144 144 144
+143 143 144 179 181 143 143 143
+142 142 142 165 180 142 142 142
+141 141 141 144 178 178 141 141
+139 139 139 139 167 176 139 139
+137 137 137 137 146 174 137 137
+137 137 137 137 137 169 173 137
+135 135 135 135 135 150 171 135
+133 133 133 133 133 135 167 169
+132 132 132 132 132 132 154 167
+129 129 129 129 129 129 140 164
+129 129 129 129 129 129 154 163
+127 127 127 127 127 128 161 161
+125 125 125 125 125 141 158 125
+123 123 123 123 123 152 156 123
+121 121 121 121 129 154 121 121
+120 120 120 120 143 152 120 120
+118 118 118 120 150 150 118 118
+117 117 117 132 148 117 117 117
+114 114 114 142 145 114 114 114
+113 113 120 143 113 113 113 113
+111 111 133 141 111 111 111 111
+110 112 140 140 110 110 110 110
+109 124 138 109 109 109 109 109
+107 133 136 107 107 107 107 107
+111 134 106 106 106 106 106 106
+# alpha data
+241 241  21   0   0   0   0   0
+162 205 117   0   0   0   0   0
+ 54 231 225   3   0   0   0   0
+  0 198 215  78   0   0   0   0
+  0  93 211 186   0   0   0   0
+  0   6 232 235  42   0   0   0
+  0   0 132 203 147   0   0   0
+  0   0  27 242 241  15   0   0
+  0   0   0 168 205 108   0   0
+  0   0   0  63 228 219   0   0
+  0   0   0   0 207 221  72   0
+  0   0   0   0 102 208 177   0
+  0   0   0   0   9 238 240  36
+  0   0   0   0   0 138 201 138
+  0   0   0   0   0  77 187 158
+  0   0   0   0   0 159 204 120
+  0   0   0   0  15 241 241  21
+  0   0   0   0 111 208 171   0
+  0   0   0   0 210 222  66   0
+  0   0   0  60 227 219   0   0
+  0   0   0 162 204 114   0   0
+  0   0  18 238 238  21   0   0
+  0   0 114 205 165   0   0   0
+  0   0 216 225  60   0   0   0
+  0  66 226 216   0   0   0   0
+  0 165 204 111   0   0   0   0
+ 21 241 241  18   0   0   0   0
+117 203 159   0   0   0   0   0
+219 227  57   0   0   0   0   0
+211 201   0   0   0   0   0   0
+
diff --git a/templates/html/bdwn.luma b/templates/html/bdwn.luma
new file mode 100644
index 0000000..17e677d
--- /dev/null
+++ b/templates/html/bdwn.luma
@@ -0,0 +1,21 @@
+# arrow down button
+# width height
+7 8
+# luma data
+  0   0   0 142   0   0   0
+  0   0   0 142   0   0   0
+  0   0   0 142   0   0   0
+142   0   0 142   0   0 142
+142 142   0 142   0 142 142
+142 142 142 142 142 142 142
+  0 142 142 142 142 142   0
+  0   0 142 142 142   0   0
+# alpha data
+  0   0   0 255   0   0   0
+  0   0   0 255   0   0   0
+  0   0   0 255   0   0   0
+128   0   0 255   0   0 128
+255 128   0 255   0 128 255
+128 255 128 255 128 255 128
+  0 128 255 255 255 128   0
+  0   0 128 255 128   0   0
diff --git a/src/bib2xhtml.pl b/templates/html/bib2xhtml.pl
similarity index 100%
rename from src/bib2xhtml.pl
rename to templates/html/bib2xhtml.pl
diff --git a/templates/html/close.png b/templates/html/close.png
new file mode 100644
index 0000000..9342d3d
Binary files /dev/null and b/templates/html/close.png differ
diff --git a/templates/html/closed.luma b/templates/html/closed.luma
new file mode 100644
index 0000000..1f57335
--- /dev/null
+++ b/templates/html/closed.luma
@@ -0,0 +1,23 @@
+# tree closed icon
+# width & height
+9 9
+# luma data
+0   0   0   0 142   0   0   0   0
+0   0   0   0 142 142   0   0   0
+0   0   0   0 142 142 142   0   0
+0   0   0   0 142 142 142 142   0
+0   0   0   0 142 142 142 142 142
+0   0   0   0 142 142 142 142   0
+0   0   0   0 142 142 142   0   0
+0   0   0   0 142 142   0   0   0
+0   0   0   0 142   0   0   0   0
+# alpha data
+0   0   0   0 255   0   0   0   0
+0   0   0   0 255 255   0   0   0
+0   0   0   0 255 255 255   0   0
+0   0   0   0 255 255 255 255   0
+0   0   0   0 255 255 255 255 255
+0   0   0   0 255 255 255 255   0
+0   0   0   0 255 255 255   0   0
+0   0   0   0 255 255   0   0   0
+0   0   0   0 255   0   0   0   0
diff --git a/templates/html/doc.luma b/templates/html/doc.luma
new file mode 100644
index 0000000..cdcd810
--- /dev/null
+++ b/templates/html/doc.luma
@@ -0,0 +1,50 @@
+# document icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 218 214 208 208 204 191 179 190 197 209 231 255 255 255 255 255 255 255 255
+255 255 255 255 255 195 224 226 226 222 214 204 181 203 229 188 225 255 255 255 255 255 255 255
+255 255 255 255 255 198 226 228 227 227 224 215 203 180 252 229 184 224 255 255 255 255 255 255
+255 255 255 255 255 198 229 230 229 229 228 224 214 154 252 252 229 187 235 255 255 255 255 255
+255 255 255 255 255 198 232 233 233 232 231 230 223 176 154 144 165 177 216 255 255 255 255 255
+255 255 255 255 255 198 236 236 216 226 238 219 232 225 209 190 189 166 193 255 255 255 255 255
+255 255 255 255 255 198 239 240 178 177 230 175 169 184 188 219 208 189 187 255 255 255 255 255
+255 255 255 255 255 198 241 242 240 218 237 236 240 235 241 244 221 208 182 255 255 255 255 255
+255 255 255 255 255 198 243 243 188 154 183 158 166 140 185 198 231 219 177 255 255 255 255 255
+255 255 255 255 255 198 243 245 248 228 241 241 226 249 237 227 239 232 177 255 255 255 255 255
+255 255 255 255 255 198 244 246 213 172 163 149 171 200 167 149 242 239 177 255 255 255 255 255
+255 255 255 255 255 198 249 248 240 218 237 236 240 235 241 244 244 242 177 255 255 255 255 255
+255 255 255 255 255 198 249 251 188 155 184 158 166 140 185 198 246 244 177 255 255 255 255 255
+255 255 255 255 255 198 251 253 248 228 241 241 226 249 237 227 249 246 177 255 255 255 255 255
+255 255 255 255 255 196 253 252 252 252 252 251 251 250 250 249 249 248 175 255 255 255 255 255
+255 255 255 255 255 194  64  30  37  37  37  37  37  37  37  37  30  64 188 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+
diff --git a/src/doxygen.bst b/templates/html/doxygen.bst
similarity index 100%
rename from src/doxygen.bst
rename to templates/html/doxygen.bst
diff --git a/src/doxygen.css b/templates/html/doxygen.css
similarity index 98%
rename from src/doxygen.css
rename to templates/html/doxygen.css
index 2f4bf70..1d9002f 100644
--- a/src/doxygen.css
+++ b/templates/html/doxygen.css
@@ -227,7 +227,7 @@ span.lineno a:hover {
 	background-color: #C8C8C8;
 }
 
-div.ah {
+div.ah, span.ah {
 	background-color: black;
 	font-weight: bold;
 	color: #ffffff;
@@ -245,6 +245,15 @@ div.ah {
 	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
 }
 
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
 div.groupHeader {
 	margin-left: 16px;
 	margin-top: 12px;
@@ -773,7 +782,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2folderopen.png');
+    background-image:url('folderopen.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
@@ -784,7 +793,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2folderclosed.png');
+    background-image:url('folderclosed.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
@@ -795,7 +804,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2doc.png');
+    background-image:url('doc.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
diff --git a/templates/html/doxygen.luma b/templates/html/doxygen.luma
new file mode 100644
index 0000000..48d9435
--- /dev/null
+++ b/templates/html/doxygen.luma
@@ -0,0 +1,68 @@
+# doxygen logo
+# width & height
+104 31
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32  91  91  91  91  32  32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 255 255 255 255  32  32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 253 253 253 253  32  32 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 251 251 251 251  32  32 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 249 249 249 249  32  32 249 249 249 249  32  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32  32  32  32  32 249 249 249  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32  32  32  32  32 249 249 249 249 249 249  32  32  32  32  32  32  32 249 249 249 249 249  32  32  32  32  32 249  32  32  32  32  32 255 255 255
+ 32  32  32  32  46 132 190 190 147  61 247 247 247 247  32  32 247 247  32  32 118 161 190 190 161 118  32  32 247  32  46  89  89  89  89  46  32 247 247  32  89  89  89  89  61  89  89  89  89  46  32 247  32  46  89  89  89  89  32 247  32  32 118 175 190 161  89  61  89  89  89  61  32 247 247 247  32  32 104 147 190 190 190 132  89  32  32 247 247  32  46  89  89  89  75  32  89 161 190 161  75  32 255 255
+ 32  32  32  74 230 244 244 244 244 244 244 244 244 244  32  32 244  32  74 216 244 244 244 244 244 244 216  74  32 244  32 187 244 244 244 159  32 244  32 117 244 244 244 230  46 173 244 244 244 131  32 244  32 131 244 244 244 173  32  32  46 173 244 244 244 244 244 230 244 244 244 131  32 244 244  32  74 202 244 244 244 244 244 244 244 173  46  32 244  32  89 244 244 244 187 145 244 244 244 244 244  89  32 255
+ 32  32  46 213 241 241 241 241 241 241 241 241 241 241  32  32  32  60 227 241 241 241 241 241 241 241 241 227  60  32  32  46 227 241 241 241 102  32  60 227 241 241 241  88  32 116 241 241 241 199  32 241  32 185 241 241 241 116  32  32 143 241 241 241 241 241 241 241 241 241 241 130  32 241  32  74 227 241 241 241 199 185 241 241 241 241 171  32 241  32  88 241 241 241 241 241 241 241 241 241 241 199  32 255
+ 32  32 128 237 237 237 223 128  87 128 237 237 237 237  32  32  32 182 237 237 237 196 100 100 196 237 237 237 182  32 237  32 100 237 237 237 223  59 196 237 237 237 141  32  32  46 237 237 237 237  59  32  46 237 237 237 237  46  32  59 237 237 237 237 169  87  87 182 237 237 237 128  32 237  32 196 237 237 237  87  32  32  73 223 237 237 237  73  32  32  87 237 237 237 237 223 182 223 237 237 237 237  46  32
+ 32  32 207 234 234 234 113  32  32  32 234 234 234 234  32  32  59 234 234 234 221  45  32  32  45 221 234 234 234  59  32 234  32 140 234 234 234 221 234 234 234 194  32  32 234  32 167 234 234 234 126  32  99 234 234 234 167  32  32 126 234 234 234 180  32  32  32 126 234 234 234 126  32  32  99 234 234 234 167  32  32  32  32 153 234 234 234 126  32  32  86 234 234 234 207  45  32  45 234 234 234 234  86  32
+ 32  45 231 231 231 218  32  32  32  32 231 231 231 231  32  32  98 231 231 231 165  32 231 231  32 165 231 231 231  98  32 231  32  45 191 231 231 231 231 231 218  72  32 231 231  32  98 231 231 231 165  32 151 231 231 231 112  32  32 165 231 231 231 112  32 231  32 125 231 231 231 125  32  32 138 231 231 231 178 125 125 125 125 178 231 231 231 178  32  32  85 231 231 231 178  32 255  32 191 231 231 231  85  32
+ 32  84 227 227 227 175  32  32  32  32 227 227 227 227  32  32 123 227 227 227 123  32 227 227  32 123 227 227 227 123  32 227 227  32  71 227 227 227 227 227 123  32 227 227 227 227  32 214 227 227 227  45 201 227 227 227  45  32  32 175 227 227 227  84  32 227  32 123 227 227 227 123  32  32 175 227 227 227 227 227 227 227 227 227 227 227 227 175  32  32  84 227 227 227 175  32 255  32 175 227 227 227  84  32
+ 32  83 223 223 223 172  32  32  32  32 223 223 223 223  32  32 121 223 223 223 121  32 223 223  32 121 223 223 223 121  32 223 223 223  32 172 223 223 223 210  45  32 223 223 223 223  32 147 223 223 223 134 223 223 223 147  32 223  32 172 223 223 223  83  32 223  32 121 223 223 223 121  32  32 172 223 223 223 223 223 223 223 223 223 223 223 223 172  32  32  83 223 223 223 172  32 255  32 172 223 223 223  83  32
+ 32  82 220 220 220 170  32  32  32  32 220 220 220 220  32  32 120 220 220 220 120  32 220 220  32 120 220 220 220 120  32 220 220  32  95 220 220 220 220 220 132  32 220 220 220 220  32  95 220 220 220 207 220 220 220  95  32 220  32 170 220 220 220 107  32 220  32 120 220 220 220 120  32  32 170 220 220 220 132  32  32  32  32  32  32  32  32  32  32  32  82 220 220 220 170  32 255  32 170 220 220 220  82  32
+ 32  57 216 216 216 216  32  32  32  32 216 216 216 216  32  32  81 216 216 216 167  32 216 216  32 155 216 216 216  81  32 216  32  57 204 216 216 216 216 216 216  93  32 216 216 216 216  32 204 216 216 216 216 216 204  32 216 216  32 118 216 216 216 167  32  32  32 130 216 216 216 118  32  32 118 216 216 216 191  32  32 216 216 216  32  32  44  57  32  32  81 216 216 216 167  32 255  32 167 216 216 216  81  32
+ 32  32 189 213 213 213 116  32  32  80 213 213 213 213  32  32  44 201 213 213 213  68  32  32  68 213 213 213 213  44  32  32  32 165 213 213 213 165 213 213 213 201  44  32 213 213 213  32 129 213 213 213 213 213 141  32 213 213  32  80 213 213 213 213 165 116 153 213 213 213 213 116  32  32  56 213 213 213 213 153  56  32  32  32  44 104 189 116  32  32  80 213 213 213 165  32 255  32 165 213 213 213  80  32
+ 32  32 139 210 210 210 210 174 174 210 210 210 210 210  32  32  32 127 210 210 210 198 127 127 198 210 210 210 127  32 210  32 115 210 210 210 174  44 139 210 210 210 163  32  32 210 210  32  68 210 210 210 210 210  91  32 210 210 210  32 174 210 210 210 210 210 210 210 210 210 210 115  32 210  32 127 210 210 210 210 210 174 163 163 210 210 210 115  32  32  79 210 210 210 163  32 255  32 163 210 210 210  79  32
+ 32  32  55 194 206 206 206 206 206 194 206 206 206 206  32  32  32  44 171 206 206 206 206 206 206 206 206 171  44  32  32  67 206 206 206 206  67  32  44 183 206 206 206 113  32 206 206 206  32 183 206 206 206 194  32 206 206 206 206  32  67 194 206 206 206 206 206 171 206 206 206 113  32 206  32  32 136 206 206 206 206 206 206 206 206 206 206 113  32  32  78 206 206 206 160  32 255  32 160 206 206 206  78  32
+ 32  32  32 100 192 203 203 203 157  55 203 203 203 203  32  32 203  32  43 135 203 203 203 203 203 203 135  43  32  32  43 180 203 203 203 112  32 203  32  66 203 203 203 203  66  32 203 203  32 157 203 203 203 135  32 203 203 203 203 203  32  43 112 157 157 123  55 112 203 203 203 112  32 203 203  32  32  78 146 203 203 203 203 203 203 169 123  55  32  32  78 203 203 203 157  32 255  32 157 203 203 203  78  32
+ 32  32  32  32  54 110 110  88  32  32  32  32  32  32  32  32 200 200  32  32  54  99 110 110  99  54  32  32 200 200  32  32  32  32  32  32  32 200 200  32  32  32  32  32  32 200 200  32  54 200 200 200 200  77  32 200 200 200 200 200  32  32  32  32  32  32  32 166 200 200 200  88  32 200 200 200 200  32  32  32  66  77  77  77  32  32  32  32 200 200  32  32  32  32  32  32 255  32  32  32  32  32  32 255
+ 32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32 198 198 198 198  32  32  32  32  32  32 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198  32 109 198 198 198 176  32 198 198 198 198 198  32  98 121  76  32  32  54 109 198 198 198 198  43  32 198 198 198 198 198 198 198  32  32  32  32 198 198 198 198 198 198 198 198 198 198 198 198 255 255 255 255 255 255 255 255
+ 32  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  33 159 191 191 191 117  36  41  41  41  41  41  34 108 191 191 191 191 191 191 191 191 191 117  36  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41 255
+ 32  41  97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  78  38  64 190 192 192 192  66  66  41  41  85 128  65  34 107 190 192 192 192 192 192 192 192 139  48  39  41  41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  97  41 255
+ 32  41  97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  96  36  95 147 148 148 139  55  41  41  85 121 128  91  38  75 137 158 190 190 190 170 139  97  49  37  41  41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  97  41 255
+ 32  41  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  41  36  45  45  45  48  38  41  41  76  76  76  76  76  37  34  42  33  33  33  39  48  59  41  41  41  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  41 255
+ 32  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0  66  66  66  66   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 145 247 247 247 247 145   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0  16 115 181 181 132 247 247 247 247 247 247   0   0   0   0   0  99 148 181 181 148  99   0   0   0   0  16  66  66  66  66  16   0   0   0   0  66  66  66  66  33  66  66  66  66  16   0   0   0  16  66  66  66  66   0   0   0   0  99 165 181 148  66  33  66  66  66  33   0   0   0   0   0   0  82 132 181 181 181 115  66   0   0   0   0   0  16  66  66  66  49   0  66 148 181 148  49   0   0   0
+  0   0   0 129 247 247 247 247 247 247 247 247 247 247 247   0   0   0 112 214 247 247 247 247 247 247 214 112   0  16 247 247 247 247 247 247  46   0   0 145 247 247 247 247 247 247 247 247 247 247  16   0  16 247 247 247 247 247  66   0  63 165 247 247 247 247 247 247 247 247 247 247  33   0   0   0  96 198 247 247 247 247 247 247 247 165  63   0   0  16 247 247 247 247 247 145 247 247 247 247 247 145   0   0
+  0   0 112 247 247 247 247 247 247 247 247 247 247 247 247   0   0 129 247 247 247 247 247 247 247 247 247 247 129   0 181 247 247 247 247 247 148   0 129 247 247 247 247 247 247 247 247 247 247 247 115   0 115 247 247 247 247 247 165  30 247 247 247 247 247 247 247 247 247 247 247 247 115   0   0 129 247 247 247 247 247 247 247 247 247 247 247  63   0  66 247 247 247 247 247 247 247 247 247 247 247 247  96   0
+  0  16 247 247 247 247 247 247 247 247 247 247 247 247 247   0  79 247 247 247 247 247 247 247 247 247 247 247 247  79  79 247 247 247 247 247 247 129 247 247 247 247 247 247 129 247 247 247 247 247 198   0 181 247 247 247 247 247  99 145 247 247 247 247 247 247 247 247 247 247 247 247 115   0  96 247 247 247 247 247 247 247 247 247 247 247 247 165   0  66 247 247 247 247 247 247 247 247 247 247 247 247 198   0
+  0 115 247 247 247 247 247 247 247 247 247 247 247 247 247   0 181 247 247 247 247 247 247 247 247 247 247 247 247 181   0 129 247 247 247 247 247 247 247 247 247 247 247 145  16 247 247 247 247 247 247  33 247 247 247 247 247 247  33 247 247 247 247 247 247 247 247 247 247 247 247 247 115   0 198 247 247 247 247 247 198 181 247 247 247 247 247 247  49  66 247 247 247 247 247 247 247 247 247 247 247 247 247  16
+  0 214 247 247 247 247 247 129  66 247 247 247 247 247 247  33 247 247 247 247 247 247  96  96 247 247 247 247 247 247  33   0 145 247 247 247 247 247 247 247 247 247 198  30   0 165 247 247 247 247 247 115 247 247 247 247 247 165 115 247 247 247 247 247 181  66 115 247 247 247 247 247 115  82 247 247 247 247 247 165 115 115 148 247 247 247 247 247 115  66 247 247 247 247 247 247 181 247 247 247 247 247 247  66
+ 16 247 247 247 247 247 231   0   0 247 247 247 247 247 247  82 247 247 247 247 247 165   0   0 165 247 247 247 247 247  82   0  30 247 247 247 247 247 247 247 247 247  96   0   0  82 247 247 247 247 247 165 247 247 247 247 247  99 165 247 247 247 247 247  99   0 115 247 247 247 247 247 115 132 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 198 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0  96 247 247 247 247 247 247 247 129   0   0   0   0 231 247 247 247 247 247 247 247 247 247 247  16 181 247 247 247 247 247  66   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0   0 181 247 247 247 247 247 247  30   0   0   0   0 148 247 247 247 247 247 247 247 247 247 148   0 181 247 247 247 247 247  66   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0 129 247 247 247 247 247 247 247 145   0   0   0   0  82 247 247 247 247 247 247 247 247 247  82   0 181 247 247 247 247 247  99   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 181  79  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 33 247 247 247 247 247 247  14   0 247 247 247 247 247 247  66 247 247 247 247 247 181   0   0 165 247 247 247 247 247  66   0  79 247 247 247 247 247 247 247 247 247 129   0   0   0   0 231 247 247 247 247 247 247 247 231   0   0 115 247 247 247 247 247 181 115 165 247 247 247 247 247 115 115 247 247 247 247 247 214  63   0   0   0  16 112 247 247  33  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0 214 247 247 247 247 247 198 198 247 247 247 247 247 247  16 247 247 247 247 247 247 132 132 247 247 247 247 247 247  16  14 181 247 247 247 247 247 247 247 247 247 247  79   0   0   0 132 247 247 247 247 247 247 247 148   0   0  66 247 247 247 247 247 247 247 247 247 247 247 247 247 115  33 247 247 247 247 247 247 247 198 181 181 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0 148 247 247 247 247 247 247 247 247 247 247 247 247 247   0 132 247 247 247 247 247 247 247 247 247 247 247 247 145   0 145 247 247 247 247 247 247 247 247 247 247 247 181  14   0   0  49 247 247 247 247 247 247 247  82   0   0   0 198 247 247 247 247 247 247 247 247 247 247 247 247 115   0 145 247 247 247 247 247 247 247 247 247 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0  46 247 247 247 247 247 247 247 247 247 247 247 247 247   0  30 247 247 247 247 247 247 247 247 247 247 247 247  30 112 247 247 247 247 247 247  96 247 247 247 247 247 247 145   0   0   0 214 247 247 247 247 247 231   0   0   0   0  96 247 247 247 247 247 247 247 247 247 247 247 247 115   0  30 148 247 247 247 247 247 247 247 247 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0   0 129 247 247 247 247 247 247 247 247 247 247 247 247   0   0  96 247 247 247 247 247 247 247 247 247 247  96  16 247 247 247 247 247 247 145   0 112 247 247 247 247 247 247  49   0   0 181 247 247 247 247 247 148   0   0   0   0   0 129 247 247 247 247 247 247 247 247 247 247 247 115   0   0  46 148 247 247 247 247 247 247 247 247 247 247 247  33  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0   0   0 129 247 247 247 247 181 145 247 247 247 247 145   0   0   0  46 148 247 247 247 247 247 247 148  46   0   0 112 214 247 247 247 145  14   0   0 145 247 247 247 247 145   0   0  33 247 247 247 247 247 247  66   0   0   0   0   0  99 132 115 181 181 132 198 247 247 247 247 247  82   0   0   0   0  66 165 247 247 247 247 247 247 198 132  33   0   0 145 247 247 247 181  79   0  79 181 247 247 247 145   0
+  0   0   0   0  33 115 115  82   0   0   0   0   0   0   0   0   0   0   0   0  33  99 115 115  99  33   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 115 247 247 247 247 247 214   0   0   0   0   0  99 247 247 247 247 247 247 247 247 247 247 247 247  16   0   0   0   0   0   0   0  49  66  66  66   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 108 224 255 255 255 255 255 255 101 164 255 255 255 143 250 255 255 255 255 255 255 255 255 255 255 255  98 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 136 251 255 255 255 255 255 255 101 130 255 255 255 153 250 255 255 255 255 255 255 255 255 255 255 121  98 189 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 198 252 255 255 255 255 255 164 164 255 255 255 255 176 249 251 255 255 255 255 255 255 255 255 150  86 192 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 164 198 255 255 255 255 201 133 164 255 255 255 255 255 145 203 255 255 255 255 255 255 255 117  79 194 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0  66 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  73  73 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  47  70 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  66   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+
diff --git a/src/dynsections.js b/templates/html/dynsections.js
similarity index 100%
rename from src/dynsections.js
rename to templates/html/dynsections.js
diff --git a/src/extsearch.js b/templates/html/extsearch.js
similarity index 98%
rename from src/extsearch.js
rename to templates/html/extsearch.js
index 920c12b..47d2595 100644
--- a/src/extsearch.js
+++ b/templates/html/extsearch.js
@@ -11,7 +11,7 @@ function SearchBox(name, resultsPath, inFrame, label)
     {
       this.DOMSearchBox().className = 'MSearchBoxActive';
       var searchField = this.DOMSearchField();
-      if (searchField.value == this.searchLabel) 
+      if (searchField.value == this.searchLabel)
       {
         searchField.value = '';
       }
diff --git a/templates/html/folderclosed.luma b/templates/html/folderclosed.luma
new file mode 100644
index 0000000..594b36b
--- /dev/null
+++ b/templates/html/folderclosed.luma
@@ -0,0 +1,49 @@
+# folder closed icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 197 155 155 155 155 196 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 155 191 191 191 192 155 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 168 144 180 180 181 180 145 145 146 145 146 146 146 146 145 167 255 255 255 255
+255 255 255 255 147 225 226 226 225 226 225 221 221 219 215 214 212 211 213 145 255 255 255 255
+255 255 255 255 147 212 211 211 210 211 210 205 206 205 201 201 199 196 201 145 255 255 255 255
+255 255 255 255 146 204 203 204 203 203 202 200 200 197 197 196 195 194 196 145 255 255 255 255
+255 255 255 255 146 202 200 201 201 200 199 198 198 195 194 194 193 192 194 145 255 255 255 255
+255 255 255 255 145 200 196 196 196 195 195 193 192 192 190 189 189 189 191 143 255 255 255 255
+255 255 255 255 143 192 191 190 190 189 189 188 186 187 186 185 185 185 187 142 255 255 255 255
+255 255 255 255 142 186 184 183 182 183 182 183 180 181 181 181 181 181 182 141 255 255 255 255
+255 255 255 255 138 177 175 176 176 177 177 176 175 174 175 175 175 174 176 138 255 255 255 255
+255 255 255 255 138 173 169 170 168 170 169 170 170 169 171 171 171 171 174 137 255 255 255 255
+255 255 255 255 138 166 163 163 162 162 162 162 162 162 164 163 163 163 166 137 255 255 255 255
+255 255 255 255 137 124 124 124 125 124 124 124 125 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 231 231 228 225 222 220 218 216 214 215 217 219 221 224 227 226 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/folderopen.luma b/templates/html/folderopen.luma
new file mode 100644
index 0000000..0b89813
--- /dev/null
+++ b/templates/html/folderopen.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 228 195 193 190 187 218 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 195 215 221 225 225 178 176 176 175 176 178 180 255 255 255 255 255 255
+255 255 255 255 255 255 189 206 215 219 226 220 214 212 207 204 200 176 255 255 255 255 255 255
+255 255 255 255 168 154 153 153 152 152 151 149 150 150 149 147 146 145 145 167 255 255 255 255
+255 255 255 255 146 187 187 188 187 187 185 183 183 182 179 178 175 173 174 145 255 255 255 255
+255 255 255 255 146 180 182 182 181 181 179 178 176 174 173 171 169 170 168 144 255 255 255 255
+255 255 255 255 144 173 176 176 177 175 175 174 171 170 168 168 166 166 164 143 255 255 255 255
+255 255 255 255 142 168 170 171 170 170 169 168 166 166 165 163 163 164 162 142 255 255 255 255
+255 255 255 255 141 162 166 164 164 165 163 163 161 161 161 161 161 160 159 141 255 255 255 255
+255 255 255 255 138 157 159 159 158 158 158 157 157 157 157 156 157 157 155 138 255 255 255 255
+255 255 255 255 137 154 153 154 154 153 154 154 154 153 154 154 154 154 154 137 255 255 255 255
+255 255 255 255 137 154 154 154 154 154 154 154 153 154 154 153 153 153 154 137 255 255 255 255
+255 255 255 255 137 125 125 125 125 124 125 124 124 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 212 209 204 199 193 190 186 183 180 181 185 188 192 197 202 203 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/src/footer.html b/templates/html/footer.html
similarity index 100%
rename from src/footer.html
rename to templates/html/footer.html
diff --git a/src/header.html b/templates/html/header.html
similarity index 100%
rename from src/header.html
rename to templates/html/header.html
diff --git a/templates/html/htmlallmembers.tpl b/templates/html/htmlallmembers.tpl
new file mode 100644
index 0000000..98f88d6
--- /dev/null
+++ b/templates/html/htmlallmembers.tpl
@@ -0,0 +1,22 @@
+{% extend 'htmlbase.tpl' %}
+
+{% block title %}
+  <div class="headertitle"><div class="title">{{ compound.name }} {{ tr.memberList }}</div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<p>{{ tr.theListOfAllMembers }} <a class="el" href="{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ compound.name }}</a>{{ tr.incInheritedMembers }}</p>
+<table class="directory">
+{% for mi in compound.allMembersList %}
+  <tr {% cycle 'class="even"' '' %}>
+  {# TODO: objective-C #}
+  <td>{% with obj=mi.member text=mi.ambiguityScope|append:mi.member.name %}
+      {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+  </td>
+  </tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlannotated.tpl b/templates/html/htmlannotated.tpl
new file mode 100644
index 0000000..dd72ac9
--- /dev/null
+++ b/templates/html/htmlannotated.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.classListDescription }}
+</div>
+{% indexentry nav name=tr.classes file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl
new file mode 100644
index 0000000..d394b45
--- /dev/null
+++ b/templates/html/htmlbase.tpl
@@ -0,0 +1,216 @@
+{% block header %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen {{ doxygen.version }}"/>
+<title>{{ config.PROJECT_NAME }}: {{ page.title }}</title>
+<link href="{{ page.relPath }}tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}jquery.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}dynsections.js"></script>
+{% if config.GENERATE_TREEVIEW %}
+<link href="{{ page.relPath }}navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}resize.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtreedata.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+  $(window).load(resizeHeight);
+</script>
+{% endif %}
+{% if config.SEARCHENGINE %}
+<link href="{{ page.relPath }}search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}search/search.js"></script>
+  {% if config.SERVER_BASED_SEARCH %}
+<script type="text/javascript">
+  $(document).ready(function() {
+    if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
+  });
+</script>
+<link rel="search" href="{{ page.relPath }}search-opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="{{ config.PROJECT_NAME }}"/>
+  {% else %}
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+  {% endif %}
+{% endif %}
+{% if config.USE_MATHJAX %}
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],  {# TODO: support MATHJAX_EXTENSIONS #}
+    jax: ["input/TeX","output/{{ config.MATHJAX_FORMAT }}"],
+});
+{# TODO: support MATHJAX_CODEFILE #}
+</script>
+<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+{% endif %}
+<link href="{{ page.relPath }}{{ config.HTML_STYLESHEET|default:'doxygen.css' }}" rel="stylesheet" type="text/css" />
+{% if config.HTML_EXTRA_STYLESHEET %}
+<link href="{{ page.relPath }}{{ config.HTML_EXTRA_STYLESHEET }}" rel="stylesheet" type="text/css" />
+{% endif %}
+</head>
+<body>
+{% endblock %}
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+{% block titlearea %}
+{% if config.PROJECT_NAME or config.PROJECT_BRIEF or config.PROJECT_LOGO or config.DISABLE_INDEX and config.SEARCHENGINE %}
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ {% if config.PROJECT_LOGO %}
+  <td id="projectlogo"><img alt="Logo" src="{{ page.relPath }}{{ config.PROJECT_LOGO|stripPath }}"/></td>
+ {% endif %}
+  <td style="padding-left: 0.5em;">
+ {% if config.PROJECT_NAME %}
+   <div id="projectname">{{ config.PROJECT_NAME }}
+  {% if config.PROJECT_NUMBER %}
+    <span id="projectnumber">{{ config.PROJECT_NUMBER }}</span>
+  {% endif %}
+   </div>
+ {% endif %}
+ {% if config.PROJECT_BRIEF %}
+   <div id="projectbrief">{{ config.PROJECT_BRIEF }}</div>
+ {% endif %}
+  </td>
+ {% if config.DISABLE_INDEX and config.SEARCHENGINE %}{# search box is part of title area #}
+  <td>
+  {% if config.SERVER_BASED_SEARCH %}
+   <div id="MSearchBox" class="MSearchBoxInactive">
+    <div class="left">
+     <form id="FSearchBox" action="{{ page.relPath }}{% if config.EXTERNAL_SEARCH %}search{{ doxygen.htmlFileExtension }}{% else %}search.php{% endif %}" method="get">
+      <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+      <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+                onfocus="searchBox.OnSearchFieldFocus(true)"
+                onblur="searchBox.OnSearchFieldFocus(false)"/>
+     </form>
+    </div>
+    <div class="right"></div>
+   </div>
+  {% else %}{# !SERVER_BASED_SEARCH #}
+   <div id="MSearchBox" class="MSearchBoxInactive">
+    <span class="left">
+      <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+           onmouseover="return searchBox.OnSearchSelectShow()"
+           onmouseout="return searchBox.OnSearchSelectHide()"
+           alt=""/>
+      <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+           onfocus="searchBox.OnSearchFieldFocus(true)"
+           onblur="searchBox.OnSearchFieldFocus(false)"
+           onkeyup="searchBox.OnSearchFieldChange(event)"/>
+    </span><span class="right">
+        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+           id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png"
+           alt=""/></a>
+    </span>
+   </div>
+  </td>
+  {% endif %}{# SERVER_BASED_SEARCH #}
+ {% endif %}{# DISABLE_INDEX and SEARCHENGINE #}
+ </tr>
+ </tbody>
+</table>
+</div>
+{% endif %}{# titlearea visible #}
+{% endblock %}
+<!-- end header part -->
+<!-- Generated by Doxygen {{ doxygen.version }} -->
+{% block search %}
+{% if config.SEARCHENGINE %}{# TODO: can't we move this to the header? #}
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{ tr.search }}');
+</script>
+{% endif %}
+{% endblock %}
+
+{% block tabs %}
+{% if not config.DISABLE_INDEX %}
+{% include 'htmltabs.tpl' %}
+{% endif %}
+{% endblock %}
+
+{% block navpath %}
+{% endblock %}
+
+
+</div><!-- top -->
+{% block splitbar %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;"
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('{{ page.fileName }}{% if page_postfix %}{{ page_postfix }}{% endif %}{{ config.HTML_FILE_EXTENSION }}','{{ page.relPath }}');});
+</script>
+<div id="doc-content">
+{% endif %}
+{% endblock %}
+
+{% block searchInfo %}
+{% if config.SEARCHENGINE and not config.SERVER_BASED_SEARCH %}
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+{# TODO: get search categories dynamically, since we don't know them here #}
+</div>
+{% endif %}
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+{% endblock %}
+
+<div class="header">
+{% block title %}
+  <div class="headertitle"><div class="title">{{ page.title }}</div></div>
+{% endblock %}
+</div>
+
+{% block content %}
+{% endblock %}
+
+{% block endsplitbar %}
+{% if config.GENERATE_TREEVIEW %}
+</div><!-- content -->
+{% endif %}
+{% endblock %}
+
+{% block footer %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="nav-path" class="navpath">{# id is needed for treeview function! #}
+  <ul>
+    {# navpath #}
+    <li class="footer">
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> {{ doxygen.version }} </li>
+  </ul>
+</div>
+{% else %}
+  <hr class="footer"/><address class="footer"><small>
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+ <a href="http://www.doxygen.org/index.html"><img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> 
+  {{ doxygen.version }}
+  </small></address>
+{% endif %}
+</body>
+</html>
+{% endblock %}
diff --git a/templates/html/htmlclass.tpl b/templates/html/htmlclass.tpl
new file mode 100644
index 0000000..bb734b6
--- /dev/null
+++ b/templates/html/htmlclass.tpl
@@ -0,0 +1,452 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for class {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.allMembersList %}
+      {% if not first %} | {% endif %}
+      <a href="{{ compound.allMembersFileName }}{{ config.HTML_FILE_EXTENSION }}#all-members-list">{{ tr.listOfAllMembers }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.publicTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.unoIDLServices %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.unoIDLInterfaces %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.related %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# includes #}
+  {% if compound.includeInfo %}
+    <div class="textblock">
+    {% with ii=compound.includeInfo %}
+      {% include 'htmlinclude.tpl' %}
+    {% endwith %}
+    </div>
+  {% endif %}
+{# inheritancegraph #}
+  {% if compound.hasInheritanceDiagram %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.inheritanceDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.inheritanceDiagram }}
+    </div>
+    {# TODO: legend #}
+  {% else %}
+    {# textual inheritance list #}
+    {% if compound.inherits|length>0 %}
+      <p>
+      {% markers c in compound.inherits with tr.inheritsList:compound.inherits|length %}
+        {% with obj=c.class text=c.name %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </p>
+    {% endif %}
+    {% if compound.inheritedBy|length>0 %}
+      <p>
+      {% markers c in compound.inheritedBy with tr.inheritedByList:compound.inheritedBy|length %}
+        {% with obj=c.class text=c.name %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </p>
+    {% endif %}
+  {% endif %}
+{# collaborationgraph #}
+  {% if compound.hasCollaborationDiagram %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.collaborationDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.collaborationDiagram }}
+    </div>
+  {% endif %}
+{# memberdecls #}
+  {# TODO: isSimple #}
+    {# nestedClasses #}
+      {% with list=compound.classes label='nested-classes' title=tr.classes local=1 %}
+        {% include 'htmldeclcomp.tpl' %}
+      {% endwith %}
+    {# publicTypes #}
+      {% with memberListInfo=compound.publicTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# services #}
+      {% with memberListInfo=compound.unoIDLServices %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# interfaces #}
+      {% with memberListInfo=compound.unoIDLInterfaces %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicSlots #}
+      {% with memberListInfo=compound.publicSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# signals #}
+      {% with memberListInfo=compound.signals %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicMethods #}
+      {% with memberListInfo=compound.publicMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicStaticMethods #}
+      {% with memberListInfo=compound.publicStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicAttributes #}
+      {% with memberListInfo=compound.publicAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicStaticAttributes #}
+      {% with memberListInfo=compound.publicStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedtypes #}
+      {% with memberListInfo=compound.protectedTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedslots #}
+      {% with memberListInfo=compound.protectedSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedmethods #}
+      {% with memberListInfo=compound.protectedMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedstaticmethods #}
+      {% with memberListInfo=compound.protectedStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedattributes #}
+      {% with memberListInfo=compound.protectedAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedstaticattributes #}
+      {% with memberListInfo=compound.protectedStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagetypes #}
+      {% with memberListInfo=compound.packageTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagemethods #}
+      {% with memberListInfo=compound.packageMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagestaticmethods #}
+      {% with memberListInfo=compound.packageStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packageattributes #}
+      {% with memberListInfo=compound.packageAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagestaticattributes #}
+      {% with memberListInfo=compound.packageStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# properties #}
+      {% with memberListInfo=compound.properties %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# events #}
+      {% with memberListInfo=compound.events %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatetypes #}
+      {% with memberListInfo=compound.privateTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privateslots #}
+      {% with memberListInfo=compound.privateSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatemethods #}
+      {% with memberListInfo=compound.privateMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatestaticmethods #}
+      {% with memberListInfo=compound.privateStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privateattributes #}
+      {% with memberListInfo=compound.privateAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatestaticattributes #}
+      {% with memberListInfo=compound.privateStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# friends #}
+      {% with memberListInfo=compound.friends %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# related #}
+      {% with memberListInfo=compound.related %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# member groups #}
+      {% if compound.memberGroups %}
+        {% for memberListInfo in compound.memberGroups %}
+          {% include 'htmlmemdecls.tpl' %}
+        {% endfor %}
+      {% endif %}
+    {# additionalInheritedMembers #}
+      {% if compound.additionalInheritedMembers %}
+        <table class="memberdecls">
+        <tr class="heading"><td colspan="2"><h2 class="groupheader">
+        <a name="inherited"></a>{{ tr.additionalInheritedMembers }}
+        </h2></td></tr>
+        {# write additional inherited members #}
+        {% for info in compound.additionalInheritedMembers %}
+          {% include 'htmlmeminherit.tpl' %}
+        {% endfor %}
+        </table>
+      {% endif %}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {% if compound.anchor %}
+    <a name="{{ compound.anchor }}" id="{{ compound.anchor }}"></a>
+  {% else %}
+    <a name="details" id="details"></a>
+  {% endif %}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# template specifier #}
+  {% if compound.language=='cpp' and compound.templateDecls %}
+    <h3>{% spaceless %}
+      {% for targList in compound.templateDecls %}
+        template<
+        {% for targ in targList %}
+          {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+        {% endfor %}
+        ><br/>
+      {% endfor %}
+    {% endspaceless %}
+    {{ compound.compoundType }} {{ compound.name }}
+    </h3>
+  {% endif %}
+  {# brief description #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {{ compound.details }}
+  </div>
+  {# type constraints #}
+    {% with obj=compound %}
+      {% include 'htmltypeconstraints.tpl' %}
+    {% endwith %}
+  {# examples #}
+    {% if compound.examples %}
+      <dl><dt><b>{{ tr.examples }}</b><dd>
+      {% markers obj in compound.examples with tr.exampleList:compound.examples|length %}
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </dd></dl>
+    {% endif %}
+  {# source definition #}
+    {% if compound.sourceDef %}
+      {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+    {% endif %}
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+  {% if compound.classes %}
+    {# TODO write inlined simple classes: tr.classDocumentation / tr.typeDocumentation #}
+  {% endif %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# services #}
+    {% with memberListInfo=compound.detailedServices %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# interfaces #}
+    {% with memberListInfo=compound.detailedInterfaces %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# constructors #}
+    {% with memberListInfo=compound.detailedConstructors %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedMethods %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# related #}
+    {% with memberListInfo=compound.detailedRelated %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# properties #}
+    {% with memberListInfo=compound.detailedProperties %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# events #}
+    {% with memberListInfo=compound.detailedEvents %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# used files #}
+  {% if config.SHOW_USED_FILES %}
+    <hr/>
+    {{ compound.generatedFromFiles }}
+    <ul>
+    {% for file in compound.usedFiles %}
+      <li>{% if file.sourceFileName %}
+            <a class="el" href="{{ file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">
+          {% endif %}
+          {% if not file.sourceFileName and file.isLinkable %}
+            <a class="el" href="{{ file.fileName }}{{ config.HTML_FILE_EXTENSION }}">
+          {% endif %}
+          {% if config.FULL_PATH_NAMES %}
+            {{ file.name }}
+          {% else %}
+            {{ file.name|stripPath }}
+          {% endif %}
+          {% if file.sourceFileName or file.isLinkable %}
+            </a>
+          {% endif %}
+          {% if file.versionInfo %} {{ file.versionInfo }}{% endif %}
+      </li>
+    {% endfor %}
+    </ul>
+  {% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlclasses.tpl b/templates/html/htmlclasses.tpl
new file mode 100644
index 0000000..803b1a9
--- /dev/null
+++ b/templates/html/htmlclasses.tpl
@@ -0,0 +1,49 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% indexentry nav name=tr.classIndex file=page.fileName anchor='' %}
+</div>
+{% with index=classIndex.list|alphaIndex:'name' %}
+  {# quick index at top #}
+  <div class="qindex">
+  {% for section in index %}
+    <a class="qindex" href="#letter_{{ section.label }}">{{ section.letter }}</a>
+    {% if not forloop.last %}
+     | 
+    {% endif %}
+  {% endfor %}
+  </div>
+  {# multi column index #}
+  <div class="classindex" style="column-count:{{ config.COLS_IN_ALPHA_INDEX }};-moz-column-count:{{ config.COLS_IN_ALPHA_INDEX }};-webkit-column-count:{{ config.COLS_IN_ALPHA_INDEX}}">
+  {% for section in index %}
+    <ul>
+    {% for cls in section.items %}
+      <li>
+        <span class="ai">
+        {% if forloop.first %}
+        <a name="#letter_{{ section.label }}"></a>
+        <span class="ah">  {{ section.letter }}  </span><br/>
+        {% endif %}
+        {% with obj=cls text=cls.name %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+        </span>
+      </li>
+    {% endfor %}
+    </ul>
+  {% endfor %}
+  </div><!-- classindex -->
+  {# quick index at bottom #}
+  <div class="qindex">
+  {% for section in index %}
+    <a class="qindex" href="#letter_{{ section.label }}">{{ section.letter }}</a>
+    {% if not forloop.last %}
+     | 
+    {% endif %}
+  {% endfor %}
+  </div>
+{% endwith %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl
new file mode 100644
index 0000000..29d495e
--- /dev/null
+++ b/templates/html/htmlclmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.classMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl
new file mode 100644
index 0000000..2f15c12
--- /dev/null
+++ b/templates/html/htmlclmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+  {# all members #}
+  {% with list=namespaceMembersIndex.all section='' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# functions #}
+  {% with list=namespaceMembersIndex.functions section='_func' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# variables #}
+  {% with list=namespaceMembersIndex.variables section='_vars' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# typedefs #}
+  {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enums #}
+  {% with list=namespaceMembersIndex.enums section='_enum' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enumValues #}
+  {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmldeclcomp.tpl b/templates/html/htmldeclcomp.tpl
new file mode 100644
index 0000000..4bd99d2
--- /dev/null
+++ b/templates/html/htmldeclcomp.tpl
@@ -0,0 +1,32 @@
+{# inputs: list, label, title, local #}
+{% if list %}
+  <table class="memberdecls"><tr class="heading"><td colspan="2">
+  <h2 class="groupheader"><a name="{{ label }}"></a>{{ title }}</h2></td></tr>
+  {% for nc in list %}
+    <tr class="memitem:{{ nc.anchor }}">
+    <td class="memItemLeft" align="right" valign="top">{% if nc.compoundType %}{{ nc.compoundType }} {% endif %}</td>
+    <td class="memItemRight" valign="bottom">
+    {% if local %}
+      {% with obj=nc text=nc.bareName %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% else %}
+      {% with obj=nc text=nc.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+    </td></tr>
+    {# brief description #}
+      {% if nc.brief %}
+        <tr class="memdesc:{{ nc.anchor }}"><td class="mdescLeft"> </td><td class="mdescRight">
+        {{ nc.brief }}
+        {% if nc.hasDetails %}
+          {# TODO: link to group if member is grouped #}
+          <a href="{{ page.relPath }}{{ nc.fileName }}{{ config.HTML_FILE_EXTENSION}}{% if nc.anchor %}#{{ nc.anchor }}{% endif %}">{{ tr.more }}</a>
+        {% endif %}
+        <br/></td></tr>
+      {% endif %}
+    <tr class="separator:{{ nc.anchor}}"><td class="memSeparator" colspan="2"> </td></tr>
+  {% endfor %}
+  </table>
+{% endif %}
diff --git a/templates/html/htmldir.tpl b/templates/html/htmldir.tpl
new file mode 100644
index 0000000..7417f7b
--- /dev/null
+++ b/templates/html/htmldir.tpl
@@ -0,0 +1,78 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for directory {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+  {% if compound.navigationPath %}
+    <div id="nav-path" class="navpath">
+      <ul>
+      {% for obj in compound.navigationPath %}
+        <li class="navelem">
+          {% with text=obj.text %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        </li>
+      {% endfor %}
+      </ul>
+    </div>
+  {% endif %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.dirs %}
+      <a href="#subdirs">{{ tr.directories }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.files %}
+      {% if not first %} | {% endif %}
+      <a href="#files">{{ tr.files }}</a>
+      {% set first=False %}
+    {% endif %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# dir graph #}
+{# TODO #}
+{# member declarations #}
+  {# directories #}
+    {% with list=compound.dirs label='subdirs' title=tr.directories local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# files #}
+    {% with list=compound.files, label='files' title=tr.files local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  </div>
+{% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl
new file mode 100644
index 0000000..2fa266a
--- /dev/null
+++ b/templates/html/htmldirtree.tpl
@@ -0,0 +1,46 @@
+{# input tree with maxDepth, preferredDepth, and nodes #}
+<div class="directory">
+{# level selection #}
+{% if tree.maxDepth > 1 %}
+  <div class="levels">[{{ tr.detailLevel }}
+  {% range i from 1 to tree.maxDepth %}
+  <span onclick="javascript:toggleLevel({{ i }});">{{ i }}</span>
+  {% endrange %}
+  ]</div>
+{% endif %}
+{# the table with entries #}
+<table class="directory">
+{% recursetree tree.tree %}
+  {% indexentry nav name=node.name file=node.fileName anchor=node.anchor %}
+  {% spaceless %}
+  <tr id="row_{{ node.id }}" class="{% cycle 'even' 'odd' %}"{%if node.level>tree.preferredDepth %} style="display:none;"{% endif %}>
+    <td class="entry">
+  {% if node.is_leaf_node %}
+    <span style="width:{{ (node.level+1)*16 }}px;display:inline-block;"> </span>
+  {% else %}
+    <span style="width:{{ (node.level)*16 }}px;display:inline-block;"> </span>
+    <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')">
+       {%if node.level+1<tree.preferredDepth %}▼{% else %}►{% endif %}
+    </span>
+  {% endif %}
+  {% if node.namespace %}
+    <span class="icona"><span class="icon">N</span></span>
+  {% elif node.class %}
+    <span class="icona"><span class="icon">C</span></span>
+  {% elif node.dir %}
+    <span id="img_{{ node.id }}" class="iconf{%if node.level+1<tree.preferredDepth %}open{% else %}closed{% endif %}" onclick="toggleFolder('{{ node.id }}')"> </span>
+  {% elif node.file %}
+    <span class="icondoc"></span>
+  {% endif %}
+  {% with obj=node text=node.name %}
+    {% include 'htmlobjlink.tpl' %}
+  {% endwith %}
+    </td><td class="desc">{{ node.brief }}</td>
+  </tr>
+  {% endspaceless %}
+  {% opensubindex nav %}
+  {{ children }}
+  {% closesubindex nav %}
+{% endrecursetree %}
+</table>
+</div><!-- directory -->
diff --git a/templates/html/htmldyncontents.tpl b/templates/html/htmldyncontents.tpl
new file mode 100644
index 0000000..37411c3
--- /dev/null
+++ b/templates/html/htmldyncontents.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId attribute #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+  <div id="dynsection-{{ obj.dynSectionId }}-summary" class="dynsummary" style="display:block;"></div>
+  <div class="dyncontent" id="dynsection-{{ obj.dynSectionId }}-content" style="display:none;">
+{% else %}
+  <div class="dyncontent">
+{% endif %}
diff --git a/templates/html/htmldynheader.tpl b/templates/html/htmldynheader.tpl
new file mode 100644
index 0000000..405c053
--- /dev/null
+++ b/templates/html/htmldynheader.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId and relPath attributes #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+<div id="dynsection-{{ obj.dynSectionId }}" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><img
+     id="dynsection-{{ obj.dynSectionId }}-trigger" src="{{ obj.relPath }}closed.png" alt="+"/>
+{% else %}
+<div class="dynheader">
+{% endif %}
diff --git a/templates/html/htmlfile.tpl b/templates/html/htmlfile.tpl
new file mode 100644
index 0000000..67af096
--- /dev/null
+++ b/templates/html/htmlfile.tpl
@@ -0,0 +1,256 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} | {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} | {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# includes #}
+  {% if compound.includeList %}
+    <div class="textblock">
+    {% for ii in compound.includeList %}
+      {% include 'htmlinclude.tpl' %}
+      <br/>
+    {% endfor %}
+    </div>
+  {% endif %}
+{# include graph #}
+  {% if compound.hasIncludeGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.includeDependencyGraph:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.includeGraph }}
+    </div>
+  {% endif %}
+{# included by graph #}
+  {% if compound.hasIncludedByGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.includedByDependencyGraph }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.includedByGraph }}
+    </div>
+  {% endif %}
+{# source link #}
+  {% if compound.hasSourceFile %}
+   <p><a href="{{ page.relPath }}{{ compound.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoSourceCode }}</a></p>
+  {% endif %}
+{# member declarations #}
+  {# classes #}
+    {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# defines #}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template<
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                ><br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }} {{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# defines #}
+    {% with memberListInfo=compound.detailedMacros %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlfiles.tpl b/templates/html/htmlfiles.tpl
new file mode 100644
index 0000000..1871d4d
--- /dev/null
+++ b/templates/html/htmlfiles.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.fileListDescription }}
+</div>
+{% indexentry nav name=tr.fileList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=fileTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl
new file mode 100644
index 0000000..e2c781a
--- /dev/null
+++ b/templates/html/htmlflmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.fileMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlgraphhierarchy.tpl b/templates/html/htmlgraphhierarchy.tpl
new file mode 100644
index 0000000..2c2dde5
--- /dev/null
+++ b/templates/html/htmlgraphhierarchy.tpl
@@ -0,0 +1,13 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<p><a href="hierarchy{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoTextualHierarchy }}</a></p>
+</div>
+<table border="0" cellspacing="10" cellpadding="0">
+{% for d in classHierarchy.diagrams %}
+<tr><td>{{ d.graph }}</td></tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlhierarchy.tpl b/templates/html/htmlhierarchy.tpl
new file mode 100644
index 0000000..5d03755
--- /dev/null
+++ b/templates/html/htmlhierarchy.tpl
@@ -0,0 +1,17 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<p>{{ tr.classHierarchyDescription }}</p>
+{% if config.HAVE_DOT and config.GRAPHICAL_HIERARCHY %}
+<p><a href="inherits{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoGraphicalHierarchy }}</a></p>
+{% endif %}
+</div>
+{% indexentry nav name=tr.classHierarchy file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classHierarchy %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlinclude.tpl b/templates/html/htmlinclude.tpl
new file mode 100644
index 0000000..24bfac6
--- /dev/null
+++ b/templates/html/htmlinclude.tpl
@@ -0,0 +1,27 @@
+{# input: ii with attributes (file,name,isImport,isLocal), compound with attribute language #}
+{% spaceless %}
+  {% if ii.file or ii.name %}
+    <tt>
+    {% if compound.language=='java' or compound.language=='idl' %}
+      import 
+    {%else %}
+      {% if ii.isImport %}
+      #import 
+      {% else %}
+      #include 
+      {% endif %}
+    {%endif %}
+    {% if ii.isLocal %}"{% else %}<{% endif %}
+      {% if ii.name %}
+        {% if ii.file %}
+          <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.name }}</a>
+        {% else %}
+          {{ ii.name }}
+        {% endif %}
+      {% else %}
+       <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.file.name }}</a>
+      {% endif %}
+    {% if ii.isLocal %}"{% else %}>{% endif %}
+    </tt>
+  {% endif %}
+{% endspaceless %}
diff --git a/templates/html/htmlindexpages.tpl b/templates/html/htmlindexpages.tpl
new file mode 100644
index 0000000..65bf1b6
--- /dev/null
+++ b/templates/html/htmlindexpages.tpl
@@ -0,0 +1,19 @@
+{# inputs: list, section #}
+{% with letter='' %}
+  {# create full index page #}
+  {% create page.fileName|append:section|append:config.HTML_FILE_EXTENSION from template %}
+{% endwith %}
+{% if list|length>maxItemsForMultiPageList %}
+  {% opensubindex nav %}
+  {% with index=list|alphaIndex:'name' %}
+    {% for sect in index %}
+      {% with letter=sect.letter %}
+         {% set page_postfix=section|append:'_'|append:sect.label %}
+         {% indexentry nav name=letter file=page.fileName|append:page_postfix anchor='' %}
+         {# create index pages for all globals starting with a specific letter #}
+         {% create page.fileName|append:page_postfix|append:config.HTML_FILE_EXTENSION from template %}
+      {% endwith %}
+    {% endfor %}
+  {% endwith %}
+  {% closesubindex nav %}
+{% endif %}
diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl
new file mode 100644
index 0000000..07a9efc
--- /dev/null
+++ b/templates/html/htmljsnavindex.tpl
@@ -0,0 +1,7 @@
+{# input idx, entries #}
+var NAVTREEINDEX{{ idx }} =
+{
+{% for entry in entries %}
+  "{{ entry.file }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %}
+{% endfor %}
+};
diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl
new file mode 100644
index 0000000..a7ad88e
--- /dev/null
+++ b/templates/html/htmljsnavtree.tpl
@@ -0,0 +1,20 @@
+var NAVTREE =
+[
+{% recursetree index.nav %}
+  [ "{{ node.name }}", {% if node.file %}"{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [
+     {{ children }}
+  ]{% else %} null{% endif %} ]{% if not node.last %},{% endif %}
+{% endrecursetree %}
+];
+
+var NAVTREEINDEX =
+[
+{% with navlist=index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}'|append:'#{{anchor}}' navpages=navlist|paginate:250 %}
+  {% for page in navpages %}
+    "{{ page.0.file }}{{ config.HTML_FILE_EXTENSION }}{% if page.0.anchor %}#{{ page.0.anchor }}{% endif %}"{% if not forloop.last %},{%endif %}
+    {% with idx=forloop.counter0 entries=page %}
+      {% create forloop.counter0|prepend:'navtreeindex'|append:'.js' from 'htmljsnavindex.tpl' %}
+    {% endwith %}
+  {% endfor %}
+{% endwith %}
+];
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
new file mode 100644
index 0000000..9b82238
--- /dev/null
+++ b/templates/html/htmllayout.tpl
@@ -0,0 +1,237 @@
+{% msg %}----- Start generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %}
+
+{# ---- copy fixed resources to the output ----- #}
+
+{% resource 'doxygen.css' %}
+{% resource 'tabs.css' %}
+{% resource 'jquery.js' %}
+{% resource 'dynsections.js %}
+{% resource 'tab_a.lum' %}
+{% resource 'tab_b.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'tab_s.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'bc_s.luma' %}
+{% resource 'doxygen.luma' %}
+{% resource 'closed.luma' %}
+{% resource 'open.luma' %}
+{% resource 'bdwn.luma' %}
+{% resource 'sync_on.luma' %}
+{% resource 'sync_off.luma' %}
+
+{# navigation #}
+{% resource 'nav_f.lum' %}
+{% resource 'nav_g.png' %}
+{% resource 'nav_h.lum' %}
+{% resource 'navtree.css' %}
+
+{# general search resources #}
+{% resource 'search_l.png' as 'search/search_l.png' %}
+{% resource 'search_m.png' as 'search/search_m.png' %}
+{% resource 'search_r.png' as 'search/search_r.png' %}
+{% if config.DISABLE_INDEX %}
+  {% resource 'search_noidx.css' as 'search/search.css'   %}
+{% else %}
+  {% resource 'search.css'       as 'search/search.css'   %}
+{% endif %}
+
+{% if config.SERVER_BASED_SEARCH %}
+  {# server side search resources #}
+  {% resource 'mag.png'     as 'search/mag.png'     %}
+  {% resource 'extsearch.js as 'search/search.js'   %}
+  {% resource 'search_functions.php'  as 'search/search_functions.php'  %}
+  {% resource 'search_opensearch.php' as 'search/search_opensearch.php' %}
+{% else %}
+  {# client side search resources #}
+  {% resource 'mag_sel.png' as 'search/mag_sel.png' %}
+  {% resource 'close.png'   as 'search/close.png'   %}
+  {% resource 'search.js'   as 'search/search.js'   %}
+{% endif %}
+
+{# interactive SVGs #}
+{% resource 'svgpan.js' %}
+
+{# -------------------------------------------------- #}
+
+{# global constants #}
+{% set maxItemsForFlatList=2 %}
+{% set maxItemsForMultiPageList=4 %}
+
+{# global variable #}
+{% set page_postfix='' %}
+
+{# open the global navigation index #}
+{% indexentry nav name=tr.mainPage file='index' anchor='' %}
+{% opensubindex nav %}
+
+{# ----------- HTML DOCUMENTATION PAGES ------------ #}
+
+{# write main page documentation #}
+{% with page=mainPage compound=mainPage isMainPage=True %}
+  {% create mainPage.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+{% endwith %}
+
+{# write namespace documentation pages #}
+{% for compound in namespaceList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespace.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write class documentation pages #}
+{% for compound in classList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclass.tpl' %}
+    {% if compound.allMembersList and not config.OPTIMIZE_OUTPUT_FOR_C %}
+      {% create compound.allMembersFileName|append:config.HTML_FILE_EXTENSION from 'htmlallmembers.tpl' %}
+    {% endif %}
+  {% endwith %}
+{% endfor %}
+
+{# write the file sources #}
+{% for compound in fileList %}
+  {% with page=compound %}
+    {# TODO: to deal with clang optimisation, we need to write the sources in a different order! #}
+    {# TODO: now writing sources has the side-effect of creating cross-references. Need to split that up! #}
+    {% if compound.hasSourceFile %}
+      {% create compound.sourceFileName|append:config.HTML_FILE_EXTENSION from 'htmlsource.tpl' %}
+    {% endif %}
+  {% endwith %}
+{% endfor %}
+
+{# write file documentation pages #}
+{% for compound in fileList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfile.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write related page documentation #}
+{% for compound in pageList %}
+  {% with page=compound isMainPage=False %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write module documentation #}
+{% for compound in moduleList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodule.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# TODO: write example documentation #}
+
+{# ----------- INDEXES ------------ #}
+
+{# --- related pages --- #}
+{% if pageTree.tree %}
+  {% with page=pageTree %}
+    {% create pageTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpages.tpl' %}
+  {% endwith %}
+{% endif %}
+
+{# --- modules --- #}
+{% if moduleTree.tree %}
+  {% with page=moduleTree %}
+    {% create moduleTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodules.tpl' %}
+  {% endwith %}
+{% endif %}
+
+{# --- namespaces --- #}
+{% indexentry nav name=tr.namespaces file='' anchor='' %}
+{% opensubindex nav %}
+
+  {% if namespaceTree.tree %}
+    {% with page=namespaceTree %}
+      {% create namespaceTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespaces.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for namespace members #}
+  {% if namespaceMembersIndex.all %}
+    {% with page=namespaceMembersIndex scope='namespace' template='htmlnsmembers.tpl' %}
+      {% indexentry nav name=tr.namespaceMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# --- classes --- #}
+{% indexentry nav name=tr.classes file='' anchor='' %}
+{% opensubindex nav %}
+
+  {# write the annotated class list #}
+  {% if classTree.tree %}
+    {% with page=classTree %}
+      {% create classTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlannotated.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write class index #}
+  {% if classIndex.list %}
+    {% with page=classIndex %}
+      {% create classIndex.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclasses.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# TODO: write the class inheritance hierarchy #}
+  {% if classHierarchy.tree %}
+    {% with page=classHierarchy %}
+      {% create classHierarchy.fileName|append:config.HTML_FILE_EXTENSION from 'htmlhierarchy.tpl' %}
+    {% endwith %}
+    {% with page=classHierarchy %}
+      {% if config.HAVE_DOT and config.GRAPHICAL_HIERARCHY %}
+        {% create 'inherits'|append:config.HTML_FILE_EXTENSION from 'htmlgraphhierarchy.tpl' %}
+      {% endif %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for class members #}
+  {% if classMembersIndex.all %}
+    {% with page=classMembersIndex scope='class' template='htmlclmembers.tpl' %}
+      {% indexentry nav name=tr.classMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# --- files --- #}
+{% indexentry nav name=tr.files file='' anchor='' %}
+{% opensubindex nav %}
+
+  {# write the directory/file hierarchy #}
+  {% if fileTree.tree %}
+    {% with page=fileTree %}
+      {% create fileTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfiles.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for global namespace #}
+  {% if globalsIndex.all %}
+    {% with page=globalsIndex scope='file' template='htmlflmembers.tpl' %}
+      {% indexentry nav name=tr.fileMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# write directory documentation pages #}
+{% for compound in dirList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmldir.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# close the global navigation index #}
+{% closesubindex nav %}
+
+{# write the navigation tree data #}
+{% if config.GENERATE_TREEVIEW %}
+  {% create 'navtreedata.js' from 'htmljsnavtree.tpl' %}
+{% endif %}
+
+{% msg %}----- End generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %}
diff --git a/templates/html/htmlmemberindex.tpl b/templates/html/htmlmemberindex.tpl
new file mode 100644
index 0000000..216dd31
--- /dev/null
+++ b/templates/html/htmlmemberindex.tpl
@@ -0,0 +1,37 @@
+{# input: list #}
+{% set singleList=(list|length<=maxItemsForFlatList) or (list|length>maxItemsForMultiPageList) %}
+{% if singleList %}
+<ul>
+{% endif %}
+{% with index=list|alphaIndex:'name' %}
+  {% for section in index %}
+    {% if not singleList or letter=='' or section.letter==letter %}
+      {% if not singleList %}
+      <a class="anchor" id="{{ section.label }}"></a><h3>- {{ section.letter }} -</h3>
+      <ul>
+      {% endif %}
+      {% for nameList in section.items|groupBy:'name' %}
+        {% spaceless %}
+          {% for item in nameList|listsort:'{{item.file.name}}' %}
+            {% if forloop.first %}
+              <li>{{ item.name }}{% if (item.isFunction or item.isSignal or item.isSlot) and not item.isObjCMethod %}(){% endif %} : 
+            {% endif %}
+            {% with obj=item scope=item|get:scope text=scope.name %}
+               {% include 'htmlobjlink.tpl' %}
+            {% endwith %}
+            {% if not forloop.last %}, 
+            {% else %}
+              </li>
+            {% endif %}
+          {% endfor %}
+        {% endspaceless %}
+      {% endfor %}
+      {% if not singleList %}
+      </ul>
+      {% endif %}
+    {% endif %}
+  {% endfor %}
+{% endwith %}
+{% if singleList %}
+</ul>
+{% endif %}
diff --git a/templates/html/htmlmembersindex.tpl b/templates/html/htmlmembersindex.tpl
new file mode 100644
index 0000000..ef891df
--- /dev/null
+++ b/templates/html/htmlmembersindex.tpl
@@ -0,0 +1,81 @@
+{# input: page #}
+{% opensubindex nav %}
+{# all members #}
+{% with list=page.all section='' %}
+  {% indexentry nav name=tr.all file=page.fileName|append:page_postfix anchor='' %}
+  {% include 'htmlindexpages.tpl' %}
+{% endwith %}
+{# functions #}
+{% if page.functions %}
+  {% set page_postfix='_func' %}
+  {% indexentry nav name=tr.functions file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.functions section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# variables #}
+{% if page.variables %}
+  {% set page_postfix='_vars' %}
+  {% indexentry nav name=tr.variables file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.variables section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# typedefs #}
+{% if page.typedefs %}
+  {% set page_postfix='_type' %}
+  {% indexentry nav name=tr.typedefs file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.typedefs section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# enums #}
+{% if page.enums %}
+  {% set page_postfix='_enum' %}
+  {% indexentry nav name=tr.enums file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.enums section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# enumValues #}
+{% if page.enumValues %}
+  {% set page_postfix='_eval' %}
+  {% indexentry nav name=tr.enumValues file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.enumValues section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# macros #}
+{% if page.macros %}
+  {% set page_postfix='_defs' %}
+  {% indexentry nav name=tr.macros file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.macros section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# properties #}
+{% if page.properties %}
+  {% set page_postfix='_prop' %}
+  {% indexentry nav name=tr.properties file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.properties section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# events #}
+{% if page.events %}
+  {% set page_postfix='_evnt' %}
+  {% indexentry nav name=tr.events file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.events section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# related #}
+{% if page.related %}
+  {% set page_postfix='_rela' %}
+  {% indexentry nav name=tr.related file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.related section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{% set page_postfix='' %}
+{% closesubindex nav %}
diff --git a/templates/html/htmlmembertabs.tpl b/templates/html/htmlmembertabs.tpl
new file mode 100644
index 0000000..93341a6
--- /dev/null
+++ b/templates/html/htmlmembertabs.tpl
@@ -0,0 +1,48 @@
+{# inputs page, list #}
+{% if not config.DISABLE_INDEX %}
+{# third row of tabs #}
+<div id="navrow3" class="tabs2">
+  <ul class="tablist">
+    <li {% if section=='' %}class="current"{% endif %}><a href="{{ page.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.all }}</a></li>
+{% if page.functions %}
+    <li {% if section=='_func' %}class="current"{% endif %}><a href="{{page.fileName}}_func{{ config.HTML_FILE_EXTENSION }}">{{ tr.functions }}</a></li>
+{% endif %}
+{% if page.variables %}
+    <li {% if section=='_vars' %}class="current"{% endif %}><a href="{{page.fileName}}_vars{{ config.HTML_FILE_EXTENSION }}">{{ tr.variables }}</a></li>
+{% endif %}
+{% if page.typedefs %}
+    <li {% if section=='_type' %}class="current"{% endif %}><a href="{{page.fileName}}_type{{ config.HTML_FILE_EXTENSION }}">{{ tr.typedefs }}</a></li>
+{% endif %}
+{% if page.enums %}
+    <li {% if section=='_enum' %}class="current"{% endif %}><a href="{{page.fileName}}_enum{{ config.HTML_FILE_EXTENSION }}">{{ tr.enums }}</a></li>
+{% endif %}
+{% if page.enumValues %}
+    <li {% if section=='_eval' %}class="current"{% endif %}><a href="{{page.fileName}}_eval{{ config.HTML_FILE_EXTENSION }}">{{ tr.enumValues }}</a></li>
+{% endif %}
+{% if page.macros %}
+    <li {% if section=='_defs' %}class="current"{% endif %}><a href="{{page.fileName}}_defs{{ config.HTML_FILE_EXTENSION }}">{{ tr.macros }}</a></li>
+{% endif %}
+{% if page.properties %}
+    <li {% if section=='_prop' %}class="current"{% endif %}><a href="{{page.fileName}}_prop{{ config.HTML_FILE_EXTENSION }}">{{ tr.properties }}</a></li>
+{% endif %}
+{% if page.events %}
+    <li {% if section=='_evnt' %}class="current"{% endif %}><a href="{{page.fileName}}_evnt{{ config.HTML_FILE_EXTENSION }}">{{ tr.events }}</a></li>
+{% endif %}
+{% if page.related %}
+    <li {% if section=='_rela' %}class="current"{% endif %}><a href="{{page.fileName}}_rela{{ config.HTML_FILE_EXTENSION }}">{{ tr.related }}</a></li>
+{% endif %}
+  </ul>
+</div>
+{# forth row of tabs #}
+{% if list|length>maxItemsForMultiPageList %}
+<div id="navrow4" class="tabs3">
+  <ul class="tablist">
+    {% with index=list|alphaIndex:'name' %}
+      {% for sect in index %}
+        <li {% if sect.letter==letter %}class="current"{% endif %}><a href="{{page.fileName}}{{section}}_{{sect.label}}{{ config.HTML_FILE_EXTENSION }}">{{ sect.letter }}</a></li>
+      {% endfor %}
+    {% endwith %}
+  </ul>
+</div>
+{% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdecl.tpl b/templates/html/htmlmemdecl.tpl
new file mode 100644
index 0000000..6af75ce
--- /dev/null
+++ b/templates/html/htmlmemdecl.tpl
@@ -0,0 +1,214 @@
+{# inputs: member, inheritId=<string> anonymousNestingLevel=<int> #}
+{% if not member.isEnumValue %}
+  {# start member declaration #}
+  <tr class="memitem:{{ member.anchor}}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+  {% if member.isEnumeration %}
+    {% if anonymousNestingLevel>0 %}
+      <td class="memItemLeft">
+    {% else %}
+      <td class="memItemLeft" align="right" valign="top">
+    {% endif %}
+    {# write optional anchor #}
+      {% if not member.hasDetails %}
+        <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+      {% endif %}
+    {# write optional indent #}
+    {% repeat anonymousNestingLevel %}   {% endrepeat %}
+    enum </td><td class="memTemplItemRight" valign="bottom">
+    {# write name #}
+    {% if not member.isAnonymous %}
+      {% with obj=member text=member.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+    {% if member.enumBaseType %} : {{ member.enumBaseType }}{% endif %}
+    {% if member.enumValues|length>0 and config.ENUM_VALUES_PER_LINE>0 %}
+      {
+        {% for enumVal in member.enumValues %}
+          {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE and forloop.counter0|divisibleby:config.ENUM_VALUES_PER_LINE %}
+            <br/>  
+          {% endif %}
+          {% spaceless %}
+            {% with obj=enumVal text=enumVal.name %}
+              {% include 'htmlobjlink.tpl' %}
+              {% if enumVal.hasOneLineInitializer %}
+                {{ member.initializer }}
+              {% endif %}
+              {% if not forloop.last %},{% endif %}
+            {% endwith %}
+          {% endspaceless %}
+        {% endfor %}
+        {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE %}
+        <br/>
+        {% endif %}
+      }
+    {% endif %}
+  {% else %}
+    {% if anonymousNestingLevel>0 or member.anonymousType %}
+      <td class="memItemLeft">
+    {% else %}
+      {% if member.templateArgs %}
+        <td class="memTemplParams" colspan="2">
+      {% else %}
+        <td class="memItemLeft" align="right" valign="top">
+      {% endif %}
+    {% endif %}
+    {# write optional anchor #}
+      {% if not member.hasDetails %}
+        <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+      {% endif %}
+    {# write optional indent #}
+    {% repeat anonymousNestingLevel %}   {% endrepeat %}
+    {# write template list #}
+      {% if member.templateArgs and member.language=='cpp' %}
+        {% spaceless %}
+          template<
+          {% for targ in member.templateArgs %}
+            {{ targ.type }} {{ targ.name }}{% if targ.defVal %} = {{ targ.defval }}{% endif %}{% if not forloop.last %}, {% endif %}
+          {% endfor %}
+        {% endspaceless %} >
+        </td></tr><tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memTemplItemLeft" align="right" valign="top">
+      {% endif %}
+    {# write type #}
+      {% if member.anonymousType %}
+        {% with ctx=member.anonymousType anonymousNestingLevel=anonymousNestingLevel|add:1 %}
+          {{ ctx.compoundType }}
+          {% if ctx.bareName %}
+             <b>{{ ctx.bareName }}</b> {# TODO: associated documentation is lost! #}
+          {% endif %}
+          {</td></tr>
+          {# recursively write members that can appear inside the anonymous class/struct #}
+          {% with memberListInfo=ctx.publicTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+        {% endwith %}
+        <tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+        <td class="memItemLeft" valign="top">{% repeat anonymousNestingLevel %}   {% endrepeat %}
+        }
+      {% else %}
+        {% if member.isObjCMethod %}
+          {% if member.isStatic %}+ {% else %}- {% endif %}
+        {% else %}
+          {{ member.declType }}
+        {% endif %}
+      {% endif %}
+      {% spaceless %}
+         
+        {% if anonymousNestingLevel>0 %}
+             
+        {% else %}
+          </td><td class="{% if member.templateArgs %}memTemplItemRight{% else %}memItemRight{% endif %}" valign="bottom">
+        {% endif %}
+      {% endspaceless %}
+    {# write name #}
+      {% if not member.isAnonymous %}
+        {% if member.anonymousMember %}
+          {% with obj=member.anonymousMember text=member.anonymousMember.name %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        {% else %}
+          {% with obj=member text=member.name %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        {% endif %}
+      {% endif %}
+    {# write arguments #}
+      {% if not member.isObjCMethod %}
+        {{ member.declArgs }}
+      {% endif %}
+    {# write exceptions #}
+      {% if member.exception %}
+        {{ member.exception }}
+      {% endif %}
+    {# write bitfield #}
+      {% if member.bitfields %}
+        {{ member.bitfields }}
+      {% endif %}
+    {# write one-line initializer #}
+      {% if member.hasOneLineInitializer %}
+        {% if member.isDefine %}   {% endif %}
+        {{ member.initializer }}
+      {% endif %}
+    {# write template alias #}
+      {% if member.templateAlias %}
+        {{ member.templateAlias }}
+      {% endif %}
+    {# write obj-c implementation #}
+      {% if member.isObjCMethod or member.isObjCProperty %}
+        {% if member.isImplementation %}
+          <code> [implementation]</code>
+        {% endif %}
+      {% endif %}
+    {# write getter/setter property #}
+      {% if member.isProperty and member.propertyAttrs|length>0 %}
+        <code> [
+        {% for attr in member.propertyAttrs %}
+          {{ attr }}{% if not forloop.last %},{% endif %}
+        {% endfor %}
+        ]</code>
+      {% endif %}
+    {# write event methods #}
+      {% if member.isEvent and member.eventAttrs|length>0 %}
+        <code> [
+        {% for attr in member.eventAttrs %}
+          {{ attr }}{% if not forloop.last %},{% endif %}
+        {% endfor %}
+        ]</code>
+      {% endif %}
+    {# end member declaration #}
+  {% endif %} {# member.isEnumeration #}
+  </td></tr>
+  {# brief description #}
+    {% if member.brief %}
+      <tr class="memdesc:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="mdescLeft"> </td><td class="mdescRight">
+      {{ member.brief }}
+      {% if member.hasDetails %}
+        {# TODO: link to group if member is grouped #}
+        <a href="#{{ member.anchor }}">{{ tr.more }}</a>
+      {% endif %}
+      <br/></td></tr>
+    {% endif %}
+  <tr class="separator:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memSeparator" colspan="2"> </td></tr>
+{% endif %} {# not member.isEnumValue #}
diff --git a/templates/html/htmlmemdecls.tpl b/templates/html/htmlmemdecls.tpl
new file mode 100644
index 0000000..846c8f3
--- /dev/null
+++ b/templates/html/htmlmemdecls.tpl
@@ -0,0 +1,38 @@
+{# inputs: memberListInfo or memberGroupInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+    <table class="memberdecls">
+    {# section header #}
+      <tr class="heading"><td colspan="2"><h2 class="groupheader">{{ memberListInfo.title }}<a name="{{ memberListInfo.anchor }}"></a></h2></td></tr>
+    {% if memberListInfo.subtitle %}
+      <tr><td class="ititle" colspan="2">{{ memberListInfo.subtitle }}</td></tr>
+    {% endif %}
+    {# normal members #}
+    {% with inheritId='' anonymousNestingLevel=0 %}
+      {% for member in memberListInfo.members %}
+        {% include 'htmlmemdecl.tpl' %}
+      {% endfor %}
+    {% endwith %}
+    {# grouped members #}
+    {% for memgroup in memberListInfo.memberGroups %}
+      {% with memberListInfo=memgroup inheritId='' anonymousNestingLevel=0 %}
+        {% if memberListInfo.title!='[NOHEADER]' %}
+          <tr><td colspan="2"><div class="groupHeader">{{ memberListInfo.title }}</div></td></tr>
+          {% if memberListInfo.docs %}
+            <tr><td colspan="2"><div class="groupText">{{ memberListInfo.docs }}</div></td></tr>
+          {% endif %}
+        {% endif %}
+        {% for member in memberListInfo.members %}
+          {% include 'htmlmemdecl.tpl' %}
+        {% endfor %}
+      {% endwith %}
+    {% endfor %}
+    {# inherited members #}
+    {% if memberListInfo.inherited %}
+      {% for info in memberListInfo.inherited %}
+        {% include 'htmlmeminherit.tpl' %}
+      {% endfor %}
+    {% endif %}
+    </table>
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl
new file mode 100644
index 0000000..c469f1f
--- /dev/null
+++ b/templates/html/htmlmemdef.tpl
@@ -0,0 +1,284 @@
+{# inputs: memberListInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 %}
+    <h2 class="groupheader">{{ memberListInfo.title }}</h2>
+    {% for member in memberListInfo.members %}
+      {% if member.hasDetails %}  {# TODO: not the same as isDetailedSectionVisible! #}
+        {# TODO: handle enum + anonymous members #}
+        <a class="anchor" id="{{ member.anchor }}"></a> {# TODO: for namespace members written in a file we need to prepend file_ #}
+        <div class="memitem">
+        <div class="memproto">
+        {# write template declarations #}
+        {% if member.language=='cpp' and member.templateDecls|length>0 %}
+          {% for targList in member.templateDecls %}
+            {% spaceless %}
+              <div class="memtemplate">
+              template<
+              {% for targ in targList %}
+                {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+              {% endfor %}
+              >
+              </div>
+            {% endspaceless %}
+          {% endfor %}
+        {% endif %}
+        {# start of labels if present #}
+        {% if member.labels|length>0 %}
+          <table class="mlabels"><tr><td class="mlabels-left">
+        {% endif %}
+        <table class="memname">
+          <tr><td class="memname">
+            {{ member.definition }}
+            {# write argument list #}
+            {# TODO: TCL #}
+            {% if member.hasParameterList %}
+              {% if member.isObjCMethod %}
+                </td><td></td>
+                {% for arg in member.parameters %}
+                  {% if not forloop.first %}
+                    <tr><td class="paramkey">{{ arg.namePart }}</td><td></td>
+                  {% endif %}
+                  <td class="paramtype">({{ arg.type }}) </td><td class="paramname">
+                  {% if arg.name or arg.type=='...' %}
+                    <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+                  {% endif %}
+		  {% if not forloop.last %}
+                    ,</td></tr>
+                  {% endif %}
+                {% endfor %}
+              {% else %}
+                </td><td>(</td>
+                {% for arg in member.parameters %}
+                  {% if member.isDefine %}
+                    {% if not forloop.first %}
+                      <tr><td class="paramkey"></td><td></td>
+                    {% endif %}
+                    <td class="paramtype"></td><td class="paramname">
+		    {% spaceless %}
+                      {% if arg.type %}
+                        <em>{{ arg.type }}</em>
+                      {% endif %}
+                      {% if not forloop.last %}
+                        ,</td></tr>
+                      {% endif %}
+		    {% endspaceless %}
+                  {% else %} {# normal function/method #}
+                    {% if forloop.first %}
+                      <td class="paramtype">
+                    {% endif %}
+                    {% if arg.attrib %}{{ arg.attrib }} {% endif %}
+                    {% if arg.type!='...' %}
+                       {{ arg.type }}
+                    {% endif %}
+                     </td><td class="paramname">
+                    {% if arg.name or arg.type=='...' %}
+                      <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+                    {% endif %}
+                    {{ arg.array }}
+                    {% if arg.defVal %} = {{ arg.defVal }}{% endif %}
+		    {% if not forloop.last %}
+                      ,</td></tr><tr><td class="paramkey"></td><td></td><td class="paramtype">
+                    {% endif %}
+                  {% endif %}
+                {% endfor %}
+		{% if member.parameters|length==0 %}
+                  <td class="paramname">
+                {% endif %}
+                {% if member.parameters|length<2 %}
+                  </td><td>)</td><td>
+                {% else %}
+                   </td></tr>
+                  <tr><td></td><td>)</td><td></td><td>
+                {% endif %}
+                {{ member.extraTypeChars }}
+                {% if member.hasConstQualifier %} const {% endif %}
+                {% if member.hasVolatileQualifier %} volatile {% endif %}
+                {{ member.trailingReturnType }}
+              {% endif %}
+            {% endif %}
+            {# one line initializer #}
+            {% if member.hasOneLineInitializer %}
+              {% if member.isDefine %}   {% endif %}
+              {{ member.initializer }}
+            {% endif %}
+            {# exception list #}
+            {% if member.exception %}
+              {# TODO: special exception rendering for UNO IDL... #}
+              {{ member.exception }}
+            {% endif %}
+          </td></tr>
+        </table>
+        {# end of labels if present #}
+        {% if member.labels|length>0 %}
+          </td><td class="mlabels-right">{% spaceless %}
+          {% for label in member.labels %}
+            <span class="mlabel">{{ label }}</span>
+          {% endfor %}{% endspaceless %}
+          </td></tr></table>
+        {% endif %}
+        </div>
+        <div class="memdoc">
+        {# TODO: write group include #}
+        {# multi-line initializer #}
+          {% if member.hasMultiLineInitializer %}
+            <b>{% if member.isDefine %}{{ tr.defineValue }}{% else %}{{ tr.initialValue }}{% endif %}</b>
+            <div class="fragment">{{ member.initializerAsCode }}</div>
+          {% endif %}
+        {# brief description #}
+          {% if member.brief and config.REPEAT_BRIEF and config.BRIEF_MEMBER_DESC %}
+            <p>{{ member.brief }}</p>
+          {% endif %}
+        {# detailed description #}
+          {# TODO: VHDL #}
+          {{ member.details }}
+        {# inbody description #}
+          {{ member.inbodyDocs }}
+        {# argument list #}
+          {{ member.paramDocs }}
+        {# enum values #}
+          {% if member.isEnumeration and member.enumValues|length>0 %}
+            <table class="fieldtable">
+            <tr><th colspan="2">{{ tr.enumValues }}</th></tr>
+            {% for enumVal in member.enumValues %}
+              <tr><td class="fieldname"><em><a class="anchor" id="{{ enumVal.anchor}}"></a>{{ enumVal.name }}</em> </td>
+                  <td class="fielddoc">{{ enumVal.brief }}{{ enumVal.details }}</td>
+              </tr>
+            {% endfor %}
+            </table>
+          {% endif %}
+        {# reimplements #}
+          {% if member.reimplements %}
+            <p>
+            {% markers mem in member.reimplements with tr.reimplements %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+          {% if member.implements %}
+            <p>
+            {% markers mem in member.implements with tr.implements %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# reimplementedBy #}
+          {% if member.reimplementedBy %}
+            <p>
+            {% markers mem in member.reimplementedBy with tr.reimplementedBy:member.reimplementedBy|length %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+          {% if member.implementedBy %}
+            <p>
+            {% markers mem in member.implementedBy with tr.implementedBy:member.implementedBy|length %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# category relation #}
+
+          {# TODO #}
+
+        {# examples #}
+          {% if member.examples %}
+            <dl><dt><b>{{ tr.examples }}</b><dd>
+            {% markers obj in member.examples with tr.exampleList:member.examples|length %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </dd></dl>
+          {% endif %}
+        {# type constraints #}
+          {% with obj=member %}
+            {% include 'htmltypeconstraints.tpl' %}
+          {% endwith %}
+        {# source def #}
+          {% if member.sourceDef %}
+            {% markers obj in member.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        {# source refs #}
+          {% if member.sourceRefs|length>0 %}
+            <p>
+            {% markers mem in member.sourceRefs with tr.sourceRefs:member.sourceRefs|length %}
+              {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+                {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% else %}
+                {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% endif %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# source refs by #}
+          {% if member.sourceRefBys|length>0%}
+            <p>
+            {% markers mem in member.sourceRefBys with tr.sourceRefBys:member.sourceRefBys|length %}
+              {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+                {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% else %}
+                {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% endif %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# inline code #}
+          {% if member.hasSources and config.INLINE_SOURCES %}
+            <div class="fragment">
+            {{ member.sourceCode }}
+            </div>
+          {% endif %}
+        {# call graph #}
+          {% if member.hasCallGraph %}
+             {% with obj=member %}
+               {% include 'htmldynheader.tpl' %}
+             {% endwith %}
+               {{ tr.callGraph }}
+             </div>
+             {% with obj=member %}
+               {% include 'htmldyncontents.tpl' %}
+             {% endwith %}
+               {{ member.callGraph }}
+             </div>
+          {% endif %}
+        {# caller graph #}
+          {% if member.hasCallerGraph %}
+             {% with obj=member %}
+               {% include 'htmldynheader.tpl' %}
+             {% endwith %}
+               {{ tr.callerGraph }}
+             </div>
+             {% with obj=member %}
+               {% include 'htmldyncontents.tpl' %}
+             {% endwith %}
+               {{ member.callerGraph }}
+             </div>
+          {% endif %}
+        </div>
+        </div>
+      {% endif %}
+    {% endfor %} {# for each member #}
+    {# TODO: write member group docs #}
+  {% endif %}
+{% endif %}
+
diff --git a/templates/html/htmlmeminherit.tpl b/templates/html/htmlmeminherit.tpl
new file mode 100644
index 0000000..830bf10
--- /dev/null
+++ b/templates/html/htmlmeminherit.tpl
@@ -0,0 +1,20 @@
+{# input: info (with .id .inheritedFrom and .members) #}
+<tr class="inherit_header {{ info.id }}">
+<td colspan="2" onclick="javascript:toggleInherit('{{ info.id }}')">
+<img src="{{ page.relPath }}closed.png" alt="-"/> 
+  {% markers mark in info.inheritedFrom with tr.inheritedFrom %}
+    {% if markers.id==0 %} {# the title mark #}
+      {{ mark }}
+    {% endif %}
+    {% if markers.id==1 %} {# the class link mark #}
+      {% with obj=mark text=mark.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+  {% endmarkers %}
+</td></tr>
+{% with inheritId=info.id anonymousNestingLevel=0 %}
+  {% for member in info.members %}
+    {% include 'htmlmemdecl.tpl' %}
+  {% endfor %}
+{% endwith %}
diff --git a/templates/html/htmlmemlist.tpl b/templates/html/htmlmemlist.tpl
new file mode 100644
index 0000000..30b4789
--- /dev/null
+++ b/templates/html/htmlmemlist.tpl
@@ -0,0 +1,15 @@
+{# input: memberListInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+    {% for member in memberListInfo.members %}
+      {% include 'htmlmemdecl.tpl' %}
+    {% endfor %}
+    {% for memgroup in memberListInfo.memberGroups %}
+      {% with memberListInfo=memgroup inheritId='' %}
+        {% for member in memberListInfo.members %}
+          {% include 'htmlmemdecl.tpl' %}
+        {% endfor %}
+      {% endwith %}
+    {% endfor %}
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemsummary.tpl b/templates/html/htmlmemsummary.tpl
new file mode 100644
index 0000000..6b7481e
--- /dev/null
+++ b/templates/html/htmlmemsummary.tpl
@@ -0,0 +1,7 @@
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 %}
+    {% if not first %} | {% endif %}
+      <a href="#{{ memberListInfo.anchor }}">{{ memberListInfo.title }}</a>
+    {% set first=False %}
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmodule.tpl b/templates/html/htmlmodule.tpl
new file mode 100644
index 0000000..ff97b2c
--- /dev/null
+++ b/templates/html/htmlmodule.tpl
@@ -0,0 +1,310 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for module {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.modules %}
+      <a href="#modules">{{ tr.modules }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.dirs %}
+      <a href="#dirs">{{ tr.dirs }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.files %}
+      <a href="#files">{{ tr.files }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.classes %}
+      <a href="#classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} | {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} | {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enumvalues %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# group graph #}
+  {% if compound.hasGroupGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.collaborationDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.groupGraph }}
+    </div>
+  {% endif %}
+{# member declarations #}
+  {# modules #}
+    {% with list=compound.modules label='modules' title=tr.modules local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# dirs #}
+    {% with list=compound.dirs, label='dirs' title=tr.directories local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# files #}
+    {% with list=compound.files, label='files' title=tr.files local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# classes #}
+    {% with list=compound.classes label='classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# defines #}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enum values #}
+    {% with memberListInfo=compound.enumvalues %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# signals #}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# public slots #}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# protected slots #}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private slots #}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private events #}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private properties #}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private friends #}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template<
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                ><br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }} {{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# defines #}
+    {% with memberListInfo=compound.detailedMacros %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlmodules.tpl b/templates/html/htmlmodules.tpl
new file mode 100644
index 0000000..f19c225
--- /dev/null
+++ b/templates/html/htmlmodules.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.modulesDescription }}
+</div>
+{% indexentry nav name=tr.modules file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=moduleTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnamespace.tpl b/templates/html/htmlnamespace.tpl
new file mode 100644
index 0000000..e21ba9d
--- /dev/null
+++ b/templates/html/htmlnamespace.tpl
@@ -0,0 +1,206 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for namespace {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} | {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} | {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# member declarations #}
+  {# classes #}
+    {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template<
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                ><br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }} {{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlnamespaces.tpl b/templates/html/htmlnamespaces.tpl
new file mode 100644
index 0000000..4767d13
--- /dev/null
+++ b/templates/html/htmlnamespaces.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.namespaceListDescription }}
+</div>
+{% indexentry nav name=tr.namespaceList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=namespaceTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnavpath.tpl b/templates/html/htmlnavpath.tpl
new file mode 100644
index 0000000..5df06e1
--- /dev/null
+++ b/templates/html/htmlnavpath.tpl
@@ -0,0 +1,14 @@
+{# input: navpath which is a list of links #}
+{% if navpath %}
+  <div id="nav-path" class="navpath">
+    <ul>
+    {% for obj in navpath %}
+      <li class="navelem">
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      </li>
+    {% endfor %}
+    </ul>
+  </div>
+{% endif %}
diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl
new file mode 100644
index 0000000..8da89a2
--- /dev/null
+++ b/templates/html/htmlnavtree.tpl
@@ -0,0 +1,22 @@
+var NAVTREE =
+[
+  [ "{% if mainPage.title %}mainPage.title|jsstring{% else %}{{ tr.mainPage }}{% endif %}",
+    "index{{ config.HTML_FILE_EXTENSION }}",
+  ]
+];
+
+var NAVTREEINDEX =
+[
+{# write first entry of each sub index #}
+{% for entries in navTree.subindices %}
+  "{{ entries[0].url }}"{% if not forloop.last %},{% endif %}
+{% endfor %}
+  ]
+];
+
+{# write all sub indices #}
+{% for entries in navTree.subindices %}
+  {% with idx=forloop.counter0 %}
+    {% create idx|prepend:'navtreeindex'|append:'.js' from htmlnavindex.tpl' %}
+  {% endwith %}
+{% endfor %}
diff --git a/templates/html/htmlnsmembers.tpl b/templates/html/htmlnsmembers.tpl
new file mode 100644
index 0000000..3f4c0bd
--- /dev/null
+++ b/templates/html/htmlnsmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl' %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.namespaceMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl
new file mode 100644
index 0000000..dc3bfd4
--- /dev/null
+++ b/templates/html/htmlnsmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+  {# all members #}
+  {% with list=namespaceMembersIndex.all section='' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# functions #}
+  {% with list=namespaceMembersIndex.functions section='_func' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# variables #}
+  {% with list=namespaceMembersIndex.variables section='_vars' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# typedefs #}
+  {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enums #}
+  {% with list=namespaceMembersIndex.enums section='_enum' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enumValues #}
+  {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmlobjlink.tpl b/templates/html/htmlobjlink.tpl
new file mode 100644
index 0000000..51a281f
--- /dev/null
+++ b/templates/html/htmlobjlink.tpl
@@ -0,0 +1,6 @@
+{# inputs: obj (with .isLinkable .anchor .fileName), text, config, page.relPath #}
+{% if obj.isLinkable %}
+<a class="el" href="{{ page.relPath }}{{ obj.fileName }}{{ config.HTML_FILE_EXTENSION }}{% if obj.anchor %}#{{ obj.anchor }}{% endif %}">{{ text }}</a>
+{% else %}
+<b>{{ text }}</b>
+{% endif %}
diff --git a/templates/html/htmlpage.tpl b/templates/html/htmlpage.tpl
new file mode 100644
index 0000000..3882989
--- /dev/null
+++ b/templates/html/htmlpage.tpl
@@ -0,0 +1,58 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for page {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{% if isMainPage and config.DISABLE_INDEX %}
+{# no other navigation means, so we produce the links on the main page #}
+<ul>
+{% if pageTree.tree %}
+  <li><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages }}</span></a></li>
+{% endif %}
+{% if moduleTree.tree %}
+  <li><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules }}</span></a></li>
+{% endif %}
+{% if namespaceList %}
+  <li><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces }}</span></a>
+  <ul>
+    <li><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList }} </span></a></li>
+    <li><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers }}</span></a></li>
+  </ul>
+  </li>
+{% endif %}
+{% if classList %}
+  <li><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes }}</span></a>
+  <ul>
+    <li><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList }}</span></a></li>
+    <li><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex }}</span></a></li>
+    {% if classHierarchy.tree %}
+    <li><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy }} </span></a></li>
+    {% endif %}
+    {% if classMembersIndex.all %}
+    <li><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers }} </span></a></li>
+    {% endif %}
+  </ul>
+  </li>
+{% endif %}
+{% if fileList %}
+  <li><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files }}</span></a>
+  <ul>
+    <li><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList }} </span></a></li>
+    <li><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers }} </span></a></li>
+  </ul>
+  </li>
+{% endif %}
+{% if exampleList.items %}
+  <li><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples }}</span></a>
+{% endif %}
+</ul>
+{% endif %}
+{{ compound.details }}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlpages.tpl b/templates/html/htmlpages.tpl
new file mode 100644
index 0000000..cc00bf5
--- /dev/null
+++ b/templates/html/htmlpages.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.relatedPagesDesc }}
+</div>
+{% indexentry nav name=tr.pages file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=pageTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlsource.tpl b/templates/html/htmlsource.tpl
new file mode 100644
index 0000000..cb4e65d
--- /dev/null
+++ b/templates/html/htmlsource.tpl
@@ -0,0 +1,37 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML source code for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+  {% if compound.navigationPath %}
+    <div id="nav-path" class="navpath">
+      <ul>
+      {% for obj in compound.navigationPath %}
+        <li class="navelem">
+          {% with text=obj.text %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        </li>
+      {% endfor %}
+      </ul>
+    </div>
+  {% endif %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="headertitle"><div class="title">{{ compound.name }}
+  {% if compound.version %} ({{ compound.version }}){% endif %}
+  </div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<a href="{{ page.relPath }}{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoDocumentation }}</a>
+</div>
+<div class="fragment">
+{{ compound.sources }}
+</div><!-- fragment -->
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmltabs.tpl b/templates/html/htmltabs.tpl
new file mode 100644
index 0000000..9ce8c44
--- /dev/null
+++ b/templates/html/htmltabs.tpl
@@ -0,0 +1,96 @@
+{# main navigation row #}
+<div id="navrow1" class="tabs">
+  <ul class="tablist">
+  {# main tab #}
+   <li{% if page.highlight=='main' %} class="current"{% endif %}><a href="{{ page.relPath }}index{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.mainPage|nowrap }}</span></a></li>
+  {# pages tab #}
+    {% if pageTree.tree %}
+   <li{% if page.highlight=='pages' %} class="current"{% endif %}><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages|nowrap }}</span></a></li>
+    {% endif %}
+  {# modules tab #}
+    {% if moduleTree.tree %}
+   <li{% if page.highlight=='modules' %} class="current"{% endif %}><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules|nowrap }}</span></a></li>
+    {% endif %}
+  {# namespaces tab #}
+    {% if namespaceList %}
+   <li{% if page.highlight=='namespaces' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces|nowrap }}</span></a></li>
+    {% endif %}
+  {# classes tab #}
+    {% if classList %}
+   <li{% if page.highlight=='classes' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes|nowrap }}</span></a></li>
+    {% endif %}
+  {# files tab #}
+    {% if fileList %}
+   <li{% if page.highlight=='files' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files|nowrap }}</span></a></li>
+    {% endif %}
+  {# examples tab #}
+    {% if exampleList.items %}
+   <li{% if page.highlight=='examples' %} class="current"{% endif %}><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples|nowrap }}</span></a></li>
+    {% endif %}
+  {# search box #}
+  {% if config.SEARCHENGINE %}
+    {% if config.SERVER_BASED_SEARCH %}
+      {# server based search box #}
+   <li>
+     <div id="MSearchBox" class="MSearchBoxInactive">
+       <div class="left">
+         <form id="FSearchBox" action="{{ page.relPath }}search{% if config.EXTERNAL_SEARCH %}{{ config.HTML_FILE_EXTENSION }}{% else %}.php{% endif %}" method="get">
+           <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+      {% if page.highlight!='search' %}
+           <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S" 
+                  onfocus="searchBox.OnSearchFieldFocus(true)" 
+                  onblur="searchBox.OnSearchFieldFocus(false)"/>
+         </form>
+       </div><div class="right"></div>
+     </div>
+   </li>
+      {% endif %}
+    {% else %}
+      {# client based search box #}
+   <li>
+     <div id="MSearchBox" class="MSearchBoxInactive">
+     <span class="left">
+       <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+            onmouseover="return searchBox.OnSearchSelectShow()"
+            onmouseout="return searchBox.OnSearchSelectHide()"
+            alt=""/>
+       <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+            onfocus="searchBox.OnSearchFieldFocus(true)"
+            onblur="searchBox.OnSearchFieldFocus(false)"
+            onkeyup="searchBox.OnSearchFieldChange(event)"/>
+       </span><span class="right">
+         <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+            id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png" alt=""/></a>
+       </span>
+     </div>
+   </li>
+    {% endif %}
+  {% endif %}
+  </ul>
+</div>
+{# second navigation row #}
+<div id="navrow2" class="tabs2">
+  <ul class="tablist">
+  {# namespace subtabs #}
+  {% if page.highlight=='namespaces' %}
+    <li{% if page.subhighlight=='namespacelist' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='namespacemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers|nowrap }}</span></a></li>
+  {% endif %}
+  {# class subtabs #}
+  {% if page.highlight=='classes' %}
+    <li{% if page.subhighlight=='classlist' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='classindex' %} class="current"{% endif %}><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex|nowrap }}</span></a></li>
+    {% if classHierarchy.tree %}
+    <li{% if page.subhighlight=='classhierarchy' %} class="current"{% endif %}><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy|nowrap }}</span></a></li>
+    {% endif %}
+    {% if classMembersIndex.all %}
+    <li{% if page.subhighlight=='classmembers' %} class="current"{% endif %}><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers|nowrap }}</span></a></li>
+    {% endif %}
+  {% endif %}
+  {# file subtabs #}
+  {% if page.highlight=='files' %}
+    <li{% if page.subhighlight=='filelist' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='filemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers|nowrap }}</span></a></li>
+  {% endif %}
+  </ul>
+</div>
diff --git a/templates/html/htmltypeconstraints.tpl b/templates/html/htmltypeconstraints.tpl
new file mode 100644
index 0000000..12c9581
--- /dev/null
+++ b/templates/html/htmltypeconstraints.tpl
@@ -0,0 +1,13 @@
+{# obj should be a class or member #}
+{% if obj.typeConstraints|length>0 %}
+  <div class="typecontraint">
+  <dl><dt><b>{{ tr.typeConstraints }}</b></dt>
+  <dd><table border="0" cellspacing="2" cellpadding="0">
+  {% for arg in obj.typeConstraints %}
+    <tr><td valign="top"><em>{{ arg.name }}</em></td>
+        <td> </td><td valign="top"><em>{{ arg.type }}</em></td>
+        <td> </td><td>{{ arg.docs }}</td>
+    </tr>
+  {% endfor %}
+  </table></dl></div>
+{% endif %}
diff --git a/templates/html/jquery.js b/templates/html/jquery.js
new file mode 100644
index 0000000..1f4d0b4
--- /dev/null
+++ b/templates/html/jquery.js
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/ [...]
+/*!
+ * 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 [...]
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn [...]
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Wid [...]
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseD [...]
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function() [...]
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouse [...]
\ No newline at end of file
diff --git a/templates/html/mag.png b/templates/html/mag.png
new file mode 100644
index 0000000..492f71f
Binary files /dev/null and b/templates/html/mag.png differ
diff --git a/templates/html/mag_sel.png b/templates/html/mag_sel.png
new file mode 100644
index 0000000..81f6040
Binary files /dev/null and b/templates/html/mag_sel.png differ
diff --git a/templates/html/nav_f.lum b/templates/html/nav_f.lum
new file mode 100644
index 0000000..ab84773
--- /dev/null
+++ b/templates/html/nav_f.lum
@@ -0,0 +1,11 @@
+# function header
+# width & height
+1 56
+# luma data
+248 247 246 245 244 243 242 241
+240 239 238 237 236 235 234 233
+232 231 230 229 228 223 223 223
+223 223 223 223 223 223 223 223
+224 224 224 224 225 225 225 225
+225 226 226 226 227 227 227 227
+228 228 228 229 229 229 229 229
diff --git a/templates/html/nav_g.png b/templates/html/nav_g.png
new file mode 100644
index 0000000..2093a23
Binary files /dev/null and b/templates/html/nav_g.png differ
diff --git a/templates/html/nav_h.lum b/templates/html/nav_h.lum
new file mode 100644
index 0000000..d30ee08
--- /dev/null
+++ b/templates/html/nav_h.lum
@@ -0,0 +1,6 @@
+# shadowed header
+# width & height
+1 12
+# luma data
+255 240 241 242 243 244
+245 246 247 248 249 250
diff --git a/src/navtree.css b/templates/html/navtree.css
similarity index 96%
rename from src/navtree.css
rename to templates/html/navtree.css
index a2ae30a..c618811 100644
--- a/src/navtree.css
+++ b/templates/html/navtree.css
@@ -94,7 +94,7 @@
 }
 
 .ui-resizable-e {
-  background:url("ftv2splitbar.png") repeat scroll right center transparent;
+  background:url("splitbar.png") repeat scroll right center transparent;
   cursor:e-resize;
   height:100%;
   right:0;
diff --git a/src/navtree.js b/templates/html/navtree.js
similarity index 96%
rename from src/navtree.js
rename to templates/html/navtree.js
index 3914be8..9df45a7 100644
--- a/src/navtree.js
+++ b/templates/html/navtree.js
@@ -105,7 +105,7 @@ function createIndent(o,domNode,node,level)
     node.expandToggle.onclick = function() {
       if (node.expanded) {
         $(node.getChildrenUL()).slideUp("fast");
-        node.plus_img.src = node.relpath+"ftv2pnode.png";
+        node.plus_img.src = node.relpath+"arrowright.png";
         node.expanded = false;
       } else {
         expandNode(o, node, false, false);
@@ -113,7 +113,7 @@ function createIndent(o,domNode,node,level)
     }
     node.expandToggle.appendChild(imgNode);
     domNode.appendChild(node.expandToggle);
-    imgNode.src = node.relpath+"ftv2pnode.png";
+    imgNode.src = node.relpath+"arrowright.png";
   } else {
     var span = document.createElement("span");
     span.style.display = 'inline-block';
@@ -269,9 +269,9 @@ function expandNode(o, node, imm, showRoot)
         $(node.getChildrenUL()).slideDown("fast");
       }
       if (node.isLast) {
-        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+        node.plus_img.src = node.relpath+"arrowdown.png";
       } else {
-        node.plus_img.src = node.relpath+"ftv2mnode.png";
+        node.plus_img.src = node.relpath+"arrowdown.png";
       }
       node.expanded = true;
     }
@@ -341,11 +341,7 @@ function showNode(o, node, index, hash)
         getNode(o, node);
       }
       $(node.getChildrenUL()).css({'display':'block'});
-      if (node.isLast) {
-        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
-      } else {
-        node.plus_img.src = node.relpath+"ftv2mnode.png";
-      }
+      node.plus_img.src = node.relpath+"arrowdown.png";
       node.expanded = true;
       var n = node.children[o.breadcrumbs[index]];
       if (index+1<o.breadcrumbs.length) {
@@ -483,7 +479,7 @@ function initNavTree(toroot,relpath)
   o.node.expanded = false;
   o.node.isLast = true;
   o.node.plus_img = document.createElement("img");
-  o.node.plus_img.src = relpath+"ftv2pnode.png";
+  o.node.plus_img.src = relpath+"arrowright.png";
   o.node.plus_img.width = 16;
   o.node.plus_img.height = 22;
 
diff --git a/templates/html/open.luma b/templates/html/open.luma
new file mode 100644
index 0000000..27eb4b6
--- /dev/null
+++ b/templates/html/open.luma
@@ -0,0 +1,23 @@
+# tree open icon
+# width & height
+9 9
+# luma data
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+142 142 142 142 142 142 142 142 142
+  0 142 142 142 142 142 142 142   0
+  0   0 142 142 142 142 142   0   0
+  0   0   0 142 142 142   0   0   0
+  0   0   0   0 142   0   0   0   0
+# alpha data
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+255 255 255 255 255 255 255 255 255
+  0 255 255 255 255 255 255 255   0
+  0   0 255 255 255 255 255   0   0
+  0   0   0 255 255 255   0   0   0
+  0   0   0   0 255   0   0   0   0
diff --git a/src/resize.js b/templates/html/resize.js
similarity index 100%
rename from src/resize.js
rename to templates/html/resize.js
diff --git a/src/search.css b/templates/html/search.css
similarity index 100%
copy from src/search.css
copy to templates/html/search.css
diff --git a/src/search.js b/templates/html/search.js
similarity index 94%
rename from src/search.js
rename to templates/html/search.js
index 10cee88..dedce3b 100644
--- a/src/search.js
+++ b/templates/html/search.js
@@ -9,11 +9,11 @@ function convertToId(search)
     {
       result+=c;
     }
-    else if (cn<16) 
+    else if (cn<16)
     {
       result+="_0"+cn.toString(16);
     }
-    else 
+    else
     {
       result+="_"+cn.toString(16);
     }
@@ -52,14 +52,14 @@ function getYPos(item)
 /* A class handling everything associated with the search panel.
 
    Parameters:
-   name - The name of the global variable that will be 
+   name - The name of the global variable that will be
           storing this instance.  Is needed to be able to set timeouts.
    resultPath - path to use for external files
 */
 function SearchBox(name, resultsPath, inFrame, label)
 {
   if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
-   
+
   // ---------- Instance variables
   this.name                  = name;
   this.resultsPath           = resultsPath;
@@ -136,7 +136,7 @@ function SearchBox(name, resultsPath, inFrame, label)
     }
 
     // stop selection hide timer
-    if (this.hideTimeout) 
+    if (this.hideTimeout)
     {
       clearTimeout(this.hideTimeout);
       this.hideTimeout=0;
@@ -165,7 +165,7 @@ function SearchBox(name, resultsPath, inFrame, label)
       if (e.shiftKey==1)
       {
         this.OnSearchSelectShow();
-        var win=this.DOMSearchSelectWindow(); 
+        var win=this.DOMSearchSelectWindow();
         for (i=0;i<win.childNodes.length;i++)
         {
           var child = win.childNodes[i]; // get span within a
@@ -216,7 +216,7 @@ function SearchBox(name, resultsPath, inFrame, label)
   this.SelectItemCount = function(id)
   {
     var count=0;
-    var win=this.DOMSearchSelectWindow(); 
+    var win=this.DOMSearchSelectWindow();
     for (i=0;i<win.childNodes.length;i++)
     {
       var child = win.childNodes[i]; // get span within a
@@ -231,7 +231,7 @@ function SearchBox(name, resultsPath, inFrame, label)
   this.SelectItemSet = function(id)
   {
     var i,j=0;
-    var win=this.DOMSearchSelectWindow(); 
+    var win=this.DOMSearchSelectWindow();
     for (i=0;i<win.childNodes.length;i++)
     {
       var child = win.childNodes[i]; // get span within a
@@ -335,7 +335,7 @@ function SearchBox(name, resultsPath, inFrame, label)
        hasResultsPage = false;
     }
 
-    window.frames.MSearchResults.location = resultsPageWithSearch;  
+    window.frames.MSearchResults.location = resultsPageWithSearch;
     var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
 
     if (domPopupSearchResultsWindow.style.display!='block')
@@ -369,12 +369,12 @@ function SearchBox(name, resultsPath, inFrame, label)
 
   // -------- Activation Functions
 
-  // Activates or deactivates the search panel, resetting things to 
-  // their default values if necessary. 
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
   this.Activate = function(isActive)
   {
     if (isActive || // open it
-        this.DOMPopupSearchResultsWindow().style.display == 'block' 
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
        )
     {
       this.DOMSearchBox().className = 'MSearchBoxActive';
@@ -382,8 +382,8 @@ function SearchBox(name, resultsPath, inFrame, label)
       var searchField = this.DOMSearchField();
 
       if (searchField.value == this.searchLabel) // clear "Search" term upon entry
-      {  
-        searchField.value = '';  
+      {
+        searchField.value = '';
         this.searchActive = true;
       }
     }
@@ -422,12 +422,12 @@ function SearchResults(name)
         }
 
         if (element.nodeName == 'DIV' && element.hasChildNodes())
-        {  
-           element = element.firstChild;  
+        {
+           element = element.firstChild;
         }
         else if (element.nextSibling)
-        {  
-           element = element.nextSibling;  
+        {
+           element = element.nextSibling;
         }
         else
         {
@@ -438,8 +438,8 @@ function SearchResults(name)
           while (element && element!=parentElement && !element.nextSibling);
 
           if (element && element!=parentElement)
-          {  
-            element = element.nextSibling;  
+          {
+            element = element.nextSibling;
           }
         }
       }
@@ -492,7 +492,7 @@ function SearchResults(name)
           var rowMatchName = row.id.toLowerCase();
           rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
 
-          if (search.length<=rowMatchName.length && 
+          if (search.length<=rowMatchName.length &&
              rowMatchName.substr(0, search.length)==search)
           {
             row.style.display = 'block';
@@ -563,7 +563,7 @@ function SearchResults(name)
 
     this.ProcessKeys = function(e)
     {
-      if (e.type == "keydown") 
+      if (e.type == "keydown")
       {
         this.repeatOn = false;
         this.lastKey = e.keyCode;
@@ -584,7 +584,7 @@ function SearchResults(name)
       return this.lastKey!=0;
     }
 
-    this.Nav = function(evt,itemIndex) 
+    this.Nav = function(evt,itemIndex)
     {
       var e  = (evt) ? evt : window.event; // for IE
       if (e.keyCode==13) return true;
@@ -598,7 +598,7 @@ function SearchResults(name)
         {
           var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
           if (child && child.style.display == 'block') // children visible
-          { 
+          {
             var n=0;
             var tmpElem;
             while (1) // search for last child
@@ -691,7 +691,7 @@ function SearchResults(name)
         if (elem)
         {
           elem.focus();
-        } 
+        }
       }
       else if (this.lastKey==27) // Escape
       {
@@ -774,3 +774,18 @@ function createResults()
   }
 }
 
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark"> </span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+
diff --git a/src/search_functions.php b/templates/html/search_functions.php
similarity index 99%
rename from src/search_functions.php
rename to templates/html/search_functions.php
index 5ad2e5d..caa9e3b 100644
--- a/src/search_functions.php
+++ b/templates/html/search_functions.php
@@ -1,5 +1,5 @@
 <script language="PHP">
-require_once "search-config.php";
+require_once "search_config.php";
 
 function end_form($value)
 {
diff --git a/templates/html/search_l.png b/templates/html/search_l.png
new file mode 100644
index 0000000..c872f4d
Binary files /dev/null and b/templates/html/search_l.png differ
diff --git a/templates/html/search_m.png b/templates/html/search_m.png
new file mode 100644
index 0000000..b429a16
Binary files /dev/null and b/templates/html/search_m.png differ
diff --git a/src/search.css b/templates/html/search_noidx.css
similarity index 99%
rename from src/search.css
rename to templates/html/search_noidx.css
index a77ab21..69ded6e 100644
--- a/src/search.css
+++ b/templates/html/search_noidx.css
@@ -9,7 +9,7 @@
     position: absolute;
     float: none;
     display: inline;
-    margin-top: 8px;
+    margin-top: 0px;
     right: 0px;
     width: 170px;
     z-index: 102;
diff --git a/src/search_opensearch.php b/templates/html/search_opensearch.php
similarity index 95%
rename from src/search_opensearch.php
rename to templates/html/search_opensearch.php
index 3b59516..e3a4634 100644
--- a/src/search_opensearch.php
+++ b/templates/html/search_opensearch.php
@@ -1,5 +1,5 @@
 <script language="PHP">
-require "search-functions.php";
+require "search_functions.php";
 
 $mode = array_key_exists('v', $_GET)?$_GET['v']:"";
 $query = array_key_exists('query', $_GET)?$_GET['query']:"";
@@ -43,9 +43,9 @@ http://dev.squello.com/doc/html/favicon.ico</Image>
 <Url type="text/html" method="GET"
 template="$link/search.php?query={searchTerms}" />
 <Url type="application/x-suggestions+json" method="GET"
-template="$link/search-opensearch.php?v=json&query={searchTerms}" />
+template="$link/search_opensearch.php?v=json&query={searchTerms}" />
 <Url type="application/x-suggestions+xml" method="GET"
-template="$link/search-opensearch.php?v=xml&query={searchTerms}" />
+template="$link/search_opensearch.php?v=xml&query={searchTerms}" />
 </OpenSearchDescription>
 END_OPENSEARCH;
 }
diff --git a/templates/html/search_r.png b/templates/html/search_r.png
new file mode 100644
index 0000000..97ee8b4
Binary files /dev/null and b/templates/html/search_r.png differ
diff --git a/templates/html/splitbar.lum b/templates/html/splitbar.lum
new file mode 100644
index 0000000..d5f0595
--- /dev/null
+++ b/templates/html/splitbar.lum
@@ -0,0 +1,1028 @@
+# vertical split bar for treeview
+# width & height
+6 1024
+# luma data
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
diff --git a/src/svgpan.js b/templates/html/svgpan.js
similarity index 100%
rename from src/svgpan.js
rename to templates/html/svgpan.js
diff --git a/templates/html/sync_off.luma b/templates/html/sync_off.luma
new file mode 100644
index 0000000..6f7567c
--- /dev/null
+++ b/templates/html/sync_off.luma
@@ -0,0 +1,54 @@
+# synchonized view disabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 138 128 128 128 128 128 128 133 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 129 205 186 128 128 128 128 128 128 160 210 134 128 128 128 128 128 128
+128 128 128 128 128 139 217 255 181 128 128 128 128 128 128 152 255 229 147 128 128 128 128 128
+128 128 128 128 156 236 255 255 181 128 128 128 128 128 128 152 255 255 243 164 128 128 128 128
+128 128 128 175 249 255 255 255 223 196 198 198 128 128 197 211 255 255 255 253 186 128 128 128
+128 128 202 255 255 255 255 255 255 255 255 225 128 128 255 255 255 255 255 255 255 214 128 128
+128 128 217 255 255 255 255 255 255 255 255 128 128 198 255 255 255 255 255 255 255 225 128 128
+128 128 128 189 255 255 255 255 238 224 225 128 128 225 224 232 255 255 255 255 201 128 128 128
+128 128 128 128 167 245 255 255 183 128 128 128 128 128 128 155 255 255 250 179 128 128 128 128
+128 128 128 128 128 150 231 255 188 128 128 128 128 128 128 161 255 238 158 128 128 128 128 128
+128 128 128 128 128 128 136 216 188 128 128 128 128 128 128 161 223 142 128 128 128 128 128 128
+128 128 128 128 128 128 128 130 141 128 128 128 128 128 128 135 132 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+  0   0   0   0   0   0   0  29  98 157 207 231 234 211 164 104  38   0   0   0   0   0   0   0
+  0   0   0   0   0  21 143 234 255 255 255 255 255 255 255 255 244 155  33   0   0   0   0   0
+  0   0   0   0  70 221 255 255 255 255 255 255 255 255 255 255 255 255 235  93   0   0   0   0
+  0   0   0  92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116   0   0   0
+  0   0  68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  96   0   0
+  0  20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243  41   0
+  0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172   1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  53
+  0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190   3
+  0  31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249  54   0
+  0   0  91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119   0   0
+  0   0   0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145   0   0   0
+  0   0   0   0  98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119   0   0   0   0
+  0   0   0   0   0  45 168 252 255 255 255 255 255 255 255 255 255 184  58   0   0   0   0   0
+  0   0   0   0   0   0   0  45 131 201 222 234 236 224 204 142  54   0   0   0   0   0   0   0
+
diff --git a/templates/html/sync_on.luma b/templates/html/sync_on.luma
new file mode 100644
index 0000000..ca79254
--- /dev/null
+++ b/templates/html/sync_on.luma
@@ -0,0 +1,54 @@
+# synchonized view enabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 138 128 128 128 128 133 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 129 205 186 128 128 128 128 160 210 134 128 128 128 128 128 128 128
+128 128 128 128 128 128 139 217 255 181 128 128 128 128 152 255 229 147 128 128 128 128 128 128
+128 128 128 128 128 156 236 255 255 181 128 128 128 128 152 255 255 243 164 128 128 128 128 128
+128 128 128 128 175 249 255 255 255 223 196 198 198 197 211 255 255 255 253 186 128 128 128 128
+128 128 133 202 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 214 137 128 128
+128 128 135 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 225 140 128 128
+128 128 128 128 189 255 255 255 255 238 224 225 225 224 232 255 255 255 255 201 131 128 128 128
+128 128 128 128 128 167 245 255 255 183 128 128 128 128 155 255 255 250 179 128 128 128 128 128
+128 128 128 128 128 128 150 231 255 188 128 128 128 128 161 255 238 158 128 128 128 128 128 128
+128 128 128 128 128 128 128 136 216 188 128 128 128 128 161 223 142 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 130 141 128 128 128 128 135 132 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+  0   0   0   0   0   0   0  29  98 157 207 231 234 211 164 104  38   0   0   0   0   0   0   0
+  0   0   0   0   0  21 143 234 255 255 255 255 255 255 255 255 244 155  33   0   0   0   0   0
+  0   0   0   0  70 221 255 255 255 255 255 255 255 255 255 255 255 255 235  93   0   0   0   0
+  0   0   0  92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116   0   0   0
+  0   0  68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  96   0   0
+  0  20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243  41   0
+  0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172   1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  53
+  0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190   3
+  0  31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249  54   0
+  0   0  91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119   0   0
+  0   0   0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145   0   0   0
+  0   0   0   0  98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119   0   0   0   0
+  0   0   0   0   0  45 168 252 255 255 255 255 255 255 255 255 255 184  58   0   0   0   0   0
+  0   0   0   0   0   0   0  45 131 201 222 234 236 224 204 142  54   0   0   0   0   0   0   0
+
diff --git a/templates/html/tab_a.lum b/templates/html/tab_a.lum
new file mode 100644
index 0000000..2d1dbcf
--- /dev/null
+++ b/templates/html/tab_a.lum
@@ -0,0 +1,8 @@
+# active tab background luma
+# width & height
+1 36
+# luma data
+31  42  59  69  73  74  75  77  77
+77  79  80  80  82  81  83  84  86
+87  88  89  90  91  91  93  94  94
+96  96  97  98  98  99  99  99 100
diff --git a/templates/html/tab_b.lum b/templates/html/tab_b.lum
new file mode 100644
index 0000000..48e9c42
--- /dev/null
+++ b/templates/html/tab_b.lum
@@ -0,0 +1,8 @@
+# normal tab background luma
+# width & height
+1 36
+# luma data
+218 228 235 233 230 227 225 222 221
+218 217 215 214 213 212 211 210 209
+209 197 198 199 200 201 202 203 204
+205 207 209 211 213 217 219 206 188
diff --git a/templates/html/tab_h.lum b/templates/html/tab_h.lum
new file mode 100644
index 0000000..57d9d47
--- /dev/null
+++ b/templates/html/tab_h.lum
@@ -0,0 +1,8 @@
+# hovering tab background luma
+# width & height
+1 36
+# luma data
+181 191 198 196 193 190 188 185 184
+181 180 178 177 176 175 174 173 172
+172 154 155 156 157 158 159 160 161
+162 164 166 168 170 174 176 163 145
diff --git a/templates/html/tab_s.lum b/templates/html/tab_s.lum
new file mode 100644
index 0000000..152ce16
--- /dev/null
+++ b/templates/html/tab_s.lum
@@ -0,0 +1,8 @@
+# tab separator
+# width & height
+1 36
+# luma data
+187 186 185 183 182 181 180 178 176
+174 173 171 169 167 164 163 161 158
+156 154 152 150 148 145 143 141 140
+138 136 134 131 131 128 126 125 124
diff --git a/templates/html/tabs.css b/templates/html/tabs.css
new file mode 100644
index 0000000..737d559
--- /dev/null
+++ b/templates/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: ##30;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/src/doxygen.sty b/templates/latex/doxygen.sty
similarity index 99%
rename from src/doxygen.sty
rename to templates/latex/doxygen.sty
index c423e12..acd68e4 100644
--- a/src/doxygen.sty
+++ b/templates/latex/doxygen.sty
@@ -142,7 +142,9 @@
 % Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
 % (only if no caption is specified)
 \newenvironment{DoxyImageNoCaption}{%
+  \begin{center}%
 }{%
+  \end{center}%
 }
 
 % Used by @attention
diff --git a/src/compound.xsd b/templates/xml/compound.xsd
similarity index 97%
rename from src/compound.xsd
rename to templates/xml/compound.xsd
index be897c3..50e532e 100644
--- a/src/compound.xsd
+++ b/templates/xml/compound.xsd
@@ -39,6 +39,7 @@
     </xsd:sequence>
     <xsd:attribute name="id" type="xsd:string" />
     <xsd:attribute name="kind" type="DoxCompoundKind" />
+    <xsd:attribute name="language" type="DoxLanguage" use="optional"/>
     <xsd:attribute name="prot" type="DoxProtectionKind" />
     <xsd:attribute name="final" type="DoxBool" use="optional"/>
     <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
@@ -686,6 +687,26 @@
     </xsd:restriction>
   </xsd:simpleType>
 
+  <xsd:simpleType name="DoxLanguage">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="Unknown" />
+      <xsd:enumeration value="IDL" />
+      <xsd:enumeration value="Java" />
+      <xsd:enumeration value="C#" />
+      <xsd:enumeration value="D" />
+      <xsd:enumeration value="PHP" />
+      <xsd:enumeration value="Objective-C" />
+      <xsd:enumeration value="C++" />
+      <xsd:enumeration value="Javascript" />
+      <xsd:enumeration value="Python" />
+      <xsd:enumeration value="Fortran" />
+      <xsd:enumeration value="VHDL" />
+      <xsd:enumeration value="XML" />
+      <xsd:enumeration value="Tcl" />
+      <xsd:enumeration value="Markdown" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
   <xsd:simpleType name="DoxVirtualKind">
     <xsd:restriction base="xsd:string">
       <xsd:enumeration value="non-virtual" />
diff --git a/src/index.xsd b/templates/xml/index.xsd
similarity index 100%
rename from src/index.xsd
rename to templates/xml/index.xsd
diff --git a/testing/008/008__brief_8c.xml b/testing/008/008__brief_8c.xml
index 3416798..4fcf6a6 100644
--- a/testing/008/008__brief_8c.xml
+++ b/testing/008/008__brief_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="008__brief_8c" kind="file">
+  <compounddef id="008__brief_8c" kind="file" language="C++">
     <compoundname>008_brief.c</compoundname>
     <briefdescription>
       <para>A brief description. </para>
diff --git a/testing/009/class_bug.xml b/testing/009/class_bug.xml
index 75a3fa1..dc1ff06 100644
--- a/testing/009/class_bug.xml
+++ b/testing/009/class_bug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_bug" kind="class" prot="public">
+  <compounddef id="class_bug" kind="class" language="C++" prot="public">
     <compoundname>Bug</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_bug_1a1f720954dd97cd1203e80501a6eae74c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_deprecated.xml b/testing/009/class_deprecated.xml
index 2420466..53a6273 100644
--- a/testing/009/class_deprecated.xml
+++ b/testing/009/class_deprecated.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_deprecated" kind="class" prot="public">
+  <compounddef id="class_deprecated" kind="class" language="C++" prot="public">
     <compoundname>Deprecated</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_deprecated_1a1d5f6803e72c625727e7083d1722dbf9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_reminder.xml b/testing/009/class_reminder.xml
index 2f3c641..c4f639e 100644
--- a/testing/009/class_reminder.xml
+++ b/testing/009/class_reminder.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_reminder" kind="class" prot="public">
+  <compounddef id="class_reminder" kind="class" language="C++" prot="public">
     <compoundname>Reminder</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_reminder_1a173b5218bb11287b0e86a550d9f0728d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_test.xml b/testing/009/class_test.xml
index 505617f..b9f7f9f 100644
--- a/testing/009/class_test.xml
+++ b/testing/009/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_test_1a9fc54b716f326514a4c5f434137f4fc0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_todo.xml b/testing/009/class_todo.xml
index 0ac555f..c98fdac 100644
--- a/testing/009/class_todo.xml
+++ b/testing/009/class_todo.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_todo" kind="class" prot="public">
+  <compounddef id="class_todo" kind="class" language="C++" prot="public">
     <compoundname>Todo</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_todo_1a9e70ec9176ac4c1b20e011b4daddc9d8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/011/category_integer_07_arithmetic_08.xml b/testing/011/category_integer_07_arithmetic_08.xml
index 9d64d98..73308db 100644
--- a/testing/011/category_integer_07_arithmetic_08.xml
+++ b/testing/011/category_integer_07_arithmetic_08.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="category_integer_07_arithmetic_08" kind="category" prot="public">
+  <compounddef id="category_integer_07_arithmetic_08" kind="category" language="Objective-C" prot="public">
     <compoundname>Integer(Arithmetic)</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="category_integer_07_arithmetic_08_1a12f411c5872ba3bafb8ea7dd1826cf2a" prot="public" static="no" const="no" explicit="no" inline="no" virt="virtual">
diff --git a/testing/011/interface_integer.xml b/testing/011/interface_integer.xml
index bdbcad2..e922dda 100644
--- a/testing/011/interface_integer.xml
+++ b/testing/011/interface_integer.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="interface_integer" kind="class" prot="public">
+  <compounddef id="interface_integer" kind="class" language="Objective-C" prot="public">
     <compoundname>Integer</compoundname>
     <basecompoundref prot="public" virt="non-virtual">Object</basecompoundref>
     <sectiondef kind="protected-attrib">
diff --git a/testing/013/class_t1.xml b/testing/013/class_t1.xml
index 2a9b415..e0dc3a2 100644
--- a/testing/013/class_t1.xml
+++ b/testing/013/class_t1.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_t1" kind="class" prot="public">
+  <compounddef id="class_t1" kind="class" language="C++" prot="public">
     <compoundname>T1</compoundname>
     <includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
     <briefdescription>
diff --git a/testing/013/class_t2.xml b/testing/013/class_t2.xml
index 9c85ff6..ca534e6 100644
--- a/testing/013/class_t2.xml
+++ b/testing/013/class_t2.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_t2" kind="class" prot="public">
+  <compounddef id="class_t2" kind="class" language="C++" prot="public">
     <compoundname>T2</compoundname>
     <includes refid="013__class_8h" local="no">013_class.h</includes>
     <briefdescription>
diff --git a/testing/013/class_t3.xml b/testing/013/class_t3.xml
index 49e7a16..2fba932 100644
--- a/testing/013/class_t3.xml
+++ b/testing/013/class_t3.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_t3" kind="class" prot="public">
+  <compounddef id="class_t3" kind="class" language="C++" prot="public">
     <compoundname>T3</compoundname>
     <includes refid="013__class_8h" local="no">013_class.h</includes>
     <briefdescription>
diff --git a/testing/013/class_t4.xml b/testing/013/class_t4.xml
index d87571d..907049f 100644
--- a/testing/013/class_t4.xml
+++ b/testing/013/class_t4.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_t4" kind="class" prot="public">
+  <compounddef id="class_t4" kind="class" language="C++" prot="public">
     <compoundname>T4</compoundname>
     <includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
     <briefdescription>
diff --git a/testing/015/015__cond_8c.xml b/testing/015/015__cond_8c.xml
index 39baed7..fb3a06c 100644
--- a/testing/015/015__cond_8c.xml
+++ b/testing/015/015__cond_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="015__cond_8c" kind="file">
+  <compounddef id="015__cond_8c" kind="file" language="C++">
     <compoundname>015_cond.c</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="015__cond_8c_1a2521dcda743ec66ad8e030113d6e0c63" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/016/016__copydoc_8c.xml b/testing/016/016__copydoc_8c.xml
index dd1de8f..992122d 100644
--- a/testing/016/016__copydoc_8c.xml
+++ b/testing/016/016__copydoc_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="016__copydoc_8c" kind="file">
+  <compounddef id="016__copydoc_8c" kind="file" language="C++">
     <compoundname>016_copydoc.c</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="016__copydoc_8c_1af721a79655a3857b98d70fa6ada8a916" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/018/018__def_8c.xml b/testing/018/018__def_8c.xml
index b55a2eb..0b30670 100644
--- a/testing/018/018__def_8c.xml
+++ b/testing/018/018__def_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="018__def_8c" kind="file">
+  <compounddef id="018__def_8c" kind="file" language="C++">
     <compoundname>018_def.c</compoundname>
     <sectiondef kind="define">
       <memberdef kind="define" id="018__def_8c_1a824c99cb152a3c2e9111a2cb9c34891e" prot="public" static="no">
diff --git a/testing/022/indexpage.xml b/testing/022/indexpage.xml
index 83ed868..afcf23a 100644
--- a/testing/022/indexpage.xml
+++ b/testing/022/indexpage.xml
@@ -4,14 +4,15 @@
     <compoundname>index</compoundname>
     <title>My Project</title>
     <detaileddescription>
-      <para>Class relations expressed via an inline dot graph: <dot> 
+      <para>Class relations expressed via an inline dot graph: <dot>
 digraph example {
   node [shape=record, fontname=Helvetica, fontsize=10];
   b [ label="class B" URL="\ref B"];
   c [ label="class C" URL="\ref C"];
   b -> c [ arrowhead="open", style="dashed" ];
 }
-</dot> </para>
+</dot>
+ </para>
     </detaileddescription>
   </compounddef>
 </doxygen>
diff --git a/testing/025/class_test.xml b/testing/025/class_test.xml
index 8d3f076..f0c7abd 100644
--- a/testing/025/class_test.xml
+++ b/testing/025/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_test_1a47b775f65718978f1ffcd96376f8ecfa" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/026/class_test.xml b/testing/026/class_test.xml
index f49cc8d..a332757 100644
--- a/testing/026/class_test.xml
+++ b/testing/026/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <templateparamlist>
       <param>
diff --git a/testing/027/struct_car.xml b/testing/027/struct_car.xml
index 0e40922..c73ad34 100644
--- a/testing/027/struct_car.xml
+++ b/testing/027/struct_car.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="struct_car" kind="struct" prot="public">
+  <compounddef id="struct_car" kind="struct" language="C++" prot="public">
     <compoundname>Car</compoundname>
     <basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
     <sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_object.xml b/testing/027/struct_object.xml
index 107548d..4047446 100644
--- a/testing/027/struct_object.xml
+++ b/testing/027/struct_object.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="struct_object" kind="struct" prot="public">
+  <compounddef id="struct_object" kind="struct" language="C++" prot="public">
     <compoundname>Object</compoundname>
     <derivedcompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</derivedcompoundref>
     <sectiondef kind="private-attrib">
diff --git a/testing/027/struct_truck.xml b/testing/027/struct_truck.xml
index 1da9e2f..14ebde2 100644
--- a/testing/027/struct_truck.xml
+++ b/testing/027/struct_truck.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="struct_truck" kind="struct" prot="public">
+  <compounddef id="struct_truck" kind="struct" language="C++" prot="public">
     <compoundname>Truck</compoundname>
     <basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
     <sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_vehicle.xml b/testing/027/struct_vehicle.xml
index a1f7654..bf480e8 100644
--- a/testing/027/struct_vehicle.xml
+++ b/testing/027/struct_vehicle.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="struct_vehicle" kind="struct" prot="public">
+  <compounddef id="struct_vehicle" kind="struct" language="C++" prot="public">
     <compoundname>Vehicle</compoundname>
     <basecompoundref refid="struct_object" prot="public" virt="non-virtual">Object</basecompoundref>
     <derivedcompoundref refid="struct_car" prot="public" virt="non-virtual">Car</derivedcompoundref>
diff --git a/testing/029/029__hideinit_8c.xml b/testing/029/029__hideinit_8c.xml
index 4bf1516..f5db794 100644
--- a/testing/029/029__hideinit_8c.xml
+++ b/testing/029/029__hideinit_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="029__hideinit_8c" kind="file">
+  <compounddef id="029__hideinit_8c" kind="file" language="C++">
     <compoundname>029_hideinit.c</compoundname>
     <sectiondef kind="var">
       <memberdef kind="variable" id="029__hideinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/035/035__invariant_8c.xml b/testing/035/035__invariant_8c.xml
index d036388..f1a924d 100644
--- a/testing/035/035__invariant_8c.xml
+++ b/testing/035/035__invariant_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="035__invariant_8c" kind="file">
+  <compounddef id="035__invariant_8c" kind="file" language="C++">
     <compoundname>035_invariant.c</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="035__invariant_8c_1a92e32ddd4278ab907422d5aaa34cb796" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/036/036__link_8c.xml b/testing/036/036__link_8c.xml
index 4347d4b..c0dea58 100644
--- a/testing/036/036__link_8c.xml
+++ b/testing/036/036__link_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="036__link_8c" kind="file">
+  <compounddef id="036__link_8c" kind="file" language="C++">
     <compoundname>036_link.c</compoundname>
     <innerclass refid="class_test" prot="public">Test</innerclass>
     <sectiondef kind="func">
diff --git a/testing/037/class_receiver.xml b/testing/037/class_receiver.xml
index eb37d47..5c4fde6 100644
--- a/testing/037/class_receiver.xml
+++ b/testing/037/class_receiver.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_receiver" kind="class" prot="public">
+  <compounddef id="class_receiver" kind="class" language="C++" prot="public">
     <compoundname>Receiver</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_receiver_1a162099741e0324e6254c9bc570566e40" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
@@ -25,11 +25,12 @@
     <briefdescription>
     </briefdescription>
     <detaileddescription>
-      <para><ref refid="class_receiver" kindref="compound">Receiver</ref> class. Can be used to receive and execute commands. After execution of a command, the receiver will send an acknowledgement <msc> 
+      <para><ref refid="class_receiver" kindref="compound">Receiver</ref> class. Can be used to receive and execute commands. After execution of a command, the receiver will send an acknowledgement <msc>
   Receiver,Sender;
   Receiver<-Sender [label="Command()", URL="\ref Command()"];
   Receiver->Sender [label="Ack()", URL="\ref Sender::Ack()", ID="1"];
-</msc> </para>
+</msc>
+ </para>
     </detaileddescription>
     <location file="037_msc.cpp" bodystart="28" bodyend="33"/>
     <listofallmembers>
diff --git a/testing/037/class_sender.xml b/testing/037/class_sender.xml
index 117ed93..e58ab88 100644
--- a/testing/037/class_sender.xml
+++ b/testing/037/class_sender.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_sender" kind="class" prot="public">
+  <compounddef id="class_sender" kind="class" language="C++" prot="public">
     <compoundname>Sender</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
@@ -25,11 +25,12 @@
     <briefdescription>
     </briefdescription>
     <detaileddescription>
-      <para><ref refid="class_sender" kindref="compound">Sender</ref> class. Can be used to send a command to the server. The receiver will acknowledge the command by calling <ref refid="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" kindref="member">Ack()</ref>. <msc> 
+      <para><ref refid="class_sender" kindref="compound">Sender</ref> class. Can be used to send a command to the server. The receiver will acknowledge the command by calling <ref refid="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" kindref="member">Ack()</ref>. <msc>
   Sender,Receiver;
   Sender->Receiver [label="Command()", URL="\ref Receiver::Command()"];
   Sender<-Receiver [label="Ack()", URL="\ref Ack()", ID="1"];
-</msc> </para>
+</msc>
+ </para>
     </detaileddescription>
     <location file="037_msc.cpp" bodystart="13" bodyend="18"/>
     <listofallmembers>
diff --git a/testing/039/class_test.xml b/testing/039/class_test.xml
index 3f38916..244e88d 100644
--- a/testing/039/class_test.xml
+++ b/testing/039/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="user-defined">
       <header>A group of functions.</header>
diff --git a/testing/040/namespace_n_s.xml b/testing/040/namespace_n_s.xml
index 14ffc26..64beb23 100644
--- a/testing/040/namespace_n_s.xml
+++ b/testing/040/namespace_n_s.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace_n_s" kind="namespace">
+  <compounddef id="namespace_n_s" kind="namespace" language="C++">
     <compoundname>NS</compoundname>
     <briefdescription>
     </briefdescription>
diff --git a/testing/041/class_test.xml b/testing/041/class_test.xml
index 294b67c..7068026 100644
--- a/testing/041/class_test.xml
+++ b/testing/041/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_test_1a8e7b46ceaf7bd2ab94114b390b3288ca" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
index b48c307..7ed33d5 100644
--- a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
+++ b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace">
+  <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace" language="Java">
     <compoundname>org::doxygen::Test</compoundname>
     <briefdescription>
     </briefdescription>
diff --git a/testing/044/struct_s.xml b/testing/044/struct_s.xml
index 9505f8c..2aa62c2 100644
--- a/testing/044/struct_s.xml
+++ b/testing/044/struct_s.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="struct_s" kind="struct" prot="public">
+  <compounddef id="struct_s" kind="struct" language="C++" prot="public">
     <compoundname>S</compoundname>
     <includes refid="044__section_8h" local="no">044_section.h</includes>
     <sectiondef kind="public-attrib">
diff --git a/testing/046/046__related_8cpp.xml b/testing/046/046__related_8cpp.xml
index 0291e84..9f5eab6 100644
--- a/testing/046/046__related_8cpp.xml
+++ b/testing/046/046__related_8cpp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="046__related_8cpp" kind="file">
+  <compounddef id="046__related_8cpp" kind="file" language="C++">
     <compoundname>046_related.cpp</compoundname>
     <innerclass refid="class_test" prot="public">Test</innerclass>
     <sectiondef kind="func">
diff --git a/testing/046/class_test.xml b/testing/046/class_test.xml
index 3c631ab..62712d4 100644
--- a/testing/046/class_test.xml
+++ b/testing/046/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="C++" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_test_1a1683da699dc049d74101488d143c8e98" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/047/047__return_8cpp.xml b/testing/047/047__return_8cpp.xml
index 2ed45d1..b57a0c3 100644
--- a/testing/047/047__return_8cpp.xml
+++ b/testing/047/047__return_8cpp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="047__return_8cpp" kind="file">
+  <compounddef id="047__return_8cpp" kind="file" language="C++">
     <compoundname>047_return.cpp</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="047__return_8cpp_1aab0ee031d46db05d47213d2625ab6aac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/048/048__showinit_8c.xml b/testing/048/048__showinit_8c.xml
index a44ccb9..34b2c1c 100644
--- a/testing/048/048__showinit_8c.xml
+++ b/testing/048/048__showinit_8c.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="048__showinit_8c" kind="file">
+  <compounddef id="048__showinit_8c" kind="file" language="C++">
     <compoundname>048_showinit.c</compoundname>
     <sectiondef kind="var">
       <memberdef kind="variable" id="048__showinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/054/054__parblock_8cpp.xml b/testing/054/054__parblock_8cpp.xml
index a562a6d..ae6e462 100644
--- a/testing/054/054__parblock_8cpp.xml
+++ b/testing/054/054__parblock_8cpp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="054__parblock_8cpp" kind="file">
+  <compounddef id="054__parblock_8cpp" kind="file" language="C++">
     <compoundname>054_parblock.cpp</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="054__parblock_8cpp_1a2dd0ac47f42a9994b91d34403be05fe9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/057__caller__graphs_8tcl.xml b/testing/057/057__caller__graphs_8tcl.xml
index 4c54e1c..c3dfb78 100644
--- a/testing/057/057__caller__graphs_8tcl.xml
+++ b/testing/057/057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="057__caller__graphs_8tcl" kind="file">
+  <compounddef id="057__caller__graphs_8tcl" kind="file" language="Tcl">
     <compoundname>057_caller_graphs.tcl</compoundname>
     <innernamespace refid="namespacebar">bar</innernamespace>
     <innernamespace refid="namespacefoo">foo</innernamespace>
diff --git a/testing/057/__057__caller__graphs_8tcl.xml b/testing/057/__057__caller__graphs_8tcl.xml
index 2fdcf6a..48ab815 100644
--- a/testing/057/__057__caller__graphs_8tcl.xml
+++ b/testing/057/__057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="__057__caller__graphs_8tcl" kind="file">
+  <compounddef id="__057__caller__graphs_8tcl" kind="file" language="Tcl">
     <compoundname>_057_caller_graphs.tcl</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace1.xml b/testing/057/namespace1.xml
index e74d8fe..6a40cc4 100644
--- a/testing/057/namespace1.xml
+++ b/testing/057/namespace1.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace1" kind="namespace">
+  <compounddef id="namespace1" kind="namespace" language="Tcl">
     <compoundname>1</compoundname>
     <innernamespace refid="namespace1_1_11">1::1</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11.xml b/testing/057/namespace1_1_11.xml
index e5c5596..8ff3ce9 100644
--- a/testing/057/namespace1_1_11.xml
+++ b/testing/057/namespace1_1_11.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace1_1_11" kind="namespace">
+  <compounddef id="namespace1_1_11" kind="namespace" language="Tcl">
     <compoundname>1::1</compoundname>
     <innernamespace refid="namespace1_1_11_1_11">1::1::1</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11_1_11.xml b/testing/057/namespace1_1_11_1_11.xml
index caccbe4..f7f9716 100644
--- a/testing/057/namespace1_1_11_1_11.xml
+++ b/testing/057/namespace1_1_11_1_11.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace1_1_11_1_11" kind="namespace">
+  <compounddef id="namespace1_1_11_1_11" kind="namespace" language="Tcl">
     <compoundname>1::1::1</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespace1_1_11_1_11_1aa604df053f7ebe36205d1a5675459b96" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace2.xml b/testing/057/namespace2.xml
index 6ea122c..0ce04a8 100644
--- a/testing/057/namespace2.xml
+++ b/testing/057/namespace2.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace2" kind="namespace">
+  <compounddef id="namespace2" kind="namespace" language="Tcl">
     <compoundname>2</compoundname>
     <innernamespace refid="namespace2_1_12">2::2</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12.xml b/testing/057/namespace2_1_12.xml
index d2a589a..af86ebe 100644
--- a/testing/057/namespace2_1_12.xml
+++ b/testing/057/namespace2_1_12.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace2_1_12" kind="namespace">
+  <compounddef id="namespace2_1_12" kind="namespace" language="Tcl">
     <compoundname>2::2</compoundname>
     <innernamespace refid="namespace2_1_12_1_12">2::2::2</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12.xml
index d04a73c..0a6d7fa 100644
--- a/testing/057/namespace2_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace2_1_12_1_12" kind="namespace">
+  <compounddef id="namespace2_1_12_1_12" kind="namespace" language="Tcl">
     <compoundname>2::2::2</compoundname>
     <innernamespace refid="namespace2_1_12_1_12_1_12">2::2::2::2</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12.xml
index 980906d..461d61e 100644
--- a/testing/057/namespace2_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace">
+  <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace" language="Tcl">
     <compoundname>2::2::2::2</compoundname>
     <innernamespace refid="namespace2_1_12_1_12_1_12_1_12">2::2::2::2::2</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
index 0c6957b..3981ff0 100644
--- a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace">
+  <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace" language="Tcl">
     <compoundname>2::2::2::2::2</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacebar.xml b/testing/057/namespacebar.xml
index 3c0f6e9..85cde41 100644
--- a/testing/057/namespacebar.xml
+++ b/testing/057/namespacebar.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespacebar" kind="namespace">
+  <compounddef id="namespacebar" kind="namespace" language="Tcl">
     <compoundname>bar</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacefoo.xml b/testing/057/namespacefoo.xml
index 2aae8ea..0d81332 100644
--- a/testing/057/namespacefoo.xml
+++ b/testing/057/namespacefoo.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespacefoo" kind="namespace">
+  <compounddef id="namespacefoo" kind="namespace" language="Tcl">
     <compoundname>foo</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/058/058__bracket__recursion_8tcl.xml b/testing/058/058__bracket__recursion_8tcl.xml
index fd36cee..dcb60e4 100644
--- a/testing/058/058__bracket__recursion_8tcl.xml
+++ b/testing/058/058__bracket__recursion_8tcl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="058__bracket__recursion_8tcl" kind="file">
+  <compounddef id="058__bracket__recursion_8tcl" kind="file" language="Tcl">
     <compoundname>058_bracket_recursion.tcl</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/059/059__command__catch_8tcl.xml b/testing/059/059__command__catch_8tcl.xml
index 6604413..a12a366 100644
--- a/testing/059/059__command__catch_8tcl.xml
+++ b/testing/059/059__command__catch_8tcl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="059__command__catch_8tcl" kind="file">
+  <compounddef id="059__command__catch_8tcl" kind="file" language="Tcl">
     <compoundname>059_command_catch.tcl</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/060/060__command__switch_8tcl.xml b/testing/060/060__command__switch_8tcl.xml
index 05e01c6..f1792f4 100644
--- a/testing/060/060__command__switch_8tcl.xml
+++ b/testing/060/060__command__switch_8tcl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="060__command__switch_8tcl" kind="file">
+  <compounddef id="060__command__switch_8tcl" kind="file" language="Tcl">
     <compoundname>060_command_switch.tcl</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/061/class_test.xml b/testing/061/class_test.xml
index 0922539..b233e9c 100644
--- a/testing/061/class_test.xml
+++ b/testing/061/class_test.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="class_test" kind="class" prot="public">
+  <compounddef id="class_test" kind="class" language="Tcl" prot="public">
     <compoundname>Test</compoundname>
     <sectiondef kind="public-func">
       <memberdef kind="function" id="class_test_1af863c78bca81b4e276dcbb30f12e8ec6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/062/namespacen1.xml b/testing/062/namespacen1.xml
index 0ef31ff..a31fc29 100644
--- a/testing/062/namespacen1.xml
+++ b/testing/062/namespacen1.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespacen1" kind="namespace">
+  <compounddef id="namespacen1" kind="namespace" language="Tcl">
     <compoundname>n1</compoundname>
     <innernamespace refid="namespacen1_1_1n1">n1::n1</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/062/namespacen2.xml b/testing/062/namespacen2.xml
index 39c21d2..29c4d80 100644
--- a/testing/062/namespacen2.xml
+++ b/testing/062/namespacen2.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespacen2" kind="namespace">
+  <compounddef id="namespacen2" kind="namespace" language="Tcl">
     <compoundname>n2</compoundname>
     <innernamespace refid="namespacen2_1_1n2">n2::n2</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/062/namespacen3.xml b/testing/062/namespacen3.xml
index 25c803c..bfc1364 100644
--- a/testing/062/namespacen3.xml
+++ b/testing/062/namespacen3.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespacen3" kind="namespace">
+  <compounddef id="namespacen3" kind="namespace" language="Tcl">
     <compoundname>n3</compoundname>
     <innernamespace refid="namespacen3_1_1n3">n3::n3</innernamespace>
     <sectiondef kind="func">
diff --git a/testing/063/namespaceoo.xml b/testing/063/namespaceoo.xml
index eb0c93c..044c364 100644
--- a/testing/063/namespaceoo.xml
+++ b/testing/063/namespaceoo.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespaceoo" kind="namespace">
+  <compounddef id="namespaceoo" kind="namespace" language="Tcl">
     <compoundname>oo</compoundname>
     <innernamespace refid="namespaceoo_1_1define">oo::define</innernamespace>
     <innernamespace refid="namespaceoo_1_1_helpers">oo::Helpers</innernamespace>
diff --git a/testing/063/namespaceoo_1_1_helpers.xml b/testing/063/namespaceoo_1_1_helpers.xml
index ff309cf..40b4830 100644
--- a/testing/063/namespaceoo_1_1_helpers.xml
+++ b/testing/063/namespaceoo_1_1_helpers.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespaceoo_1_1_helpers" kind="namespace">
+  <compounddef id="namespaceoo_1_1_helpers" kind="namespace" language="Tcl">
     <compoundname>oo::Helpers</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespaceoo_1_1_helpers_1a96c5b755588beb2e930cff23ce811d6c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml
index aa62fbd..214b705 100644
--- a/testing/063/namespaceoo_1_1define.xml
+++ b/testing/063/namespaceoo_1_1define.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
-  <compounddef id="namespaceoo_1_1define" kind="namespace">
+  <compounddef id="namespaceoo_1_1define" kind="namespace" language="Tcl">
     <compoundname>oo::define</compoundname>
     <sectiondef kind="func">
       <memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/064/struct_foo.xml b/testing/064/struct_foo.xml
new file mode 100644
index 0000000..3765625
--- /dev/null
+++ b/testing/064/struct_foo.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+  <compounddef id="struct_foo" kind="struct" language="C++" prot="public">
+    <compoundname>Foo</compoundname>
+    <sectiondef kind="public-func">
+      <memberdef kind="function" id="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+        <type/>
+        <definition>Foo::operator int</definition>
+        <argsstring>()</argsstring>
+        <name>operator int</name>
+        <briefdescription>
+          <para>Conversion to int. </para>
+        </briefdescription>
+        <detaileddescription>
+        </detaileddescription>
+        <inbodydescription>
+        </inbodydescription>
+        <location file="064_castoperator.cpp" line="22" column="1"/>
+      </memberdef>
+      <memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+        <type/>
+        <definition>Foo::operator int</definition>
+        <argsstring>() const </argsstring>
+        <name>operator int</name>
+        <briefdescription>
+          <para>Conversion to int const. </para>
+        </briefdescription>
+        <detaileddescription>
+        </detaileddescription>
+        <inbodydescription>
+        </inbodydescription>
+        <location file="064_castoperator.cpp" line="24" column="1"/>
+      </memberdef>
+    </sectiondef>
+    <briefdescription>
+      <para><ref refid="struct_foo" kindref="compound">Foo</ref>. </para>
+    </briefdescription>
+    <detaileddescription>
+      <para>
+        <itemizedlist>
+          <listitem>
+            <para>No autolink for operator int()</para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">operator int()</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>No autolink for operator int() const</para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+            </para>
+          </listitem>
+        </itemizedlist>
+      </para>
+    </detaileddescription>
+    <location file="064_castoperator.cpp" bodystart="20" bodyend="25"/>
+    <listofallmembers>
+      <member refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" virt="non-virtual">
+        <scope>Foo</scope>
+        <name>operator int</name>
+      </member>
+      <member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual">
+        <scope>Foo</scope>
+        <name>operator int</name>
+      </member>
+    </listofallmembers>
+  </compounddef>
+</doxygen>
diff --git a/testing/064_castoperator.cpp b/testing/064_castoperator.cpp
new file mode 100644
index 0000000..d6f8006
--- /dev/null
+++ b/testing/064_castoperator.cpp
@@ -0,0 +1,25 @@
+// objective: test linking to the cast operator with and without const
+// check: struct_foo.xml
+/**
+ * @brief Foo
+ *
+ * - No autolink for operator int()
+ * - @ref operator int()
+ * - @ref operator int() "title"
+ * - Foo::operator int()
+ * - @ref Foo::operator int()
+ * - @ref Foo::operator int() "title"
+ *
+ * - No autolink for operator int() const
+ * - @ref operator int() const
+ * - @ref operator int() const "title"
+ * - Foo::operator int() const
+ * - @ref Foo::operator int() const
+ * - @ref Foo::operator int() const "title"
+ */
+struct Foo {
+  /** @brief Conversion to int */
+  operator int();
+  /** @brief Conversion to int const */
+  operator int() const;
+};
diff --git a/testing/022/indexpage.xml b/testing/065/indexpage.xml
similarity index 56%
copy from testing/022/indexpage.xml
copy to testing/065/indexpage.xml
index 83ed868..e462e55 100644
--- a/testing/022/indexpage.xml
+++ b/testing/065/indexpage.xml
@@ -4,14 +4,7 @@
     <compoundname>index</compoundname>
     <title>My Project</title>
     <detaileddescription>
-      <para>Class relations expressed via an inline dot graph: <dot> 
-digraph example {
-  node [shape=record, fontname=Helvetica, fontsize=10];
-  b [ label="class B" URL="\ref B"];
-  c [ label="class C" URL="\ref C"];
-  b -> c [ arrowhead="open", style="dashed" ];
-}
-</dot> </para>
+      <para>これは日本語(en)です. Output for all languages. </para>
     </detaileddescription>
   </compounddef>
 </doxygen>
diff --git a/testing/065_tilde.dox b/testing/065_tilde.dox
new file mode 100644
index 0000000..0b4986f
--- /dev/null
+++ b/testing/065_tilde.dox
@@ -0,0 +1,12 @@
+// objective: test \~ command with non default OUTPUT_LANGUAGE which contains '-' letter
+// check: indexpage.xml
+// config: OUTPUT_LANGUAGE = Japanese-en
+/** 
+\mainpage 
+\~english This is English.
+\~dutch Dit is Nederlands.
+\~japanese これは日本語です.
+\~japanese-en これは日本語(en)です.
+\~german Dies ist Deutsch.
+\~ Output for all languages.
+*/
diff --git a/testing/html/063__bug__729092_8tcl.html b/testing/html/063__bug__729092_8tcl.html
index 18e9369..ca5fe3d 100644
--- a/testing/html/063__bug__729092_8tcl.html
+++ b/testing/html/063__bug__729092_8tcl.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: 063_bug_729092.tcl File Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -67,7 +68,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -103,9 +104,9 @@ Functions</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/arrowdown.png b/testing/html/arrowdown.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/testing/html/arrowdown.png differ
diff --git a/testing/html/arrowright.png b/testing/html/arrowright.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/testing/html/arrowright.png differ
diff --git a/testing/html/doc.png b/testing/html/doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/testing/html/doc.png differ
diff --git a/testing/html/doxygen.css b/testing/html/doxygen.css
index 0a8f962..a000833 100644
--- a/testing/html/doxygen.css
+++ b/testing/html/doxygen.css
@@ -1,4 +1,4 @@
-/* The standard CSS for doxygen 1.8.7 */
+/* The standard CSS for doxygen 1.8.9.1 */
 
 body, table, div, p, dl {
 	font: 400 14px/22px Roboto,sans-serif;
@@ -227,7 +227,7 @@ span.lineno a:hover {
 	background-color: #C8C8C8;
 }
 
-div.ah {
+div.ah, span.ah {
 	background-color: black;
 	font-weight: bold;
 	color: #ffffff;
@@ -245,6 +245,15 @@ div.ah {
 	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
 }
 
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
 div.groupHeader {
 	margin-left: 16px;
 	margin-top: 12px;
@@ -773,7 +782,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2folderopen.png');
+    background-image:url('folderopen.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
@@ -784,7 +793,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2folderclosed.png');
+    background-image:url('folderclosed.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
@@ -795,7 +804,7 @@ div.directory {
     width: 24px;
     height: 18px;
     margin-bottom: 4px;
-    background-image:url('ftv2doc.png');
+    background-image:url('doc.png');
     background-position: 0px -4px;
     background-repeat: repeat-y;
     vertical-align:top;
diff --git a/testing/html/files.html b/testing/html/files.html
index 4047cd6..46b247e 100644
--- a/testing/html/files.html
+++ b/testing/html/files.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: File List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -68,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -90,9 +91,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/folderclosed.png b/testing/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/testing/html/folderclosed.png differ
diff --git a/testing/html/folderopen.png b/testing/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/testing/html/folderopen.png differ
diff --git a/testing/html/index.html b/testing/html/index.html
index 5073706..4b364c3 100644
--- a/testing/html/index.html
+++ b/testing/html/index.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: Main Page</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -63,7 +64,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -80,9 +81,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/jquery.js b/testing/html/jquery.js
index c197801..1f4d0b4 100644
--- a/testing/html/jquery.js
+++ b/testing/html/jquery.js
@@ -13,19 +13,56 @@
  *
  * Date: Mon Nov 21 21:11:03 2011 -0500
  */
-(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/ [...]
-}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.createElemen [...]
-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);re [...]
-}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:functio [...]
+(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.]+)/ [...]
 /*!
  * 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 [...]
-},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: [...]
-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 [...]
-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[ [...]
-}}}}})}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.d [...]
-})}})(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 [...]
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn [...]
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Wid [...]
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseD [...]
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function() [...]
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouse [...]
\ No newline at end of file
diff --git a/testing/html/namespacemembers.html b/testing/html/namespacemembers.html
index 5c0262f..8b2c20e 100644
--- a/testing/html/namespacemembers.html
+++ b/testing/html/namespacemembers.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: Namespace Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -75,7 +76,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -96,9 +97,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/namespacemembers_func.html b/testing/html/namespacemembers_func.html
index f08dc76..66b5a80 100644
--- a/testing/html/namespacemembers_func.html
+++ b/testing/html/namespacemembers_func.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: Namespace Members</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -75,7 +76,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -96,9 +97,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/namespaceoo.html b/testing/html/namespaceoo.html
index 6cbf2f9..7dbdf59 100644
--- a/testing/html/namespaceoo.html
+++ b/testing/html/namespaceoo.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: oo Namespace Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -68,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -96,9 +97,9 @@ Namespaces</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/namespaceoo_1_1_helpers.html b/testing/html/namespaceoo_1_1_helpers.html
index 5752f4c..7e8a2b6 100644
--- a/testing/html/namespaceoo_1_1_helpers.html
+++ b/testing/html/namespaceoo_1_1_helpers.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: oo::Helpers Namespace Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -68,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -120,9 +121,9 @@ Functions</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/namespaceoo_1_1define.html b/testing/html/namespaceoo_1_1define.html
index 7e2c5c4..78bce61 100644
--- a/testing/html/namespaceoo_1_1define.html
+++ b/testing/html/namespaceoo_1_1define.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: oo::define Namespace Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -68,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -120,9 +121,9 @@ Functions</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/namespaces.html b/testing/html/namespaces.html
index a4299d8..afb0113 100644
--- a/testing/html/namespaces.html
+++ b/testing/html/namespaces.html
@@ -3,15 +3,16 @@
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <title>My Project: Namespace List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
 <link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
 <script type="text/javascript" src="search/search.js"></script>
 <script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
+  $(document).ready(function() { init_search(); });
 </script>
 <link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
@@ -30,7 +31,7 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.8.7 -->
+<!-- Generated by Doxygen 1.8.9.1 -->
 <script type="text/javascript">
 var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </script>
@@ -69,7 +70,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
      onmouseover="return searchBox.OnSearchSelectShow()"
      onmouseout="return searchBox.OnSearchSelectHide()"
      onkeydown="return searchBox.OnSearchSelectKey(event)">
-<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><sp [...]
+</div>
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
@@ -93,9 +94,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue Aug 19 2014 12:23:54 for My Project by  <a href="http://www.doxygen.org/index.html">
+Generated on Sun Jan 4 2015 11:47:12 for My Project by  <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.7
+</a> 1.8.9.1
 </small></address>
 </body>
 </html>
diff --git a/testing/html/search/all_0.html b/testing/html/search/all_0.html
index 86e6c08..c491fd8 100644
--- a/testing/html/search/all_0.html
+++ b/testing/html/search/all_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/all_1.html b/testing/html/search/all_1.html
index 122fcbb..89fd5f8 100644
--- a/testing/html/search/all_1.html
+++ b/testing/html/search/all_1.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_1.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/all_2.html b/testing/html/search/all_2.html
index 6850d19..2c23ed4 100644
--- a/testing/html/search/all_2.html
+++ b/testing/html/search/all_2.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="all_2.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/files_0.html b/testing/html/search/files_0.html
index 867c89d..0457853 100644
--- a/testing/html/search/files_0.html
+++ b/testing/html/search/files_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="files_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/functions_0.html b/testing/html/search/functions_0.html
index a3f28dc..88c8a26 100644
--- a/testing/html/search/functions_0.html
+++ b/testing/html/search/functions_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="functions_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/namespaces_0.html b/testing/html/search/namespaces_0.html
index 2336e75..6d5853b 100644
--- a/testing/html/search/namespaces_0.html
+++ b/testing/html/search/namespaces_0.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head><title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.7"/>
+<meta name="generator" content="Doxygen 1.8.9.1"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="namespaces_0.js"></script>
 <script type="text/javascript" src="search.js"></script>
diff --git a/testing/html/search/search.js b/testing/html/search/search.js
index 70cb40e..dedce3b 100644
--- a/testing/html/search/search.js
+++ b/testing/html/search/search.js
@@ -1,26 +1,3 @@
-// Search script generated by doxygen
-// Copyright (C) 2009 by Dimitri van Heesch.
-
-// The code in this file is loosly based on main.js, part of Natural Docs,
-// which is Copyright (C) 2003-2008 Greg Valure
-// Natural Docs is licensed under the GPL.
-
-var indexSectionsWithContent =
-{
-  0: "0co",
-  1: "o",
-  2: "0",
-  3: "c"
-};
-
-var indexSectionNames =
-{
-  0: "all",
-  1: "namespaces",
-  2: "files",
-  3: "functions"
-};
-
 function convertToId(search)
 {
   var result = '';
@@ -32,11 +9,11 @@ function convertToId(search)
     {
       result+=c;
     }
-    else if (cn<16) 
+    else if (cn<16)
     {
       result+="_0"+cn.toString(16);
     }
-    else 
+    else
     {
       result+="_"+cn.toString(16);
     }
@@ -75,14 +52,14 @@ function getYPos(item)
 /* A class handling everything associated with the search panel.
 
    Parameters:
-   name - The name of the global variable that will be 
+   name - The name of the global variable that will be
           storing this instance.  Is needed to be able to set timeouts.
    resultPath - path to use for external files
 */
 function SearchBox(name, resultsPath, inFrame, label)
 {
   if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
-   
+
   // ---------- Instance variables
   this.name                  = name;
   this.resultsPath           = resultsPath;
@@ -159,7 +136,7 @@ function SearchBox(name, resultsPath, inFrame, label)
     }
 
     // stop selection hide timer
-    if (this.hideTimeout) 
+    if (this.hideTimeout)
     {
       clearTimeout(this.hideTimeout);
       this.hideTimeout=0;
@@ -188,7 +165,7 @@ function SearchBox(name, resultsPath, inFrame, label)
       if (e.shiftKey==1)
       {
         this.OnSearchSelectShow();
-        var win=this.DOMSearchSelectWindow(); 
+        var win=this.DOMSearchSelectWindow();
         for (i=0;i<win.childNodes.length;i++)
         {
           var child = win.childNodes[i]; // get span within a
@@ -239,7 +216,7 @@ function SearchBox(name, resultsPath, inFrame, label)
   this.SelectItemCount = function(id)
   {
     var count=0;
-    var win=this.DOMSearchSelectWindow(); 
+    var win=this.DOMSearchSelectWindow();
     for (i=0;i<win.childNodes.length;i++)
     {
       var child = win.childNodes[i]; // get span within a
@@ -254,7 +231,7 @@ function SearchBox(name, resultsPath, inFrame, label)
   this.SelectItemSet = function(id)
   {
     var i,j=0;
-    var win=this.DOMSearchSelectWindow(); 
+    var win=this.DOMSearchSelectWindow();
     for (i=0;i<win.childNodes.length;i++)
     {
       var child = win.childNodes[i]; // get span within a
@@ -358,7 +335,7 @@ function SearchBox(name, resultsPath, inFrame, label)
        hasResultsPage = false;
     }
 
-    window.frames.MSearchResults.location = resultsPageWithSearch;  
+    window.frames.MSearchResults.location = resultsPageWithSearch;
     var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
 
     if (domPopupSearchResultsWindow.style.display!='block')
@@ -392,12 +369,12 @@ function SearchBox(name, resultsPath, inFrame, label)
 
   // -------- Activation Functions
 
-  // Activates or deactivates the search panel, resetting things to 
-  // their default values if necessary. 
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
   this.Activate = function(isActive)
   {
     if (isActive || // open it
-        this.DOMPopupSearchResultsWindow().style.display == 'block' 
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
        )
     {
       this.DOMSearchBox().className = 'MSearchBoxActive';
@@ -405,8 +382,8 @@ function SearchBox(name, resultsPath, inFrame, label)
       var searchField = this.DOMSearchField();
 
       if (searchField.value == this.searchLabel) // clear "Search" term upon entry
-      {  
-        searchField.value = '';  
+      {
+        searchField.value = '';
         this.searchActive = true;
       }
     }
@@ -445,12 +422,12 @@ function SearchResults(name)
         }
 
         if (element.nodeName == 'DIV' && element.hasChildNodes())
-        {  
-           element = element.firstChild;  
+        {
+           element = element.firstChild;
         }
         else if (element.nextSibling)
-        {  
-           element = element.nextSibling;  
+        {
+           element = element.nextSibling;
         }
         else
         {
@@ -461,8 +438,8 @@ function SearchResults(name)
           while (element && element!=parentElement && !element.nextSibling);
 
           if (element && element!=parentElement)
-          {  
-            element = element.nextSibling;  
+          {
+            element = element.nextSibling;
           }
         }
       }
@@ -515,7 +492,7 @@ function SearchResults(name)
           var rowMatchName = row.id.toLowerCase();
           rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
 
-          if (search.length<=rowMatchName.length && 
+          if (search.length<=rowMatchName.length &&
              rowMatchName.substr(0, search.length)==search)
           {
             row.style.display = 'block';
@@ -586,7 +563,7 @@ function SearchResults(name)
 
     this.ProcessKeys = function(e)
     {
-      if (e.type == "keydown") 
+      if (e.type == "keydown")
       {
         this.repeatOn = false;
         this.lastKey = e.keyCode;
@@ -607,7 +584,7 @@ function SearchResults(name)
       return this.lastKey!=0;
     }
 
-    this.Nav = function(evt,itemIndex) 
+    this.Nav = function(evt,itemIndex)
     {
       var e  = (evt) ? evt : window.event; // for IE
       if (e.keyCode==13) return true;
@@ -621,7 +598,7 @@ function SearchResults(name)
         {
           var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
           if (child && child.style.display == 'block') // children visible
-          { 
+          {
             var n=0;
             var tmpElem;
             while (1) // search for last child
@@ -714,7 +691,7 @@ function SearchResults(name)
         if (elem)
         {
           elem.focus();
-        } 
+        }
       }
       else if (this.lastKey==27) // Escape
       {
@@ -797,3 +774,18 @@ function createResults()
   }
 }
 
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark"> </span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+
diff --git a/testing/html/search/searchdata.js b/testing/html/search/searchdata.js
new file mode 100644
index 0000000..5f2a365
--- /dev/null
+++ b/testing/html/search/searchdata.js
@@ -0,0 +1,24 @@
+var indexSectionsWithContent =
+{
+  0: "0co",
+  1: "o",
+  2: "0",
+  3: "c"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "namespaces",
+  2: "files",
+  3: "functions"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Namespaces",
+  2: "Files",
+  3: "Functions"
+};
+
diff --git a/testing/html/splitbar.png b/testing/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/testing/html/splitbar.png differ
diff --git a/testing/runtests.pl b/testing/runtests.pl
index 6b705aa..30fe969 100755
--- a/testing/runtests.pl
+++ b/testing/runtests.pl
@@ -81,7 +81,7 @@ sub compare_ok {
 
 sub chop_volatile {
   my $line = shift;
-  $line =~ s/version="\d\.\d.\d+"/version=""/g; # strip version
+  $line =~ s/version="\d\.\d+\.\d+(\.\d+)?"/version=""/g; # strip version
   $line =~ s/file=".*\/(.*)"/file="$1"/g; # strip location
   return $line;
 }
diff --git a/tmake/lib/linux-g++/tmake.conf b/tmake/lib/linux-g++/tmake.conf
index 193fadd..e100bce 100644
--- a/tmake/lib/linux-g++/tmake.conf
+++ b/tmake/lib/linux-g++/tmake.conf
@@ -11,7 +11,7 @@ TMAKE_CC		= gcc
 TMAKE_CFLAGS		= -pipe -fsigned-char
 TMAKE_CFLAGS_WARN_ON	= -Wall -W 
 TMAKE_CFLAGS_WARN_OFF	=
-TMAKE_CFLAGS_RELEASE	= -O2
+TMAKE_CFLAGS_RELEASE	= -O3
 TMAKE_CFLAGS_DEBUG	= -g
 TMAKE_CFLAGS_SHLIB	= -fPIC
 TMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
diff --git a/tmake/lib/macosx-c++/tmake.conf b/tmake/lib/macosx-c++/tmake.conf
index ade3437..377b06f 100644
--- a/tmake/lib/macosx-c++/tmake.conf
+++ b/tmake/lib/macosx-c++/tmake.conf
@@ -11,7 +11,7 @@ TMAKE_CC		= cc
 TMAKE_CFLAGS		= -pipe 
 TMAKE_CFLAGS_WARN_ON	= -Wall -W -Wno-deprecated-declarations 
 TMAKE_CFLAGS_WARN_OFF	=
-TMAKE_CFLAGS_RELEASE	= -O2
+TMAKE_CFLAGS_RELEASE	= -O3
 TMAKE_CFLAGS_DEBUG	= -g -fstack-protector
 TMAKE_CFLAGS_SHLIB	= -fPIC
 TMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
diff --git a/vhdlparser/CharStream.cc b/vhdlparser/CharStream.cc
index 8cc17c3..65179f5 100644
--- a/vhdlparser/CharStream.cc
+++ b/vhdlparser/CharStream.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #include "CharStream.h"
 
@@ -209,4 +209,4 @@ void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) {
 
 }
 }
-/* JavaCC - OriginalChecksum=e709b9ee1adf0fcb6b1c5e1641f10348 (do not edit this line) */
+/* JavaCC - OriginalChecksum=ade3c1b57a731a003629de593814ffa6 (do not edit this line) */
diff --git a/vhdlparser/CharStream.h b/vhdlparser/CharStream.h
index b0e74b6..409439f 100644
--- a/vhdlparser/CharStream.h
+++ b/vhdlparser/CharStream.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #ifndef CHARSTREAM_H
 #define CHARSTREAM_H
@@ -28,17 +28,17 @@ namespace parser {
 
 
 class CharStream {
- public:
-  void setTabSize(int i) { tabSize = i; }
-  int getTabSize(int) { return tabSize; }
-  virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
-  virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; }
-  virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
-  virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; }
-  virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; }
-  virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; }
-
-  virtual bool getTrackLineColumn() { return trackLineColumn; }
+public:
+          void setTabSize(int i) { tabSize = i; }
+          int  getTabSize(int)   { return tabSize; }
+  virtual int  getColumn()       { return trackLineColumn ? bufcolumn[bufpos] : -1; }
+  virtual int  getLine()         { return trackLineColumn ? bufline[bufpos] : -1; }
+  virtual int  getEndColumn()    { return trackLineColumn ? bufcolumn[bufpos] : -1; }
+  virtual int  getEndLine()      { return trackLineColumn ? bufline[bufpos] : -1; }
+  virtual int  getBeginColumn()  { return trackLineColumn ? bufcolumn[tokenBegin] : -1; }
+  virtual int  getBeginLine()    { return trackLineColumn ? bufline[tokenBegin] : -1; }
+
+  virtual bool getTrackLineColumn()         { return trackLineColumn; }
   virtual void setTrackLineColumn(bool val) { trackLineColumn = val; }
 
 /**
@@ -47,25 +47,25 @@ class CharStream {
  * (longer) token. So, they will be used again as the prefix of the next
  * token and it is the implemetation's responsibility to do this right.
  */
-virtual inline void backup(int amount) {
-  inBuf += amount;
-  bufpos -= amount;
-  if (bufpos < 0) {
-    bufpos += bufsize;
+  virtual inline void backup(int amount) {
+    inBuf += amount;
+    bufpos -= amount;
+    if (bufpos < 0) {
+      bufpos += bufsize;
+    }
   }
-}
 
 /**
  * Returns the next character that marks the beginning of the next token.
  * All characters must remain in the buffer between two successive calls
  * to this method to implement backup correctly.
  */
-virtual inline JAVACC_CHAR_TYPE BeginToken() {
-  tokenBegin = -1;
-  JAVACC_CHAR_TYPE c = readChar();
-  tokenBegin = bufpos;
-  return c;
-}
+  virtual inline JAVACC_CHAR_TYPE BeginToken() {
+    tokenBegin = -1;
+    JAVACC_CHAR_TYPE c = readChar();
+    tokenBegin = bufpos;
+    return c;
+  }
 
 
 /**
@@ -73,31 +73,30 @@ virtual inline JAVACC_CHAR_TYPE BeginToken() {
  * of selecting the input is the responsibility of the class
  * implementing this class.
  */
-virtual inline JAVACC_CHAR_TYPE readChar() {
-  if (inBuf > 0) {
-    --inBuf;
-    ++bufpos;
-    if (bufpos == bufsize) {
-      bufpos = 0;
+  virtual inline JAVACC_CHAR_TYPE readChar() {
+    if (inBuf > 0) {
+      --inBuf;
+      ++bufpos;
+      if (bufpos == bufsize) {
+        bufpos = 0;
+      }
+      return buffer[bufpos];
     }
 
-    return buffer[bufpos];
-  }
+    ++bufpos;
+    if (bufpos >= maxNextCharInd) {
+      FillBuff();
+    }
 
-  ++bufpos;
-  if (bufpos >= maxNextCharInd) {
-    FillBuff();
-  }
+    JAVACC_CHAR_TYPE c = buffer[bufpos];
 
-  JAVACC_CHAR_TYPE c = buffer[bufpos];
+    if (trackLineColumn) {
+      UpdateLineColumn(c);
+    }
 
-  if (trackLineColumn) {
-    UpdateLineColumn(c);
+    return c;
   }
 
-  return c;
-}
-
 
   virtual void ExpandBuff(bool wrapAround);
   virtual void FillBuff();
@@ -112,8 +111,7 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
     if (bufpos >= tokenBegin)
       return JAVACC_STRING_TYPE(buffer + tokenBegin, bufpos - tokenBegin + 1);
     else
-      return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin)
-             .append(buffer, bufpos + 1);
+      return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin).append(buffer, bufpos + 1);
   }
 
   /**
@@ -126,8 +124,7 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
     if ((bufpos + 1) >= len) {
       return JAVACC_STRING_TYPE(buffer + bufpos - len + 1, len);
     }
-    return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1)
-           .append(buffer, bufpos + 1);
+    return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1).append(buffer, bufpos + 1);
   }
 
   /**
@@ -144,74 +141,71 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
   }
 
   bool endOfInput() {
-    return inBuf == 0 && bufpos + 1 >= maxNextCharInd &&
-           inputStream->endOfInput();
+    return inBuf == 0 && bufpos + 1 >= maxNextCharInd && inputStream->endOfInput();
   }
 
   CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline,
                       int startcolumn, int buffersize) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, buffersize);
   }
 
   CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline, int startcolumn) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, INITIAL_BUFFER_SIZE);
   }
 
   CharStream(const JAVACC_STRING_TYPE& str, int startline,
                       int startcolumn, int buffersize) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(str, startline, startcolumn, buffersize);
   }
 
   CharStream(const JAVACC_STRING_TYPE& str, int startline, int startcolumn) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0) ,tabSize(8), trackLineColumn(true){
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE);
   }
 
   CharStream(ReaderStream *input_stream, int startline,
              int startcolumn, int) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
   }
 
   CharStream(ReaderStream *input_stream, int startline, int startcolumn) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
   }
 
   CharStream(ReaderStream *input_stream) :
-    bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
-    buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
-    prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
-    inBuf(0),tabSize(8), trackLineColumn(true) {
+    bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), 
+    tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+    available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+    inputStream(NULL), deleteStream(false) {
     ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE);
   }
 
-  virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn,
-                      int buffersize);
+  virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn, int buffersize);
 
-  virtual void ReInit(ReaderStream *input_stream, int startline,
-                      int startcolumn) {
+  virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn) {
     ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
   }
 
@@ -232,26 +226,26 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
  protected:
   virtual void UpdateLineColumn(JAVACC_CHAR_TYPE c);
 
-  int *bufline;
-  int *bufcolumn;
-  ReaderStream *inputStream;
-  bool deleteStream;
-  JAVACC_CHAR_TYPE * buffer;
-  int bufpos;
-  int bufsize;
-  int tokenBegin;
-  int column;
-  int line;
-  bool prevCharIsCR ;
-  bool prevCharIsLF ;
-  int available;
-  int maxNextCharInd;
-  int inBuf ;
-  int tabSize ;
-  bool trackLineColumn;
+  int*               bufline;
+  int*               bufcolumn;
+  JAVACC_CHAR_TYPE*  buffer;
+  int                bufpos;
+  int                bufsize;
+  int                tokenBegin;
+  int                column;
+  int                line;
+  bool               prevCharIsCR;
+  bool               prevCharIsLF;
+  int                available;
+  int                maxNextCharInd;
+  int                inBuf;
+  int                tabSize;
+  bool               trackLineColumn;
+  ReaderStream*      inputStream;
+  bool               deleteStream;
 };
 
 }
 }
 #endif
-/* JavaCC - OriginalChecksum=5eaf75ef6a2c7859369c80cf6fd037e0 (do not edit this line) */
+/* JavaCC - OriginalChecksum=89f4cb30f0d3487ee809cca18a2924f2 (do not edit this line) */
diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h
index fba0a0e..2170489 100644
--- a/vhdlparser/ErrorHandler.h
+++ b/vhdlparser/ErrorHandler.h
@@ -1,15 +1,16 @@
-/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,BUILD_PARSER=true,BUILD_TOKEN_MANAGER=true */
 #ifndef ERRORHANDLER_H
 #define ERRORHANDLER_H
-//#include <string>
+#include <stdio.h>
+#include <string>
 #include "JavaCC.h"
 #include "Token.h"
 
 namespace vhdl {
 namespace parser {
 
-//JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
+JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
 
   class VhdlParser;
   class ErrorHandler {
@@ -23,17 +24,17 @@ namespace parser {
       // expectedKind - token kind that the parser was trying to consume.
       // expectedToken - the image of the token - tokenImages[expectedKind].
       // actual - the actual token that the parser got instead.
-      virtual void handleUnexpectedToken(int , JAVACC_STRING_TYPE , Token *, VhdlParser *) {
+      virtual void handleUnexpectedToken(int, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *) {
         error_count++;
-    //    fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str());
+        fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str());
       }
       // Called when the parser cannot continue parsing.
       // last - the last token successfully parsed.
       // unexpected - the token at which the error occurs.
       // production - the production in which this error occurrs.
-      virtual void handleParseError(Token *, Token *, JAVACC_SIMPLE_STRING , VhdlParser *) {
+      virtual void handleParseError(Token *, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *) {
         error_count++;
-  //     fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());
+        fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());
       }
       virtual int getErrorCount() {
         return error_count;
@@ -61,11 +62,11 @@ namespace parser {
        //    errorAfter  : prefix that was seen before this error occurred
        //    curchar     : the offending character
        //
-       virtual void lexicalError(bool EOFSeen, int /*lexState*/, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager*) {
+       virtual void lexicalError(bool EOFSeen, int, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager*) {
         // by default, we just print an error message and return.
         fprintf(stderr, "Lexical error at: %d:%d. Encountered: %c after: %s.\n", errorLine, errorColumn, curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str()));
       }
-       virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* ) {
+       virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager*) {
         fprintf(stderr, "%s\n", (char*)errorMessage.c_str());
       }
       virtual ~TokenManagerErrorHandler() {}
@@ -75,4 +76,4 @@ namespace parser {
 }
 
 #endif
-/* JavaCC - OriginalChecksum=685d19cb4cd943b60089f599e45f23ad (do not edit this line) */
+/* JavaCC - OriginalChecksum=c18f1105ba178be8e21cc9f279f94496 (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h b/vhdlparser/JavaCC.h
index b97c20d..224b2b5 100644
--- a/vhdlparser/JavaCC.h
+++ b/vhdlparser/JavaCC.h
@@ -1,13 +1,11 @@
-/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef __JAVACC_H
-#define __JAVACC_H
+#ifndef JAVACC_H_
+#define JAVACC_H_
 #include <stdio.h>
-#include <string.h>
+#include <string>
 #include <memory.h>
 #include <assert.h>
-#include <cstring>
-
 #include "vhdlstring.h"
 
 #ifndef JAVACC_CHAR_TYPE
@@ -18,24 +16,17 @@
 #define JAVACC_STRING_TYPE VhdlString
 #endif
 
-#define finally  // TODO(Sreeni): Get rid of when we fix jjtree
-
 #define JAVACC_SIMPLE_STRING VhdlString
 
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
-
-
 typedef JAVACC_STRING_TYPE StringBuffer;
 typedef JAVACC_STRING_TYPE String;
 
 // Abstraction on stream classes to read a block of data into a buffer.
 class ReaderStream {
- public:
+public:
   // Read block of data into a buffer and return the actual number read.
-  virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) {
-    return 0;
-  }
-  virtual bool endOfInput() { return true; }
+  virtual size_t read(JAVACC_CHAR_TYPE * /*bufptr*/, int /*offset*/, size_t /*len*/) { return 0; }
+  virtual bool   endOfInput() { return true; }
   virtual ~ReaderStream() {}
 };
 
@@ -49,4 +40,4 @@ const JAVACC_CHAR_TYPE EMPTY[] = { 0 };
 #endif
 
 #endif
-/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */
+/* JavaCC - OriginalChecksum=eb066370c81bb58bb68713327da9719f (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h.in b/vhdlparser/JavaCC.h.in
index b97c20d..224b2b5 100644
--- a/vhdlparser/JavaCC.h.in
+++ b/vhdlparser/JavaCC.h.in
@@ -1,13 +1,11 @@
-/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef __JAVACC_H
-#define __JAVACC_H
+#ifndef JAVACC_H_
+#define JAVACC_H_
 #include <stdio.h>
-#include <string.h>
+#include <string>
 #include <memory.h>
 #include <assert.h>
-#include <cstring>
-
 #include "vhdlstring.h"
 
 #ifndef JAVACC_CHAR_TYPE
@@ -18,24 +16,17 @@
 #define JAVACC_STRING_TYPE VhdlString
 #endif
 
-#define finally  // TODO(Sreeni): Get rid of when we fix jjtree
-
 #define JAVACC_SIMPLE_STRING VhdlString
 
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
-
-
 typedef JAVACC_STRING_TYPE StringBuffer;
 typedef JAVACC_STRING_TYPE String;
 
 // Abstraction on stream classes to read a block of data into a buffer.
 class ReaderStream {
- public:
+public:
   // Read block of data into a buffer and return the actual number read.
-  virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) {
-    return 0;
-  }
-  virtual bool endOfInput() { return true; }
+  virtual size_t read(JAVACC_CHAR_TYPE * /*bufptr*/, int /*offset*/, size_t /*len*/) { return 0; }
+  virtual bool   endOfInput() { return true; }
   virtual ~ReaderStream() {}
 };
 
@@ -49,4 +40,4 @@ const JAVACC_CHAR_TYPE EMPTY[] = { 0 };
 #endif
 
 #endif
-/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */
+/* JavaCC - OriginalChecksum=eb066370c81bb58bb68713327da9719f (do not edit this line) */
diff --git a/vhdlparser/Makefile b/vhdlparser/Makefile
deleted file mode 100644
index afbe656..0000000
--- a/vhdlparser/Makefile
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# This file was generated from Makefile.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-DOXYGEN   = /Users/dimitri/doxygen
-TMAKEPATH = /Users/dimitri/doxygen/tmake/lib/macosx-c++
-ENV       = env TMAKEPATH="$(TMAKEPATH)"
-TMAKE     = /Users/dimitri/doxygen/tmake/bin/tmake
-MAKE      = /opt/local/bin/gmake
-PYTHON    = /opt/local/bin/python2
-PERL      = /opt/local/bin/perl
-LEX       = /usr/bin/flex
-RM        = rm -f
-CP        = cp
-VERSION   = 1.8.8
-INSTALL   = /usr/local
-INSTTOOL  = /opt/local/bin/ginstall
-DOXYDOCS  = ..
-DOCDIR    = $(INSTALL)/share/doc/packages/doxygen
-QTDIR     = /usr
-HAVE_DOT  = /usr/local/bin/dot
-MKSPECS   = -spec macx-g++
-#
-# 
-#
-# Copyright (C) 1997-2000 by Dimitri van Heesch.
-# 
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby 
-# granted. No representations are made about the suitability of this software 
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-# 
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-# 
-
-all: Makefile.vhdlparser Makefile
-	$(MAKE) -f Makefile.vhdlparser    $@
-
-Makefile.vhdlparser: vhdlparser.pro 
-	$(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser
-
-tmake: 
-	$(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser
-
-clean: Makefile.vhdlparser 
-	$(MAKE) -f Makefile.vhdlparser    clean 
-
-regenerate:
-	$(RM) CharStream.cc CharStream.h ErrorHandler.h ParseException.cc ParseException.h \
-	      Token.cc Token.h TokenManager.h TokenMgrError.cc TokenMgrError.h VhdlParser.cc VhdlParser.h \
-	      VhdlParserConstants.h VhdlParserTokenManager.cc VhdlParserTokenManager.h \
-              JavaCC.h
-	javacc vhdlparser.jj
-	patch  <vhdlparser.patch
-	$(CP)  JavaCC.h.in JavaCC.h
-
-distclean: clean
-	$(RM) Makefile vhdlparser.pro
-
-FORCE:
diff --git a/vhdlparser/Makefile.in b/vhdlparser/Makefile.in
index 2838700..ef2c774 100644
--- a/vhdlparser/Makefile.in
+++ b/vhdlparser/Makefile.in
@@ -31,8 +31,7 @@ regenerate:
 	      VhdlParserConstants.h VhdlParserTokenManager.cc VhdlParserTokenManager.h \
               JavaCC.h
 	javacc vhdlparser.jj
-	patch  <vhdlparser.patch
-	$(CP)  JavaCC.h.in JavaCC.h
+	$(CP) JavaCC.h.in JavaCC.h
 
 distclean: clean
 	$(RM) Makefile vhdlparser.pro
diff --git a/vhdlparser/Makefile.vhdlparser b/vhdlparser/Makefile.vhdlparser
deleted file mode 100644
index 22f38e5..0000000
--- a/vhdlparser/Makefile.vhdlparser
+++ /dev/null
@@ -1,165 +0,0 @@
-#############################################################################
-# Makefile for building ../lib/libvhdlparser.a
-# Generated by tmake at 10:48, 2014/08/21
-#     Project: vhdlparser
-#    Template: lib
-#############################################################################
-
-####### Compiler, tools and options
-
-CC	=	cc
-CXX	=	c++
-CFLAGS	=	-pipe -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-CXXFLAGS=	-pipe -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int -w -fexceptions -DQT_LITE_UNICODE -Wall -W -Wno-deprecated-declarations -g -fstack-protector
-INCPATH	=	-I. -I../src -I../qtools -Igenerated_src/doxygen -I/opt/local/include
-AR	=	ar cq
-RANLIB	=	ranlib
-MOC	=	/usr/bin/moc
-
-TAR	=	tar -cf
-GZIP	=	gzip -9f
-
-####### Files
-
-HEADERS =	CharStream.h \
-		ErrorHandler.h \
-		JavaCC.h \
-		ParseException.h \
-		TokenManager.h \
-		Token.h \
-		vhdlstring.h \
-		VhdlParser.h \
-		VhdlParserConstants.h \
-		VhdlParserTokenManager.h \
-		TokenMgrError.h \
-		VhdlParserIF.h \
-		VhdlParserErrorHandler.hpp
-SOURCES =	CharStream.cc \
-		ParseException.cc \
-		Token.cc \
-		TokenMgrError.cc \
-		VhdlParser.cc \
-		VhdlParserTokenManager.cc \
-		VhdlParserIF.cpp
-OBJECTS =	../objects/vhdlparser/CharStream.o \
-		../objects/vhdlparser/ParseException.o \
-		../objects/vhdlparser/Token.o \
-		../objects/vhdlparser/TokenMgrError.o \
-		../objects/vhdlparser/VhdlParser.o \
-		../objects/vhdlparser/VhdlParserTokenManager.o \
-		../objects/vhdlparser/VhdlParserIF.o
-SRCMOC	=	
-OBJMOC	=	
-DIST	=	
-TARGET	=	../lib/libvhdlparser.a
-
-####### Implicit rules
-
-.SUFFIXES: .cpp .cxx .cc .C .c
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
-
-####### Build rules
-
-all: $(TARGET)
-
-staticlib: $(TARGET)
-
-$(TARGET): $(OBJECTS) $(OBJMOC) 
-	-rm -f $(TARGET)
-	$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)
-	ranlib $(TARGET)
-
-moc: $(SRCMOC)
-
-tmake:
-	tmake vhdlparser.pro
-
-dist:
-	$(TAR) vhdlparser.tar vhdlparser.pro $(SOURCES) $(HEADERS) $(DIST)
-	$(GZIP) vhdlparser.tar
-
-clean:
-	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(TARGET)
-	-rm -f *~ core
-
-####### Compile
-
-../objects/vhdlparser/CharStream.o: CharStream.cc \
-		CharStream.h \
-		JavaCC.h \
-		vhdlstring.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/CharStream.o CharStream.cc
-
-../objects/vhdlparser/ParseException.o: ParseException.cc \
-		ParseException.h \
-		JavaCC.h \
-		vhdlstring.h \
-		Token.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/ParseException.o ParseException.cc
-
-../objects/vhdlparser/Token.o: Token.cc \
-		Token.h \
-		JavaCC.h \
-		vhdlstring.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/Token.o Token.cc
-
-../objects/vhdlparser/TokenMgrError.o: TokenMgrError.cc \
-		TokenMgrError.h \
-		JavaCC.h \
-		vhdlstring.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/TokenMgrError.o TokenMgrError.cc
-
-../objects/vhdlparser/VhdlParser.o: VhdlParser.cc \
-		./VhdlParser.h \
-		JavaCC.h \
-		vhdlstring.h \
-		CharStream.h \
-		Token.h \
-		TokenManager.h \
-		VhdlParserTokenManager.h \
-		ErrorHandler.h \
-		VhdlParserConstants.h \
-		VhdlParser.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/VhdlParser.o VhdlParser.cc
-
-../objects/vhdlparser/VhdlParserTokenManager.o: VhdlParserTokenManager.cc \
-		./VhdlParserTokenManager.h \
-		JavaCC.h \
-		vhdlstring.h \
-		CharStream.h \
-		Token.h \
-		ErrorHandler.h \
-		TokenManager.h \
-		VhdlParserConstants.h \
-		VhdlParser.h \
-		VhdlParserTokenManager.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/VhdlParserTokenManager.o VhdlParserTokenManager.cc
-
-../objects/vhdlparser/VhdlParserIF.o: VhdlParserIF.cpp \
-		VhdlParserTokenManager.h \
-		JavaCC.h \
-		vhdlstring.h \
-		CharStream.h \
-		Token.h \
-		ErrorHandler.h \
-		TokenManager.h \
-		VhdlParserConstants.h \
-		VhdlParser.h \
-		VhdlParserErrorHandler.hpp \
-		VhdlParserIF.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o ../objects/vhdlparser/VhdlParserIF.o VhdlParserIF.cpp
-
diff --git a/vhdlparser/ParseException.cc b/vhdlparser/ParseException.cc
index 31ee7a3..6ef9738 100644
--- a/vhdlparser/ParseException.cc
+++ b/vhdlparser/ParseException.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #include "ParseException.h"
 
@@ -141,8 +141,6 @@ namespace parser {
       for (int i = 0; i < str.length(); i++) {
         switch (str.charAt(i))
         {
-           case 0 :
-              continue;
            case '\b':
               retval.append("\\b");
               continue;
@@ -183,4 +181,4 @@ namespace parser {
 
 }
 }
-/* JavaCC - OriginalChecksum=99d488e13335cf377284c90700f070ed (do not edit this line) */
+/* JavaCC - OriginalChecksum=9f6af8fd72f5fe3e4210cf02acbd8387 (do not edit this line) */
diff --git a/vhdlparser/ParseException.h b/vhdlparser/ParseException.h
index 1f3a3dc..c36613f 100644
--- a/vhdlparser/ParseException.h
+++ b/vhdlparser/ParseException.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #ifndef _PARSE_EXCEPTION_H
 #define _PARSE_EXCEPTION_H
@@ -96,4 +96,4 @@ class ParseException {
 }
 }
 #endif
-/* JavaCC - OriginalChecksum=8c47c56fc2030f05b43e20cae6ca5d66 (do not edit this line) */
+/* JavaCC - OriginalChecksum=bd87c2fc11a4306bd2c2482fd1025b7c (do not edit this line) */
diff --git a/vhdlparser/Token.cc b/vhdlparser/Token.cc
index 62a8169..735091d 100644
--- a/vhdlparser/Token.cc
+++ b/vhdlparser/Token.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
 #include "Token.h"
 
@@ -89,4 +89,4 @@ namespace parser {
 
 }
 }
-/* JavaCC - OriginalChecksum=9db9ca693072c4c37bb7cc933c0c5e35 (do not edit this line) */
+/* JavaCC - OriginalChecksum=dcb0f64486aa6455ae5af05d6bb539ec (do not edit this line) */
diff --git a/vhdlparser/Token.h b/vhdlparser/Token.h
index 5fce69f..040899e 100644
--- a/vhdlparser/Token.h
+++ b/vhdlparser/Token.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
 #ifndef TOKEN_H
 #define TOKEN_H
@@ -86,12 +86,13 @@ class Token
    */
   Token(int kind, JAVACC_STRING_TYPE image);
 
+  virtual ~Token();
+
   /**
    * Returns the image.
    */
   JAVACC_STRING_TYPE toString();
 
-  public: virtual ~Token();
 
   /**
    * Returns a new Token void *, by default. However, if you want, you
@@ -113,4 +114,4 @@ class Token
 }
 }
 #endif
-/* JavaCC - OriginalChecksum=2f5eb1c937adc983dfa2008c4fe383a7 (do not edit this line) */
+/* JavaCC - OriginalChecksum=4748c3d6443aa3445d3c95ab54f14c2a (do not edit this line) */
diff --git a/vhdlparser/TokenManager.h b/vhdlparser/TokenManager.h
index efffce6..775e43d 100644
--- a/vhdlparser/TokenManager.h
+++ b/vhdlparser/TokenManager.h
@@ -1,11 +1,10 @@
-/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #ifndef TOKENMANAGER_H
 #define TOKENMANAGER_H
 #include "JavaCC.h"
 #include "Token.h"
 
-
 namespace vhdl {
 namespace parser {
 /**
@@ -19,10 +18,10 @@ public:
   /** This gets the next token from the input stream.
    *  A token of kind 0 (<EOF>) should be returned on EOF.
    */
-  public: virtual Token *getNextToken() = 0;
-  public: virtual ~TokenManager() { }
-  public: virtual void lexicalError() {
-    fprintf(stderr, "Lexical error encountered\n");
+  virtual       ~TokenManager() { }
+  virtual Token *getNextToken() = 0;
+  virtual void   lexicalError() {
+  	fprintf(stderr,"Lexical error encountered.");
   }
 
 };
@@ -30,4 +29,4 @@ public:
 }
 }
 #endif
-/* JavaCC - OriginalChecksum=d4725ee75465725057819b3b07fadaa7 (do not edit this line) */
+/* JavaCC - OriginalChecksum=918e2eba53e028d6c4142283ce3f498f (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.cc b/vhdlparser/TokenMgrError.cc
index 9093e6e..6231196 100644
--- a/vhdlparser/TokenMgrError.cc
+++ b/vhdlparser/TokenMgrError.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #include "TokenMgrError.h"
 
@@ -79,9 +79,6 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
     JAVACC_CHAR_TYPE ch = str[i];
     switch (ch)
     {
-      case 0 :
-        retval += EMPTY[0];
-        continue;
       case '\b':
         retval.append("\\b");
         continue;
@@ -118,4 +115,4 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
 
 }
 }
-/* JavaCC - OriginalChecksum=2bf63f131c8e60fd30c70d0b4f660016 (do not edit this line) */
+/* JavaCC - OriginalChecksum=2fe11435e6701b2fca885354b08bfdf6 (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.h b/vhdlparser/TokenMgrError.h
index 2702b29..abb305d 100644
--- a/vhdlparser/TokenMgrError.h
+++ b/vhdlparser/TokenMgrError.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.2 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 #ifndef _TOKENMGRERROR_H
 #define _TOKENMGRERROR_H
@@ -8,7 +8,7 @@
 namespace vhdl {
 namespace parser {
 
- enum LexerErrors {
+enum LexerErrors {
   /**
    * Lexical error occurred.
    */
@@ -28,11 +28,10 @@ namespace parser {
    * Detected (and bailed out of) an infinite loop in the token manager.
    */
   LOOP_DETECTED = 3,
-  };
+};
 
-class TokenMgrError
-{
-  public:
+class TokenMgrError {
+public:
   /*
    * Ordinals for various reasons why an Error of this type can be thrown.
    */
@@ -57,7 +56,8 @@ class TokenMgrError
    */
     JAVACC_STRING_TYPE LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar);
 
-  private: JAVACC_STRING_TYPE message;
+private:
+   JAVACC_STRING_TYPE message;
 
   /**
    * You can also modify the body of this method to customize your error messages.
@@ -68,6 +68,7 @@ class TokenMgrError
    *
    * from this method for such cases in the release version of your parser.
    */
+public:
   JAVACC_STRING_TYPE getMessage() ;
 
   /*
@@ -75,16 +76,16 @@ class TokenMgrError
    */
 
   /** No arg constructor. */
-  public: TokenMgrError() ;
+  TokenMgrError() ;
 
   /** Constructor with message and reason. */
-  public: TokenMgrError(JAVACC_STRING_TYPE message, int reason) ;
+  TokenMgrError(JAVACC_STRING_TYPE message, int reason) ;
 
   /** Full Constructor. */
-  public: TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ;
+  TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ;
 };
 
 }
 }
 #endif
-/* JavaCC - OriginalChecksum=c7d825cb4d037b031ae43569d383f738 (do not edit this line) */
+/* JavaCC - OriginalChecksum=c22a1b25630ec91deb47dcba22b6b39d (do not edit this line) */
diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc
index 47ecf49..c695c93 100644
--- a/vhdlparser/VhdlParser.cc
+++ b/vhdlparser/VhdlParser.cc
@@ -1,19 +1,20 @@
 /* VhdlParser.cc */
-#include "./VhdlParser.h"
+#include "VhdlParser.h"
+#include "TokenMgrError.h"
 namespace vhdl {
 namespace parser {
   unsigned int jj_la1_0[] = {
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x90404000,0x20080000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x90004000,0x400000,0x0,0x90404000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20080000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x40000000,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x40020000,0x40020001,0x0,0x0,0x0,0x40000000,0xd0020000,0x0,0x0,0x800000,0x0,0x0,0x80004000,0x400000,0x0,0x0,0x80404000,0x0,0x0,0x0,0x0,0x8000,0x0,0 [...]
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x90404000,0x20080000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x90004000,0x400000,0x0,0x90404000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20080000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x40000000,0x0,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x40020000,0x40020001,0x0,0x0,0x0,0x40000000,0xd0020000,0x0,0x0,0x800000,0x0,0x0,0x80004000,0x400000,0x0,0x0,0x80404000,0x0,0x0,0x0,0x0,0x8000,0x0,0 [...]
   unsigned int jj_la1_1[] = {
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x125808,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x0,0x0,0x1000,0x104800,0x1008,0x20000,0x125808,0x10000,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x1000,0x1000000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x1000,0x0,0x4000000,0x4000000,0x0,0x400000,0x4000101,0x4000101,0x0,0x10,0x0,0x100,0x12024900,0x0,0x0,0x0,0x100,0x0,0x104800,0x8,0x20000,0x0,0x124808,0x0,0x10000,0x0,0x0,0x0,0x0,0x0,0x [...]
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x125808,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x0,0x0,0x1000,0x104800,0x1008,0x20000,0x125808,0x10000,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x1000,0x1000000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x1000,0x0,0x4000000,0x4000000,0x0,0x400000,0x4000101,0x4000101,0x0,0x10,0x0,0x100,0x12024900,0x0,0x0,0x0,0x100,0x0,0x104800,0x8,0x20000,0x0,0x124808,0x0,0x10000,0x0,0x0,0x0,0x0,0x0,0x [...]
   unsigned int jj_la1_2[] = {
-0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x110000,0x28000,0x0,0x20000000,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x4000,0x0,0x0,0x110000,0x0,0x0,0x110000,0x0,0x4000,0x4000,0x0,0x0,0x0,0x0,0x28000,0x0,0x0,0x0,0x400,0x0,0x4000,0x0,0x0,0x0,0x4000,0x0,0x4000,0x400000,0x8000,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x1000,0x1000,0x0,0x0,0x0,0x100,0x11000,0x0,0x0,0x0,0x0,0x0,0x110000,0x0,0x0,0x1000,0x111000,0x0,0x0,0x4000,0x0,0x400,0x8000,0x28000,0x0,0x0, [...]
+0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x110000,0x28000,0x0,0x20000000,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x4000,0x0,0x0,0x110000,0x0,0x0,0x110000,0x0,0x4000,0x4000,0x0,0x0,0x0,0x0,0x28000,0x0,0x0,0x0,0x400,0x0,0x4000,0x0,0x0,0x0,0x4000,0x0,0x4000,0x400000,0x8000,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x1000,0x1000,0x0,0x0,0x0,0x100,0x11000,0x0,0x0,0x0,0x0,0x0,0x110000,0x0,0x0,0x1000,0x111000,0x0,0x0,0x4000,0x0,0x400,0x8000,0x28000,0x0,0x0, [...]
   unsigned int jj_la1_3[] = {
-0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x188830,0x8000000,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x80000,0x0,0x108830,0x80000,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x2000000,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x0,0x2000000,0x0,0x0,0x80000,0x80000,0x0,0x0,0x80000,0x80000,0x0,0x4000,0x80000,0x80000,0x0,0x2000,0x0,0x0,0x128810,0x0,0x0,0x0,0x0,0x0,0x108830,0x80000,0x0,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 [...]
+0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x188830,0x8000000,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x80000,0x0,0x108830,0x80000,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x2000000,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x0,0x2000000,0x0,0x0,0x80000,0x80000,0x0,0x0,0x80000,0x80000,0x0,0x4000,0x80000,0x80000,0x0,0x2000,0x0,0x0,0x128810,0x0,0x0,0x0,0x0,0x0,0x108830,0x80000,0x0,0x0,0x188830,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 [...]
   unsigned int jj_la1_4[] = {
-0x0,0x0,0x60000,0x30,0x40,0x100,0x0,0x0,0x0,0x0,0x40000,0x0,0x40001,0x0,0x0,0x0,0x0,0x40,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x40001,0x0,0x0,0x0,0x0,0x10000000,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x20000,0x40,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x40000,0x40000,0x40000,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0x40001,0x0,0x0,0x40000,0x1 [...]
+0x0,0x0,0x60000,0x30,0x40,0x100,0x0,0x0,0x0,0x0,0x40000,0x0,0x40001,0x0,0x0,0x0,0x0,0x40,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x40001,0x0,0x0,0x0,0x0,0x10000000,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x20000,0x40,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x40000,0x40000,0x40000,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0x40001,0x0,0x0,0x40000,0x1 [...]
   unsigned int jj_la1_5[] = {
-0x1420,0x0,0x1c0,0x0,0x0,0x0,0x2,0x3c0,0x0,0x0,0x1c0,0x4000000,0x40001c0,0x0,0x0,0x0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x40001c0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x4000000,0x4000000,0x2,0x0,0x0,0x3c0,0x3c0,0x1c0,0x1c0,0x3c0,0x380,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0 [...]
+0x1420,0x0,0x1c0,0x0,0x0,0x0,0x2,0x3c0,0x0,0x0,0x1c0,0x0,0x80001c0,0x0,0x0,0x0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x80001c0,0x180,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x8000000,0x8000000,0x2,0x0,0x0,0x3c0,0x3c0,0x1c0,0x1c0,0x3c0,0x380,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x817e0,0x0,0x0,0x1 [...]
 
   /** Constructor with user supplied TokenManager. */
 
@@ -64,7 +65,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::access_type_definition() {Token *tok;QCString str,str1;if (!hasError) {
+QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;if (!hasError) {
     
     tok = jj_consume_token(ACCESS_T);
     }
@@ -78,7 +79,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::actual_designator() {QCString str;Token *t;
+QCString VhdlParser::actual_designator() {QCString str;Token *t=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case OPEN_T:{if (!hasError) {
       
@@ -551,8 +552,7 @@ void VhdlParser::architecture_declarative_part() {if (!hasError) {
       case SUBTYPE_T:
       case TYPE_T:
       case USE_T:
-      case VARIABLE_T:
-      case VHDL2008TOOLDIR:{
+      case VARIABLE_T:{
         ;
         break;
         }
@@ -722,7 +722,7 @@ QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!has
     }
     
 if(t) s+=":";
-        return s+s1+";";
+    return s+s1+";";
 assert(false);
   }
 
@@ -816,7 +816,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::attribute_designator() {QCString s;Token *tok;
+QCString VhdlParser::attribute_designator() {QCString s;Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case BASIC_IDENTIFIER:
     case EXTENDED_CHARACTER:{if (!hasError) {
@@ -935,7 +935,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::base() {Token *tok;if (!hasError) {
+QCString VhdlParser::base() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(INTEGER);
     }
@@ -945,7 +945,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::base_specifier() {Token *tok;if (!hasError) {
+QCString VhdlParser::base_specifier() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BASIC_IDENTIFIER);
     }
@@ -965,7 +965,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::based_integer() {Token *tok;if (!hasError) {
+QCString VhdlParser::based_integer() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BASIC_IDENTIFIER);
     }
@@ -975,7 +975,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::based_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::based_literal() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BASED_LITERAL);
     }
@@ -985,7 +985,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::basic_identifier() {Token *tok;if (!hasError) {
+QCString VhdlParser::basic_identifier() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BASIC_IDENTIFIER);
     }
@@ -1048,7 +1048,7 @@ void VhdlParser::binding_indication() {if (!hasError) {
   }
 
 
-QCString VhdlParser::bit_string_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::bit_string_literal() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BIT_STRING_LITERAL);
     }
@@ -1058,7 +1058,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::bit_value() {Token *tok;if (!hasError) {
+QCString VhdlParser::bit_value() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(BASIC_IDENTIFIER);
     }
@@ -1252,13 +1252,6 @@ void VhdlParser::block_declarative_item() {
               
               break;
               }
-            case VHDL2008TOOLDIR:{if (!hasError) {
-              
-              jj_consume_token(VHDL2008TOOLDIR);
-              }
-              
-              break;
-              }
             default:
               jj_la1[27] = jj_gen;
               jj_consume_token(-1);
@@ -1292,8 +1285,7 @@ void VhdlParser::block_declarative_part() {if (!hasError) {
       case SUBTYPE_T:
       case TYPE_T:
       case USE_T:
-      case VARIABLE_T:
-      case VHDL2008TOOLDIR:{
+      case VARIABLE_T:{
         ;
         break;
         }
@@ -1668,7 +1660,7 @@ FlowChart::moveToPrevLevel();
   }
 
 
-QCString VhdlParser::character_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::character_literal() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(CHARACTER_LITERAL);
     }
@@ -2550,11 +2542,11 @@ QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!ha
     }
     
 if(t)
-          s2.prepend(":=");
-         QCString it=s1+s2;
+      s2.prepend(":=");
+     QCString it=s1+s2;
      addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
      it.prepend("constant ");
-         return it;
+     return it;
 assert(false);
   }
 
@@ -2656,7 +2648,7 @@ void VhdlParser::context_item() {
   }
 
 
-QCString VhdlParser::decimal_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::decimal_literal() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(DECIMAL_LITERAL);
     }
@@ -2824,7 +2816,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::direction() {Token *tok;
+QCString VhdlParser::direction() {Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case TO_T:{if (!hasError) {
       
@@ -2973,7 +2965,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::entity_aspect() {Token *tok;QCString s,s1;
+QCString VhdlParser::entity_aspect() {Token *tok=0;QCString s,s1;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case ENTITY_T:{if (!hasError) {
       
@@ -4336,7 +4328,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::formal_designator() {QCString s;Token *tok;
+QCString VhdlParser::formal_designator() {QCString s;Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case SLSL_T:
     case STRINGLITERAL:
@@ -4448,7 +4440,7 @@ error_skipto(SEMI_T);
     }
     
 addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
-           return "type "+s+" is "+s2+";";
+          return "type "+s+" is "+s2+";";
 assert(false);
   }
 
@@ -4798,7 +4790,7 @@ void VhdlParser::guarded_signal_specification() {if (!hasError) {
   }
 
 
-QCString VhdlParser::identifier() {Token *tok;
+QCString VhdlParser::identifier() {Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case EXTENDED_CHARACTER:{if (!hasError) {
       
@@ -5135,7 +5127,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok;
+QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case COMPONENT_T:
     case BASIC_IDENTIFIER:
@@ -5235,7 +5227,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::instantiation_list() {QCString s;Token *tok;
+QCString VhdlParser::instantiation_list() {QCString s;Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case BASIC_IDENTIFIER:
     case EXTENDED_CHARACTER:{if (!hasError) {
@@ -5576,15 +5568,15 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
     }
     
 if(tok)
-                                        s5=tok->image.c_str();
+                    s5=tok->image.c_str();
 
-                                        if(tok1)
-                                         s3=tok->image.data();
+                    if(tok1)
+                     s3=tok1->image.data();
 
-                                        if(tok2)
-                                         s3+=":=";
+                    if(tok2)
+                     s3+=":=";
 
-                                        QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
+                    QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
                     if (currP!=VhdlDocGen::COMPONENT)
                     {
                       if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
@@ -5601,7 +5593,7 @@ if(tok)
                       }
                       //   fprintf(stderr,"\n\n <<port  %s  >>\n",$$.data());
                     } // if component
-                          return it;
+              return it;
 assert(false);
   }
 
@@ -5639,7 +5631,7 @@ s.prepend("while ");
 QCString q=lab+" for "+s;
     FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
     lab="";
-        return q;
+    return q;
       }
       
       break;
@@ -5681,10 +5673,10 @@ QCString VhdlParser::library_clause() {QCString s;if (!hasError) {
     
 if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
                    {
-                                           addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
+                           addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
                    }
                    QCString s1="library "+s;
-                                   return s1;
+                   return s1;
 assert(false);
   }
 
@@ -5845,7 +5837,7 @@ s+=":";
     if (!hasError) {
     
 if(s1.isEmpty())
-           FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+        FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
     }
     if (!hasError) {
     
@@ -5888,7 +5880,7 @@ QCString q = s+" loop "+s2+" end loop" +s3;
          QCString endLoop="end loop" + s3;
          FlowChart::moveToPrevLevel();
          FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
-                return q;
+        return q;
 assert(false);
   }
 
@@ -5937,7 +5929,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::mode() {Token *tok;
+QCString VhdlParser::mode() {Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case IN_T:{if (!hasError) {
       
@@ -6003,7 +5995,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::multiplying_operation() {Token *tok;
+QCString VhdlParser::multiplying_operation() {Token *tok=0;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case MULT_T:{if (!hasError) {
       
@@ -6579,7 +6571,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::operator_symbol() {Token *tok;if (!hasError) {
+QCString VhdlParser::operator_symbol() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(STRINGLITERAL);
     }
@@ -6843,11 +6835,11 @@ lastCompound=current;
                           clone->section=Entry::NAMESPACE_SEC;
                           clone->spec=VhdlDocGen::PACKAGE;
                           clone->name=s;
-                          clone->startLine=getLine();
-                          clone->bodyLine=getLine();
+                          clone->startLine=getLine(PACKAGE_T);
+                          clone->bodyLine=getLine(PACKAGE_T);
                           clone->protection=Package;
                           current_root->addSubEntry(clone);
-                          addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+                          addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
     }
     if (!hasError) {
     
@@ -7229,9 +7221,9 @@ s2+=s1;s2+="#";
     }
     
 current->args=s2;
-                 current->args.prepend("units");
+               current->args.prepend("units");
              current->spec=VhdlDocGen::UNITS;
-                    return s2;
+            return s2;
 assert(false);
   }
 
@@ -8255,9 +8247,9 @@ QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2
     }
     
 if(t) s.append(":");
-                s1.prepend(" report ");
-                if(t1) s2.prepend(" severity ");
-                return s+s1+s2+";";
+        s1.prepend(" report ");
+        if(t1) s2.prepend(" severity ");
+        return s+s1+s2+";";
 assert(false);
   }
 
@@ -9035,9 +9027,9 @@ void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!
     }
     
 if(tok)
-          s3.prepend(":=");
-         s4=s1+s2+s3;
-         addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+      s3.prepend(":=");
+     s4=s1+s2+s3;
+     addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
   }
 
 
@@ -9309,7 +9301,7 @@ assert(false);
   }
 
 
-QCString VhdlParser::string_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::string_literal() {Token *tok=0;if (!hasError) {
     
     tok = jj_consume_token(STRINGLITERAL);
     }
@@ -9699,8 +9691,8 @@ void VhdlParser::subprogram_specification() {QCString s;Token *tok=0;Token *t;
 currP=VhdlDocGen::PROCEDURE;
               createFunction(s.data(),currP,0);
               tempEntry=current;
-                           current->startLine=getLine(PROCEDURE_T);
-                   current->bodyLine=getLine(PROCEDURE_T);
+               current->startLine=getLine(PROCEDURE_T);
+               current->bodyLine=getLine(PROCEDURE_T);
       }
       if (!hasError) {
       
@@ -9814,13 +9806,13 @@ newEntry();
       if (!hasError) {
       
 currP=VhdlDocGen::FUNCTION;
-         if(tok)
+     if(tok)
      createFunction(tok->image.c_str(),currP,s.data());
-         else
-         createFunction(0,currP,s.data());
-          tempEntry=current;
-          current->startLine=getLine(FUNCTION_T);
-          current->bodyLine=getLine(FUNCTION_T);
+     else
+     createFunction(0,currP,s.data());
+      tempEntry=current;
+      current->startLine=getLine(FUNCTION_T);
+      current->bodyLine=getLine(FUNCTION_T);
       }
       if (!hasError) {
       
@@ -10365,14 +10357,14 @@ QStringList ql1=QStringList::split(",",s,FALSE);
                    for (uint j=0;j<ql1.count();j++)
                    {
                     QStringList ql=QStringList::split(".",ql1[j],FALSE);
-                                        QCString it=ql[1].utf8();
+                    QCString it=ql[1].utf8();
                      if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
                      {
                        VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
                      }
                    }
                    s1="use "+s;
-                                   return s1;
+                   return s1;
 assert(false);
   }
 
@@ -10501,24 +10493,24 @@ QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s
     }
     
 int spec;
-        if(t1)
-         s2.prepend(":=");
-        QCString val=" variable "+s+":"+s1+s2+";";
-        QCString it=s1;
-        if(tok != 0)
-        {
-         it.prepend(" shared ");
-         val.prepend(" shared");
-         spec=VhdlDocGen::SHAREDVARIABLE;
-         }
-         else
-         spec=VhdlDocGen::SHAREDVARIABLE;
-
-        if(t1){
-         it+=":=";
+    if(t1)
+     s2.prepend(":=");
+    QCString val=" variable "+s+":"+s1+s2+";";
+    QCString it=s1;
+    if(tok != 0)
+    {
+     it.prepend(" shared ");
+     val.prepend(" shared");
+     spec=VhdlDocGen::SHAREDVARIABLE;
+     }
+     else
+     spec=VhdlDocGen::SHAREDVARIABLE;
+
+    if(t1){
+     it+=":=";
      it+=s2;
-         }
-        addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
+     }
+    addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
     return val;
 assert(false);
   }
@@ -11249,7 +11241,7 @@ QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasErro
     }
     
 current->name=s;
-                                          return "package "+s+" is new "+s1;
+                            return "package "+s+" is new "+s1;
 assert(false);
   }
 
@@ -11496,35 +11488,33 @@ void VhdlParser::generate_statement_body() {if (!hasError) {
   }
 
 
-void VhdlParser::generate_statement_body1() {
-    if (jj_2_107(2147483647)) {if (!hasError) {
+void VhdlParser::generate_statement_body1() {if (!hasError) {
+    
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case ALIAS_T:
+    case ATTRIBUTE_T:
+    case BEGIN_T:
+    case COMPONENT_T:
+    case CONSTANT_T:
+    case DISCONNECT_T:
+    case FILE_T:
+    case FOR_T:
+    case FUNCTION_T:
+    case GROUP_T:
+    case IMPURE_T:
+    case PROCEDURE_T:
+    case PURE_T:
+    case SIGNAL_T:
+    case SHARED_T:
+    case SUBTYPE_T:
+    case TYPE_T:
+    case USE_T:
+    case VARIABLE_T:{if (!hasError) {
       
       while (!hasError) {
-        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-        case ALIAS_T:
-        case ATTRIBUTE_T:
-        case COMPONENT_T:
-        case CONSTANT_T:
-        case DISCONNECT_T:
-        case FILE_T:
-        case FOR_T:
-        case FUNCTION_T:
-        case GROUP_T:
-        case IMPURE_T:
-        case PROCEDURE_T:
-        case PURE_T:
-        case SIGNAL_T:
-        case SHARED_T:
-        case SUBTYPE_T:
-        case TYPE_T:
-        case USE_T:
-        case VARIABLE_T:
-        case VHDL2008TOOLDIR:{
+        if (jj_2_107(2147483647)) {
           ;
-          break;
-          }
-        default:
-          jj_la1[259] = jj_gen;
+        } else {
           goto end_label_51;
         }if (!hasError) {
         
@@ -11538,67 +11528,44 @@ void VhdlParser::generate_statement_body1() {
       
       jj_consume_token(BEGIN_T);
       }
-      if (!hasError) {
       
-      while (!hasError) {
-        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-        case ASSERT_T:
-        case CASE_T:
-        case POSTPONED_T:
-        case PROCESS_T:
-        case WITH_T:
-        case LPAREN_T:
-        case SLSL_T:
-        case STRINGLITERAL:
-        case BASIC_IDENTIFIER:
-        case EXTENDED_CHARACTER:
-        case VHDL2008TOOLDIR:{
-          ;
-          break;
-          }
-        default:
-          jj_la1[260] = jj_gen;
-          goto end_label_52;
-        }if (!hasError) {
-        
-        concurrent_statement();
-        }
-        
-      }
-      end_label_52: ;
+      break;
       }
-      
-    } else {if (!hasError) {
-      
-      while (!hasError) {
-        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-        case ASSERT_T:
-        case CASE_T:
-        case POSTPONED_T:
-        case PROCESS_T:
-        case WITH_T:
-        case LPAREN_T:
-        case SLSL_T:
-        case STRINGLITERAL:
-        case BASIC_IDENTIFIER:
-        case EXTENDED_CHARACTER:
-        case VHDL2008TOOLDIR:{
-          ;
-          break;
-          }
-        default:
-          jj_la1[261] = jj_gen;
-          goto end_label_53;
-        }if (!hasError) {
-        
-        concurrent_statement();
+    default:
+      jj_la1[259] = jj_gen;
+      ;
+    }
+    }
+    if (!hasError) {
+    
+    while (!hasError) {
+      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+      case ASSERT_T:
+      case CASE_T:
+      case POSTPONED_T:
+      case PROCESS_T:
+      case WITH_T:
+      case LPAREN_T:
+      case SLSL_T:
+      case STRINGLITERAL:
+      case BASIC_IDENTIFIER:
+      case EXTENDED_CHARACTER:
+      case VHDL2008TOOLDIR:{
+        ;
+        break;
         }
-        
-      }
-      end_label_53: ;
+      default:
+        jj_la1[260] = jj_gen;
+        goto end_label_52;
+      }if (!hasError) {
+      
+      concurrent_statement();
       }
       
     }
+    end_label_52: ;
+    }
+    
   }
 
 
@@ -11670,7 +11637,7 @@ return t->image.data();
       break;
       }
     default:
-      jj_la1[262] = jj_gen;
+      jj_la1[261] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -11714,7 +11681,7 @@ return s;
       break;
       }
     default:
-      jj_la1[263] = jj_gen;
+      jj_la1[262] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -11758,7 +11725,7 @@ return "."+s;
         break;
         }
       default:
-        jj_la1[264] = jj_gen;
+        jj_la1[263] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
@@ -11813,11 +11780,11 @@ s+="^.";
         break;
         }
       default:
-        jj_la1[265] = jj_gen;
-        goto end_label_54;
+        jj_la1[264] = jj_gen;
+        goto end_label_53;
       }
     }
-    end_label_54: ;
+    end_label_53: ;
     }
     
 return s;
@@ -11848,13 +11815,13 @@ QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) {
       break;
       }
     default:
-      jj_la1[266] = jj_gen;
+      jj_la1[265] = jj_gen;
       ;
     }
     }
     
 if(!s1.isEmpty())
-         return s+"("+s1+")";
+     return s+"("+s1+")";
 
     return s;
 assert(false);
@@ -11882,7 +11849,7 @@ s+=".";
       if (jj_2_110(2147483647)) {
         ;
       } else {
-        goto end_label_55;
+        goto end_label_54;
       }if (!hasError) {
       
       s1 = pathname_element();
@@ -11897,7 +11864,7 @@ s2+=s1;s2+=".";
       }
       
     }
-    end_label_55: ;
+    end_label_54: ;
     }
     
 return s+s2;
@@ -11939,7 +11906,7 @@ void VhdlParser::conditional_signal_assignment_wave() {
         break;
         }
       default:
-        jj_la1[267] = jj_gen;
+        jj_la1[266] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
@@ -11968,7 +11935,7 @@ void VhdlParser::conditional_waveform_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[268] = jj_gen;
+      jj_la1[267] = jj_gen;
       ;
     }
     }
@@ -11995,7 +11962,7 @@ void VhdlParser::conditional_waveform_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[269] = jj_gen;
+      jj_la1[268] = jj_gen;
       ;
     }
     }
@@ -12030,7 +11997,7 @@ void VhdlParser::else_wave_list() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[270] = jj_gen;
+      jj_la1[269] = jj_gen;
       ;
     }
     }
@@ -12062,7 +12029,7 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[271] = jj_gen;
+      jj_la1[270] = jj_gen;
       ;
     }
     }
@@ -12104,7 +12071,7 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[272] = jj_gen;
+      jj_la1[271] = jj_gen;
       ;
     }
     }
@@ -12132,7 +12099,7 @@ void VhdlParser::selected_signal_assignment_wave() {
         break;
         }
       default:
-        jj_la1[273] = jj_gen;
+        jj_la1[272] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
@@ -12163,7 +12130,7 @@ void VhdlParser::selected_variable_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[274] = jj_gen;
+      jj_la1[273] = jj_gen;
       ;
     }
     }
@@ -12202,7 +12169,7 @@ void VhdlParser::select_name() {
         break;
         }
       default:
-        jj_la1[275] = jj_gen;
+        jj_la1[274] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
@@ -12233,7 +12200,7 @@ void VhdlParser::selected_waveform_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[276] = jj_gen;
+      jj_la1[275] = jj_gen;
       ;
     }
     }
@@ -12258,7 +12225,7 @@ void VhdlParser::selected_waveform_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[277] = jj_gen;
+      jj_la1[276] = jj_gen;
       ;
     }
     }
@@ -12293,7 +12260,7 @@ void VhdlParser::selected_force_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[278] = jj_gen;
+      jj_la1[277] = jj_gen;
       ;
     }
     }
@@ -12321,7 +12288,7 @@ void VhdlParser::selected_force_assignment() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[279] = jj_gen;
+      jj_la1[278] = jj_gen;
       ;
     }
     }
@@ -12364,7 +12331,7 @@ void VhdlParser::sel_var_list() {if (!hasError) {
       break;
       }
     default:
-      jj_la1[280] = jj_gen;
+      jj_la1[279] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -12377,7 +12344,7 @@ void VhdlParser::sel_var_list() {if (!hasError) {
       if (jj_2_114(2147483647)) {
         ;
       } else {
-        goto end_label_56;
+        goto end_label_55;
       }if (!hasError) {
       
       expression();
@@ -12408,14 +12375,14 @@ void VhdlParser::sel_var_list() {if (!hasError) {
         break;
         }
       default:
-        jj_la1[281] = jj_gen;
+        jj_la1[280] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
       }
       
     }
-    end_label_56: ;
+    end_label_55: ;
     }
     
   }
@@ -12442,8 +12409,8 @@ void VhdlParser::sel_wave_list() {if (!hasError) {
         break;
         }
       default:
-        jj_la1[282] = jj_gen;
-        goto end_label_57;
+        jj_la1[281] = jj_gen;
+        goto end_label_56;
       }if (!hasError) {
       
       jj_consume_token(COMMA_T);
@@ -12454,7 +12421,7 @@ void VhdlParser::sel_wave_list() {if (!hasError) {
       }
       
     }
-    end_label_57: ;
+    end_label_56: ;
     }
     if (!hasError) {
     
@@ -12481,7 +12448,7 @@ void VhdlParser::inout_stat() {
       break;
       }
     default:
-      jj_la1[283] = jj_gen;
+      jj_la1[282] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -12513,7 +12480,7 @@ void VhdlParser::else_stat() {if (!hasError) {
         break;
         }
       default:
-        jj_la1[284] = jj_gen;
+        jj_la1[283] = jj_gen;
         ;
       }
       }
@@ -12524,11 +12491,11 @@ void VhdlParser::else_stat() {if (!hasError) {
         break;
         }
       default:
-        jj_la1[285] = jj_gen;
-        goto end_label_58;
+        jj_la1[284] = jj_gen;
+        goto end_label_57;
       }
     }
-    end_label_58: ;
+    end_label_57: ;
     }
     
   }
@@ -12561,7 +12528,7 @@ return s;
       break;
       }
     default:
-      jj_la1[286] = jj_gen;
+      jj_la1[285] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -12609,14 +12576,14 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
         break;
         }
       default:
-        jj_la1[287] = jj_gen;
+        jj_la1[286] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
       break;
       }
     default:
-      jj_la1[288] = jj_gen;
+      jj_la1[287] = jj_gen;
       ;
     }
     }
@@ -12666,7 +12633,7 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
         break;
         }
       default:
-        jj_la1[289] = jj_gen;
+        jj_la1[288] = jj_gen;
         jj_consume_token(-1);
         errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
       }
@@ -12675,23 +12642,23 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
       break;
       }
     default:
-      jj_la1[290] = jj_gen;
+      jj_la1[289] = jj_gen;
       ;
     }
     }
     
 QCString q;
-          if(t) q=t->image.data();
+      if(t) q=t->image.data();
       if(t2) s3="<>";
-          if (!s3.isEmpty())
+      if (!s3.isEmpty())
       {
         s3.prepend(" is ");
       }
      current->name=s;
-        if (parse_sec==GEN_SEC)
+    if (parse_sec==GEN_SEC)
                     {
                       QCString ss=q+" function "+s1+" return "+s2+s3;
-                                          int a=getLine(FUNCTION_T);
+                      int a=getLine(FUNCTION_T);
                       int b=getLine(PROCEDURE_T);
 
                       if (a>b) b=a;
@@ -12713,7 +12680,7 @@ QCString VhdlParser::param() {QCString s,s1;Token *tok=0;if (!hasError) {
       break;
       }
     default:
-      jj_la1[291] = jj_gen;
+      jj_la1[290] = jj_gen;
       ;
     }
     }
@@ -12740,17 +12707,17 @@ param_sec=PARAM_SEC;
       break;
       }
     default:
-      jj_la1[292] = jj_gen;
+      jj_la1[291] = jj_gen;
       ;
     }
     }
     
 if(tok)
-                                         {
-                                          s = tok->image.data();
-                                             param_sec=0;
-                                    }
-                                          return s+"("+s1+")";
+                     {
+                      s = tok->image.data();
+                         param_sec=0;
+                    }
+                      return s+"("+s1+")";
 assert(false);
   }
 
@@ -12778,7 +12745,7 @@ void VhdlParser::parseInline() {
       break;
       }
     default:
-      jj_la1[293] = jj_gen;
+      jj_la1[292] = jj_gen;
       jj_consume_token(-1);
       errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
     }
@@ -12787,26 +12754,16 @@ void VhdlParser::parseInline() {
 
  VhdlParser::VhdlParser(TokenManager *tm){
     head = NULL;
+    errorHandlerCreated = false;
     ReInit(tm);
 }
-   VhdlParser::~VhdlParser()
+VhdlParser::~VhdlParser()
 {
-  if (token_source) delete token_source;
-  if (head) {
-    Token *next, *t = head;
-    while (t) {
-      next = t->next;
-      delete t;
-      t = next;
-    }
-  }
-  if (errorHandlerCreated) {
-    delete errorHandler;
-  }
+  clear();
 }
 
 void VhdlParser::ReInit(TokenManager *tm){
-    if (head) delete head;
+    clear();
     errorHandler = new ErrorHandler();
     errorHandlerCreated = true;
     hasError = false;
@@ -12824,8 +12781,26 @@ void VhdlParser::ReInit(TokenManager *tm){
     trace_enabled = false;
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 294; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 293; i++) jj_la1[i] = -1;
+  }
+
+
+void VhdlParser::clear(){
+  //Since token manager was generate from outside,
+  //parser should not take care of deleting
+  //if (token_source) delete token_source;
+  if (head) {
+    Token *next, *t = head;
+    while (t) {
+      next = t->next;
+      delete t;
+      t = next;
+    }
   }
+  if (errorHandlerCreated) {
+    delete errorHandler;
+  }
+}
 
 
 Token * VhdlParser::jj_consume_token(int kind)  {
@@ -12907,26 +12882,23 @@ int VhdlParser::jj_ntk_f(){
   }
 
 
-void VhdlParser::jj_add_error_token(int kind, int pos)  {
+  void VhdlParser::jj_add_error_token(int kind, int pos)  {
   }
 
-  /** Generate ParseException. */
 
  void  VhdlParser::parseError()   {
-    //  fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
+      fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
    }
 
 
- void VhdlParser::enable_tracing()  {
+  void VhdlParser::enable_tracing()  {
   }
 
-  /** Disable tracing. */
-
- void VhdlParser::disable_tracing()  {
+  void VhdlParser::disable_tracing()  {
   }
 
 
-void VhdlParser::jj_rescan_token(){
+  void VhdlParser::jj_rescan_token(){
     jj_rescan = true;
     for (int i = 0; i < 114; i++) {
       JJCalls *p = &jj_2_rtns[i];
@@ -13057,7 +13029,7 @@ void VhdlParser::jj_rescan_token(){
   }
 
 
-void VhdlParser::jj_save(int index, int xla){
+  void VhdlParser::jj_save(int index, int xla){
     JJCalls *p = &jj_2_rtns[index];
     while (p->gen > jj_gen) {
       if (p->next == NULL) { p = p->next = new JJCalls(); break; }
diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h
index 78450d1..91bf32d 100644
--- a/vhdlparser/VhdlParser.h
+++ b/vhdlparser/VhdlParser.h
@@ -12,12 +12,12 @@
 namespace vhdl {
 namespace parser {
   struct JJCalls {
-    int gen;
-    Token *first;
-    int arg;
-    JJCalls *next;
+    int        gen;
+    int        arg;
+    JJCalls*   next;
+    Token*     first;
     ~JJCalls() { if (next) delete next; }
-    JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; }
+     JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; }
   };
 
 class VhdlParser {
@@ -1490,77 +1490,35 @@ void parseInline();
  { jj_save(113, xla); }
   }
 
- inline bool jj_3R_430()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(INOUT_T)) return true;
-    return false;
-  }
-
- inline bool jj_3R_429()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(OUT_T)) return true;
-    return false;
-  }
-
- inline bool jj_3R_346()
- {
-    if (jj_done) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_428()) {
-    jj_scanpos = xsp;
-    if (jj_3R_429()) {
-    jj_scanpos = xsp;
-    if (jj_3R_430()) {
-    jj_scanpos = xsp;
-    if (jj_3R_431()) {
-    jj_scanpos = xsp;
-    if (jj_3R_432()) return true;
-    }
-    }
-    }
-    }
-    return false;
-  }
-
- inline bool jj_3R_428()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(IN_T)) return true;
-    return false;
-  }
-
- inline bool jj_3R_258()
+ inline bool jj_3R_257()
  {
     if (jj_done) return true;
-    if (jj_3R_367()) return true;
+    if (jj_3R_366()) return true;
     return false;
   }
 
- inline bool jj_3R_257()
+ inline bool jj_3R_256()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_123()
+ inline bool jj_3R_122()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_257()) jj_scanpos = xsp;
+    if (jj_3R_256()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_258()) jj_scanpos = xsp;
+    if (jj_3R_257()) jj_scanpos = xsp;
     if (jj_scan_token(LOOP_T)) return true;
-    if (jj_3R_259()) return true;
+    if (jj_3R_258()) return true;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(LOOP_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_625()) jj_scanpos = xsp;
+    if (jj_3R_628()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -1568,18 +1526,18 @@ void parseInline();
  inline bool jj_3_45()
  {
     if (jj_done) return true;
-    if (jj_3R_97()) return true;
+    if (jj_3R_96()) return true;
     return false;
   }
 
  inline bool jj_3_44()
  {
     if (jj_done) return true;
-    if (jj_3R_96()) return true;
+    if (jj_3R_95()) return true;
     return false;
   }
 
- inline bool jj_3R_233()
+ inline bool jj_3R_232()
  {
     if (jj_done) return true;
     if (jj_scan_token(NULL_T)) return true;
@@ -1589,21 +1547,14 @@ void parseInline();
  inline bool jj_3_43()
  {
     if (jj_done) return true;
-    if (jj_3R_95()) return true;
-    return false;
-  }
-
- inline bool jj_3R_232()
- {
-    if (jj_done) return true;
-    if (jj_3R_356()) return true;
+    if (jj_3R_94()) return true;
     return false;
   }
 
  inline bool jj_3R_231()
  {
     if (jj_done) return true;
-    if (jj_3R_97()) return true;
+    if (jj_3R_355()) return true;
     return false;
   }
 
@@ -1621,20 +1572,27 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_107()
+ inline bool jj_3R_228()
+ {
+    if (jj_done) return true;
+    if (jj_3R_94()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_106()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_228()) {
+    jj_scanpos = xsp;
     if (jj_3R_229()) {
     jj_scanpos = xsp;
     if (jj_3R_230()) {
     jj_scanpos = xsp;
     if (jj_3R_231()) {
     jj_scanpos = xsp;
-    if (jj_3R_232()) {
-    jj_scanpos = xsp;
-    if (jj_3R_233()) return true;
+    if (jj_3R_232()) return true;
     }
     }
     }
@@ -1645,69 +1603,69 @@ void parseInline();
  inline bool jj_3_42()
  {
     if (jj_done) return true;
-    if (jj_3R_94()) return true;
+    if (jj_3R_93()) return true;
     return false;
   }
 
- inline bool jj_3R_140()
+ inline bool jj_3R_139()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_199()
+ inline bool jj_3R_198()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_444()
+ inline bool jj_3R_442()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_408()) return true;
+    if (jj_3R_407()) return true;
     return false;
   }
 
- inline bool jj_3R_367()
+ inline bool jj_3R_366()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_443()) {
+    if (jj_3R_441()) {
     jj_scanpos = xsp;
-    if (jj_3R_444()) return true;
+    if (jj_3R_442()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_443()
+ inline bool jj_3R_441()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHILE_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
- inline bool jj_3R_198()
+ inline bool jj_3R_197()
  {
     if (jj_done) return true;
-    if (jj_3R_346()) return true;
+    if (jj_3R_345()) return true;
     return false;
   }
 
- inline bool jj_3R_400()
+ inline bool jj_3R_399()
  {
     if (jj_done) return true;
     if (jj_scan_token(SEMI_T)) return true;
-    if (jj_3R_399()) return true;
+    if (jj_3R_398()) return true;
     return false;
   }
 
- inline bool jj_3R_196()
+ inline bool jj_3R_195()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -1725,128 +1683,128 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_91()
+ inline bool jj_3R_90()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_196()) jj_scanpos = xsp;
-    if (jj_3R_197()) return true;
+    if (jj_3R_195()) jj_scanpos = xsp;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_198()) jj_scanpos = xsp;
-    if (jj_3R_85()) return true;
+    if (jj_3R_197()) jj_scanpos = xsp;
+    if (jj_3R_84()) return true;
     xsp = jj_scanpos;
     if (jj_scan_token(27)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_199()) jj_scanpos = xsp;
+    if (jj_3R_198()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_313()
+ inline bool jj_3R_312()
  {
     if (jj_done) return true;
-    if (jj_3R_399()) return true;
+    if (jj_3R_398()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_400()) { jj_scanpos = xsp; break; }
+      if (jj_3R_399()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_413()
+ inline bool jj_3R_411()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_92()
+ inline bool jj_3R_91()
  {
     if (jj_done) return true;
     if (jj_scan_token(FILE_T)) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_399()
+ inline bool jj_3R_398()
  {
     if (jj_done) return true;
-    if (jj_3R_491()) return true;
+    if (jj_3R_489()) return true;
     return false;
   }
 
  inline bool jj_3_41()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_92()) return true;
     return false;
   }
 
- inline bool jj_3R_552()
+ inline bool jj_3R_557()
  {
     if (jj_done) return true;
-    if (jj_3R_613()) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_612()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_551()
+ inline bool jj_3R_556()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_92()) return true;
     return false;
   }
 
  inline bool jj_3_40()
  {
     if (jj_done) return true;
-    if (jj_3R_92()) return true;
+    if (jj_3R_91()) return true;
     return false;
   }
 
  inline bool jj_3_39()
  {
     if (jj_done) return true;
-    if (jj_3R_91()) return true;
+    if (jj_3R_90()) return true;
     return false;
   }
 
- inline bool jj_3R_550()
+ inline bool jj_3R_555()
  {
     if (jj_done) return true;
-    if (jj_3R_108()) return true;
+    if (jj_3R_107()) return true;
     return false;
   }
 
  inline bool jj_3_38()
  {
     if (jj_done) return true;
-    if (jj_3R_90()) return true;
+    if (jj_3R_89()) return true;
     return false;
   }
 
- inline bool jj_3R_491()
+ inline bool jj_3R_489()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_38()) {
     jj_scanpos = xsp;
-    if (jj_3R_550()) {
+    if (jj_3R_555()) {
     jj_scanpos = xsp;
     if (jj_3_39()) {
     jj_scanpos = xsp;
     if (jj_3_40()) {
     jj_scanpos = xsp;
-    if (jj_3R_551()) {
+    if (jj_3R_556()) {
     jj_scanpos = xsp;
-    if (jj_3R_552()) return true;
+    if (jj_3R_557()) return true;
     }
     }
     }
@@ -1855,93 +1813,93 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_621()
+ inline bool jj_3R_180()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_scan_token(COMMA_T)) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
- inline bool jj_3R_181()
+ inline bool jj_3R_624()
  {
     if (jj_done) return true;
-    if (jj_scan_token(COMMA_T)) return true;
     if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_416()
+ inline bool jj_3R_414()
  {
     if (jj_done) return true;
     if (jj_scan_token(ALL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_415()
+ inline bool jj_3R_413()
  {
     if (jj_done) return true;
     if (jj_scan_token(OTHER_T)) return true;
     return false;
   }
 
- inline bool jj_3R_331()
+ inline bool jj_3R_330()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_414()) {
+    if (jj_3R_412()) {
     jj_scanpos = xsp;
-    if (jj_3R_415()) {
+    if (jj_3R_413()) {
     jj_scanpos = xsp;
-    if (jj_3R_416()) return true;
+    if (jj_3R_414()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_414()
+ inline bool jj_3R_412()
  {
     if (jj_done) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     return false;
   }
 
- inline bool jj_3R_698()
+ inline bool jj_3R_695()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_328()
+ inline bool jj_3R_327()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONFIGURATION_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_327()
+ inline bool jj_3R_326()
  {
     if (jj_done) return true;
     if (jj_scan_token(ENTITY_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_413()) jj_scanpos = xsp;
+    if (jj_3R_411()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_174()
+ inline bool jj_3R_173()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_326()) {
+    if (jj_3R_325()) {
     jj_scanpos = xsp;
-    if (jj_3R_327()) {
+    if (jj_3R_326()) {
     jj_scanpos = xsp;
-    if (jj_3R_328()) return true;
+    if (jj_3R_327()) return true;
     }
     }
     return false;
@@ -1950,308 +1908,308 @@ void parseInline();
  inline bool jj_3_37()
  {
     if (jj_done) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
- inline bool jj_3R_326()
+ inline bool jj_3R_325()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(28)) jj_scanpos = xsp;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_155()
+ inline bool jj_3R_154()
  {
     if (jj_done) return true;
-    if (jj_3R_158()) return true;
+    if (jj_3R_157()) return true;
     if (jj_scan_token(RANGE_T)) return true;
     if (jj_scan_token(BOX_T)) return true;
     return false;
   }
 
- inline bool jj_3R_427()
+ inline bool jj_3R_425()
  {
     if (jj_done) return true;
     if (jj_scan_token(IS_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_698()) {
+    if (jj_3R_695()) {
     jj_scanpos = xsp;
     if (jj_scan_token(145)) return true;
     }
     return false;
   }
 
- inline bool jj_3R_618()
+ inline bool jj_3R_621()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_617()
+ inline bool jj_3R_620()
  {
     if (jj_done) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
- inline bool jj_3R_565()
+ inline bool jj_3R_564()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_617()) {
+    if (jj_3R_620()) {
     jj_scanpos = xsp;
-    if (jj_3R_618()) return true;
+    if (jj_3R_621()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_83()
+ inline bool jj_3R_82()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_181()) { jj_scanpos = xsp; break; }
+      if (jj_3R_180()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_620()
+ inline bool jj_3R_531()
  {
     if (jj_done) return true;
-    if (jj_scan_token(ELSE_T)) return true;
-    if (jj_3R_259()) return true;
+    if (jj_scan_token(TYPE_T)) return true;
+    if (jj_3R_69()) return true;
+    if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_526()
+ inline bool jj_3R_623()
  {
     if (jj_done) return true;
-    if (jj_scan_token(TYPE_T)) return true;
-    if (jj_3R_70()) return true;
-    if (jj_scan_token(SEMI_T)) return true;
+    if (jj_scan_token(ELSE_T)) return true;
+    if (jj_3R_258()) return true;
     return false;
   }
 
- inline bool jj_3R_619()
+ inline bool jj_3R_622()
  {
     if (jj_done) return true;
     if (jj_scan_token(ELSIF_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     if (jj_scan_token(THEN_T)) return true;
-    if (jj_3R_259()) return true;
+    if (jj_3R_258()) return true;
     return false;
   }
 
- inline bool jj_3R_345()
+ inline bool jj_3R_344()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_514()
+ inline bool jj_3R_519()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_313()) return true;
+    if (jj_3R_312()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_255()
+ inline bool jj_3R_254()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_121()
+ inline bool jj_3R_120()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_255()) jj_scanpos = xsp;
+    if (jj_3R_254()) jj_scanpos = xsp;
     if (jj_scan_token(IF_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     if (jj_scan_token(THEN_T)) return true;
-    if (jj_3R_259()) return true;
+    if (jj_3R_258()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_619()) { jj_scanpos = xsp; break; }
+      if (jj_3R_622()) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_620()) jj_scanpos = xsp;
+    if (jj_3R_623()) jj_scanpos = xsp;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(IF_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_621()) jj_scanpos = xsp;
+    if (jj_3R_624()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_197()
+ inline bool jj_3R_196()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_345()) { jj_scanpos = xsp; break; }
+      if (jj_3R_344()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_165()
+ inline bool jj_3R_164()
  {
     if (jj_done) return true;
     if (jj_scan_token(BASIC_IDENTIFIER)) return true;
     return false;
   }
 
- inline bool jj_3R_164()
+ inline bool jj_3R_163()
  {
     if (jj_done) return true;
     if (jj_scan_token(EXTENDED_CHARACTER)) return true;
     return false;
   }
 
- inline bool jj_3R_70()
+ inline bool jj_3R_69()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_164()) {
+    if (jj_3R_163()) {
     jj_scanpos = xsp;
-    if (jj_3R_165()) return true;
+    if (jj_3R_164()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_539()
+ inline bool jj_3R_544()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_538()) return true;
+    if (jj_3R_543()) return true;
     return false;
   }
 
- inline bool jj_3R_425()
+ inline bool jj_3R_423()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(77)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_514()) jj_scanpos = xsp;
+    if (jj_3R_519()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_114()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(WHEN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_66()
+ inline bool jj_3R_385()
+ {
+    if (jj_done) return true;
+    if (jj_3R_58()) return true;
+    if (jj_scan_token(WHEN_T)) return true;
+    if (jj_3R_85()) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(134)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(137)) return true;
+    }
+    return false;
+  }
+
+ inline bool jj_3R_65()
  {
     if (jj_done) return true;
     if (jj_scan_token(GROUP_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_475()) return true;
+    if (jj_3R_473()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_386()
+ inline bool jj_3R_445()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
-    if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(134)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(137)) return true;
-    }
+    if (jj_3R_528()) return true;
     return false;
   }
 
- inline bool jj_3R_447()
+ inline bool jj_3R_529()
  {
     if (jj_done) return true;
-    if (jj_3R_523()) return true;
+    if (jj_scan_token(COMMA_T)) return true;
+    if (jj_3R_447()) return true;
     return false;
   }
 
- inline bool jj_3R_383()
+ inline bool jj_3R_382()
  {
     if (jj_done) return true;
     if (jj_scan_token(GROUP_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_476()) return true;
+    if (jj_3R_474()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_524()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_449()) return true;
-    return false;
-  }
-
- inline bool jj_3R_540()
+ inline bool jj_3R_545()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_305()
+ inline bool jj_3R_304()
  {
     if (jj_done) return true;
-    if (jj_3R_384()) return true;
+    if (jj_3R_383()) return true;
     return false;
   }
 
- inline bool jj_3R_476()
+ inline bool jj_3R_474()
  {
     if (jj_done) return true;
-    if (jj_3R_538()) return true;
+    if (jj_3R_543()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_539()) { jj_scanpos = xsp; break; }
+      if (jj_3R_544()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_426()
+ inline bool jj_3R_424()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -2263,179 +2221,179 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_344()
+ inline bool jj_3R_343()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_426()) jj_scanpos = xsp;
+    if (jj_3R_424()) jj_scanpos = xsp;
     if (jj_scan_token(FUNCTION_T)) return true;
-    if (jj_3R_60()) return true;
-    if (jj_3R_425()) return true;
+    if (jj_3R_59()) return true;
+    if (jj_3R_423()) return true;
     if (jj_scan_token(RETURN_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_427()) jj_scanpos = xsp;
-    return false;
-  }
-
- inline bool jj_3R_171()
- {
-    if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_425()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_608()
+ inline bool jj_3R_607()
  {
     if (jj_done) return true;
-    if (jj_3R_352()) return true;
+    if (jj_3R_351()) return true;
     return false;
   }
 
- inline bool jj_3R_607()
+ inline bool jj_3R_606()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_538()
+ inline bool jj_3R_543()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_607()) {
+    if (jj_3R_606()) {
     jj_scanpos = xsp;
-    if (jj_3R_608()) return true;
+    if (jj_3R_607()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_71()
+ inline bool jj_3R_70()
  {
     if (jj_done) return true;
     if (jj_scan_token(GENERIC_T)) return true;
     if (jj_scan_token(MAP_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_166()) return true;
+    if (jj_3R_165()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_304()
+ inline bool jj_3R_303()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
-    if (jj_3R_385()) return true;
+    if (jj_3R_58()) return true;
+    if (jj_3R_384()) return true;
     return false;
   }
 
- inline bool jj_3R_343()
+ inline bool jj_3R_342()
  {
     if (jj_done) return true;
     if (jj_scan_token(PROCEDURE_T)) return true;
-    if (jj_3R_70()) return true;
-    if (jj_3R_425()) return true;
+    if (jj_3R_69()) return true;
+    if (jj_3R_423()) return true;
     return false;
   }
 
- inline bool jj_3R_195()
+ inline bool jj_3R_170()
  {
     if (jj_done) return true;
-    if (jj_3R_344()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_159()
+ inline bool jj_3R_194()
  {
     if (jj_done) return true;
-    if (jj_3R_313()) return true;
+    if (jj_3R_343()) return true;
     return false;
   }
 
- inline bool jj_3R_194()
+ inline bool jj_3R_193()
  {
     if (jj_done) return true;
-    if (jj_3R_343()) return true;
+    if (jj_3R_342()) return true;
     return false;
   }
 
- inline bool jj_3R_90()
+ inline bool jj_3R_89()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_194()) {
+    if (jj_3R_193()) {
     jj_scanpos = xsp;
-    if (jj_3R_195()) return true;
+    if (jj_3R_194()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_67()
+ inline bool jj_3R_158()
  {
     if (jj_done) return true;
-    if (jj_scan_token(GENERIC_T)) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_159()) return true;
-    if (jj_scan_token(RPAREN_T)) return true;
-    if (jj_scan_token(SEMI_T)) return true;
+    if (jj_3R_312()) return true;
     return false;
   }
 
- inline bool jj_3R_477()
+ inline bool jj_3R_475()
  {
     if (jj_done) return true;
     if (jj_scan_token(ELSE_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_540()) jj_scanpos = xsp;
+    if (jj_3R_545()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_385()
+ inline bool jj_3R_66()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(GENERIC_T)) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_158()) return true;
+    if (jj_scan_token(RPAREN_T)) return true;
+    if (jj_scan_token(SEMI_T)) return true;
+    return false;
+  }
+
+ inline bool jj_3R_384()
  {
     if (jj_done) return true;
     Token * xsp;
-    if (jj_3R_477()) return true;
+    if (jj_3R_475()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_477()) { jj_scanpos = xsp; break; }
+      if (jj_3R_475()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_322()
+ inline bool jj_3R_321()
  {
     if (jj_done) return true;
     if (jj_scan_token(IF_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
- inline bool jj_3R_169()
+ inline bool jj_3R_168()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_321()) {
+    if (jj_3R_320()) {
     jj_scanpos = xsp;
-    if (jj_3R_322()) return true;
+    if (jj_3R_321()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_321()
+ inline bool jj_3R_320()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_408()) return true;
+    if (jj_3R_407()) return true;
     return false;
   }
 
- inline bool jj_3R_384()
+ inline bool jj_3R_383()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -2447,58 +2405,58 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_448()
+ inline bool jj_3R_446()
  {
     if (jj_done) return true;
-    if (jj_3R_405()) return true;
+    if (jj_3R_404()) return true;
     return false;
   }
 
- inline bool jj_3R_449()
+ inline bool jj_3R_447()
  {
     if (jj_done) return true;
-    if (jj_3R_446()) return true;
+    if (jj_3R_444()) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_524()) { jj_scanpos = xsp; break; }
+      if (jj_3R_529()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_464()
+ inline bool jj_3R_462()
  {
     if (jj_done) return true;
-    if (jj_3R_528()) return true;
+    if (jj_3R_533()) return true;
     return false;
   }
 
- inline bool jj_3R_75()
+ inline bool jj_3R_74()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_169()) return true;
+    if (jj_3R_168()) return true;
     if (jj_scan_token(GENERATE_T)) return true;
-    if (jj_3R_170()) return true;
+    if (jj_3R_169()) return true;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(GENERATE_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_171()) jj_scanpos = xsp;
+    if (jj_3R_170()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_306()
+ inline bool jj_3R_305()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(134)) {
@@ -2507,125 +2465,125 @@ void parseInline();
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_386()) { jj_scanpos = xsp; break; }
+      if (jj_3R_385()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_105()
+ inline bool jj_3R_302()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_226()) return true;
-    if (jj_scan_token(RPAREN_T)) return true;
+    if (jj_3R_383()) return true;
     return false;
   }
 
- inline bool jj_3R_303()
+ inline bool jj_3R_104()
  {
     if (jj_done) return true;
-    if (jj_3R_384()) return true;
+    if (jj_3R_59()) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_225()) return true;
+    if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
  inline bool jj_3_110()
  {
     if (jj_done) return true;
-    if (jj_3R_143()) return true;
+    if (jj_3R_142()) return true;
     if (jj_scan_token(DOT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_145()
+ inline bool jj_3R_144()
  {
     if (jj_done) return true;
     if (jj_scan_token(WITH_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SELECT_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(155)) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     if (jj_scan_token(FORCE_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_305()) jj_scanpos = xsp;
-    if (jj_3R_306()) return true;
+    if (jj_3R_304()) jj_scanpos = xsp;
+    if (jj_3R_305()) return true;
     return false;
   }
 
- inline bool jj_3R_157()
+ inline bool jj_3_113()
  {
     if (jj_done) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_312()) return true;
-    if (jj_scan_token(RPAREN_T)) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
- inline bool jj_3_113()
+ inline bool jj_3R_156()
  {
     if (jj_done) return true;
-    if (jj_3R_109()) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_311()) return true;
+    if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_369()
+ inline bool jj_3R_368()
  {
     if (jj_done) return true;
     if (jj_scan_token(WITH_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SELECT_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(155)) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_448()) jj_scanpos = xsp;
-    if (jj_3R_449()) return true;
+    if (jj_3R_446()) jj_scanpos = xsp;
+    if (jj_3R_447()) return true;
     return false;
   }
 
- inline bool jj_3R_301()
+ inline bool jj_3R_300()
  {
     if (jj_done) return true;
-    if (jj_3R_143()) return true;
+    if (jj_3R_142()) return true;
     if (jj_scan_token(DOT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_689()
+ inline bool jj_3R_686()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_137()
+ inline bool jj_3R_136()
  {
     if (jj_done) return true;
     if (jj_scan_token(TYPE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_577()) return true;
+    if (jj_3R_576()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_575()
+ inline bool jj_3R_574()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_688()
+ inline bool jj_3R_685()
  {
     if (jj_done) return true;
-    if (jj_3R_109()) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
@@ -2634,258 +2592,265 @@ void parseInline();
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_688()) {
+    if (jj_3R_685()) {
     jj_scanpos = xsp;
-    if (jj_3R_689()) return true;
+    if (jj_3R_686()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_64()
+ inline bool jj_3R_63()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_157()) jj_scanpos = xsp;
+    if (jj_3R_156()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_398()
+ inline bool jj_3_112()
  {
     if (jj_done) return true;
-    if (jj_scan_token(INTEGER)) return true;
+    if (jj_3R_144()) return true;
     return false;
   }
 
- inline bool jj_3_112()
+ inline bool jj_3R_526()
  {
     if (jj_done) return true;
-    if (jj_3R_145()) return true;
+    if (jj_scan_token(WITH_T)) return true;
+    if (jj_3R_58()) return true;
+    if (jj_scan_token(SELECT_T)) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(155)) jj_scanpos = xsp;
+    if (jj_3R_662()) return true;
+    if (jj_scan_token(VARASSIGN_T)) return true;
+    if (jj_3R_305()) return true;
     return false;
   }
 
- inline bool jj_3R_570()
+ inline bool jj_3R_443()
  {
     if (jj_done) return true;
-    if (jj_3R_313()) return true;
+    if (jj_3R_404()) return true;
     return false;
   }
 
- inline bool jj_3R_521()
+ inline bool jj_3R_569()
  {
     if (jj_done) return true;
-    if (jj_scan_token(WITH_T)) return true;
-    if (jj_3R_59()) return true;
-    if (jj_scan_token(SELECT_T)) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(155)) jj_scanpos = xsp;
-    if (jj_3R_662()) return true;
-    if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_306()) return true;
+    if (jj_3R_312()) return true;
     return false;
   }
 
- inline bool jj_3R_445()
+ inline bool jj_3R_397()
  {
     if (jj_done) return true;
-    if (jj_3R_405()) return true;
+    if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
- inline bool jj_3R_312()
+ inline bool jj_3R_311()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_397()) {
+    if (jj_3R_396()) {
     jj_scanpos = xsp;
-    if (jj_3R_398()) return true;
+    if (jj_3R_397()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_397()
+ inline bool jj_3R_396()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_271()
+ inline bool jj_3R_270()
  {
     if (jj_done) return true;
-    if (jj_3R_369()) return true;
+    if (jj_3R_368()) return true;
     return false;
   }
 
- inline bool jj_3R_128()
+ inline bool jj_3R_127()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_270()) {
+    if (jj_3R_269()) {
     jj_scanpos = xsp;
-    if (jj_3R_271()) return true;
+    if (jj_3R_270()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_270()
+ inline bool jj_3R_269()
  {
     if (jj_done) return true;
-    if (jj_3R_145()) return true;
+    if (jj_3R_144()) return true;
     return false;
   }
 
- inline bool jj_3R_144()
+ inline bool jj_3R_143()
  {
     if (jj_done) return true;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     if (jj_scan_token(FORCE_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_303()) jj_scanpos = xsp;
-    if (jj_3R_59()) return true;
+    if (jj_3R_302()) jj_scanpos = xsp;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(WHEN_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_304()) jj_scanpos = xsp;
+    if (jj_3R_303()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_654()
+ inline bool jj_3R_656()
  {
     if (jj_done) return true;
     if (jj_scan_token(FILE_T)) return true;
     if (jj_scan_token(OF_T)) return true;
-    if (jj_3R_158()) return true;
+    if (jj_3R_157()) return true;
     return false;
   }
 
- inline bool jj_3R_523()
+ inline bool jj_3R_528()
  {
     if (jj_done) return true;
     if (jj_scan_token(ELSE_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_575()) jj_scanpos = xsp;
+    if (jj_3R_574()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_111()
  {
     if (jj_done) return true;
-    if (jj_3R_144()) return true;
+    if (jj_3R_143()) return true;
     return false;
   }
 
- inline bool jj_3R_580()
+ inline bool jj_3R_323()
+ {
+    if (jj_done) return true;
+    if (jj_3R_409()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_579()
  {
     if (jj_done) return true;
     if (jj_scan_token(OPEN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_528()
+ inline bool jj_3R_533()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_580()) jj_scanpos = xsp;
+    if (jj_3R_579()) jj_scanpos = xsp;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_581()) return true;
+    if (jj_3R_580()) return true;
     return false;
   }
 
- inline bool jj_3R_368()
+ inline bool jj_3R_367()
  {
     if (jj_done) return true;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_445()) jj_scanpos = xsp;
-    if (jj_3R_446()) return true;
+    if (jj_3R_443()) jj_scanpos = xsp;
+    if (jj_3R_444()) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_447()) jj_scanpos = xsp;
+    if (jj_3R_445()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_269()
+ inline bool jj_3R_268()
  {
     if (jj_done) return true;
-    if (jj_3R_368()) return true;
+    if (jj_3R_367()) return true;
     return false;
   }
 
- inline bool jj_3R_581()
+ inline bool jj_3R_580()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_127()
+ inline bool jj_3R_126()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_268()) {
+    if (jj_3R_267()) {
     jj_scanpos = xsp;
-    if (jj_3R_269()) return true;
+    if (jj_3R_268()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_268()
+ inline bool jj_3R_267()
  {
     if (jj_done) return true;
-    if (jj_3R_144()) return true;
+    if (jj_3R_143()) return true;
     return false;
   }
 
- inline bool jj_3R_450()
+ inline bool jj_3R_448()
  {
     if (jj_done) return true;
     if (jj_scan_token(DOUBLEMULT_T)) return true;
-    if (jj_3R_370()) return true;
+    if (jj_3R_369()) return true;
     return false;
   }
 
- inline bool jj_3R_142()
+ inline bool jj_3R_141()
  {
     if (jj_done) return true;
-    if (jj_3R_143()) return true;
+    if (jj_3R_142()) return true;
     if (jj_scan_token(DOT_T)) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_301()) { jj_scanpos = xsp; break; }
+      if (jj_3R_300()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_549()
+ inline bool jj_3R_554()
  {
     if (jj_done) return true;
     if (jj_scan_token(AT_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_302()
+ inline bool jj_3R_301()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
@@ -2893,134 +2858,127 @@ void parseInline();
  inline bool jj_3_109()
  {
     if (jj_done) return true;
-    if (jj_3R_142()) return true;
+    if (jj_3R_141()) return true;
     return false;
   }
 
- inline bool jj_3R_376()
+ inline bool jj_3R_375()
  {
     if (jj_done) return true;
     if (jj_scan_token(FILE_T)) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_464()) jj_scanpos = xsp;
+    if (jj_3R_462()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_264()
+ inline bool jj_3R_263()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_284()
+ inline bool jj_3R_283()
  {
     if (jj_done) return true;
     if (jj_scan_token(NOT_T)) return true;
-    if (jj_3R_370()) return true;
+    if (jj_3R_369()) return true;
     return false;
   }
 
- inline bool jj_3R_283()
+ inline bool jj_3R_282()
  {
     if (jj_done) return true;
     if (jj_scan_token(ABS_T)) return true;
-    if (jj_3R_370()) return true;
+    if (jj_3R_369()) return true;
     return false;
   }
 
- inline bool jj_3R_136()
+ inline bool jj_3R_135()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_282()) {
+    if (jj_3R_281()) {
     jj_scanpos = xsp;
-    if (jj_3R_283()) {
+    if (jj_3R_282()) {
     jj_scanpos = xsp;
-    if (jj_3R_284()) return true;
+    if (jj_3R_283()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_282()
+ inline bool jj_3R_281()
  {
     if (jj_done) return true;
-    if (jj_3R_370()) return true;
+    if (jj_3R_369()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_450()) jj_scanpos = xsp;
+    if (jj_3R_448()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_612()
+ inline bool jj_3R_611()
  {
     if (jj_done) return true;
-    if (jj_3R_142()) return true;
+    if (jj_3R_141()) return true;
     return false;
   }
 
- inline bool jj_3R_699()
+ inline bool jj_3R_696()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_97()) return true;
-    return false;
-  }
-
- inline bool jj_3R_147()
- {
-    if (jj_done) return true;
-    if (jj_3R_309()) return true;
-    if (jj_3R_146()) return true;
+    if (jj_3R_96()) return true;
     return false;
   }
 
- inline bool jj_3R_143()
+ inline bool jj_3R_142()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_302()) jj_scanpos = xsp;
+    if (jj_3R_301()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_394()
+ inline bool jj_3R_146()
  {
     if (jj_done) return true;
-    if (jj_scan_token(OR_T)) return true;
+    if (jj_3R_308()) return true;
+    if (jj_3R_145()) return true;
     return false;
   }
 
  inline bool jj_3R_393()
  {
     if (jj_done) return true;
-    if (jj_scan_token(XOR_T)) return true;
+    if (jj_scan_token(OR_T)) return true;
     return false;
   }
 
  inline bool jj_3R_392()
  {
     if (jj_done) return true;
-    if (jj_scan_token(XNOR_T)) return true;
+    if (jj_scan_token(XOR_T)) return true;
     return false;
   }
 
  inline bool jj_3R_391()
  {
     if (jj_done) return true;
-    if (jj_scan_token(NOR_T)) return true;
+    if (jj_scan_token(XNOR_T)) return true;
     return false;
   }
 
- inline bool jj_3R_636()
+ inline bool jj_3R_639()
  {
     if (jj_done) return true;
     if (jj_scan_token(NEG_T)) return true;
@@ -3031,34 +2989,36 @@ void parseInline();
  inline bool jj_3R_390()
  {
     if (jj_done) return true;
-    if (jj_scan_token(NAND_T)) return true;
+    if (jj_scan_token(NOR_T)) return true;
     return false;
   }
 
- inline bool jj_3R_611()
+ inline bool jj_3R_610()
  {
     if (jj_done) return true;
     Token * xsp;
-    if (jj_3R_636()) return true;
+    if (jj_3R_639()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_636()) { jj_scanpos = xsp; break; }
+      if (jj_3R_639()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_410()
+ inline bool jj_3R_389()
  {
     if (jj_done) return true;
-    if (jj_3R_498()) return true;
+    if (jj_scan_token(NAND_T)) return true;
     return false;
   }
 
- inline bool jj_3R_309()
+ inline bool jj_3R_308()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_388()) {
+    jj_scanpos = xsp;
     if (jj_3R_389()) {
     jj_scanpos = xsp;
     if (jj_3R_390()) {
@@ -3067,9 +3027,7 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3R_392()) {
     jj_scanpos = xsp;
-    if (jj_3R_393()) {
-    jj_scanpos = xsp;
-    if (jj_3R_394()) return true;
+    if (jj_3R_393()) return true;
     }
     }
     }
@@ -3078,7 +3036,7 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_389()
+ inline bool jj_3R_388()
  {
     if (jj_done) return true;
     if (jj_scan_token(AND_T)) return true;
@@ -3089,314 +3047,292 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_142()) return true;
+    if (jj_3R_141()) return true;
     return false;
   }
 
- inline bool jj_3R_548()
+ inline bool jj_3R_553()
  {
     if (jj_done) return true;
-    if (jj_3R_611()) return true;
+    if (jj_3R_610()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_612()) jj_scanpos = xsp;
-    if (jj_3R_70()) return true;
+    if (jj_3R_611()) jj_scanpos = xsp;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_610()
+ inline bool jj_3R_609()
  {
     if (jj_done) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_59()
+ inline bool jj_3R_58()
  {
     if (jj_done) return true;
-    if (jj_3R_146()) return true;
+    if (jj_3R_145()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_147()) { jj_scanpos = xsp; break; }
+      if (jj_3R_146()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_609()
+ inline bool jj_3R_608()
  {
     if (jj_done) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_142()) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_141()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_547()
+ inline bool jj_3R_552()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_609()) {
+    if (jj_3R_608()) {
     jj_scanpos = xsp;
-    if (jj_3R_610()) return true;
+    if (jj_3R_609()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_490()
+ inline bool jj_3R_488()
  {
     if (jj_done) return true;
-    if (jj_3R_549()) return true;
+    if (jj_3R_554()) return true;
     return false;
   }
 
- inline bool jj_3R_489()
+ inline bool jj_3R_487()
  {
     if (jj_done) return true;
-    if (jj_3R_548()) return true;
+    if (jj_3R_553()) return true;
     return false;
   }
 
- inline bool jj_3R_396()
+ inline bool jj_3R_395()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_488()) {
+    if (jj_3R_486()) {
     jj_scanpos = xsp;
-    if (jj_3R_489()) {
+    if (jj_3R_487()) {
     jj_scanpos = xsp;
-    if (jj_3R_490()) return true;
+    if (jj_3R_488()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_488()
+ inline bool jj_3R_486()
  {
     if (jj_done) return true;
-    if (jj_3R_547()) return true;
+    if (jj_3R_552()) return true;
     return false;
   }
 
  inline bool jj_3_105()
  {
     if (jj_done) return true;
-    if (jj_3R_139()) return true;
+    if (jj_3R_138()) return true;
     return false;
   }
 
- inline bool jj_3R_265()
+ inline bool jj_3R_264()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
- inline bool jj_3R_263()
+ inline bool jj_3R_262()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_487()
+ inline bool jj_3R_485()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARIABLE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_125()
+ inline bool jj_3R_484()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(SIGNAL_T)) return true;
+    return false;
+  }
+
+ inline bool jj_3R_124()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_263()) jj_scanpos = xsp;
+    if (jj_3R_262()) jj_scanpos = xsp;
     if (jj_scan_token(EXIT_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_264()) jj_scanpos = xsp;
+    if (jj_3R_263()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_265()) jj_scanpos = xsp;
+    if (jj_3R_264()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_486()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(SIGNAL_T)) return true;
-    return false;
-  }
-
- inline bool jj_3R_395()
+ inline bool jj_3R_394()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_485()) {
+    if (jj_3R_483()) {
     jj_scanpos = xsp;
-    if (jj_3R_486()) {
+    if (jj_3R_484()) {
     jj_scanpos = xsp;
-    if (jj_3R_487()) return true;
+    if (jj_3R_485()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_485()
+ inline bool jj_3R_483()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONSTANT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_690()
+ inline bool jj_3R_687()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_97()) return true;
+    if (jj_3R_96()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_699()) { jj_scanpos = xsp; break; }
+      if (jj_3R_696()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_275()
+ inline bool jj_3_107()
  {
     if (jj_done) return true;
-    if (jj_3R_133()) return true;
+    if (jj_3R_140()) return true;
     return false;
   }
 
- inline bool jj_3R_209()
+ inline bool jj_3R_274()
  {
     if (jj_done) return true;
-    if (jj_3R_352()) return true;
+    if (jj_3R_132()) return true;
     return false;
   }
 
- inline bool jj_3_107()
+ inline bool jj_3R_208()
  {
     if (jj_done) return true;
-    if (jj_3R_141()) return true;
-    if (jj_scan_token(BEGIN_T)) return true;
+    if (jj_3R_351()) return true;
     return false;
   }
 
- inline bool jj_3R_208()
+ inline bool jj_3R_207()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_97()
+ inline bool jj_3R_96()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_208()) {
+    if (jj_3R_207()) {
     jj_scanpos = xsp;
-    if (jj_3R_209()) return true;
+    if (jj_3R_208()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_311()
+ inline bool jj_3R_310()
  {
     if (jj_done) return true;
     if (jj_scan_token(SLSL_T)) return true;
+    if (jj_3R_394()) return true;
     if (jj_3R_395()) return true;
-    if (jj_3R_396()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     if (jj_scan_token(RSRS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_411()
+ inline bool jj_3R_694()
  {
     if (jj_done) return true;
-    if (jj_3R_498()) return true;
+    if (jj_3R_351()) return true;
     return false;
   }
 
- inline bool jj_3R_697()
+ inline bool jj_3R_408()
  {
     if (jj_done) return true;
-    if (jj_3R_352()) return true;
+    if (jj_3R_140()) return true;
     return false;
   }
 
- inline bool jj_3R_324()
+ inline bool jj_3R_322()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_411()) { jj_scanpos = xsp; break; }
+      if (jj_3R_408()) { jj_scanpos = xsp; break; }
     }
+    if (jj_scan_token(BEGIN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_409()
- {
-    if (jj_done) return true;
-    if (jj_3R_141()) return true;
-    return false;
-  }
-
- inline bool jj_3R_696()
- {
-    if (jj_done) return true;
-    if (jj_3R_60()) return true;
-    return false;
-  }
-
- inline bool jj_3R_683()
+ inline bool jj_3R_169()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_696()) {
-    jj_scanpos = xsp;
-    if (jj_3R_697()) return true;
+    if (jj_3R_322()) jj_scanpos = xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_323()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_170()
+ inline bool jj_3R_693()
  {
     if (jj_done) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_323()) {
-    jj_scanpos = xsp;
-    if (jj_3R_324()) return true;
-    }
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_323()
+ inline bool jj_3R_683()
  {
     if (jj_done) return true;
     Token * xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_409()) { jj_scanpos = xsp; break; }
-    }
-    if (jj_scan_token(BEGIN_T)) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_410()) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_693()) {
+    jj_scanpos = xsp;
+    if (jj_3R_694()) return true;
     }
     return false;
   }
@@ -3404,165 +3340,165 @@ void parseInline();
  inline bool jj_3_36()
  {
     if (jj_done) return true;
-    if (jj_3R_89()) return true;
+    if (jj_3R_88()) return true;
     return false;
   }
 
- inline bool jj_3R_285()
+ inline bool jj_3R_284()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_687()
+ inline bool jj_3R_661()
  {
     if (jj_done) return true;
     if (jj_scan_token(BEGIN_T)) return true;
-    if (jj_3R_687()) return true;
+    if (jj_3R_661()) return true;
     return false;
   }
 
  inline bool jj_3_35()
  {
     if (jj_done) return true;
-    if (jj_3R_88()) return true;
+    if (jj_3R_87()) return true;
     return false;
   }
 
- inline bool jj_3R_235()
+ inline bool jj_3R_234()
  {
     if (jj_done) return true;
-    if (jj_3R_133()) return true;
+    if (jj_3R_132()) return true;
     return false;
   }
 
  inline bool jj_3_106()
  {
     if (jj_done) return true;
-    if (jj_3R_140()) return true;
+    if (jj_3R_139()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_139()
+ inline bool jj_3R_138()
  {
     if (jj_done) return true;
     if (jj_scan_token(END_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_285()) jj_scanpos = xsp;
+    if (jj_3R_284()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_637()
+ inline bool jj_3R_640()
  {
     if (jj_done) return true;
-    if (jj_3R_133()) return true;
+    if (jj_3R_132()) return true;
     return false;
   }
 
- inline bool jj_3R_661()
+ inline bool jj_3R_651()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_106()) jj_scanpos = xsp;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     if (jj_scan_token(ARROW_T)) return true;
-    if (jj_3R_687()) return true;
+    if (jj_3R_661()) return true;
     return false;
   }
 
- inline bool jj_3R_649()
+ inline bool jj_3R_618()
  {
     if (jj_done) return true;
     Token * xsp;
-    if (jj_3R_661()) return true;
+    if (jj_3R_651()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_661()) { jj_scanpos = xsp; break; }
+      if (jj_3R_651()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_471()
+ inline bool jj_3R_469()
  {
     if (jj_done) return true;
-    if (jj_3R_533()) return true;
+    if (jj_3R_538()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_534()) return true;
+    if (jj_3R_539()) return true;
     return false;
   }
 
  inline bool jj_3R_684()
  {
     if (jj_done) return true;
-    if (jj_3R_234()) return true;
+    if (jj_3R_233()) return true;
     return false;
   }
 
- inline bool jj_3R_585()
+ inline bool jj_3R_584()
  {
     if (jj_done) return true;
     if (jj_scan_token(ALL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_584()
+ inline bool jj_3R_583()
  {
     if (jj_done) return true;
     if (jj_scan_token(OTHER_T)) return true;
     return false;
   }
 
- inline bool jj_3R_615()
+ inline bool jj_3R_560()
  {
     if (jj_done) return true;
     if (jj_scan_token(CASE_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(GENERATE_T)) return true;
-    if (jj_3R_649()) return true;
+    if (jj_3R_618()) return true;
     return false;
   }
 
- inline bool jj_3R_634()
+ inline bool jj_3R_637()
  {
     if (jj_done) return true;
-    if (jj_3R_656()) return true;
+    if (jj_3R_658()) return true;
     return false;
   }
 
- inline bool jj_3R_583()
+ inline bool jj_3R_582()
  {
     if (jj_done) return true;
     Token * xsp;
-    if (jj_3R_634()) return true;
+    if (jj_3R_637()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_634()) { jj_scanpos = xsp; break; }
+      if (jj_3R_637()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_533()
+ inline bool jj_3R_538()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_583()) {
+    if (jj_3R_582()) {
     jj_scanpos = xsp;
-    if (jj_3R_584()) {
+    if (jj_3R_583()) {
     jj_scanpos = xsp;
-    if (jj_3R_585()) return true;
+    if (jj_3R_584()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_656()
+ inline bool jj_3R_658()
  {
     if (jj_done) return true;
     if (jj_3R_683()) return true;
@@ -3572,23 +3508,23 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_132()
+ inline bool jj_3R_131()
  {
     if (jj_done) return true;
     if (jj_scan_token(GENERIC_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_313()) return true;
+    if (jj_3R_312()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_133()
+ inline bool jj_3R_132()
  {
     if (jj_done) return true;
     if (jj_scan_token(GENERIC_T)) return true;
     if (jj_scan_token(MAP_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_166()) return true;
+    if (jj_3R_165()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
@@ -3596,154 +3532,154 @@ void parseInline();
  inline bool jj_3_32()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3_34()
  {
     if (jj_done) return true;
-    if (jj_3R_87()) return true;
+    if (jj_3R_86()) return true;
     return false;
   }
 
  inline bool jj_3_33()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3R_537()
+ inline bool jj_3R_542()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_536()) return true;
+    if (jj_3R_541()) return true;
     return false;
   }
 
- inline bool jj_3R_131()
+ inline bool jj_3R_130()
  {
     if (jj_done) return true;
     if (jj_scan_token(FUNCTION_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
     if (jj_scan_token(NEW_T)) return true;
-    if (jj_3R_60()) return true;
-    if (jj_3R_234()) return true;
+    if (jj_3R_59()) return true;
+    if (jj_3R_233()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_275()) jj_scanpos = xsp;
+    if (jj_3R_274()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_108()
+ inline bool jj_3R_107()
  {
     if (jj_done) return true;
     if (jj_scan_token(PACKAGE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
     if (jj_scan_token(NEW_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_637()) jj_scanpos = xsp;
+    if (jj_3R_640()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_87()
+ inline bool jj_3R_86()
  {
     if (jj_done) return true;
     if (jj_scan_token(PACKAGE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
     if (jj_scan_token(NEW_T)) return true;
-    if (jj_3R_60()) return true;
-    if (jj_3R_234()) return true;
+    if (jj_3R_59()) return true;
+    if (jj_3R_233()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_235()) jj_scanpos = xsp;
+    if (jj_3R_234()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_606()
+ inline bool jj_3R_605()
  {
     if (jj_done) return true;
     if (jj_scan_token(BOX_T)) return true;
     return false;
   }
 
- inline bool jj_3R_349()
+ inline bool jj_3R_348()
  {
     if (jj_done) return true;
     if (jj_scan_token(ENTITY_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
  inline bool jj_3R_682()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_475()
+ inline bool jj_3R_473()
  {
     if (jj_done) return true;
-    if (jj_3R_536()) return true;
+    if (jj_3R_541()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_537()) { jj_scanpos = xsp; break; }
+      if (jj_3R_542()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_254()
+ inline bool jj_3R_253()
  {
     if (jj_done) return true;
-    if (jj_3R_366()) return true;
+    if (jj_3R_365()) return true;
     return false;
   }
 
- inline bool jj_3R_536()
+ inline bool jj_3R_541()
  {
     if (jj_done) return true;
-    if (jj_3R_534()) return true;
+    if (jj_3R_539()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_606()) jj_scanpos = xsp;
+    if (jj_3R_605()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_616()
+ inline bool jj_3R_619()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_602()
+ inline bool jj_3R_601()
  {
     if (jj_done) return true;
     if (jj_scan_token(FILE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_695()
+ inline bool jj_3R_692()
  {
     if (jj_done) return true;
-    if (jj_3R_705()) return true;
+    if (jj_3R_702()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_601()
+ inline bool jj_3R_600()
  {
     if (jj_done) return true;
     if (jj_scan_token(GROUP_T)) return true;
@@ -3756,164 +3692,166 @@ void parseInline();
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_695()) { jj_scanpos = xsp; break; }
+      if (jj_3R_692()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_600()
+ inline bool jj_3R_599()
  {
     if (jj_done) return true;
     if (jj_scan_token(UNITS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_599()
+ inline bool jj_3R_598()
  {
     if (jj_done) return true;
     if (jj_scan_token(LITERAL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_598()
+ inline bool jj_3R_597()
  {
     if (jj_done) return true;
     if (jj_scan_token(LABEL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_722()
+ inline bool jj_3R_719()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_597()
+ inline bool jj_3R_596()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMPONENT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_721()
+ inline bool jj_3R_718()
  {
     if (jj_done) return true;
-    if (jj_3R_379()) return true;
+    if (jj_3R_378()) return true;
     return false;
   }
 
- inline bool jj_3R_596()
+ inline bool jj_3R_595()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARIABLE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_595()
+ inline bool jj_3R_594()
  {
     if (jj_done) return true;
     if (jj_scan_token(SIGNAL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_594()
+ inline bool jj_3R_593()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONSTANT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_720()
+ inline bool jj_3R_717()
  {
     if (jj_done) return true;
-    if (jj_3R_347()) return true;
+    if (jj_3R_346()) return true;
     return false;
   }
 
- inline bool jj_3R_705()
+ inline bool jj_3R_702()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_720()) {
+    if (jj_3R_717()) {
     jj_scanpos = xsp;
-    if (jj_3R_721()) {
+    if (jj_3R_718()) {
     jj_scanpos = xsp;
-    if (jj_3R_722()) return true;
+    if (jj_3R_719()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_593()
+ inline bool jj_3R_592()
  {
     if (jj_done) return true;
     if (jj_scan_token(SUBTYPE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_592()
+ inline bool jj_3R_591()
  {
     if (jj_done) return true;
     if (jj_scan_token(TYPE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_591()
+ inline bool jj_3R_590()
  {
     if (jj_done) return true;
     if (jj_scan_token(PACKAGE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_590()
+ inline bool jj_3R_589()
  {
     if (jj_done) return true;
     if (jj_scan_token(FUNCTION_T)) return true;
     return false;
   }
 
- inline bool jj_3R_589()
+ inline bool jj_3R_588()
  {
     if (jj_done) return true;
     if (jj_scan_token(PROCEDURE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_680()
+ inline bool jj_3R_587()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_scan_token(CONFIGURATION_T)) return true;
     return false;
   }
 
- inline bool jj_3R_588()
+ inline bool jj_3R_586()
  {
     if (jj_done) return true;
-    if (jj_scan_token(CONFIGURATION_T)) return true;
+    if (jj_scan_token(ARCHITECTURE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_587()
+ inline bool jj_3R_680()
  {
     if (jj_done) return true;
-    if (jj_scan_token(ARCHITECTURE_T)) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_586()
+ inline bool jj_3R_585()
  {
     if (jj_done) return true;
     if (jj_scan_token(ENTITY_T)) return true;
     return false;
   }
 
- inline bool jj_3R_534()
+ inline bool jj_3R_539()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_585()) {
+    jj_scanpos = xsp;
     if (jj_3R_586()) {
     jj_scanpos = xsp;
     if (jj_3R_587()) {
@@ -3944,9 +3882,7 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3R_600()) {
     jj_scanpos = xsp;
-    if (jj_3R_601()) {
-    jj_scanpos = xsp;
-    if (jj_3R_602()) return true;
+    if (jj_3R_601()) return true;
     }
     }
     }
@@ -3966,14 +3902,14 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_253()
+ inline bool jj_3R_252()
  {
     if (jj_done) return true;
-    if (jj_3R_365()) return true;
+    if (jj_3R_364()) return true;
     return false;
   }
 
- inline bool jj_3R_655()
+ inline bool jj_3R_657()
  {
     if (jj_done) return true;
     if (jj_scan_token(PROTECTED_T)) return true;
@@ -3986,32 +3922,32 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3_103()
+ inline bool jj_3R_563()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_scan_token(OPEN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_564()
+ inline bool jj_3R_562()
  {
     if (jj_done) return true;
-    if (jj_scan_token(OPEN_T)) return true;
+    if (jj_scan_token(CONFIGURATION_T)) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_563()
+ inline bool jj_3R_691()
  {
     if (jj_done) return true;
-    if (jj_scan_token(CONFIGURATION_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_701()) return true;
     return false;
   }
 
- inline bool jj_3R_694()
+ inline bool jj_3_103()
  {
     if (jj_done) return true;
-    if (jj_3R_704()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
@@ -4021,176 +3957,196 @@ void parseInline();
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_694()) { jj_scanpos = xsp; break; }
+      if (jj_3R_691()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_562()
+ inline bool jj_3R_561()
  {
     if (jj_done) return true;
     if (jj_scan_token(ENTITY_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_616()) jj_scanpos = xsp;
+    if (jj_3R_619()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_500()
+ inline bool jj_3R_505()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_562()) {
+    if (jj_3R_561()) {
     jj_scanpos = xsp;
-    if (jj_3R_563()) {
+    if (jj_3R_562()) {
     jj_scanpos = xsp;
-    if (jj_3R_564()) return true;
+    if (jj_3R_563()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_719()
+ inline bool jj_3R_716()
  {
     if (jj_done) return true;
-    if (jj_3R_383()) return true;
+    if (jj_3R_382()) return true;
     return false;
   }
 
  inline bool jj_3_31()
  {
     if (jj_done) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     if (jj_scan_token(ARROW_T)) return true;
     return false;
   }
 
- inline bool jj_3R_716()
+ inline bool jj_3R_704()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_196()) return true;
+    if (jj_scan_token(COLON_T)) return true;
+    if (jj_3R_84()) return true;
+    if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_707()
+ inline bool jj_3_104()
  {
     if (jj_done) return true;
-    if (jj_3R_197()) return true;
-    if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
-    if (jj_scan_token(SEMI_T)) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3_104()
+ inline bool jj_3R_715()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_718()
+ inline bool jj_3R_714()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_378()) return true;
     return false;
   }
 
- inline bool jj_3R_717()
+ inline bool jj_3R_713()
  {
     if (jj_done) return true;
-    if (jj_3R_379()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3_30()
  {
     if (jj_done) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_715()
+ inline bool jj_3R_712()
  {
     if (jj_done) return true;
-    if (jj_3R_377()) return true;
+    if (jj_3R_376()) return true;
     return false;
   }
 
- inline bool jj_3R_714()
+ inline bool jj_3R_711()
  {
     if (jj_done) return true;
-    if (jj_3R_376()) return true;
+    if (jj_3R_375()) return true;
     return false;
   }
 
  inline bool jj_3_29()
  {
     if (jj_done) return true;
-    if (jj_3R_84()) return true;
+    if (jj_3R_83()) return true;
     return false;
   }
 
- inline bool jj_3R_713()
+ inline bool jj_3R_710()
  {
     if (jj_done) return true;
-    if (jj_3R_375()) return true;
+    if (jj_3R_374()) return true;
     return false;
   }
 
- inline bool jj_3R_712()
+ inline bool jj_3R_709()
  {
     if (jj_done) return true;
-    if (jj_3R_373()) return true;
+    if (jj_3R_372()) return true;
     return false;
   }
 
- inline bool jj_3R_359()
+ inline bool jj_3R_358()
  {
     if (jj_done) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     if (jj_scan_token(ARROW_T)) return true;
     return false;
   }
 
- inline bool jj_3R_711()
+ inline bool jj_3R_708()
  {
     if (jj_done) return true;
-    if (jj_3R_372()) return true;
+    if (jj_3R_371()) return true;
     return false;
   }
 
- inline bool jj_3R_236()
+ inline bool jj_3R_235()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_359()) jj_scanpos = xsp;
-    if (jj_3R_59()) return true;
+    if (jj_3R_358()) jj_scanpos = xsp;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_710()
+ inline bool jj_3R_707()
  {
     if (jj_done) return true;
-    if (jj_3R_371()) return true;
+    if (jj_3R_370()) return true;
     return false;
   }
 
- inline bool jj_3R_708()
+ inline bool jj_3R_706()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_524()) return true;
     return false;
   }
 
- inline bool jj_3R_704()
+ inline bool jj_3R_162()
+ {
+    if (jj_done) return true;
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_705()
+ {
+    if (jj_done) return true;
+    if (jj_3R_92()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_701()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_705()) {
+    jj_scanpos = xsp;
+    if (jj_3R_706()) {
+    jj_scanpos = xsp;
+    if (jj_3R_707()) {
+    jj_scanpos = xsp;
     if (jj_3R_708()) {
     jj_scanpos = xsp;
     if (jj_3R_709()) {
@@ -4207,15 +4163,9 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3R_715()) {
     jj_scanpos = xsp;
-    if (jj_3R_716()) {
-    jj_scanpos = xsp;
-    if (jj_3R_717()) {
-    jj_scanpos = xsp;
-    if (jj_3R_718()) {
-    jj_scanpos = xsp;
     if (jj_3_104()) {
     jj_scanpos = xsp;
-    if (jj_3R_719()) return true;
+    if (jj_3R_716()) return true;
     }
     }
     }
@@ -4231,64 +4181,50 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_709()
- {
-    if (jj_done) return true;
-    if (jj_3R_519()) return true;
-    return false;
-  }
-
- inline bool jj_3R_163()
- {
-    if (jj_done) return true;
-    if (jj_3R_85()) return true;
-    return false;
-  }
-
- inline bool jj_3R_252()
+ inline bool jj_3R_251()
  {
     if (jj_done) return true;
-    if (jj_3R_364()) return true;
+    if (jj_3R_363()) return true;
     return false;
   }
 
- inline bool jj_3R_162()
+ inline bool jj_3R_161()
  {
     if (jj_done) return true;
-    if (jj_3R_84()) return true;
+    if (jj_3R_83()) return true;
     return false;
   }
 
- inline bool jj_3R_69()
+ inline bool jj_3R_68()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_162()) {
+    if (jj_3R_161()) {
     jj_scanpos = xsp;
-    if (jj_3R_163()) return true;
+    if (jj_3R_162()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_522()
+ inline bool jj_3R_527()
  {
     if (jj_done) return true;
     if (jj_scan_token(AFTER_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_472()
+ inline bool jj_3R_470()
  {
     if (jj_done) return true;
-    if (jj_3R_535()) return true;
+    if (jj_3R_540()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_138()
+ inline bool jj_3R_137()
  {
     if (jj_done) return true;
     if (jj_scan_token(PROTECTED_T)) return true;
@@ -4303,328 +4239,328 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_497()
+ inline bool jj_3R_495()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_446()) return true;
+    if (jj_3R_444()) return true;
     return false;
   }
 
- inline bool jj_3R_381()
+ inline bool jj_3R_380()
  {
     if (jj_done) return true;
     if (jj_scan_token(DISCONNECT_T)) return true;
-    if (jj_3R_472()) return true;
+    if (jj_3R_470()) return true;
     if (jj_scan_token(AFTER_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_460()
+ inline bool jj_3R_458()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_239()
+ inline bool jj_3R_238()
  {
     if (jj_done) return true;
     if (jj_scan_token(DOWNTO_T)) return true;
     return false;
   }
 
- inline bool jj_3R_110()
+ inline bool jj_3R_109()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_238()) {
+    if (jj_3R_237()) {
     jj_scanpos = xsp;
-    if (jj_3R_239()) return true;
+    if (jj_3R_238()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_238()
+ inline bool jj_3R_237()
  {
     if (jj_done) return true;
     if (jj_scan_token(TO_T)) return true;
     return false;
   }
 
- inline bool jj_3R_569()
+ inline bool jj_3R_568()
  {
     if (jj_done) return true;
-    if (jj_3R_310()) return true;
+    if (jj_3R_309()) return true;
     return false;
   }
 
- inline bool jj_3R_446()
+ inline bool jj_3R_444()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_522()) jj_scanpos = xsp;
+    if (jj_3R_527()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_568()
+ inline bool jj_3R_567()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_515()
+ inline bool jj_3R_520()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_568()) {
+    if (jj_3R_567()) {
     jj_scanpos = xsp;
-    if (jj_3R_569()) return true;
+    if (jj_3R_568()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_407()
+ inline bool jj_3R_406()
  {
     if (jj_done) return true;
     if (jj_scan_token(UNAFFECTED_T)) return true;
     return false;
   }
 
- inline bool jj_3R_318()
+ inline bool jj_3R_317()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_406()) {
+    if (jj_3R_405()) {
     jj_scanpos = xsp;
-    if (jj_3R_407()) return true;
+    if (jj_3R_406()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_406()
+ inline bool jj_3R_405()
  {
     if (jj_done) return true;
-    if (jj_3R_446()) return true;
+    if (jj_3R_444()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_497()) { jj_scanpos = xsp; break; }
+      if (jj_3R_495()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_553()
+ inline bool jj_3R_558()
  {
     if (jj_done) return true;
     if (jj_scan_token(REJECT_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_251()
+ inline bool jj_3R_250()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_496()
+ inline bool jj_3R_494()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_553()) jj_scanpos = xsp;
+    if (jj_3R_558()) jj_scanpos = xsp;
     if (jj_scan_token(INERTIAL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_118()
+ inline bool jj_3R_117()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_251()) jj_scanpos = xsp;
+    if (jj_3R_250()) jj_scanpos = xsp;
     if (jj_scan_token(WAIT_T)) return true;
     xsp = jj_scanpos;
+    if (jj_3R_251()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
     if (jj_3R_252()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_3R_253()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_254()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3_28()
- {
-    if (jj_done) return true;
-    if (jj_3R_83()) return true;
-    return false;
-  }
-
- inline bool jj_3R_405()
+ inline bool jj_3R_404()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_495()) {
+    if (jj_3R_493()) {
     jj_scanpos = xsp;
-    if (jj_3R_496()) return true;
+    if (jj_3R_494()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_495()
+ inline bool jj_3R_493()
  {
     if (jj_done) return true;
     if (jj_scan_token(TRANSPORT_T)) return true;
     return false;
   }
 
- inline bool jj_3_27()
+ inline bool jj_3_28()
  {
     if (jj_done) return true;
     if (jj_3R_82()) return true;
     return false;
   }
 
- inline bool jj_3R_277()
+ inline bool jj_3_27()
  {
     if (jj_done) return true;
-    if (jj_3R_83()) return true;
+    if (jj_3R_81()) return true;
     return false;
   }
 
- inline bool jj_3R_156()
+ inline bool jj_3R_155()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_155()) return true;
+    if (jj_3R_154()) return true;
     return false;
   }
 
- inline bool jj_3R_134()
+ inline bool jj_3R_276()
+ {
+    if (jj_done) return true;
+    if (jj_3R_82()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_133()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_276()) {
+    if (jj_3R_275()) {
     jj_scanpos = xsp;
-    if (jj_3R_277()) return true;
+    if (jj_3R_276()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_276()
+ inline bool jj_3R_275()
  {
     if (jj_done) return true;
-    if (jj_3R_82()) return true;
+    if (jj_3R_81()) return true;
     return false;
   }
 
- inline bool jj_3R_463()
+ inline bool jj_3R_461()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_375()
+ inline bool jj_3R_374()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(101)) jj_scanpos = xsp;
     if (jj_scan_token(VARIABLE_T)) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_463()) jj_scanpos = xsp;
+    if (jj_3R_461()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_474()
+ inline bool jj_3R_472()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_473()) return true;
+    if (jj_3R_471()) return true;
     return false;
   }
 
- inline bool jj_3R_706()
+ inline bool jj_3R_703()
  {
     if (jj_done) return true;
     if (jj_scan_token(ARRAY_T)) return true;
-    if (jj_3R_83()) return true;
+    if (jj_3R_82()) return true;
     if (jj_scan_token(OF_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_441()
+ inline bool jj_3R_439()
  {
     if (jj_done) return true;
-    if (jj_3R_521()) return true;
+    if (jj_3R_526()) return true;
     return false;
   }
 
  inline bool jj_3_102()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_362()
+ inline bool jj_3R_361()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_440()) {
+    if (jj_3R_438()) {
     jj_scanpos = xsp;
-    if (jj_3R_441()) return true;
+    if (jj_3R_439()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_440()
+ inline bool jj_3R_438()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_102()) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_373()
+ inline bool jj_3R_372()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONSTANT_T)) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_460()) jj_scanpos = xsp;
+    if (jj_3R_458()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -4632,142 +4568,142 @@ void parseInline();
  inline bool jj_3_26()
  {
     if (jj_done) return true;
-    if (jj_3R_81()) return true;
+    if (jj_3R_80()) return true;
     return false;
   }
 
- inline bool jj_3R_380()
+ inline bool jj_3R_379()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_178()) return true;
-    if (jj_3R_332()) return true;
+    if (jj_3R_177()) return true;
+    if (jj_3R_331()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_567()
+ inline bool jj_3R_566()
  {
     if (jj_done) return true;
-    if (jj_3R_333()) return true;
+    if (jj_3R_332()) return true;
     return false;
   }
 
- inline bool jj_3R_382()
+ inline bool jj_3R_381()
  {
     if (jj_done) return true;
     if (jj_scan_token(USE_T)) return true;
-    if (jj_3R_473()) return true;
+    if (jj_3R_471()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_474()) { jj_scanpos = xsp; break; }
+      if (jj_3R_472()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_566()
+ inline bool jj_3R_565()
  {
     if (jj_done) return true;
-    if (jj_3R_81()) return true;
+    if (jj_3R_80()) return true;
     return false;
   }
 
- inline bool jj_3R_502()
+ inline bool jj_3R_507()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_566()) {
+    if (jj_3R_565()) {
     jj_scanpos = xsp;
-    if (jj_3R_567()) return true;
+    if (jj_3R_566()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_63()
+ inline bool jj_3R_62()
  {
     if (jj_done) return true;
     if (jj_scan_token(ARRAY_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_155()) return true;
+    if (jj_3R_154()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_156()) { jj_scanpos = xsp; break; }
+      if (jj_3R_155()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     if (jj_scan_token(OF_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_158()
+ inline bool jj_3R_157()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_633()
+ inline bool jj_3R_636()
  {
     if (jj_done) return true;
-    if (jj_3R_655()) return true;
+    if (jj_3R_657()) return true;
     return false;
   }
 
  inline bool jj_3_101()
  {
     if (jj_done) return true;
-    if (jj_3R_138()) return true;
+    if (jj_3R_137()) return true;
     return false;
   }
 
- inline bool jj_3R_632()
+ inline bool jj_3R_635()
  {
     if (jj_done) return true;
-    if (jj_3R_654()) return true;
+    if (jj_3R_656()) return true;
     return false;
   }
 
- inline bool jj_3R_631()
+ inline bool jj_3R_634()
  {
     if (jj_done) return true;
-    if (jj_3R_653()) return true;
+    if (jj_3R_655()) return true;
     return false;
   }
 
- inline bool jj_3R_630()
+ inline bool jj_3R_633()
  {
     if (jj_done) return true;
-    if (jj_3R_652()) return true;
+    if (jj_3R_654()) return true;
     return false;
   }
 
- inline bool jj_3R_629()
+ inline bool jj_3R_632()
  {
     if (jj_done) return true;
-    if (jj_3R_651()) return true;
+    if (jj_3R_653()) return true;
     return false;
   }
 
- inline bool jj_3R_577()
+ inline bool jj_3R_576()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_629()) {
+    if (jj_3R_632()) {
     jj_scanpos = xsp;
-    if (jj_3R_630()) {
+    if (jj_3R_633()) {
     jj_scanpos = xsp;
-    if (jj_3R_631()) {
+    if (jj_3R_634()) {
     jj_scanpos = xsp;
-    if (jj_3R_632()) {
+    if (jj_3R_635()) {
     jj_scanpos = xsp;
     if (jj_3_101()) {
     jj_scanpos = xsp;
-    if (jj_3R_633()) return true;
+    if (jj_3R_636()) return true;
     }
     }
     }
@@ -4780,132 +4716,132 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     if (jj_scan_token(ELSE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_350()
+ inline bool jj_3R_349()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONFIGURATION_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
  inline bool jj_3_97()
  {
     if (jj_done) return true;
-    if (jj_3R_134()) return true;
+    if (jj_3R_133()) return true;
     return false;
   }
 
- inline bool jj_3R_459()
+ inline bool jj_3R_457()
  {
     if (jj_done) return true;
-    if (jj_3R_526()) return true;
+    if (jj_3R_531()) return true;
     return false;
   }
 
  inline bool jj_3_100()
  {
     if (jj_done) return true;
-    if (jj_3R_137()) return true;
+    if (jj_3R_136()) return true;
     return false;
   }
 
- inline bool jj_3R_371()
+ inline bool jj_3R_370()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_100()) {
     jj_scanpos = xsp;
-    if (jj_3R_459()) return true;
+    if (jj_3R_457()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_320()
+ inline bool jj_3R_319()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
- inline bool jj_3R_106()
+ inline bool jj_3R_105()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
     if (jj_3R_59()) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_319()
+ inline bool jj_3R_318()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     if (jj_scan_token(ELSE_T)) return true;
-    if (jj_3R_318()) return true;
+    if (jj_3R_317()) return true;
     return false;
   }
 
  inline bool jj_3_99()
  {
     if (jj_done) return true;
+    if (jj_3R_134()) return true;
     if (jj_3R_135()) return true;
-    if (jj_3R_136()) return true;
     return false;
   }
 
- inline bool jj_3R_185()
+ inline bool jj_3R_184()
  {
     if (jj_done) return true;
-    if (jj_3R_134()) return true;
+    if (jj_3R_133()) return true;
     return false;
   }
 
- inline bool jj_3R_168()
+ inline bool jj_3R_167()
  {
     if (jj_done) return true;
-    if (jj_3R_318()) return true;
+    if (jj_3R_317()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_319()) { jj_scanpos = xsp; break; }
+      if (jj_3R_318()) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_320()) jj_scanpos = xsp;
+    if (jj_3R_319()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_366()
+ inline bool jj_3R_365()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_72()
+ inline bool jj_3R_71()
  {
     if (jj_done) return true;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
+    if (jj_3R_166()) return true;
     if (jj_3R_167()) return true;
-    if (jj_3R_168()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_130()
+ inline bool jj_3R_129()
  {
     if (jj_done) return true;
-    if (jj_3R_136()) return true;
+    if (jj_3R_135()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -4914,29 +4850,29 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_247()
+ inline bool jj_3R_246()
  {
     if (jj_done) return true;
-    if (jj_3R_109()) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
- inline bool jj_3R_365()
+ inline bool jj_3R_364()
  {
     if (jj_done) return true;
     if (jj_scan_token(UNTIL_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
- inline bool jj_3R_115()
+ inline bool jj_3R_114()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_246()) {
+    if (jj_3R_245()) {
     jj_scanpos = xsp;
-    if (jj_3R_247()) return true;
+    if (jj_3R_246()) return true;
     }
     return false;
   }
@@ -4944,78 +4880,78 @@ void parseInline();
  inline bool jj_3_98()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_246()
+ inline bool jj_3R_245()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
  inline bool jj_3_96()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_218()
+ inline bool jj_3R_217()
  {
     if (jj_done) return true;
     if (jj_scan_token(ALL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_80()
+ inline bool jj_3R_79()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_217()
+ inline bool jj_3R_216()
  {
     if (jj_done) return true;
-    if (jj_3R_310()) return true;
+    if (jj_3R_309()) return true;
     return false;
   }
 
- inline bool jj_3R_216()
+ inline bool jj_3R_215()
  {
     if (jj_done) return true;
-    if (jj_3R_352()) return true;
+    if (jj_3R_351()) return true;
     return false;
   }
 
  inline bool jj_3_24()
  {
     if (jj_done) return true;
-    if (jj_3R_79()) return true;
+    if (jj_3R_78()) return true;
     return false;
   }
 
- inline bool jj_3R_215()
+ inline bool jj_3R_214()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_100()
+ inline bool jj_3R_99()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_214()) {
+    jj_scanpos = xsp;
     if (jj_3R_215()) {
     jj_scanpos = xsp;
     if (jj_3R_216()) {
     jj_scanpos = xsp;
-    if (jj_3R_217()) {
-    jj_scanpos = xsp;
-    if (jj_3R_218()) return true;
+    if (jj_3R_217()) return true;
     }
     }
     }
@@ -5025,40 +4961,40 @@ void parseInline();
  inline bool jj_3_23()
  {
     if (jj_done) return true;
-    if (jj_3R_78()) return true;
+    if (jj_3R_77()) return true;
     return false;
   }
 
- inline bool jj_3R_184()
+ inline bool jj_3R_183()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
  inline bool jj_3_22()
  {
     if (jj_done) return true;
-    if (jj_3R_77()) return true;
+    if (jj_3R_76()) return true;
     return false;
   }
 
- inline bool jj_3R_85()
+ inline bool jj_3R_84()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_184()) jj_scanpos = xsp;
+    if (jj_3R_183()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_185()) jj_scanpos = xsp;
+    if (jj_3R_184()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_76()
+ inline bool jj_3R_75()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
@@ -5068,56 +5004,56 @@ void parseInline();
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_76()) jj_scanpos = xsp;
+    if (jj_3R_75()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
     if (jj_scan_token(ASSERT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_561()
+ inline bool jj_3R_503()
  {
     if (jj_done) return true;
-    if (jj_3R_79()) return true;
+    if (jj_3R_78()) return true;
     return false;
   }
 
- inline bool jj_3R_560()
+ inline bool jj_3R_502()
  {
     if (jj_done) return true;
-    if (jj_3R_78()) return true;
+    if (jj_3R_77()) return true;
     return false;
   }
 
  inline bool jj_3_20()
  {
     if (jj_done) return true;
-    if (jj_3R_75()) return true;
+    if (jj_3R_74()) return true;
     return false;
   }
 
- inline bool jj_3R_559()
+ inline bool jj_3R_73()
  {
     if (jj_done) return true;
-    if (jj_3R_77()) return true;
+    if (jj_3R_69()) return true;
+    if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_74()
+ inline bool jj_3R_501()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
-    if (jj_scan_token(COLON_T)) return true;
+    if (jj_3R_76()) return true;
     return false;
   }
 
- inline bool jj_3R_372()
+ inline bool jj_3R_371()
  {
     if (jj_done) return true;
     if (jj_scan_token(SUBTYPE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -5127,43 +5063,43 @@ void parseInline();
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_74()) jj_scanpos = xsp;
+    if (jj_3R_73()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
     if (jj_scan_token(PROCESS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_627()
+ inline bool jj_3R_630()
  {
     if (jj_done) return true;
-    if (jj_3R_113()) return true;
+    if (jj_3R_112()) return true;
     return false;
   }
 
- inline bool jj_3R_572()
+ inline bool jj_3R_571()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_627()) { jj_scanpos = xsp; break; }
+      if (jj_3R_630()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_558()
+ inline bool jj_3R_72()
  {
     if (jj_done) return true;
-    if (jj_3R_88()) return true;
+    if (jj_3R_69()) return true;
+    if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_73()
+ inline bool jj_3R_500()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
-    if (jj_scan_token(COLON_T)) return true;
+    if (jj_3R_87()) return true;
     return false;
   }
 
@@ -5172,84 +5108,63 @@ void parseInline();
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_73()) jj_scanpos = xsp;
+    if (jj_3R_72()) jj_scanpos = xsp;
     if (jj_scan_token(BLOCK_T)) return true;
     return false;
   }
 
- inline bool jj_3_95()
- {
-    if (jj_done) return true;
-    if (jj_3R_133()) return true;
-    return false;
-  }
-
- inline bool jj_3R_516()
- {
-    if (jj_done) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_313()) return true;
-    if (jj_scan_token(RPAREN_T)) return true;
-    return false;
-  }
-
- inline bool jj_3R_557()
- {
-    if (jj_done) return true;
-    if (jj_3R_615()) return true;
-    return false;
-  }
-
- inline bool jj_3_94()
+ inline bool jj_3R_499()
  {
     if (jj_done) return true;
-    if (jj_3R_132()) return true;
+    if (jj_3R_560()) return true;
     return false;
   }
 
- inline bool jj_3R_556()
+ inline bool jj_3R_498()
  {
     if (jj_done) return true;
-    if (jj_3R_75()) return true;
+    if (jj_3R_74()) return true;
     return false;
   }
 
- inline bool jj_3R_555()
+ inline bool jj_3R_497()
  {
     if (jj_done) return true;
-    if (jj_3R_89()) return true;
+    if (jj_3R_88()) return true;
     return false;
   }
 
- inline bool jj_3R_554()
+ inline bool jj_3R_523()
  {
     if (jj_done) return true;
-    if (jj_3R_614()) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_569()) return true;
+    if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_498()
+ inline bool jj_3R_409()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_554()) {
+    if (jj_3R_496()) {
     jj_scanpos = xsp;
-    if (jj_3R_555()) {
+    if (jj_3R_497()) {
     jj_scanpos = xsp;
-    if (jj_3R_556()) {
+    if (jj_3R_498()) {
     jj_scanpos = xsp;
-    if (jj_3R_557()) {
+    if (jj_3R_499()) {
     jj_scanpos = xsp;
-    if (jj_3R_558()) {
+    if (jj_3R_500()) {
     jj_scanpos = xsp;
-    if (jj_3R_559()) {
+    if (jj_3R_501()) {
     jj_scanpos = xsp;
-    if (jj_3R_560()) {
+    if (jj_3R_502()) {
     jj_scanpos = xsp;
-    if (jj_3R_561()) {
+    if (jj_3R_503()) {
     jj_scanpos = xsp;
-    if (jj_scan_token(186)) return true;
+    if (jj_scan_token(187)) return true;
     }
     }
     }
@@ -5261,30 +5176,51 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_518()
+ inline bool jj_3R_496()
+ {
+    if (jj_done) return true;
+    if (jj_3R_559()) return true;
+    return false;
+  }
+
+ inline bool jj_3_17()
+ {
+    if (jj_done) return true;
+    if (jj_3R_71()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_521()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_570()) return true;
+    if (jj_3R_312()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3_17()
+ inline bool jj_3_95()
+ {
+    if (jj_done) return true;
+    if (jj_3R_132()) return true;
+    return false;
+  }
+
+ inline bool jj_3_94()
  {
     if (jj_done) return true;
-    if (jj_3R_72()) return true;
+    if (jj_3R_131()) return true;
     return false;
   }
 
- inline bool jj_3R_173()
+ inline bool jj_3R_172()
  {
     if (jj_done) return true;
-    if (jj_3R_325()) return true;
+    if (jj_3R_324()) return true;
     return false;
   }
 
- inline bool jj_3R_517()
+ inline bool jj_3R_522()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5296,37 +5232,37 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_172()
+ inline bool jj_3R_171()
  {
     if (jj_done) return true;
-    if (jj_3R_72()) return true;
+    if (jj_3R_71()) return true;
     return false;
   }
 
  inline bool jj_3_16()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_434()
+ inline bool jj_3R_432()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_517()) jj_scanpos = xsp;
+    if (jj_3R_522()) jj_scanpos = xsp;
     if (jj_scan_token(FUNCTION_T)) return true;
-    if (jj_3R_515()) return true;
+    if (jj_3R_520()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_518()) jj_scanpos = xsp;
+    if (jj_3R_523()) jj_scanpos = xsp;
     if (jj_scan_token(RETURN_T)) return true;
-    if (jj_3R_158()) return true;
+    if (jj_3R_157()) return true;
     return false;
   }
 
- inline bool jj_3R_77()
+ inline bool jj_3R_76()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5335,9 +5271,9 @@ void parseInline();
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_172()) {
+    if (jj_3R_171()) {
     jj_scanpos = xsp;
-    if (jj_3R_173()) return true;
+    if (jj_3R_172()) return true;
     }
     return false;
   }
@@ -5345,12 +5281,12 @@ void parseInline();
  inline bool jj_3_15()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_79()
+ inline bool jj_3R_78()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5358,7 +5294,7 @@ void parseInline();
     if (jj_3_15()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
-    if (jj_3R_177()) return true;
+    if (jj_3R_176()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -5366,7 +5302,7 @@ void parseInline();
  inline bool jj_3_14()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
@@ -5374,11 +5310,11 @@ void parseInline();
  inline bool jj_3_13()
  {
     if (jj_done) return true;
-    if (jj_3R_71()) return true;
+    if (jj_3R_70()) return true;
     return false;
   }
 
- inline bool jj_3R_88()
+ inline bool jj_3R_87()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5386,7 +5322,7 @@ void parseInline();
     if (jj_3_14()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
-    if (jj_3R_188()) return true;
+    if (jj_3R_187()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -5394,53 +5330,53 @@ void parseInline();
  inline bool jj_3R_678()
  {
     if (jj_done) return true;
-    if (jj_3R_693()) return true;
+    if (jj_3R_690()) return true;
     return false;
   }
 
- inline bool jj_3R_470()
+ inline bool jj_3R_468()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_347()
+ inline bool jj_3R_346()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_433()) {
+    if (jj_3R_431()) {
     jj_scanpos = xsp;
-    if (jj_3R_434()) return true;
+    if (jj_3R_432()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_433()
+ inline bool jj_3R_431()
  {
     if (jj_done) return true;
     if (jj_scan_token(PROCEDURE_T)) return true;
-    if (jj_3R_515()) return true;
+    if (jj_3R_520()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_516()) jj_scanpos = xsp;
+    if (jj_3R_521()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_3_94()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_3_95()) jj_scanpos = xsp;
-    if (jj_3R_425()) return true;
+    if (jj_3R_423()) return true;
     return false;
   }
 
  inline bool jj_3R_677()
  {
     if (jj_done) return true;
-    if (jj_3R_692()) return true;
+    if (jj_3R_689()) return true;
     return false;
   }
 
- inline bool jj_3R_652()
+ inline bool jj_3R_654()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5452,21 +5388,21 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_176()
+ inline bool jj_3R_175()
  {
     if (jj_done) return true;
-    if (jj_3R_329()) return true;
+    if (jj_3R_328()) return true;
     return false;
   }
 
- inline bool jj_3R_175()
+ inline bool jj_3R_174()
  {
     if (jj_done) return true;
-    if (jj_3R_71()) return true;
+    if (jj_3R_70()) return true;
     return false;
   }
 
- inline bool jj_3R_628()
+ inline bool jj_3R_631()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5478,29 +5414,29 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_178()
+ inline bool jj_3R_177()
  {
     if (jj_done) return true;
-    if (jj_3R_331()) return true;
+    if (jj_3R_330()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_626()
+ inline bool jj_3R_629()
  {
     if (jj_done) return true;
-    if (jj_3R_650()) return true;
+    if (jj_3R_652()) return true;
     return false;
   }
 
- inline bool jj_3R_571()
+ inline bool jj_3R_570()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_626()) { jj_scanpos = xsp; break; }
+      if (jj_3R_629()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -5508,35 +5444,35 @@ void parseInline();
  inline bool jj_3_92()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3R_674()
  {
     if (jj_done) return true;
-    if (jj_3R_383()) return true;
+    if (jj_3R_382()) return true;
     return false;
   }
 
  inline bool jj_3R_673()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_78()
+ inline bool jj_3R_77()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_174()) return true;
+    if (jj_3R_173()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_175()) jj_scanpos = xsp;
+    if (jj_3R_174()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_176()) jj_scanpos = xsp;
+    if (jj_3R_175()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -5544,98 +5480,98 @@ void parseInline();
  inline bool jj_3_93()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
  inline bool jj_3R_672()
  {
     if (jj_done) return true;
-    if (jj_3R_379()) return true;
+    if (jj_3R_378()) return true;
     return false;
   }
 
  inline bool jj_3R_671()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3R_670()
  {
     if (jj_done) return true;
-    if (jj_3R_377()) return true;
+    if (jj_3R_376()) return true;
     return false;
   }
 
  inline bool jj_3R_669()
  {
     if (jj_done) return true;
-    if (jj_3R_376()) return true;
+    if (jj_3R_375()) return true;
     return false;
   }
 
  inline bool jj_3R_668()
  {
     if (jj_done) return true;
-    if (jj_3R_375()) return true;
+    if (jj_3R_374()) return true;
     return false;
   }
 
- inline bool jj_3R_574()
+ inline bool jj_3R_573()
  {
     if (jj_done) return true;
-    if (jj_3R_515()) return true;
+    if (jj_3R_520()) return true;
     return false;
   }
 
  inline bool jj_3R_667()
  {
     if (jj_done) return true;
-    if (jj_3R_373()) return true;
+    if (jj_3R_372()) return true;
     return false;
   }
 
- inline bool jj_3R_469()
+ inline bool jj_3R_467()
  {
     if (jj_done) return true;
-    if (jj_3R_532()) return true;
+    if (jj_3R_537()) return true;
     return false;
   }
 
  inline bool jj_3R_666()
  {
     if (jj_done) return true;
-    if (jj_3R_372()) return true;
+    if (jj_3R_371()) return true;
     return false;
   }
 
  inline bool jj_3R_665()
  {
     if (jj_done) return true;
-    if (jj_3R_519()) return true;
+    if (jj_3R_524()) return true;
     return false;
   }
 
- inline bool jj_3R_468()
+ inline bool jj_3R_466()
  {
     if (jj_done) return true;
-    if (jj_3R_67()) return true;
+    if (jj_3R_66()) return true;
     return false;
   }
 
- inline bool jj_3R_180()
+ inline bool jj_3R_179()
  {
     if (jj_done) return true;
-    if (jj_3R_333()) return true;
+    if (jj_3R_332()) return true;
     return false;
   }
 
- inline bool jj_3R_179()
+ inline bool jj_3R_178()
  {
     if (jj_done) return true;
-    if (jj_3R_332()) return true;
+    if (jj_3R_331()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -5643,26 +5579,26 @@ void parseInline();
  inline bool jj_3R_664()
  {
     if (jj_done) return true;
-    if (jj_3R_371()) return true;
+    if (jj_3R_370()) return true;
     return false;
   }
 
- inline bool jj_3R_187()
+ inline bool jj_3R_186()
  {
     if (jj_done) return true;
     if (jj_scan_token(BAR_T)) return true;
-    if (jj_3R_186()) return true;
+    if (jj_3R_185()) return true;
     return false;
   }
 
  inline bool jj_3R_663()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_92()) return true;
     return false;
   }
 
- inline bool jj_3R_650()
+ inline bool jj_3R_652()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -5707,44 +5643,44 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_378()
+ inline bool jj_3R_377()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMPONENT_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(56)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_468()) jj_scanpos = xsp;
+    if (jj_3R_466()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_469()) jj_scanpos = xsp;
+    if (jj_3R_467()) jj_scanpos = xsp;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(COMPONENT_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_470()) jj_scanpos = xsp;
+    if (jj_3R_468()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_462()
+ inline bool jj_3R_460()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARASSIGN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_81()
+ inline bool jj_3R_80()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_178()) return true;
+    if (jj_3R_177()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_179()) jj_scanpos = xsp;
+    if (jj_3R_178()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_180()) jj_scanpos = xsp;
+    if (jj_3R_179()) jj_scanpos = xsp;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(FOR_T)) return true;
     if (jj_scan_token(SEMI_T)) return true;
@@ -5754,99 +5690,99 @@ void parseInline();
  inline bool jj_3_91()
  {
     if (jj_done) return true;
-    if (jj_3R_131()) return true;
+    if (jj_3R_130()) return true;
     return false;
   }
 
- inline bool jj_3R_348()
+ inline bool jj_3R_347()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_435()) {
+    if (jj_3R_433()) {
     jj_scanpos = xsp;
     if (jj_scan_token(137)) return true;
     }
     return false;
   }
 
- inline bool jj_3R_435()
+ inline bool jj_3R_433()
  {
     if (jj_done) return true;
-    if (jj_3R_519()) return true;
+    if (jj_3R_524()) return true;
     return false;
   }
 
  inline bool jj_3_12()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
  inline bool jj_3_11()
  {
     if (jj_done) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
- inline bool jj_3R_86()
+ inline bool jj_3R_85()
  {
     if (jj_done) return true;
-    if (jj_3R_186()) return true;
+    if (jj_3R_185()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_187()) { jj_scanpos = xsp; break; }
+      if (jj_3R_186()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_201()
+ inline bool jj_3R_200()
  {
     if (jj_done) return true;
+    if (jj_3R_346()) return true;
     if (jj_3R_347()) return true;
-    if (jj_3R_348()) return true;
     return false;
   }
 
  inline bool jj_3_10()
  {
     if (jj_done) return true;
-    if (jj_3R_68()) return true;
+    if (jj_3R_67()) return true;
     return false;
   }
 
- inline bool jj_3R_337()
+ inline bool jj_3R_336()
  {
     if (jj_done) return true;
     if (jj_scan_token(OTHER_T)) return true;
     return false;
   }
 
- inline bool jj_3R_573()
+ inline bool jj_3R_572()
  {
     if (jj_done) return true;
-    if (jj_3R_628()) return true;
+    if (jj_3R_631()) return true;
     return false;
   }
 
- inline bool jj_3R_200()
+ inline bool jj_3R_199()
  {
     if (jj_done) return true;
-    if (jj_3R_131()) return true;
+    if (jj_3R_130()) return true;
     return false;
   }
 
- inline bool jj_3R_93()
+ inline bool jj_3R_92()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_200()) {
+    if (jj_3R_199()) {
     jj_scanpos = xsp;
-    if (jj_3R_201()) return true;
+    if (jj_3R_200()) return true;
     }
     return false;
   }
@@ -5854,365 +5790,365 @@ void parseInline();
  inline bool jj_3_90()
  {
     if (jj_done) return true;
+    if (jj_3R_128()) return true;
     if (jj_3R_129()) return true;
-    if (jj_3R_130()) return true;
-    return false;
-  }
-
- inline bool jj_3R_624()
- {
-    if (jj_done) return true;
-    if (jj_3R_70()) return true;
     return false;
   }
 
- inline bool jj_3R_336()
+ inline bool jj_3R_335()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_335()
+ inline bool jj_3R_334()
  {
     if (jj_done) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
- inline bool jj_3R_186()
+ inline bool jj_3R_185()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_333()) {
+    jj_scanpos = xsp;
     if (jj_3R_334()) {
     jj_scanpos = xsp;
     if (jj_3R_335()) {
     jj_scanpos = xsp;
-    if (jj_3R_336()) {
-    jj_scanpos = xsp;
-    if (jj_3R_337()) return true;
+    if (jj_3R_336()) return true;
     }
     }
     }
     return false;
   }
 
- inline bool jj_3R_334()
+ inline bool jj_3R_333()
  {
     if (jj_done) return true;
-    if (jj_3R_68()) return true;
+    if (jj_3R_67()) return true;
     return false;
   }
 
- inline bool jj_3R_461()
+ inline bool jj_3R_627()
  {
     if (jj_done) return true;
-    if (jj_3R_527()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_161()
+ inline bool jj_3R_459()
  {
     if (jj_done) return true;
-    if (jj_3R_129()) return true;
-    if (jj_3R_130()) return true;
+    if (jj_3R_532()) return true;
     return false;
   }
 
- inline bool jj_3R_648()
+ inline bool jj_3R_160()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_128()) return true;
+    if (jj_3R_129()) return true;
     return false;
   }
 
- inline bool jj_3R_352()
+ inline bool jj_3R_351()
  {
     if (jj_done) return true;
     if (jj_scan_token(CHARACTER_LITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_644()
+ inline bool jj_3R_613()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_519()
+ inline bool jj_3R_524()
  {
     if (jj_done) return true;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_571()) return true;
+    if (jj_3R_570()) return true;
     if (jj_scan_token(BEGIN_T)) return true;
-    if (jj_3R_572()) return true;
+    if (jj_3R_571()) return true;
     if (jj_scan_token(END_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_573()) jj_scanpos = xsp;
+    if (jj_3R_572()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_574()) jj_scanpos = xsp;
+    if (jj_3R_573()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_622()
+ inline bool jj_3R_625()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     if (jj_scan_token(ARROW_T)) return true;
-    if (jj_3R_259()) return true;
+    if (jj_3R_258()) return true;
     return false;
   }
 
- inline bool jj_3R_623()
+ inline bool jj_3R_617()
  {
     if (jj_done) return true;
-    if (jj_3R_622()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_685()
+ inline bool jj_3R_626()
  {
     if (jj_done) return true;
-    if (jj_3R_71()) return true;
+    if (jj_3R_625()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_659()
+ {
+    if (jj_done) return true;
+    if (jj_3R_70()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_356()
+ inline bool jj_3R_355()
  {
     if (jj_done) return true;
     if (jj_scan_token(STRINGLITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_436()
+ inline bool jj_3R_434()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_160()
+ inline bool jj_3R_159()
  {
     if (jj_done) return true;
-    if (jj_3R_314()) return true;
+    if (jj_3R_313()) return true;
     return false;
   }
 
- inline bool jj_3R_256()
+ inline bool jj_3R_255()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_68()
+ inline bool jj_3R_67()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_160()) jj_scanpos = xsp;
-    if (jj_3R_130()) return true;
+    if (jj_3R_159()) jj_scanpos = xsp;
+    if (jj_3R_129()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_161()) { jj_scanpos = xsp; break; }
+      if (jj_3R_160()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_122()
+ inline bool jj_3R_121()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_256()) jj_scanpos = xsp;
+    if (jj_3R_255()) jj_scanpos = xsp;
     if (jj_scan_token(CASE_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_622()) return true;
+    if (jj_3R_625()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_623()) { jj_scanpos = xsp; break; }
+      if (jj_3R_626()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(CASE_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_624()) jj_scanpos = xsp;
+    if (jj_3R_627()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_660()
+ inline bool jj_3R_650()
  {
     if (jj_done) return true;
-    if (jj_3R_498()) return true;
+    if (jj_3R_409()) return true;
     return false;
   }
 
- inline bool jj_3R_647()
+ inline bool jj_3R_616()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_660()) { jj_scanpos = xsp; break; }
+      if (jj_3R_650()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_358()
+ inline bool jj_3R_357()
  {
     if (jj_done) return true;
     if (jj_scan_token(RETURN_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_635()
+ inline bool jj_3R_638()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_357()
+ inline bool jj_3R_356()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_436()) { jj_scanpos = xsp; break; }
+      if (jj_3R_434()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_234()
+ inline bool jj_3R_233()
  {
     if (jj_done) return true;
     if (jj_scan_token(LBRACKET_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_357()) jj_scanpos = xsp;
+    if (jj_3R_356()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_358()) jj_scanpos = xsp;
+    if (jj_3R_357()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACKET_T)) return true;
     return false;
   }
 
- inline bool jj_3R_686()
+ inline bool jj_3R_660()
  {
     if (jj_done) return true;
-    if (jj_3R_329()) return true;
+    if (jj_3R_328()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_605()
+ inline bool jj_3R_604()
  {
     if (jj_done) return true;
     if (jj_scan_token(ALL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_604()
+ inline bool jj_3R_603()
  {
     if (jj_done) return true;
     if (jj_scan_token(OTHER_T)) return true;
     return false;
   }
 
- inline bool jj_3R_603()
+ inline bool jj_3R_602()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_635()) { jj_scanpos = xsp; break; }
+      if (jj_3R_638()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_535()
+ inline bool jj_3R_540()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_603()) {
+    if (jj_3R_602()) {
     jj_scanpos = xsp;
-    if (jj_3R_604()) {
+    if (jj_3R_603()) {
     jj_scanpos = xsp;
-    if (jj_3R_605()) return true;
+    if (jj_3R_604()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_501()
+ inline bool jj_3R_506()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_565()) return true;
+    if (jj_3R_564()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_579()
+ inline bool jj_3R_578()
  {
     if (jj_done) return true;
     if (jj_scan_token(BUS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_614()
+ inline bool jj_3R_559()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     if (jj_scan_token(BLOCK_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_644()) jj_scanpos = xsp;
+    if (jj_3R_613()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(56)) jj_scanpos = xsp;
-    if (jj_3R_645()) return true;
-    if (jj_3R_646()) return true;
+    if (jj_3R_614()) return true;
+    if (jj_3R_615()) return true;
     if (jj_scan_token(BEGIN_T)) return true;
-    if (jj_3R_647()) return true;
+    if (jj_3R_616()) return true;
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(BLOCK_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_648()) jj_scanpos = xsp;
+    if (jj_3R_617()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_578()
+ inline bool jj_3R_577()
  {
     if (jj_done) return true;
     if (jj_scan_token(REGISTER_T)) return true;
     return false;
   }
 
- inline bool jj_3R_527()
+ inline bool jj_3R_532()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_578()) {
+    if (jj_3R_577()) {
     jj_scanpos = xsp;
-    if (jj_3R_579()) return true;
+    if (jj_3R_578()) return true;
     }
     return false;
   }
@@ -6220,247 +6156,240 @@ void parseInline();
  inline bool jj_3_9()
  {
     if (jj_done) return true;
-    if (jj_3R_67()) return true;
+    if (jj_3R_66()) return true;
     return false;
   }
 
- inline bool jj_3R_420()
+ inline bool jj_3R_418()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_501()) jj_scanpos = xsp;
+    if (jj_3R_506()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_658()
+ inline bool jj_3R_648()
  {
     if (jj_done) return true;
-    if (jj_3R_532()) return true;
+    if (jj_3R_537()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_686()) jj_scanpos = xsp;
+    if (jj_3R_660()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_657()
+ inline bool jj_3R_647()
  {
     if (jj_done) return true;
-    if (jj_3R_67()) return true;
+    if (jj_3R_66()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_685()) jj_scanpos = xsp;
+    if (jj_3R_659()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_645()
+ inline bool jj_3R_614()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_657()) jj_scanpos = xsp;
+    if (jj_3R_647()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_658()) jj_scanpos = xsp;
+    if (jj_3R_648()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_659()
+ inline bool jj_3R_649()
  {
     if (jj_done) return true;
-    if (jj_3R_141()) return true;
+    if (jj_3R_140()) return true;
     return false;
   }
 
- inline bool jj_3R_374()
+ inline bool jj_3R_373()
  {
     if (jj_done) return true;
     if (jj_scan_token(SIGNAL_T)) return true;
-    if (jj_3R_197()) return true;
+    if (jj_3R_196()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_461()) jj_scanpos = xsp;
+    if (jj_3R_459()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_462()) jj_scanpos = xsp;
+    if (jj_3R_460()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_646()
+ inline bool jj_3R_615()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_659()) { jj_scanpos = xsp; break; }
+      if (jj_3R_649()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_300()
+ inline bool jj_3R_299()
  {
     if (jj_done) return true;
-    if (jj_3R_383()) return true;
+    if (jj_3R_382()) return true;
     return false;
   }
 
  inline bool jj_3_89()
  {
     if (jj_done) return true;
-    if (jj_3R_128()) return true;
+    if (jj_3R_127()) return true;
     return false;
   }
 
  inline bool jj_3_7()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3_88()
  {
     if (jj_done) return true;
-    if (jj_3R_127()) return true;
+    if (jj_3R_126()) return true;
     return false;
   }
 
  inline bool jj_3_8()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3R_299()
+ inline bool jj_3R_298()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_520()
+ inline bool jj_3R_525()
  {
     if (jj_done) return true;
-    if (jj_3R_405()) return true;
+    if (jj_3R_404()) return true;
     return false;
   }
 
- inline bool jj_3R_298()
+ inline bool jj_3R_297()
  {
     if (jj_done) return true;
-    if (jj_3R_381()) return true;
+    if (jj_3R_380()) return true;
     return false;
   }
 
- inline bool jj_3R_297()
+ inline bool jj_3R_296()
  {
     if (jj_done) return true;
-    if (jj_3R_380()) return true;
+    if (jj_3R_379()) return true;
     return false;
   }
 
  inline bool jj_3_87()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_296()
+ inline bool jj_3R_295()
  {
     if (jj_done) return true;
-    if (jj_3R_379()) return true;
+    if (jj_3R_378()) return true;
     return false;
   }
 
- inline bool jj_3R_439()
+ inline bool jj_3R_437()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_87()) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_520()) jj_scanpos = xsp;
-    if (jj_3R_318()) return true;
+    if (jj_3R_525()) jj_scanpos = xsp;
+    if (jj_3R_317()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_438()
+ inline bool jj_3R_436()
  {
     if (jj_done) return true;
-    if (jj_3R_128()) return true;
+    if (jj_3R_127()) return true;
     return false;
   }
 
- inline bool jj_3R_294()
+ inline bool jj_3R_293()
  {
     if (jj_done) return true;
-    if (jj_3R_378()) return true;
+    if (jj_3R_377()) return true;
     return false;
   }
 
- inline bool jj_3R_295()
+ inline bool jj_3R_294()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
- inline bool jj_3R_387()
+ inline bool jj_3R_386()
  {
     if (jj_done) return true;
-    if (jj_3R_478()) return true;
-    if (jj_3R_68()) return true;
+    if (jj_3R_476()) return true;
+    if (jj_3R_67()) return true;
     return false;
   }
 
- inline bool jj_3R_293()
+ inline bool jj_3R_292()
  {
     if (jj_done) return true;
-    if (jj_3R_377()) return true;
+    if (jj_3R_376()) return true;
     return false;
   }
 
- inline bool jj_3R_292()
+ inline bool jj_3R_291()
  {
     if (jj_done) return true;
-    if (jj_3R_376()) return true;
+    if (jj_3R_375()) return true;
     return false;
   }
 
- inline bool jj_3R_361()
+ inline bool jj_3R_360()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_437()) {
+    if (jj_3R_435()) {
     jj_scanpos = xsp;
-    if (jj_3R_438()) {
+    if (jj_3R_436()) {
     jj_scanpos = xsp;
-    if (jj_3R_439()) return true;
+    if (jj_3R_437()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_437()
- {
-    if (jj_done) return true;
-    if (jj_3R_127()) return true;
-    return false;
-  }
-
- inline bool jj_3R_291()
+ inline bool jj_3R_435()
  {
     if (jj_done) return true;
-    if (jj_3R_375()) return true;
+    if (jj_3R_126()) return true;
     return false;
   }
 
@@ -6492,32 +6421,41 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_422()
+ inline bool jj_3R_286()
  {
     if (jj_done) return true;
-    if (jj_3R_502()) return true;
+    if (jj_3R_370()) return true;
     return false;
   }
 
- inline bool jj_3R_402()
+ inline bool jj_3R_420()
+ {
+    if (jj_done) return true;
+    if (jj_3R_507()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_401()
  {
     if (jj_done) return true;
     if (jj_scan_token(MINUS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_421()
+ inline bool jj_3R_419()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_141()
+ inline bool jj_3R_140()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_285()) {
+    jj_scanpos = xsp;
     if (jj_3R_286()) {
     jj_scanpos = xsp;
     if (jj_3R_287()) {
@@ -6544,14 +6482,9 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3R_298()) {
     jj_scanpos = xsp;
-    if (jj_3R_299()) {
-    jj_scanpos = xsp;
     if (jj_3_8()) {
     jj_scanpos = xsp;
-    if (jj_3R_300()) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(186)) return true;
-    }
+    if (jj_3R_299()) return true;
     }
     }
     }
@@ -6570,73 +6503,73 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_286()
+ inline bool jj_3R_285()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_92()) return true;
     return false;
   }
 
- inline bool jj_3R_314()
+ inline bool jj_3R_313()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_401()) {
+    if (jj_3R_400()) {
     jj_scanpos = xsp;
-    if (jj_3R_402()) return true;
+    if (jj_3R_401()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_401()
+ inline bool jj_3R_400()
  {
     if (jj_done) return true;
     if (jj_scan_token(PLUS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_546()
+ inline bool jj_3R_551()
  {
     if (jj_done) return true;
     if (jj_scan_token(ROR_T)) return true;
     return false;
   }
 
- inline bool jj_3R_545()
+ inline bool jj_3R_550()
  {
     if (jj_done) return true;
     if (jj_scan_token(ROL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_544()
+ inline bool jj_3R_549()
  {
     if (jj_done) return true;
     if (jj_scan_token(SRA_T)) return true;
     return false;
   }
 
- inline bool jj_3R_543()
+ inline bool jj_3R_548()
  {
     if (jj_done) return true;
     if (jj_scan_token(SLA_T)) return true;
     return false;
   }
 
- inline bool jj_3R_333()
+ inline bool jj_3R_332()
  {
     if (jj_done) return true;
     if (jj_scan_token(FOR_T)) return true;
-    if (jj_3R_420()) return true;
+    if (jj_3R_418()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_421()) { jj_scanpos = xsp; break; }
+      if (jj_3R_419()) { jj_scanpos = xsp; break; }
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_422()) { jj_scanpos = xsp; break; }
+      if (jj_3R_420()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(FOR_T)) return true;
@@ -6644,36 +6577,36 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_542()
+ inline bool jj_3R_547()
  {
     if (jj_done) return true;
     if (jj_scan_token(SRL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_541()
+ inline bool jj_3R_546()
  {
     if (jj_done) return true;
     if (jj_scan_token(SLL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_478()
+ inline bool jj_3R_476()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_541()) {
+    if (jj_3R_546()) {
     jj_scanpos = xsp;
-    if (jj_3R_542()) {
+    if (jj_3R_547()) {
     jj_scanpos = xsp;
-    if (jj_3R_543()) {
+    if (jj_3R_548()) {
     jj_scanpos = xsp;
-    if (jj_3R_544()) {
+    if (jj_3R_549()) {
     jj_scanpos = xsp;
-    if (jj_3R_545()) {
+    if (jj_3R_550()) {
     jj_scanpos = xsp;
-    if (jj_3R_546()) return true;
+    if (jj_3R_551()) return true;
     }
     }
     }
@@ -6682,161 +6615,154 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_245()
+ inline bool jj_3R_306()
  {
     if (jj_done) return true;
-    if (jj_3R_363()) return true;
+    if (jj_3R_67()) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_386()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_307()
+ inline bool jj_3R_244()
  {
     if (jj_done) return true;
-    if (jj_3R_68()) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_387()) jj_scanpos = xsp;
+    if (jj_3R_362()) return true;
     return false;
   }
 
- inline bool jj_3R_95()
+ inline bool jj_3R_94()
  {
     if (jj_done) return true;
     if (jj_scan_token(BIT_STRING_LITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_240()
+ inline bool jj_3R_239()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3_85()
+ inline bool jj_3_86()
  {
     if (jj_done) return true;
     if (jj_3R_125()) return true;
     return false;
   }
 
- inline bool jj_3_86()
+ inline bool jj_3R_417()
  {
     if (jj_done) return true;
-    if (jj_3R_126()) return true;
+    if (jj_3R_328()) return true;
     return false;
   }
 
- inline bool jj_3_84()
+ inline bool jj_3_85()
  {
     if (jj_done) return true;
     if (jj_3R_124()) return true;
     return false;
   }
 
- inline bool jj_3R_419()
- {
-    if (jj_done) return true;
-    if (jj_3R_329()) return true;
-    return false;
-  }
-
- inline bool jj_3R_418()
+ inline bool jj_3R_416()
  {
     if (jj_done) return true;
-    if (jj_3R_71()) return true;
+    if (jj_3R_70()) return true;
     return false;
   }
 
- inline bool jj_3R_417()
+ inline bool jj_3R_415()
  {
     if (jj_done) return true;
     if (jj_scan_token(USE_T)) return true;
-    if (jj_3R_500()) return true;
+    if (jj_3R_505()) return true;
     return false;
   }
 
- inline bool jj_3_83()
+ inline bool jj_3_84()
  {
     if (jj_done) return true;
     if (jj_3R_123()) return true;
     return false;
   }
 
- inline bool jj_3R_332()
+ inline bool jj_3R_331()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_417()) jj_scanpos = xsp;
+    if (jj_3R_415()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_418()) jj_scanpos = xsp;
+    if (jj_3R_416()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_419()) jj_scanpos = xsp;
+    if (jj_3R_417()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_119()
+ inline bool jj_3R_118()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3_82()
+ inline bool jj_3_79()
  {
     if (jj_done) return true;
-    if (jj_3R_122()) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_118()) jj_scanpos = xsp;
+    if (jj_3R_114()) return true;
+    if (jj_scan_token(VARASSIGN_T)) return true;
     return false;
   }
 
- inline bool jj_3_79()
+ inline bool jj_3_83()
  {
     if (jj_done) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_119()) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
-    if (jj_scan_token(VARASSIGN_T)) return true;
+    if (jj_3R_122()) return true;
     return false;
   }
 
- inline bool jj_3_81()
+ inline bool jj_3_82()
  {
     if (jj_done) return true;
     if (jj_3R_121()) return true;
     return false;
   }
 
- inline bool jj_3_80()
+ inline bool jj_3_81()
  {
     if (jj_done) return true;
     if (jj_3R_120()) return true;
     return false;
   }
 
- inline bool jj_3R_114()
+ inline bool jj_3_80()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
-    if (jj_scan_token(COLON_T)) return true;
+    if (jj_3R_119()) return true;
     return false;
   }
 
- inline bool jj_3_78()
+ inline bool jj_3R_113()
  {
     if (jj_done) return true;
-    if (jj_3R_118()) return true;
+    if (jj_3R_69()) return true;
+    if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_244()
+ inline bool jj_3R_243()
  {
     if (jj_done) return true;
-    if (jj_3R_362()) return true;
+    if (jj_3R_361()) return true;
     return false;
   }
 
@@ -6845,42 +6771,49 @@ void parseInline();
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_114()) jj_scanpos = xsp;
-    if (jj_3R_115()) return true;
+    if (jj_3R_113()) jj_scanpos = xsp;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     return false;
   }
 
- inline bool jj_3_77()
+ inline bool jj_3_78()
  {
     if (jj_done) return true;
     if (jj_3R_117()) return true;
     return false;
   }
 
- inline bool jj_3_76()
+ inline bool jj_3_77()
  {
     if (jj_done) return true;
     if (jj_3R_116()) return true;
     return false;
   }
 
- inline bool jj_3R_499()
+ inline bool jj_3_76()
+ {
+    if (jj_done) return true;
+    if (jj_3R_115()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_504()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_318()) return true;
+    if (jj_3R_317()) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     return false;
   }
 
- inline bool jj_3R_113()
+ inline bool jj_3R_112()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_243()) {
+    if (jj_3R_242()) {
     jj_scanpos = xsp;
     if (jj_3_76()) {
     jj_scanpos = xsp;
@@ -6888,7 +6821,7 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3_78()) {
     jj_scanpos = xsp;
-    if (jj_3R_244()) {
+    if (jj_3R_243()) {
     jj_scanpos = xsp;
     if (jj_3_80()) {
     jj_scanpos = xsp;
@@ -6904,7 +6837,7 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3_86()) {
     jj_scanpos = xsp;
-    if (jj_3R_245()) return true;
+    if (jj_3R_244()) return true;
     }
     }
     }
@@ -6920,37 +6853,37 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_243()
+ inline bool jj_3R_242()
  {
     if (jj_done) return true;
-    if (jj_3R_361()) return true;
+    if (jj_3R_360()) return true;
     return false;
   }
 
- inline bool jj_3R_503()
+ inline bool jj_3R_508()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_339()
+ inline bool jj_3R_338()
  {
     if (jj_done) return true;
     if (jj_scan_token(SEVERITY_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
  inline bool jj_3_74()
  {
     if (jj_done) return true;
-    if (jj_3R_113()) return true;
+    if (jj_3R_112()) return true;
     return false;
   }
 
- inline bool jj_3R_259()
+ inline bool jj_3R_258()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -6961,130 +6894,130 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_267()
+ inline bool jj_3R_266()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_423()
+ inline bool jj_3R_421()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_503()) { jj_scanpos = xsp; break; }
+      if (jj_3R_508()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_379()
+ inline bool jj_3R_378()
  {
     if (jj_done) return true;
     if (jj_scan_token(ATTRIBUTE_T)) return true;
-    if (jj_3R_220()) return true;
+    if (jj_3R_219()) return true;
     if (jj_scan_token(OF_T)) return true;
-    if (jj_3R_471()) return true;
+    if (jj_3R_469()) return true;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_316()
+ inline bool jj_3R_315()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_315()) return true;
+    if (jj_3R_314()) return true;
     return false;
   }
 
- inline bool jj_3R_111()
+ inline bool jj_3R_110()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(APOSTROPHE_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_240()) jj_scanpos = xsp;
+    if (jj_3R_239()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_73()
  {
     if (jj_done) return true;
-    if (jj_3R_112()) return true;
+    if (jj_3R_111()) return true;
     return false;
   }
 
- inline bool jj_3R_364()
+ inline bool jj_3R_363()
  {
     if (jj_done) return true;
     if (jj_scan_token(ON_T)) return true;
-    if (jj_3R_423()) return true;
+    if (jj_3R_421()) return true;
     return false;
   }
 
- inline bool jj_3R_355()
+ inline bool jj_3R_354()
  {
     if (jj_done) return true;
     if (jj_scan_token(RANGE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_220()
+ inline bool jj_3R_219()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_354()) {
+    if (jj_3R_353()) {
     jj_scanpos = xsp;
-    if (jj_3R_355()) return true;
+    if (jj_3R_354()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_354()
+ inline bool jj_3R_353()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_412()
+ inline bool jj_3R_410()
  {
     if (jj_done) return true;
-    if (jj_3R_318()) return true;
+    if (jj_3R_317()) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_86()) return true;
+    if (jj_3R_85()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_499()) { jj_scanpos = xsp; break; }
+      if (jj_3R_504()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_691()
+ inline bool jj_3R_688()
  {
     if (jj_done) return true;
-    if (jj_3R_112()) return true;
+    if (jj_3R_111()) return true;
     return false;
   }
 
- inline bool jj_3R_325()
+ inline bool jj_3R_324()
  {
     if (jj_done) return true;
     if (jj_scan_token(WITH_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(SELECT_T)) return true;
-    if (jj_3R_115()) return true;
+    if (jj_3R_114()) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
-    if (jj_3R_167()) return true;
-    if (jj_3R_412()) return true;
+    if (jj_3R_166()) return true;
+    if (jj_3R_410()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -7092,83 +7025,83 @@ void parseInline();
  inline bool jj_3_6()
  {
     if (jj_done) return true;
-    if (jj_3R_64()) return true;
+    if (jj_3R_63()) return true;
     if (jj_scan_token(ARROW_T)) return true;
     return false;
   }
 
- inline bool jj_3R_65()
+ inline bool jj_3R_64()
  {
     if (jj_done) return true;
     if (jj_scan_token(ATTRIBUTE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_158()) return true;
+    if (jj_3R_157()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_338()
+ inline bool jj_3R_337()
  {
     if (jj_done) return true;
     if (jj_scan_token(REPORT_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_473()
+ inline bool jj_3R_471()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_100()) return true;
+    if (jj_3R_99()) return true;
     return false;
   }
 
- inline bool jj_3R_166()
+ inline bool jj_3R_165()
  {
     if (jj_done) return true;
-    if (jj_3R_315()) return true;
+    if (jj_3R_314()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_316()) { jj_scanpos = xsp; break; }
+      if (jj_3R_315()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_360()
+ inline bool jj_3R_359()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(EQU_T)) return true;
-    if (jj_3R_103()) return true;
+    if (jj_3R_102()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_403()
+ inline bool jj_3R_402()
  {
     if (jj_done) return true;
-    if (jj_3R_64()) return true;
+    if (jj_3R_63()) return true;
     if (jj_scan_token(ARROW_T)) return true;
     return false;
   }
 
- inline bool jj_3R_315()
+ inline bool jj_3R_314()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_403()) jj_scanpos = xsp;
-    if (jj_3R_404()) return true;
+    if (jj_3R_402()) jj_scanpos = xsp;
+    if (jj_3R_403()) return true;
     return false;
   }
 
- inline bool jj_3R_248()
+ inline bool jj_3R_247()
  {
     if (jj_done) return true;
-    if (jj_3R_140()) return true;
+    if (jj_3R_139()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
@@ -7176,20 +7109,20 @@ void parseInline();
  inline bool jj_3R_676()
  {
     if (jj_done) return true;
-    if (jj_3R_82()) return true;
+    if (jj_3R_81()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_691()) jj_scanpos = xsp;
+    if (jj_3R_688()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_116()
+ inline bool jj_3R_115()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_248()) jj_scanpos = xsp;
-    if (jj_3R_188()) return true;
+    if (jj_3R_247()) jj_scanpos = xsp;
+    if (jj_3R_187()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -7197,11 +7130,11 @@ void parseInline();
  inline bool jj_3R_675()
  {
     if (jj_done) return true;
-    if (jj_3R_690()) return true;
+    if (jj_3R_687()) return true;
     return false;
   }
 
- inline bool jj_3R_651()
+ inline bool jj_3R_653()
  {
     if (jj_done) return true;
     Token * xsp;
@@ -7213,36 +7146,36 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_266()
+ inline bool jj_3R_265()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_188()
+ inline bool jj_3R_187()
  {
     if (jj_done) return true;
     if (jj_scan_token(ASSERT_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_338()) jj_scanpos = xsp;
+    if (jj_3R_337()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_339()) jj_scanpos = xsp;
+    if (jj_3R_338()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_126()
+ inline bool jj_3R_125()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_266()) jj_scanpos = xsp;
+    if (jj_3R_265()) jj_scanpos = xsp;
     if (jj_scan_token(RETURN_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_267()) jj_scanpos = xsp;
+    if (jj_3R_266()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
@@ -7250,132 +7183,132 @@ void parseInline();
  inline bool jj_3_5()
  {
     if (jj_done) return true;
-    if (jj_3R_63()) return true;
+    if (jj_3R_62()) return true;
     return false;
   }
 
- inline bool jj_3R_250()
+ inline bool jj_3R_249()
  {
     if (jj_done) return true;
     if (jj_scan_token(SEVERITY_T)) return true;
-    if (jj_3R_59()) return true;
-    return false;
-  }
-
- inline bool jj_3R_701()
- {
-    if (jj_done) return true;
-    if (jj_3R_706()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_308()
+ inline bool jj_3R_698()
  {
     if (jj_done) return true;
-    if (jj_3R_388()) return true;
-    if (jj_3R_307()) return true;
+    if (jj_3R_703()) return true;
     return false;
   }
 
- inline bool jj_3R_703()
+ inline bool jj_3R_307()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_387()) return true;
+    if (jj_3R_306()) return true;
     return false;
   }
 
- inline bool jj_3R_700()
+ inline bool jj_3R_697()
  {
     if (jj_done) return true;
-    if (jj_3R_63()) return true;
+    if (jj_3R_62()) return true;
     return false;
   }
 
- inline bool jj_3R_692()
+ inline bool jj_3R_689()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_700()) {
+    if (jj_3R_697()) {
     jj_scanpos = xsp;
-    if (jj_3R_701()) return true;
+    if (jj_3R_698()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_249()
+ inline bool jj_3R_248()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_117()
+ inline bool jj_3R_116()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_249()) jj_scanpos = xsp;
+    if (jj_3R_248()) jj_scanpos = xsp;
     if (jj_scan_token(REPORT_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_250()) jj_scanpos = xsp;
+    if (jj_3R_249()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_484()
+ inline bool jj_3R_700()
+ {
+    if (jj_done) return true;
+    if (jj_3R_59()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_482()
  {
     if (jj_done) return true;
     if (jj_scan_token(NOTEQU_T)) return true;
     return false;
   }
 
- inline bool jj_3R_483()
+ inline bool jj_3R_481()
  {
     if (jj_done) return true;
     if (jj_scan_token(LESSTHAN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_482()
+ inline bool jj_3R_480()
  {
     if (jj_done) return true;
     if (jj_scan_token(GREATERTHAN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_481()
+ inline bool jj_3R_479()
  {
     if (jj_done) return true;
     if (jj_scan_token(EQU_T)) return true;
     return false;
   }
 
- inline bool jj_3R_480()
+ inline bool jj_3R_478()
  {
     if (jj_done) return true;
     if (jj_scan_token(GT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_388()
+ inline bool jj_3R_387()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_477()) {
+    jj_scanpos = xsp;
+    if (jj_3R_478()) {
+    jj_scanpos = xsp;
     if (jj_3R_479()) {
     jj_scanpos = xsp;
     if (jj_3R_480()) {
     jj_scanpos = xsp;
     if (jj_3R_481()) {
     jj_scanpos = xsp;
-    if (jj_3R_482()) {
-    jj_scanpos = xsp;
-    if (jj_3R_483()) {
-    jj_scanpos = xsp;
-    if (jj_3R_484()) return true;
+    if (jj_3R_482()) return true;
     }
     }
     }
@@ -7384,146 +7317,137 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_479()
+ inline bool jj_3R_477()
  {
     if (jj_done) return true;
     if (jj_scan_token(LT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_702()
+ inline bool jj_3R_465()
  {
     if (jj_done) return true;
-    if (jj_3R_707()) return true;
+    if (jj_3R_233()) return true;
     return false;
   }
 
- inline bool jj_3R_467()
+ inline bool jj_3R_145()
  {
     if (jj_done) return true;
-    if (jj_3R_234()) return true;
+    if (jj_3R_306()) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_307()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_146()
+ inline bool jj_3R_699()
  {
     if (jj_done) return true;
-    if (jj_3R_307()) return true;
-    Token * xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_308()) jj_scanpos = xsp;
+    if (jj_3R_704()) return true;
     return false;
   }
 
- inline bool jj_3R_693()
+ inline bool jj_3R_690()
  {
     if (jj_done) return true;
     if (jj_scan_token(RECORD_T)) return true;
     Token * xsp;
-    if (jj_3R_702()) return true;
+    if (jj_3R_699()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_702()) { jj_scanpos = xsp; break; }
+      if (jj_3R_699()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(RECORD_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_703()) jj_scanpos = xsp;
+    if (jj_3R_700()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_237()
+ inline bool jj_3R_236()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_236()) return true;
+    if (jj_3R_235()) return true;
     return false;
   }
 
  inline bool jj_3_71()
  {
     if (jj_done) return true;
-    if (jj_3R_68()) return true;
-    if (jj_3R_110()) return true;
-    if (jj_3R_68()) return true;
+    if (jj_3R_67()) return true;
+    if (jj_3R_109()) return true;
+    if (jj_3R_67()) return true;
     return false;
   }
 
  inline bool jj_3_72()
  {
     if (jj_done) return true;
-    if (jj_3R_111()) return true;
+    if (jj_3R_110()) return true;
     return false;
   }
 
- inline bool jj_3R_82()
+ inline bool jj_3R_81()
  {
     if (jj_done) return true;
     if (jj_scan_token(RANGE_T)) return true;
-    if (jj_3R_84()) return true;
+    if (jj_3R_83()) return true;
     return false;
   }
 
- inline bool jj_3R_576()
+ inline bool jj_3R_575()
  {
     if (jj_done) return true;
     if (jj_scan_token(NEW_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
  inline bool jj_3_70()
  {
     if (jj_done) return true;
-    if (jj_3R_109()) return true;
-    return false;
-  }
-
- inline bool jj_3R_183()
- {
-    if (jj_done) return true;
-    if (jj_3R_111()) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
- inline bool jj_3R_228()
+ inline bool jj_3R_182()
  {
     if (jj_done) return true;
-    if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
-    if (jj_scan_token(RPAREN_T)) return true;
+    if (jj_3R_110()) return true;
     return false;
   }
 
- inline bool jj_3R_182()
+ inline bool jj_3R_181()
  {
     if (jj_done) return true;
-    if (jj_3R_68()) return true;
-    if (jj_3R_110()) return true;
-    if (jj_3R_68()) return true;
+    if (jj_3R_67()) return true;
+    if (jj_3R_109()) return true;
+    if (jj_3R_67()) return true;
     return false;
   }
 
- inline bool jj_3R_84()
+ inline bool jj_3R_83()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_182()) {
+    if (jj_3R_181()) {
     jj_scanpos = xsp;
-    if (jj_3R_183()) return true;
+    if (jj_3R_182()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_525()
+ inline bool jj_3R_530()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_4()) {
     jj_scanpos = xsp;
-    if (jj_3R_576()) return true;
+    if (jj_3R_575()) return true;
     }
     return false;
   }
@@ -7532,167 +7456,176 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(NEW_T)) return true;
-    if (jj_3R_62()) return true;
+    if (jj_3R_61()) return true;
     return false;
   }
 
- inline bool jj_3R_531()
+ inline bool jj_3R_536()
  {
     if (jj_done) return true;
-    if (jj_3R_310()) return true;
+    if (jj_3R_309()) return true;
     return false;
   }
 
- inline bool jj_3R_530()
+ inline bool jj_3R_227()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(LPAREN_T)) return true;
+    if (jj_3R_58()) return true;
+    if (jj_scan_token(RPAREN_T)) return true;
+    return false;
+  }
+
+ inline bool jj_3R_535()
  {
     if (jj_done) return true;
     if (jj_scan_token(CHARACTER_LITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_529()
+ inline bool jj_3R_534()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_465()
+ inline bool jj_3R_463()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_529()) {
+    if (jj_3R_534()) {
     jj_scanpos = xsp;
-    if (jj_3R_530()) {
+    if (jj_3R_535()) {
     jj_scanpos = xsp;
-    if (jj_3R_531()) return true;
+    if (jj_3R_536()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_227()
- {
-    if (jj_done) return true;
-    if (jj_3R_109()) return true;
-    return false;
-  }
-
- inline bool jj_3R_193()
+ inline bool jj_3R_226()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
- inline bool jj_3R_62()
+ inline bool jj_3R_61()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(APOSTROPHE_T)) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_227()) {
+    if (jj_3R_226()) {
     jj_scanpos = xsp;
-    if (jj_3R_228()) return true;
+    if (jj_3R_227()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_342()
+ inline bool jj_3R_341()
  {
     if (jj_done) return true;
-    if (jj_3R_113()) return true;
+    if (jj_3R_112()) return true;
     return false;
   }
 
- inline bool jj_3R_192()
+ inline bool jj_3R_191()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_342()) { jj_scanpos = xsp; break; }
+      if (jj_3R_341()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_466()
+ inline bool jj_3R_464()
  {
     if (jj_done) return true;
     if (jj_scan_token(COLON_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_377()
+ inline bool jj_3R_192()
+ {
+    if (jj_done) return true;
+    if (jj_3R_69()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_376()
  {
     if (jj_done) return true;
     if (jj_scan_token(ALIAS_T)) return true;
-    if (jj_3R_465()) return true;
+    if (jj_3R_463()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_466()) jj_scanpos = xsp;
+    if (jj_3R_464()) jj_scanpos = xsp;
     if (jj_scan_token(IS_T)) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_467()) jj_scanpos = xsp;
+    if (jj_3R_465()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_340()
+ inline bool jj_3R_339()
  {
     if (jj_done) return true;
-    if (jj_3R_423()) return true;
+    if (jj_3R_421()) return true;
     return false;
   }
 
- inline bool jj_3R_109()
+ inline bool jj_3R_108()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_236()) return true;
+    if (jj_3R_235()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_237()) { jj_scanpos = xsp; break; }
+      if (jj_3R_236()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_273()
+ inline bool jj_3R_272()
  {
     if (jj_done) return true;
     if (jj_scan_token(MINUS_T)) return true;
     return false;
   }
 
- inline bool jj_3R_274()
+ inline bool jj_3R_273()
  {
     if (jj_done) return true;
     if (jj_scan_token(AMPERSAND_T)) return true;
     return false;
   }
 
- inline bool jj_3R_129()
+ inline bool jj_3R_128()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_272()) {
+    if (jj_3R_271()) {
     jj_scanpos = xsp;
-    if (jj_3R_273()) {
+    if (jj_3R_272()) {
     jj_scanpos = xsp;
-    if (jj_3R_274()) return true;
+    if (jj_3R_273()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_272()
+ inline bool jj_3R_271()
  {
     if (jj_done) return true;
     if (jj_scan_token(PLUS_T)) return true;
@@ -7702,64 +7635,64 @@ void parseInline();
  inline bool jj_3_3()
  {
     if (jj_done) return true;
-    if (jj_3R_61()) return true;
+    if (jj_3R_60()) return true;
     return false;
   }
 
- inline bool jj_3R_493()
+ inline bool jj_3R_491()
  {
     if (jj_done) return true;
     if (jj_scan_token(BOX_T)) return true;
     return false;
   }
 
- inline bool jj_3R_494()
+ inline bool jj_3R_492()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_61()) return true;
+    if (jj_3R_60()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_404()
+ inline bool jj_3R_403()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_492()) {
+    if (jj_3R_490()) {
     jj_scanpos = xsp;
-    if (jj_3R_493()) {
+    if (jj_3R_491()) {
     jj_scanpos = xsp;
-    if (jj_3R_494()) return true;
+    if (jj_3R_492()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_492()
+ inline bool jj_3R_490()
  {
     if (jj_done) return true;
-    if (jj_3R_61()) return true;
+    if (jj_3R_60()) return true;
     return false;
   }
 
  inline bool jj_3_2()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_226()
+ inline bool jj_3R_225()
  {
     if (jj_done) return true;
-    if (jj_3R_166()) return true;
+    if (jj_3R_165()) return true;
     return false;
   }
 
- inline bool jj_3R_190()
+ inline bool jj_3R_189()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
@@ -7767,7 +7700,7 @@ void parseInline();
     xsp = jj_scanpos;
     if (jj_scan_token(15)) {
     jj_scanpos = xsp;
-    if (jj_3R_340()) return true;
+    if (jj_3R_339()) return true;
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
@@ -7776,114 +7709,114 @@ void parseInline();
  inline bool jj_3_1()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_154()
+ inline bool jj_3R_153()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_189()
+ inline bool jj_3R_188()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_89()
+ inline bool jj_3R_88()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_189()) jj_scanpos = xsp;
+    if (jj_3R_188()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
     if (jj_scan_token(PROCESS_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_190()) jj_scanpos = xsp;
+    if (jj_3R_189()) jj_scanpos = xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(56)) jj_scanpos = xsp;
-    if (jj_3R_191()) return true;
+    if (jj_3R_190()) return true;
     if (jj_scan_token(BEGIN_T)) return true;
-    if (jj_3R_192()) return true;
+    if (jj_3R_191()) return true;
     if (jj_scan_token(END_T)) return true;
     xsp = jj_scanpos;
     if (jj_scan_token(79)) jj_scanpos = xsp;
     if (jj_scan_token(PROCESS_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_193()) jj_scanpos = xsp;
+    if (jj_3R_192()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_153()
+ inline bool jj_3R_152()
  {
     if (jj_done) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_341()
+ inline bool jj_3R_340()
  {
     if (jj_done) return true;
-    if (jj_3R_424()) return true;
+    if (jj_3R_422()) return true;
     return false;
   }
 
- inline bool jj_3R_152()
+ inline bool jj_3R_151()
  {
     if (jj_done) return true;
     if (jj_scan_token(OPEN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_61()
+ inline bool jj_3R_60()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_152()) {
+    if (jj_3R_151()) {
     jj_scanpos = xsp;
-    if (jj_3R_153()) {
+    if (jj_3R_152()) {
     jj_scanpos = xsp;
-    if (jj_3R_154()) return true;
+    if (jj_3R_153()) return true;
     }
     }
     return false;
   }
 
- inline bool jj_3R_191()
+ inline bool jj_3R_190()
  {
     if (jj_done) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_341()) { jj_scanpos = xsp; break; }
+      if (jj_3R_340()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_513()
+ inline bool jj_3R_655()
  {
     if (jj_done) return true;
-    if (jj_3R_383()) return true;
+    if (jj_scan_token(ACCESS_T)) return true;
+    if (jj_3R_84()) return true;
     return false;
   }
 
- inline bool jj_3R_653()
+ inline bool jj_3R_518()
  {
     if (jj_done) return true;
-    if (jj_scan_token(ACCESS_T)) return true;
-    if (jj_3R_85()) return true;
+    if (jj_3R_382()) return true;
     return false;
   }
 
- inline bool jj_3R_225()
+ inline bool jj_3R_224()
  {
     if (jj_done) return true;
     if (jj_scan_token(BASED_LITERAL)) return true;
@@ -7893,48 +7826,48 @@ void parseInline();
  inline bool jj_3_69()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3R_512()
+ inline bool jj_3R_517()
  {
     if (jj_done) return true;
-    if (jj_3R_382()) return true;
+    if (jj_3R_381()) return true;
     return false;
   }
 
- inline bool jj_3R_224()
+ inline bool jj_3R_223()
  {
     if (jj_done) return true;
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
- inline bool jj_3R_511()
+ inline bool jj_3R_516()
  {
     if (jj_done) return true;
-    if (jj_3R_379()) return true;
+    if (jj_3R_378()) return true;
     return false;
   }
 
- inline bool jj_3R_223()
+ inline bool jj_3R_222()
  {
     if (jj_done) return true;
     if (jj_scan_token(DECIMAL_LITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_104()
+ inline bool jj_3R_103()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_223()) {
+    if (jj_3R_222()) {
     jj_scanpos = xsp;
-    if (jj_3R_224()) {
+    if (jj_3R_223()) {
     jj_scanpos = xsp;
-    if (jj_3R_225()) return true;
+    if (jj_3R_224()) return true;
     }
     }
     return false;
@@ -7943,80 +7876,80 @@ void parseInline();
  inline bool jj_3_68()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
- inline bool jj_3R_510()
+ inline bool jj_3R_515()
  {
     if (jj_done) return true;
-    if (jj_3R_377()) return true;
+    if (jj_3R_376()) return true;
     return false;
   }
 
- inline bool jj_3R_509()
+ inline bool jj_3R_514()
  {
     if (jj_done) return true;
-    if (jj_3R_376()) return true;
+    if (jj_3R_375()) return true;
     return false;
   }
 
- inline bool jj_3R_508()
+ inline bool jj_3R_513()
  {
     if (jj_done) return true;
-    if (jj_3R_375()) return true;
+    if (jj_3R_374()) return true;
     return false;
   }
 
- inline bool jj_3R_507()
+ inline bool jj_3R_512()
  {
     if (jj_done) return true;
-    if (jj_3R_373()) return true;
+    if (jj_3R_372()) return true;
     return false;
   }
 
- inline bool jj_3R_506()
+ inline bool jj_3R_511()
  {
     if (jj_done) return true;
-    if (jj_3R_372()) return true;
+    if (jj_3R_371()) return true;
     return false;
   }
 
- inline bool jj_3R_505()
+ inline bool jj_3R_510()
  {
     if (jj_done) return true;
-    if (jj_3R_371()) return true;
+    if (jj_3R_370()) return true;
     return false;
   }
 
- inline bool jj_3R_424()
+ inline bool jj_3R_422()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_504()) {
+    if (jj_3R_509()) {
     jj_scanpos = xsp;
-    if (jj_3R_505()) {
+    if (jj_3R_510()) {
     jj_scanpos = xsp;
-    if (jj_3R_506()) {
+    if (jj_3R_511()) {
     jj_scanpos = xsp;
-    if (jj_3R_507()) {
+    if (jj_3R_512()) {
     jj_scanpos = xsp;
-    if (jj_3R_508()) {
+    if (jj_3R_513()) {
     jj_scanpos = xsp;
-    if (jj_3R_509()) {
+    if (jj_3R_514()) {
     jj_scanpos = xsp;
-    if (jj_3R_510()) {
+    if (jj_3R_515()) {
     jj_scanpos = xsp;
     if (jj_3_68()) {
     jj_scanpos = xsp;
-    if (jj_3R_511()) {
+    if (jj_3R_516()) {
     jj_scanpos = xsp;
-    if (jj_3R_512()) {
+    if (jj_3R_517()) {
     jj_scanpos = xsp;
     if (jj_3_69()) {
     jj_scanpos = xsp;
-    if (jj_3R_513()) return true;
+    if (jj_3R_518()) return true;
     }
     }
     }
@@ -8031,18 +7964,18 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_504()
+ inline bool jj_3R_509()
  {
     if (jj_done) return true;
-    if (jj_3R_93()) return true;
+    if (jj_3R_92()) return true;
     return false;
   }
 
- inline bool jj_3R_330()
+ inline bool jj_3R_329()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_226()) return true;
+    if (jj_3R_225()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
@@ -8050,88 +7983,88 @@ void parseInline();
  inline bool jj_3_67()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_120()
+ inline bool jj_3R_119()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_3_67()) jj_scanpos = xsp;
-    if (jj_3R_177()) return true;
+    if (jj_3R_176()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_177()
+ inline bool jj_3R_176()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_330()) jj_scanpos = xsp;
+    if (jj_3R_329()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_65()
  {
     if (jj_done) return true;
-    if (jj_3R_87()) return true;
+    if (jj_3R_86()) return true;
     return false;
   }
 
- inline bool jj_3R_205()
+ inline bool jj_3R_204()
  {
     if (jj_done) return true;
-    if (jj_3R_351()) return true;
+    if (jj_3R_350()) return true;
     return false;
   }
 
  inline bool jj_3_66()
  {
     if (jj_done) return true;
-    if (jj_3R_108()) return true;
+    if (jj_3R_107()) return true;
     return false;
   }
 
- inline bool jj_3R_204()
+ inline bool jj_3R_203()
  {
     if (jj_done) return true;
-    if (jj_3R_87()) return true;
+    if (jj_3R_86()) return true;
     return false;
   }
 
- inline bool jj_3R_203()
+ inline bool jj_3R_202()
  {
     if (jj_done) return true;
-    if (jj_3R_350()) return true;
+    if (jj_3R_349()) return true;
     return false;
   }
 
- inline bool jj_3R_202()
+ inline bool jj_3R_201()
  {
     if (jj_done) return true;
-    if (jj_3R_349()) return true;
+    if (jj_3R_348()) return true;
     return false;
   }
 
- inline bool jj_3R_94()
+ inline bool jj_3R_93()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_201()) {
+    jj_scanpos = xsp;
     if (jj_3R_202()) {
     jj_scanpos = xsp;
     if (jj_3R_203()) {
     jj_scanpos = xsp;
-    if (jj_3R_204()) {
-    jj_scanpos = xsp;
     if (jj_3_66()) {
     jj_scanpos = xsp;
-    if (jj_3R_205()) return true;
+    if (jj_3R_204()) return true;
     }
     }
     }
@@ -8142,56 +8075,49 @@ void parseInline();
  inline bool jj_3_64()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
  inline bool jj_3_63()
  {
     if (jj_done) return true;
-    if (jj_3R_107()) return true;
+    if (jj_3R_106()) return true;
     return false;
   }
 
- inline bool jj_3R_458()
+ inline bool jj_3R_456()
  {
     if (jj_done) return true;
-    if (jj_3R_109()) return true;
+    if (jj_3R_108()) return true;
     return false;
   }
 
  inline bool jj_3_62()
  {
     if (jj_done) return true;
-    if (jj_3R_106()) return true;
-    return false;
-  }
-
- inline bool jj_3R_242()
- {
-    if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_105()) return true;
     return false;
   }
 
- inline bool jj_3R_457()
+ inline bool jj_3R_455()
  {
     if (jj_done) return true;
-    if (jj_3R_525()) return true;
+    if (jj_3R_530()) return true;
     return false;
   }
 
  inline bool jj_3_61()
  {
     if (jj_done) return true;
-    if (jj_3R_62()) return true;
+    if (jj_3R_61()) return true;
     return false;
   }
 
- inline bool jj_3R_456()
+ inline bool jj_3R_454()
  {
     if (jj_done) return true;
-    if (jj_3R_60()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
@@ -8199,53 +8125,64 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_455()
+ inline bool jj_3R_453()
  {
     if (jj_done) return true;
-    if (jj_3R_107()) return true;
+    if (jj_3R_106()) return true;
     return false;
   }
 
  inline bool jj_3_59()
  {
     if (jj_done) return true;
+    if (jj_3R_104()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_452()
+ {
+    if (jj_done) return true;
     if (jj_3R_105()) return true;
     return false;
   }
 
- inline bool jj_3R_454()
+ inline bool jj_3R_241()
  {
     if (jj_done) return true;
-    if (jj_3R_106()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_453()
+ inline bool jj_3R_451()
  {
     if (jj_done) return true;
-    if (jj_3R_62()) return true;
+    if (jj_3R_61()) return true;
     return false;
   }
 
- inline bool jj_3R_452()
+ inline bool jj_3R_450()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_370()
+ inline bool jj_3R_369()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_449()) {
+    jj_scanpos = xsp;
+    if (jj_3R_450()) {
+    jj_scanpos = xsp;
     if (jj_3R_451()) {
     jj_scanpos = xsp;
     if (jj_3R_452()) {
@@ -8256,11 +8193,7 @@ void parseInline();
     jj_scanpos = xsp;
     if (jj_3R_455()) {
     jj_scanpos = xsp;
-    if (jj_3R_456()) {
-    jj_scanpos = xsp;
-    if (jj_3R_457()) {
-    jj_scanpos = xsp;
-    if (jj_3R_458()) return true;
+    if (jj_3R_456()) return true;
     }
     }
     }
@@ -8271,183 +8204,183 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_451()
+ inline bool jj_3R_449()
  {
     if (jj_done) return true;
-    if (jj_3R_105()) return true;
+    if (jj_3R_104()) return true;
     return false;
   }
 
- inline bool jj_3R_329()
+ inline bool jj_3R_328()
  {
     if (jj_done) return true;
     if (jj_scan_token(PORT_T)) return true;
     if (jj_scan_token(MAP_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_166()) return true;
+    if (jj_3R_165()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_582()
+ inline bool jj_3R_581()
  {
     if (jj_done) return true;
-    if (jj_3R_313()) return true;
+    if (jj_3R_312()) return true;
     return false;
   }
 
- inline bool jj_3R_532()
+ inline bool jj_3R_537()
  {
     if (jj_done) return true;
     if (jj_scan_token(PORT_T)) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_582()) return true;
+    if (jj_3R_581()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_241()
+ inline bool jj_3R_240()
  {
     if (jj_done) return true;
-    if (jj_3R_360()) return true;
+    if (jj_3R_359()) return true;
     return false;
   }
 
- inline bool jj_3R_112()
+ inline bool jj_3R_111()
  {
     if (jj_done) return true;
     if (jj_scan_token(UNITS_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(SEMI_T)) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_241()) { jj_scanpos = xsp; break; }
+      if (jj_3R_240()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(END_T)) return true;
     if (jj_scan_token(UNITS_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_242()) jj_scanpos = xsp;
+    if (jj_3R_241()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_58()
  {
     if (jj_done) return true;
-    if (jj_3R_104()) return true;
+    if (jj_3R_103()) return true;
     return false;
   }
 
- inline bool jj_3R_222()
+ inline bool jj_3R_221()
  {
     if (jj_done) return true;
-    if (jj_3R_104()) return true;
+    if (jj_3R_103()) return true;
     return false;
   }
 
- inline bool jj_3R_103()
+ inline bool jj_3R_102()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_222()) jj_scanpos = xsp;
-    if (jj_3R_60()) return true;
+    if (jj_3R_221()) jj_scanpos = xsp;
+    if (jj_3R_59()) return true;
     return false;
   }
 
- inline bool jj_3R_408()
+ inline bool jj_3R_407()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
-    if (jj_scan_token(IN_T)) return true;
     if (jj_3R_69()) return true;
+    if (jj_scan_token(IN_T)) return true;
+    if (jj_3R_68()) return true;
     return false;
   }
 
  inline bool jj_3_57()
  {
     if (jj_done) return true;
-    if (jj_3R_87()) return true;
+    if (jj_3R_86()) return true;
     return false;
   }
 
  inline bool jj_3_55()
  {
     if (jj_done) return true;
-    if (jj_3R_65()) return true;
+    if (jj_3R_64()) return true;
     return false;
   }
 
  inline bool jj_3_56()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3R_351()
+ inline bool jj_3R_350()
  {
     if (jj_done) return true;
     if (jj_scan_token(PACKAGE_T)) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
  inline bool jj_3_54()
  {
     if (jj_done) return true;
-    if (jj_3R_66()) return true;
+    if (jj_3R_65()) return true;
     return false;
   }
 
- inline bool jj_3R_317()
+ inline bool jj_3R_316()
  {
     if (jj_done) return true;
-    if (jj_3R_405()) return true;
+    if (jj_3R_404()) return true;
     return false;
   }
 
- inline bool jj_3R_261()
+ inline bool jj_3R_260()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_167()
+ inline bool jj_3R_166()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(50)) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_317()) jj_scanpos = xsp;
+    if (jj_3R_316()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_310()
+ inline bool jj_3R_309()
  {
     if (jj_done) return true;
     if (jj_scan_token(STRINGLITERAL)) return true;
     return false;
   }
 
- inline bool jj_3R_643()
+ inline bool jj_3R_646()
  {
     if (jj_done) return true;
     if (jj_scan_token(TYPE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_642()
+ inline bool jj_3R_645()
  {
     if (jj_done) return true;
     if (jj_scan_token(FILE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_641()
+ inline bool jj_3R_644()
  {
     if (jj_done) return true;
     if (jj_scan_token(SHARED_T)) return true;
@@ -8458,47 +8391,47 @@ void parseInline();
  inline bool jj_3_53()
  {
     if (jj_done) return true;
-    if (jj_3R_103()) return true;
+    if (jj_3R_102()) return true;
     return false;
   }
 
- inline bool jj_3R_640()
+ inline bool jj_3R_643()
  {
     if (jj_done) return true;
     if (jj_scan_token(VARIABLE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_639()
+ inline bool jj_3R_642()
  {
     if (jj_done) return true;
     if (jj_scan_token(SIGNAL_T)) return true;
     return false;
   }
 
- inline bool jj_3R_638()
+ inline bool jj_3R_641()
  {
     if (jj_done) return true;
     if (jj_scan_token(CONSTANT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_613()
+ inline bool jj_3R_612()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_638()) {
+    if (jj_3R_641()) {
     jj_scanpos = xsp;
-    if (jj_3R_639()) {
+    if (jj_3R_642()) {
     jj_scanpos = xsp;
-    if (jj_3R_640()) {
+    if (jj_3R_643()) {
     jj_scanpos = xsp;
-    if (jj_3R_641()) {
+    if (jj_3R_644()) {
     jj_scanpos = xsp;
-    if (jj_3R_642()) {
+    if (jj_3R_645()) {
     jj_scanpos = xsp;
-    if (jj_3R_643()) return true;
+    if (jj_3R_646()) return true;
     }
     }
     }
@@ -8507,72 +8440,72 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_353()
+ inline bool jj_3R_352()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_207()
+ inline bool jj_3R_206()
  {
     if (jj_done) return true;
-    if (jj_3R_104()) return true;
+    if (jj_3R_103()) return true;
     return false;
   }
 
- inline bool jj_3R_206()
+ inline bool jj_3R_205()
  {
     if (jj_done) return true;
-    if (jj_3R_103()) return true;
+    if (jj_3R_102()) return true;
     return false;
   }
 
- inline bool jj_3R_96()
+ inline bool jj_3R_95()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_206()) {
+    if (jj_3R_205()) {
     jj_scanpos = xsp;
-    if (jj_3R_207()) return true;
+    if (jj_3R_206()) return true;
     }
     return false;
   }
 
- inline bool jj_3R_442()
+ inline bool jj_3R_440()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_363()
+ inline bool jj_3R_362()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_442()) jj_scanpos = xsp;
+    if (jj_3R_440()) jj_scanpos = xsp;
     if (jj_scan_token(NULL_T)) return true;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_102()
+ inline bool jj_3R_101()
  {
     if (jj_done) return true;
     if (jj_scan_token(COMMA_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     return false;
   }
 
- inline bool jj_3R_262()
+ inline bool jj_3R_261()
  {
     if (jj_done) return true;
     if (jj_scan_token(WHEN_T)) return true;
-    if (jj_3R_80()) return true;
+    if (jj_3R_79()) return true;
     return false;
   }
 
@@ -8583,42 +8516,42 @@ void parseInline();
     return false;
   }
 
- inline bool jj_3R_260()
+ inline bool jj_3R_259()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     if (jj_scan_token(COLON_T)) return true;
     return false;
   }
 
- inline bool jj_3R_124()
+ inline bool jj_3R_123()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_260()) jj_scanpos = xsp;
+    if (jj_3R_259()) jj_scanpos = xsp;
     if (jj_scan_token(NEXT_T)) return true;
     xsp = jj_scanpos;
-    if (jj_3R_261()) jj_scanpos = xsp;
+    if (jj_3R_260()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_262()) jj_scanpos = xsp;
+    if (jj_3R_261()) jj_scanpos = xsp;
     if (jj_scan_token(SEMI_T)) return true;
     return false;
   }
 
- inline bool jj_3R_221()
+ inline bool jj_3R_220()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_219()
+ inline bool jj_3R_218()
  {
     if (jj_done) return true;
-    if (jj_3R_234()) return true;
+    if (jj_3R_233()) return true;
     return false;
   }
 
@@ -8626,33 +8559,33 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_102()) { jj_scanpos = xsp; break; }
+      if (jj_3R_101()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_101()
+ inline bool jj_3R_100()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_219()) jj_scanpos = xsp;
+    if (jj_3R_218()) jj_scanpos = xsp;
     if (jj_scan_token(APOSTROPHE_T)) return true;
-    if (jj_3R_220()) return true;
+    if (jj_3R_219()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_221()) jj_scanpos = xsp;
+    if (jj_3R_220()) jj_scanpos = xsp;
     return false;
   }
 
  inline bool jj_3_47()
  {
     if (jj_done) return true;
-    if (jj_3R_99()) return true;
+    if (jj_3R_98()) return true;
     return false;
   }
 
@@ -8660,7 +8593,7 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
@@ -8668,19 +8601,19 @@ void parseInline();
  inline bool jj_3_49()
  {
     if (jj_done) return true;
-    if (jj_3R_101()) return true;
+    if (jj_3R_100()) return true;
     return false;
   }
 
- inline bool jj_3R_214()
+ inline bool jj_3R_213()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_59()) return true;
+    if (jj_3R_58()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_353()) { jj_scanpos = xsp; break; }
+      if (jj_3R_352()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
@@ -8690,60 +8623,60 @@ void parseInline();
  {
     if (jj_done) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_100()) return true;
+    if (jj_3R_99()) return true;
     return false;
   }
 
- inline bool jj_3R_210()
+ inline bool jj_3R_209()
  {
     if (jj_done) return true;
-    if (jj_3R_99()) return true;
+    if (jj_3R_98()) return true;
     return false;
   }
 
- inline bool jj_3R_213()
+ inline bool jj_3R_212()
  {
     if (jj_done) return true;
     if (jj_scan_token(LPAREN_T)) return true;
-    if (jj_3R_69()) return true;
+    if (jj_3R_68()) return true;
     if (jj_scan_token(RPAREN_T)) return true;
     return false;
   }
 
- inline bool jj_3R_150()
+ inline bool jj_3R_149()
  {
     if (jj_done) return true;
-    if (jj_3R_311()) return true;
+    if (jj_3R_310()) return true;
     return false;
   }
 
- inline bool jj_3R_212()
+ inline bool jj_3R_211()
  {
     if (jj_done) return true;
-    if (jj_3R_101()) return true;
+    if (jj_3R_100()) return true;
     return false;
   }
 
- inline bool jj_3R_211()
+ inline bool jj_3R_210()
  {
     if (jj_done) return true;
     if (jj_scan_token(DOT_T)) return true;
-    if (jj_3R_100()) return true;
+    if (jj_3R_99()) return true;
     return false;
   }
 
- inline bool jj_3R_99()
+ inline bool jj_3R_98()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_210()) {
+    jj_scanpos = xsp;
     if (jj_3R_211()) {
     jj_scanpos = xsp;
     if (jj_3R_212()) {
     jj_scanpos = xsp;
-    if (jj_3R_213()) {
-    jj_scanpos = xsp;
-    if (jj_3R_214()) return true;
+    if (jj_3R_213()) return true;
     }
     }
     }
@@ -8753,160 +8686,209 @@ void parseInline();
  inline bool jj_3_46()
  {
     if (jj_done) return true;
-    if (jj_3R_98()) return true;
+    if (jj_3R_97()) return true;
     return false;
   }
 
- inline bool jj_3R_98()
+ inline bool jj_3R_97()
  {
     if (jj_done) return true;
-    if (jj_3R_99()) return true;
+    if (jj_3R_98()) return true;
     Token * xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_210()) { jj_scanpos = xsp; break; }
+      if (jj_3R_209()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
- inline bool jj_3R_149()
+ inline bool jj_3R_148()
  {
     if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_69()) return true;
     return false;
   }
 
- inline bool jj_3R_151()
+ inline bool jj_3R_150()
  {
     if (jj_done) return true;
-    if (jj_3R_98()) return true;
+    if (jj_3R_97()) return true;
     return false;
   }
 
- inline bool jj_3R_148()
+ inline bool jj_3R_147()
  {
     if (jj_done) return true;
-    if (jj_3R_310()) return true;
+    if (jj_3R_309()) return true;
     return false;
   }
 
- inline bool jj_3R_60()
+ inline bool jj_3R_59()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
-    if (jj_3R_148()) {
+    if (jj_3R_147()) {
     jj_scanpos = xsp;
-    if (jj_3R_149()) {
+    if (jj_3R_148()) {
     jj_scanpos = xsp;
-    if (jj_3R_150()) return true;
+    if (jj_3R_149()) return true;
     }
     }
     xsp = jj_scanpos;
-    if (jj_3R_151()) jj_scanpos = xsp;
-    return false;
-  }
-
- inline bool jj_3R_625()
- {
-    if (jj_done) return true;
-    if (jj_3R_70()) return true;
+    if (jj_3R_150()) jj_scanpos = xsp;
     return false;
   }
 
- inline bool jj_3R_281()
+ inline bool jj_3R_280()
  {
     if (jj_done) return true;
     if (jj_scan_token(REM_T)) return true;
     return false;
   }
 
- inline bool jj_3R_280()
+ inline bool jj_3R_279()
  {
     if (jj_done) return true;
     if (jj_scan_token(MOD_T)) return true;
     return false;
   }
 
- inline bool jj_3R_279()
+ inline bool jj_3R_278()
  {
     if (jj_done) return true;
     if (jj_scan_token(SLASH_T)) return true;
     return false;
   }
 
- inline bool jj_3R_135()
+ inline bool jj_3R_134()
  {
     if (jj_done) return true;
     Token * xsp;
     xsp = jj_scanpos;
+    if (jj_3R_277()) {
+    jj_scanpos = xsp;
     if (jj_3R_278()) {
     jj_scanpos = xsp;
     if (jj_3R_279()) {
     jj_scanpos = xsp;
-    if (jj_3R_280()) {
-    jj_scanpos = xsp;
-    if (jj_3R_281()) return true;
+    if (jj_3R_280()) return true;
     }
     }
     }
     return false;
   }
 
- inline bool jj_3R_278()
+ inline bool jj_3R_277()
  {
     if (jj_done) return true;
     if (jj_scan_token(MULT_T)) return true;
     return false;
   }
 
- inline bool jj_3R_432()
+ inline bool jj_3R_628()
+ {
+    if (jj_done) return true;
+    if (jj_3R_69()) return true;
+    return false;
+  }
+
+ inline bool jj_3R_430()
  {
     if (jj_done) return true;
     if (jj_scan_token(LINKAGE_T)) return true;
     return false;
   }
 
- inline bool jj_3R_431()
+ inline bool jj_3R_429()
  {
     if (jj_done) return true;
     if (jj_scan_token(BUFFER_T)) return true;
     return false;
   }
 
-  public: TokenManager *token_source;
-  public: CharStream *jj_input_stream;
+ inline bool jj_3R_428()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(INOUT_T)) return true;
+    return false;
+  }
+
+ inline bool jj_3R_427()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(OUT_T)) return true;
+    return false;
+  }
+
+ inline bool jj_3R_345()
+ {
+    if (jj_done) return true;
+    Token * xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_426()) {
+    jj_scanpos = xsp;
+    if (jj_3R_427()) {
+    jj_scanpos = xsp;
+    if (jj_3R_428()) {
+    jj_scanpos = xsp;
+    if (jj_3R_429()) {
+    jj_scanpos = xsp;
+    if (jj_3R_430()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+ inline bool jj_3R_426()
+ {
+    if (jj_done) return true;
+    if (jj_scan_token(IN_T)) return true;
+    return false;
+  }
+
+
+public: 
+  TokenManager *token_source;
+  CharStream   *jj_input_stream;
   /** Current token. */
-  public: Token *token;
+  Token        *token;
   /** Next token. */
-  public: Token *jj_nt;
-  private: int jj_ntk;
-  private: JJCalls jj_2_rtns[115];
-  private: bool jj_rescan;
-  private: int jj_gc;
-  private: Token *jj_scanpos, *jj_lastpos;
-  private: int jj_la;
+  Token        *jj_nt;
+private: 
+  int           jj_ntk;
+  JJCalls       jj_2_rtns[115];
+  bool          jj_rescan;
+  int           jj_gc;
+  Token        *jj_scanpos, *jj_lastpos;
+  int           jj_la;
   /** Whether we are looking ahead. */
-  private: bool jj_lookingAhead;
-  private: bool jj_semLA;
-  private: int jj_gen;
-  private: int jj_la1[295];
-  private: ErrorHandler *errorHandler;
-  private: bool errorHandlerCreated;
-  protected: bool hasError;
-  public: void setErrorHandler(ErrorHandler *eh) {
+  bool          jj_lookingAhead;
+  bool          jj_semLA;
+  int           jj_gen;
+  int           jj_la1[294];
+  ErrorHandler *errorHandler;
+  bool          errorHandlerCreated;
+protected: 
+  bool          hasError;
+public: 
+  void setErrorHandler(ErrorHandler *eh) {
     if (errorHandlerCreated) delete errorHandler;
     errorHandler = eh;
     errorHandlerCreated = false;
   }
- Token *head; 
- public: 
+  Token *head; 
+public: 
 
  VhdlParser(TokenManager *tm);
-   public: virtual ~VhdlParser();
+  virtual ~VhdlParser();
 
 void ReInit(TokenManager *tm);
 
+void clear();
+
 Token * jj_consume_token(int kind);
 
 bool  jj_scan_token(int kind);
@@ -8916,26 +8898,30 @@ Token * getNextToken();
 Token * getToken(int index);
 
 int jj_ntk_f();
- private: int jj_kind;
+private:
+  int jj_kind;
   int **jj_expentries;
   int *jj_expentry;
 
-void jj_add_error_token(int kind, int pos);
+  void jj_add_error_token(int kind, int pos);
+protected:
+  /** Generate ParseException. */
 
-protected: virtual void  parseError();
-  private: int trace_indent;
-  private: bool trace_enabled;
-  /** Enable tracing. */
+  virtual void  parseError();
+private:
+  int  trace_indent;
+  bool trace_enabled;
 
-public: void enable_tracing();
+public:
 
-public: void disable_tracing();
+  void enable_tracing();
 
-void jj_rescan_token();
+  void disable_tracing();
 
-void jj_save(int index, int xla);
-typedef unsigned long long uint64;
+  void jj_rescan_token();
 
+  void jj_save(int index, int xla);
+typedef unsigned long long uint64;
 
 static Entry* current_root;
 static Entry* tempEntry;
@@ -8965,7 +8951,7 @@ static void addProto(const char *s1,const char *s2,const char *s3,const char *s4
 static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf);
 static void createFunction(const char *impure,uint64 spec,const char *fname);
 static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot);
-static void addCompInst(char *n, char* instName, char* comp,int iLine);
+static void addCompInst(const char *n, const char* instName, const char* comp,int iLine);
 static void handleCommentBlock(const char* doc,bool brief);
 static void handleFlowComment(const char*);
 static void initEntry(Entry *e);
@@ -8976,8 +8962,12 @@ static  QCString popLabel(QCString & q);
 static  bool addLibUseClause(const QCString &type);
 static  void mapLibPackage( Entry* root);
 static void createFlow();
-static void error_skipto(int kind);private: bool jj_done;
+static void error_skipto(int kind);
+static void oneLineComment(QCString qcs);
+static void setMultCommentLine();
 
+private:
+  bool jj_done;
 };
 }
 }
diff --git a/vhdlparser/VhdlParserConstants.h b/vhdlparser/VhdlParserConstants.h
index 0c2c0e5..73f2a43 100644
--- a/vhdlparser/VhdlParserConstants.h
+++ b/vhdlparser/VhdlParserConstants.h
@@ -375,7 +375,9 @@ const  int SPACE_CHARACTER = 184;
   /** RegularExpression Id. */
 const  int LOWER_CASE_LETTER = 185;
   /** RegularExpression Id. */
-const  int VHDL2008TOOLDIR = 186;
+const  int QUOTE = 186;
+  /** RegularExpression Id. */
+const  int VHDL2008TOOLDIR = 187;
 
   /** Lexical state. */
 const  int DEFAULT = 0;
@@ -754,6 +756,8 @@ const  int DEFAULT = 0;
   static JAVACC_CHAR_TYPE tokenImage_arr_185[] = 
 {0x22, 0x3c, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
   static JAVACC_CHAR_TYPE tokenImage_arr_186[] = 
+{0x22, 0x3c, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x3e, 0x22, 0};
+  static JAVACC_CHAR_TYPE tokenImage_arr_187[] = 
 {0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x32, 0x30, 0x30, 0x38, 0x54, 0x4f, 0x4f, 0x4c, 0x44, 0x49, 0x52, 0x3e, 0x22, 0};
   static JAVACC_STRING_TYPE tokenImage[] = {
 tokenImage_arr_0, 
@@ -943,6 +947,7 @@ tokenImage_arr_183,
 tokenImage_arr_184, 
 tokenImage_arr_185, 
 tokenImage_arr_186, 
+tokenImage_arr_187, 
   };
 
 }
diff --git a/vhdlparser/VhdlParserIF.cpp b/vhdlparser/VhdlParserIF.cpp
index e8768ee..f9f689b 100644
--- a/vhdlparser/VhdlParserIF.cpp
+++ b/vhdlparser/VhdlParserIF.cpp
@@ -32,6 +32,7 @@ void  VhdlParserIF::parseVhdlfile(const char* inputBuffer,bool inLine)
   //  fprintf(stderr,"\n\nparsed lines: %d\n",yyLineNr);
   //  fprintf(stderr,"\n\nerrors : %d\n\n",myErr->getErrorCount());
   delete myParser;
+  delete myErr;
  
 }
 
diff --git a/vhdlparser/VhdlParserTokenManager.cc b/vhdlparser/VhdlParserTokenManager.cc
index a35deb2..ca09e99 100644
--- a/vhdlparser/VhdlParserTokenManager.cc
+++ b/vhdlparser/VhdlParserTokenManager.cc
@@ -1,5 +1,6 @@
 /* VhdlParserTokenManager.cc */
-#include "./VhdlParserTokenManager.h"
+#include "VhdlParserTokenManager.h"
+#include "TokenMgrError.h"
 namespace vhdl {
 namespace parser {
 static const unsigned long long jjbitVec0[] = {
@@ -234,6 +235,7 @@ static JAVACC_CHAR_TYPE jjstrLiteralChars_183[] = {0};
 static JAVACC_CHAR_TYPE jjstrLiteralChars_184[] = {0};
 static JAVACC_CHAR_TYPE jjstrLiteralChars_185[] = {0};
 static JAVACC_CHAR_TYPE jjstrLiteralChars_186[] = {0};
+static JAVACC_CHAR_TYPE jjstrLiteralChars_187[] = {0};
 static const JAVACC_STRING_TYPE jjstrLiteralImages[] = {
 jjstrLiteralChars_0, 
 jjstrLiteralChars_1, 
@@ -422,6 +424,7 @@ jjstrLiteralChars_183,
 jjstrLiteralChars_184, 
 jjstrLiteralChars_185, 
 jjstrLiteralChars_186, 
+jjstrLiteralChars_187, 
 };
 
 /** Lexer state names. */
@@ -431,7 +434,7 @@ static const JAVACC_STRING_TYPE lexStateNames[] = {
 lexStateNames_arr_0, 
 };
 static const unsigned long long jjtoToken[] = {
-   0xfffffffffffff801ULL, 0xffffffffffffffffULL, 0x4081fffffffffffULL, 
+   0xfffffffffffff801ULL, 0xffffffffffffffffULL, 0x8081fffffffffffULL, 
 };
 static const unsigned long long jjtoSkip[] = {
    0x7deULL, 0x0ULL, 0x0ULL, 
@@ -2795,7 +2798,7 @@ int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){
                      jjstateSet[jjnewStateCnt++] = 18;
                   break;
                case 18:
-                  if ((0xfffffffb00000200ULL & l) != 0L)
+                  if ((0xffffffff00000200ULL & l) != 0L)
                      jjstateSet[jjnewStateCnt++] = 19;
                   break;
                case 19:
@@ -2832,15 +2835,15 @@ int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){
                case 28:
                   if (curChar != 34)
                      break;
-                  if (kind > 186)
-                     kind = 186;
+                  if (kind > 187)
+                     kind = 187;
                   { jjCheckNAddTwoStates(26, 29); }
                   break;
                case 29:
                   if ((0xfffffffb00000200ULL & l) == 0L)
                      break;
-                  if (kind > 186)
-                     kind = 186;
+                  if (kind > 187)
+                     kind = 187;
                   { jjCheckNAddTwoStates(26, 29); }
                   break;
                case 30:
@@ -3116,8 +3119,8 @@ int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){
                case 29:
                   if ((0x7fffffffffffffffULL & l) == 0L)
                      break;
-                  if (kind > 186)
-                     kind = 186;
+                  if (kind > 187)
+                     kind = 187;
                   { jjCheckNAddTwoStates(26, 29); }
                   break;
                case 32:
@@ -3217,8 +3220,8 @@ int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){
                case 29:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 186)
-                     kind = 186;
+                  if (kind > 187)
+                     kind = 187;
                   { jjAddStates(52, 53); }
                   break;
                case 32:
@@ -3307,10 +3310,10 @@ bool VhdlParserTokenManager::jjCanMove_1(int hiByte, int i1, int i2, unsigned lo
 Token * VhdlParserTokenManager::jjFillToken(){
    Token *t;
    JAVACC_STRING_TYPE curTokenImage;
-   int beginLine;
-   int endLine;
-   int beginColumn;
-   int endColumn;
+   int beginLine   = -1;
+   int endLine     = -1;
+   int beginColumn = -1;
+   int endColumn   = -1;
    JAVACC_STRING_TYPE im = jjstrLiteralImages[jjmatchedKind];
    curTokenImage = (im.length() == 0) ? input_stream->GetImage() : im;
    if (input_stream->getTrackLineColumn()) {
@@ -3319,7 +3322,9 @@ Token * VhdlParserTokenManager::jjFillToken(){
      endLine = input_stream->getEndLine();
      endColumn = input_stream->getEndColumn();
    }
-   t = Token::newToken(jjmatchedKind, curTokenImage);
+   t = Token::newToken(jjmatchedKind);
+   t->kind = jjmatchedKind;
+   t->image = curTokenImage;
    t->specialToken = NULL;
    t->next = NULL;
 
@@ -3405,7 +3410,16 @@ void  VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){
        }
       case 6 : {
          image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-                                                          ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);
+    {
+    QCString doc(image.data());
+    int count=doc.contains("--!");
+    ::vhdl::parser::VhdlParser::setMultCommentLine();
+    ::vhdl::parser::VhdlParser::lineCount(image.data());
+    if (count == 1)
+      ::vhdl::parser::VhdlParser::oneLineComment(doc);
+    else
+      ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
+    }
          break;
        }
       case 7 : {
@@ -3415,15 +3429,17 @@ void  VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){
        }
       case 8 : {
          image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-                                                                   ::vhdl::parser::VhdlParser::lineCount(image.data());
+    ::vhdl::parser::VhdlParser::lineCount(image.data());
          break;
        }
       case 9 : {
          image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-   QCString q(image.data());
-   q.stripPrefix("/*!");
-   q.resize(q.length()-2);
-  ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+   {
+     QCString q(image.data());
+     q.stripPrefix("/*!");
+     q.resize(q.length()-2);
+     ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+   }
          break;
        }
       case 10 : {
@@ -3560,7 +3576,7 @@ void  VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
 }
   /** Reinitialise parser. */
   void VhdlParserTokenManager::ReInit(JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg) {
-    if (input_stream) delete input_stream;
+    clear();
     jjmatchedPos = jjnewStateCnt = 0;
     curLexState = lexState;
     input_stream = stream;
@@ -3581,10 +3597,17 @@ void  VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
 
   /** Switch to specified lex state. */
   void VhdlParserTokenManager::SwitchTo(int lexState) {
-    if (lexState >= 1 || lexState < 0)
-      assert(false);
-      //throw 1;//new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
-    else
+    if (lexState >= 1 || lexState < 0) {
+      JAVACC_STRING_TYPE message;
+#ifdef WIDE_CHAR
+      message += L"Error: Ignoring invalid lexical state : ";
+      message += lexState; message += L". State unchanged.";
+#else
+      message += "Error: Ignoring invalid lexical state : ";
+      message += lexState; message += ". State unchanged.";
+#endif
+      throw new TokenMgrError(message, INVALID_LEXICAL_STATE);
+    } else
       curLexState = lexState;
   }
 
@@ -3592,14 +3615,23 @@ void  VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
   VhdlParserTokenManager::VhdlParserTokenManager (JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg)
   {
     input_stream = NULL;
+    errorHandlerCreated = false;
     ReInit(stream, lexState, parserArg);
   }
 
   // Destructor
   VhdlParserTokenManager::~VhdlParserTokenManager () {
-    if (input_stream) delete input_stream;
-    if (errorHandlerCreated) delete errorHandler;
+    clear();
+  }
+
+  // clear
+  void VhdlParserTokenManager::clear() {
+    //Since input_stream was generated outside of TokenManager
+    //TokenManager should not take care of deleting it
+    //if (input_stream) delete input_stream;
+    if (errorHandlerCreated) delete errorHandler;    
   }
 
+
 }
 }
diff --git a/vhdlparser/VhdlParserTokenManager.h b/vhdlparser/VhdlParserTokenManager.h
index 3916069..f24c8e3 100644
--- a/vhdlparser/VhdlParserTokenManager.h
+++ b/vhdlparser/VhdlParserTokenManager.h
@@ -1,5 +1,6 @@
 #ifndef VHDLPARSERTOKENMANAGER_H
 #define VHDLPARSERTOKENMANAGER_H
+#include "stdio.h"
 #include "JavaCC.h"
 #include "CharStream.h"
 #include "Token.h"
@@ -116,23 +117,27 @@ void  TokenLexicalActions(Token *matchedToken);
   public: virtual ~VhdlParserTokenManager();
   void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL);
   void SwitchTo(int lexState);
+  void clear();
   const JAVACC_SIMPLE_STRING jjKindsForBitVector(int i, unsigned long long vec);
   const JAVACC_SIMPLE_STRING jjKindsForStateVector(int lexState, int vec[], int start, int end);
-    JAVACC_CHARSTREAM  *input_stream;
-    int jjrounds[75];
-    int jjstateSet[2 * 75];
-    JAVACC_STRING_TYPE jjimage;
-    JAVACC_STRING_TYPE image;
-    int jjimageLen;
-    int lengthOfMatch;
-    JAVACC_CHAR_TYPE curChar;
-    TokenManagerErrorHandler *errorHandler;
-    bool errorHandlerCreated;
-    public: void setErrorHandler(TokenManagerErrorHandler *eh) {
+  JAVACC_CHARSTREAM*        input_stream;
+  int                       jjrounds[75];
+  int                       jjstateSet[2 * 75];
+  JAVACC_STRING_TYPE        jjimage;
+  JAVACC_STRING_TYPE        image;
+  int                       jjimageLen;
+  int                       lengthOfMatch;
+  JAVACC_CHAR_TYPE          curChar;
+  TokenManagerErrorHandler* errorHandler;
+  bool                      errorHandlerCreated;
+
+public: 
+  void setErrorHandler(TokenManagerErrorHandler *eh) {
       if (errorHandlerCreated && errorHandler != NULL) delete errorHandler;
       errorHandler = eh;
       errorHandlerCreated = false;
     }
+    
 };
 }
 }
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
index 7a4283f..befc4e0 100644
--- a/vhdlparser/vhdlparser.jj
+++ b/vhdlparser/vhdlparser.jj
@@ -3,8 +3,8 @@
  * Copyright (C) 2014 by M. Kreis
  *
  * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby 
- * granted. No representations are made about the suitability of this software 
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
  * for any purpose. It is provided "as is" without express or implied warranty.
  * See the GNU General Public License for more details.
  *
@@ -20,14 +20,13 @@ options {
  //OUTPUT_DIRECTORY = ".";
 // DEBUG_PARSER=true;
  //DEBUG_LOOKAHEAD=true;
- 
+
   }
 
 PARSER_BEGIN(VhdlParser)
 
 typedef unsigned long long uint64;
 
-
 static Entry* current_root;
 static Entry* tempEntry;
 static Entry*  lastEntity  ;
@@ -56,7 +55,7 @@ static void addProto(const char *s1,const char *s2,const char *s3,const char *s4
 static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf);
 static void createFunction(const char *impure,uint64 spec,const char *fname);
 static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot);
-static void addCompInst(char *n, char* instName, char* comp,int iLine);
+static void addCompInst(const char *n, const char* instName, const char* comp,int iLine);
 static void handleCommentBlock(const char* doc,bool brief);
 static void handleFlowComment(const char*);
 static void initEntry(Entry *e);
@@ -68,7 +67,8 @@ static  bool addLibUseClause(const QCString &type);
 static  void mapLibPackage( Entry* root);
 static void createFlow();
 static void error_skipto(int kind);
-
+static void oneLineComment(QCString qcs);
+static void setMultCommentLine();
 PARSER_END(VhdlParser)
 
 SKIP :
@@ -82,24 +82,41 @@ SKIP :
 SKIP:
 {
   // VHDL comment -- ......
-  // VHDL doxygen line comment --! .... 
-  <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> 
-  | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ >  { ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE); }
+  // VHDL doxygen line comment --! ....
+  <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
+  | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ >
+  {
+    {
+    QCString doc(image.data());
+    int count=doc.contains("--!");
+    ::vhdl::parser::VhdlParser::setMultCommentLine();
+    ::vhdl::parser::VhdlParser::lineCount(image.data());
+    if (count == 1)
+      ::vhdl::parser::VhdlParser::oneLineComment(doc);
+    else
+      ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
+    }
+
+  }
   |<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>  { ::vhdl::parser::VhdlParser::handleFlowComment(image.data());}
-  |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::lineCount(image.data());}
- }
+  |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
+  {
+    ::vhdl::parser::VhdlParser::lineCount(image.data());}
+  }
 
 // VHDL 2008  comment /* .... */
 // VHDL 2008 doxygen comment /*! .... */
 SKIP :
 {
-  <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!"  (~[])* "*/" > 
+  <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!"  (~[])* "*/" >
   {
-   QCString q(image.data());
-   q.stripPrefix("/*!"); 
-   q.resize(q.length()-2);   
-  ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
-  } 
+   {
+     QCString q(image.data());
+     q.stripPrefix("/*!");
+     q.resize(q.length()-2);
+     ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+   }
+  }
   | <MULT_VHDL_2008_COMMENT : "/*"  (~[])* "*/" >  {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();}
 }
 
@@ -107,7 +124,7 @@ SKIP :
 
 TOKEN [IGNORE_CASE] :
 {
- <ABS_T: "abs">     
+ <ABS_T: "abs">
 | <ACCESS_T: "access">
 | <AFTER_T: "after">
 | <ALIAS_T: "alias">
@@ -115,86 +132,86 @@ TOKEN [IGNORE_CASE] :
 | <AND_T: "and">
 | <ARCHITECTURE_T: "architecture"> {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);}
 | <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
-| <ASSERT_T: "assert"> 
-| <ASSUME_T: "assume"> 
-| <ASSUME_GUARANTEE_T: "assume_guarentee"> 
+| <ASSERT_T: "assert">
+| <ASSUME_T: "assume">
+| <ASSUME_GUARANTEE_T: "assume_guarentee">
 | <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
-| <BEGIN_T: "begin"> 
-| <BLOCK_T: "block"> 
+| <BEGIN_T: "begin">
+| <BLOCK_T: "block">
 | <BODY_T: "body"> {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);}
 | <BUFFER_T: "buffer">
-| <BUS_T: "bus"> 
+| <BUS_T: "bus">
 | <COMPONENT_T: "component"> {VhdlParser::setLineParsed(COMPONENT_T);}
-| <CASE_T: "case"> 
+| <CASE_T: "case">
 | <CONFIGURATION_T: "configuration"> {VhdlParser::setLineParsed(CONFIGURATION_T);}
 | <CONSTANT_T: "constant">  {VhdlParser::setLineParsed(CONSTANT_T);}
 | <CONTEXT_T: "context"> {VhdlParser::setLineParsed(CONTEXT_T);}
-| <COVER_T: "cover"> 
-| <DEFAULT_T: "default"> 
-| <DISCONNECT_T: "disconnect"> 
-| <DOWNTO_T: "downto"> 
-| <ELSE_T: "else"> 
-| <ELSIF_T: "elsif"> 
+| <COVER_T: "cover">
+| <DEFAULT_T: "default">
+| <DISCONNECT_T: "disconnect">
+| <DOWNTO_T: "downto">
+| <ELSE_T: "else">
+| <ELSIF_T: "elsif">
 | <END_T: "end"> {VhdlParser::setLineParsed(END_T);}
 | <ENTITY_T: "entity"> {VhdlParser::setLineParsed(ENTITY_T);}
-| <EXIT_T: "exit"> 
-| <FAIRNESS_T: "fairness"> 
+| <EXIT_T: "exit">
+| <FAIRNESS_T: "fairness">
 | <FILE_T: "file"> {VhdlParser::setLineParsed(FILE_T);}
-| <FOR_T: "for"> 
+| <FOR_T: "for">
 | <FORCE_T: "force">
 | <FUNCTION_T: "function">  {VhdlParser::setLineParsed(FUNCTION_T);}
-| <GENERATE_T: "generate"> 
-| <GENERIC_T: "generic">  
+| <GENERATE_T: "generate">
+| <GENERIC_T: "generic">
 | <GROUP_T: "group"> {VhdlParser::setLineParsed(GROUP_T);}
-| <GUARDED_T: "guarded"> 
-| <IF_T: "if"> 
-| <IMPURE_T: "impure"> 
-| <IN_T: "in"> 
-| <INERTIAL_T: "inertial">  
-| <INOUT_T: "inout"> 
-| <IS_T: "is"> 
+| <GUARDED_T: "guarded">
+| <IF_T: "if">
+| <IMPURE_T: "impure">
+| <IN_T: "in">
+| <INERTIAL_T: "inertial">
+| <INOUT_T: "inout">
+| <IS_T: "is">
 | <LABEL_T: "label">
 | <LIBRARY_T: "library"> {VhdlParser::setLineParsed(LIBRARY_T);}
-| <LINKAGE_T: "linkage">  
-| <LITERAL_T: "literal"> 
-| <LOOP_T: "loop"> 
-| <MAP_T: "map">  
-| <MOD_T: "mod"> 
-| <NAND_T: "nand"> 
-| <NEW_T: "new"> 
-| <NEXT_T: "next"> 
+| <LINKAGE_T: "linkage">
+| <LITERAL_T: "literal">
+| <LOOP_T: "loop">
+| <MAP_T: "map">
+| <MOD_T: "mod">
+| <NAND_T: "nand">
+| <NEW_T: "new">
+| <NEXT_T: "next">
 | <NOR_T: "nor">
 | <NOT_T: "not">
-| <NULL_T: "null">   
+| <NULL_T: "null">
 | <OF_T: "of">
-| <ON_T: "on">  
-| <OPEN_T: "open"> 
-| <OR_T: "or"> 
-| <OTHER_T: "others"> 
-| <OUT_T: "out"> 
+| <ON_T: "on">
+| <OPEN_T: "open">
+| <OR_T: "or">
+| <OTHER_T: "others">
+| <OUT_T: "out">
 | <PACKAGE_T: "package"> {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);}
-| <PARAMETER_T: "parameter"> 
+| <PARAMETER_T: "parameter">
 | <PORT_T: "port"> {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);}
-| <POSTPONED_T: "postponed"> 
+| <POSTPONED_T: "postponed">
 | <PROCEDURE_T: "procedure"> {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);}
 | <PROCESS_T: "process"> {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);}
-| <PROPERTY_T: "property"> 
-| <PROTECTED_T: "protected"> 
-| <PURE_T: "pure"> 
-| <RANGE_T: "range"> 
+| <PROPERTY_T: "property">
+| <PROTECTED_T: "protected">
+| <PURE_T: "pure">
+| <RANGE_T: "range">
 | <RECORD_T: "record"> {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);}
-| <REGISTER_T: "register"> 
-| <REJECT_T: "reject"> 
-| <RELEASE_T: "release">  
-| <RESTRICT_T: "restrict"> 
-| <RESTRICT_GUARANTEE_T: "restrict_guarantee"> 
-| <REM_T: "rem"> 
-| <REPORT_T: "report"> 
-| <ROL_T: "rol"> 
-| <ROR_T: "ror"> 
-| <RETURN_T: "return"> 
-| <SELECT_T: "select">  
-| <SEQUENCE_T: "sequence"> 
+| <REGISTER_T: "register">
+| <REJECT_T: "reject">
+| <RELEASE_T: "release">
+| <RESTRICT_T: "restrict">
+| <RESTRICT_GUARANTEE_T: "restrict_guarantee">
+| <REM_T: "rem">
+| <REPORT_T: "report">
+| <ROL_T: "rol">
+| <ROR_T: "ror">
+| <RETURN_T: "return">
+| <SELECT_T: "select">
+| <SEQUENCE_T: "sequence">
 | <SEVERITY_T: "severity">
 | <SIGNAL_T: "signal"> {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);}
 | <SHARED_T: "shared">
@@ -213,11 +230,11 @@ TOKEN [IGNORE_CASE] :
 | <UNTIL_T: "until">
 | <USE_T: "use">
 | <VARIABLE_T: "variable">
-| <VMODE_T: "vmode"> 
-| <VPROP_T: "vprop">  
+| <VMODE_T: "vmode">
+| <VPROP_T: "vprop">
 | <VUNIT_T: "vunit">
 | <WAIT_T: "wait">
-| <WHEN_T: "when">  
+| <WHEN_T: "when">
 | <WHILE_T: "while">
 | <WITH_T: "with">
 | <XOR_T: "xor">
@@ -270,16 +287,16 @@ TOKEN :
 
 }
 
-TOKEN: 
+TOKEN:
 {
-  <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* > 
+  <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* >
  | <STRINGLITERAL: (( ["\""](<GRAPHIC_CHARACTER>)*) "\"")+ >
  | <BASIC_IDENTIFIER:  (<LETTER> ( (["_"])* <LETTER_OR_DIGIT> )*) >
  | <EXTENDED_CHARACTER: ( ["\\"](<GRAPHIC_CHARACTER>)*["\\"] ) >
- | <CHARACTER_LITERAL: (["'"]<GRAPHIC_CHARACTER>["'"]) > 
+ | <CHARACTER_LITERAL: (["'"](<GRAPHIC_CHARACTER>|<QUOTE>)["'"]) >
  | <DECIMAL_LITERAL: (<INTEGER> (["."]<INTEGER>)? (<EXPONENT>)? ) >
  | <BASED_INTEGER: <LETTER_OR_DIGIT>( <LETTER_OR_DIGIT>)* >
- | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? > 
+ | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? >
  | <#EXPONENT: (["e","E"] (["+","-"])? (<INTEGER>)+) >
  | < #BASIC_GRAPHIC_CHARACTER:    (<UPPER_CASE_LETTER>|<DIGIT>|<SPECIAL_CHARACTER>|<SPACE_CHARACTER>) >
  | < #GRAPHIC_CHARACTER: ( <BASIC_GRAPHIC_CHARACTER>|<LOWER_CASE_LETTER>|<OTHER_SPECIAL_CHARACTER> ) >
@@ -293,55 +310,56 @@ TOKEN:
  | < #OTHER_SPECIAL_CHARACTER: ["%","!","$","@","?","[","\\","]","^","`","{","}","~","\u00A0"-"\u00FF"]>
  | < #SPACE_CHARACTER: [" ","\t"] >
  | < #LOWER_CASE_LETTER: ["a"-"z"] >
+ | < #QUOTE: ["\""] >
  | <VHDL2008TOOLDIR  : ["`"](<GRAPHIC_CHARACTER>|<STRINGLITERAL>)+ >
- 
+
 }
 
-QCString abstract_literal() : 
+QCString abstract_literal() :
 {Token *tok;}
 {
-  tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
- | tok=<INTEGER>            { return tok->image.c_str(); }
-  | tok=<BASED_LITERAL> { return tok->image.c_str(); }
+   tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
+ | tok=<INTEGER>         { return tok->image.c_str(); }
+ | tok=<BASED_LITERAL>   { return tok->image.c_str(); }
 }
 
 QCString access_type_definition() :
-{Token *tok;QCString str,str1;}
+{Token *tok=0;QCString str,str1;}
 {
-tok=<ACCESS_T> str1=subtype_indication() {str=tok->image.c_str(); return str+str1;}
+  tok=<ACCESS_T> str1=subtype_indication() { str=tok->image.c_str(); return str+str1; }
 }
 
-QCString actual_designator() :  
-{QCString str;Token *t;}
+QCString actual_designator() :
+{QCString str;Token *t=0;}
 {
 t=<OPEN_T> { return t->image.c_str(); }
 |
 LOOKAHEAD(expression())
   str=expression() { return str; }
 |
-  LOOKAHEAD(name()) 
+  LOOKAHEAD(name())
  str=name() { return str; }
 }
 
-QCString actual_parameter_part() :  
+QCString actual_parameter_part() :
 {QCString s;}
 {
    s=association_list() { return s;}
 }
 
-QCString actual_part() :  
+QCString actual_part() :
 {QCString s,s1;}
 {
  LOOKAHEAD(actual_designator())
  s=actual_designator() { return s;}
  |
    <BOX_T> { return "<>";}
- | 
+ |
  s=name() <LPAREN_T> s1=actual_designator() <RPAREN_T> {s+="(";s+=s1+")";return s;}
- 
+
  }
 
-QCString adding_operator () : 
+QCString adding_operator () :
 {}
 {
   <PLUS_T> { return "+";}
@@ -357,12 +375,12 @@ QCString aggregate() :  {QCString s,s1,s2;}
 QCString alias_declaration() :  {QCString s,s1,s2;}
 {
  <ALIAS_T> s2=alias_designator()
- [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }] 
- <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}] 
+ [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }]
+ <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
  <SEMI_T>
-{ 
+{
  addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
-                                
+
  return s2+" "+s+";";
 }
  }
@@ -376,25 +394,25 @@ QCString alias_designator()  : {Token *tok=0;QCString s;}
 
 void allocator()  :{}
 {
- LOOKAHEAD(3) 
+ LOOKAHEAD(3)
  <NEW_T> qualified_expression()
  |  <NEW_T>  subtype_indication()
 }
 
 void architecture_body() : {QCString s,s1;}
 {
- 
-	<ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
-	{
+
+    <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
+    {
                   QCString t=s1+"::"+s;
                   genLabels.resize(0);
                   pushLabel(genLabels,s1);
                   lastCompound=current;
                   addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
-	}
+    }
    try{
-   architecture_declarative_part() 
-    }catch(...){error_skipto(BEGIN_T);}  
+   architecture_declarative_part()
+    }catch(...){error_skipto(BEGIN_T);}
    <BEGIN_T>
    architecture_statement_part()
   <END_T> [<ARCHITECTURE_T>] [name()] <SEMI_T>
@@ -417,10 +435,10 @@ QCString array_type_definition ():  { QCString s;}
 {
 
  LOOKAHEAD(unconstraint_array_definition())
- 
+
   s=unconstraint_array_definition() {return s;}
   | s=constraint_array_definition()  {return s;}
-  
+
 }
 
 QCString assertion() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
@@ -439,7 +457,7 @@ QCString assertion_statement() :  {QCString s,s1,s2;Token *t=0;}
   [ s=label() t=<COLON_T> ] s1=assertion() <SEMI_T>
   {
     if(t) s+=":";
-	return s+s1+";";
+    return s+s1+";";
   }
 }
 QCString association_element() : {QCString s,s1;}
@@ -455,14 +473,14 @@ s=association_element() (<COMMA_T> s1=association_element() { s+=","+s1; })* { r
 
 QCString attribute_declaration() : {QCString s,s1;}
 {
- <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T> 
-  {    
-	addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
+ <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
+  {
+    addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
     return " attribute "+s+":"+s1+";";
-  }          
+  }
  }
 
-QCString attribute_designator (): {QCString s;Token *tok;}
+QCString attribute_designator (): {QCString s;Token *tok=0;}
 {
   s=identifier() { return s;}
   | tok=<RANGE_T> { return tok->image.c_str(); }
@@ -477,40 +495,40 @@ QCString attribute_name (): {QCString s,s1;}
 QCString attribute_specification():  {QCString s,s1,s2;}
 {
   <ATTRIBUTE_T> s=attribute_designator() <OF_T> s1=entity_specification() <IS_T> s2=expression() <SEMI_T>
-  { 
-   QCString t= s1+" is "+s2; 
+  {
+   QCString t= s1+" is "+s2;
    addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
-   return " attribute "+s+" of "+s1+ " is "+s2+";";           
+   return " attribute "+s+" of "+s1+ " is "+s2+";";
   }
 }
 
-QCString base() :  {Token *tok;}
+QCString base() :  {Token *tok=0;}
 {
   tok=<INTEGER> { return tok->image.c_str();}
 }
 
-QCString base_specifier ():  {Token *tok;}
+QCString base_specifier ():  {Token *tok=0;}
 {
    tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
 }
 
-QCString base_unit_declaration() : 
+QCString base_unit_declaration() :
 {QCString s;}
 {
   s=identifier() { return s; }
 }
 
-QCString based_integer() :  {Token *tok;}
+QCString based_integer() :  {Token *tok=0;}
 {
   tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
 }
 
-QCString based_literal():  {Token *tok;}
+QCString based_literal():  {Token *tok=0;}
 {
  tok=<BASED_LITERAL> { return tok->image.c_str();}
 }
 
-QCString basic_identifier() :  {Token *tok;}
+QCString basic_identifier() :  {Token *tok=0;}
 {
   tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
 }
@@ -522,13 +540,13 @@ void binding_indication() :  {}
  [ port_map_aspect() ]
 }
 
-QCString bit_string_literal ():  {Token *tok;}
+QCString bit_string_literal ():  {Token *tok=0;}
 {
   tok=<BIT_STRING_LITERAL> { return tok->image.c_str();}
 }
 
 
-QCString bit_value() :  {Token *tok;}
+QCString bit_value() :  {Token *tok=0;}
 {
   tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
 }
@@ -537,7 +555,7 @@ void block_configuration() : {}
 {
     <FOR_T> block_specification()
         ( use_clause() )*
-        ( configuration_item())* 
+        ( configuration_item())*
     <END_T> <FOR_T> <SEMI_T>
 }
 
@@ -564,7 +582,7 @@ attribute_declaration()
 LOOKAHEAD(3)
 group_template_declaration()
 | group_declaration()
-| <VHDL2008TOOLDIR>
+//| <VHDL2008TOOLDIR>
 }
 
 void block_declarative_part() : {}
@@ -577,7 +595,7 @@ void block_header() : {}
 [LOOKAHEAD(generic_clause()) generic_clause()[ generic_map_aspect() <SEMI_T> ] ]
 [ port_clause() [ port_map_aspect() <SEMI_T> ] ]
 }
- 
+
 void block_specification() :  {}
 {
   name()[LOOKAHEAD(1) <LPAREN_T> index_specification() <RPAREN_T>]
@@ -590,9 +608,9 @@ void block_statement() :  {QCString s;}
             block_header()
             block_declarative_part()
             <BEGIN_T>
-			block_statement_part() 
-			<END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
-			{
+            block_statement_part()
+            <END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
+            {
               genLabels=popLabel(genLabels);
             }
 }
@@ -605,33 +623,33 @@ void block_statement_part() :  {}
 void  case_statement() : {QCString s;}
 {
 [ identifier() <COLON_T> ]
-  <CASE_T> s=expression() 
+  <CASE_T> s=expression()
     {
      QCString ca="case "+s;
      FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca);
-    }                 
+    }
   <IS_T>
         case_statement_alternative()
         ( case_statement_alternative ())*
-		<END_T> <CASE_T> [ identifier() ] <SEMI_T>
-		{
+        <END_T> <CASE_T> [ identifier() ] <SEMI_T>
+        {
          FlowChart::moveToPrevLevel();
          FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0);
-      	}
+          }
 }
 
 void case_statement_alternative() :  {QCString s;}
 {
-  <WHEN_T> s=choices() <ARROW_T> 
-   {  
+  <WHEN_T> s=choices() <ARROW_T>
+   {
     QCString t="when ";
     t+=s+"=> ";
     FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t);
-	}
+    }
   sequence_of_statement(){FlowChart::moveToPrevLevel(); }
 }
 
-QCString character_literal() :  {Token *tok;}
+QCString character_literal() :  {Token *tok=0;}
 {
   tok=<CHARACTER_LITERAL>{ return tok->image.c_str();}
 }
@@ -640,7 +658,7 @@ QCString choice() : {QCString s;}
 {
    LOOKAHEAD(simple_expression())
   s=simple_expression(){ return s; }
-  | 
+  |
   LOOKAHEAD(discrete_range())
   s=discrete_range(){ return s; }
   |
@@ -648,10 +666,10 @@ QCString choice() : {QCString s;}
   s=identifier(){ return s; }
   | <OTHER_T> { return " others "; }
 }
- 
+
 QCString choices() :  {QCString s,s1;}
 {
-  s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; } 
+  s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; }
 }
 
 void component_configuration () :{}
@@ -664,7 +682,7 @@ void component_configuration () :{}
 void component_declaration() :  {QCString s;}
 {
  <COMPONENT_T> s=identifier() [ <IS_T> ]
-   { currP=VhdlDocGen::COMPONENT; }       
+   { currP=VhdlDocGen::COMPONENT; }
   [ generic_clause() ]
   [ port_clause() ]
    {
@@ -678,10 +696,10 @@ void component_declaration() :  {QCString s;}
 void component_instantiation_statement() :  {QCString s,s1;}
 {
 
-s=identifier() <COLON_T> 
+s=identifier() <COLON_T>
  s1=instantiation_unit()
  {
-       addCompInst(s.lower().data(),s1.lower().data(),0,getLine());                      
+       addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
  }
         [ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
         [ port_map_aspect() ] <SEMI_T>
@@ -710,7 +728,7 @@ void concurrent_procedure_call_statement() :  {}
 
 void concurrent_signal_assignment_statement() :  {}
 {
-[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ] 
+[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ]
 (
 LOOKAHEAD(conditional_signal_assignment() )
  conditional_signal_assignment()
@@ -725,21 +743,21 @@ void concurrent_statement() :  {}
 // try {
 LOOKAHEAD([identifier() ":"] <BLOCK_T>)
 block_statement()
-| 
+|
 LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <PROCESS_T>)
 process_statement()
-| 
+|
 LOOKAHEAD(generate_statement())
 generate_statement()
-| 
+|
 case_scheme()
 |
 LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <ASSERT_T>)
 concurrent_assertion_statement()
-| 
+|
 LOOKAHEAD(concurrent_signal_assignment_statement())
     concurrent_signal_assignment_statement()
-| 
+|
 LOOKAHEAD(component_instantiation_statement() )
 component_instantiation_statement()
 |
@@ -762,14 +780,14 @@ QCString condition() :  {QCString s;}
 QCString condition_clause() :  {QCString s;}
 {
   <UNTIL_T> s=condition()
-  { 
+  {
     return " until "+s;
   }
 }
 
 void conditional_signal_assignment() :  {}
 {
-  // LOOKAHEAD(  target() "<=" options_() conditional_waveforms() ";") 
+  // LOOKAHEAD(  target() "<=" options_() conditional_waveforms() ";")
  target() <LESSTHAN_T> options() conditional_waveforms() <SEMI_T>
 }
 
@@ -782,7 +800,7 @@ waveform()
 }
 
 // ( waveform() < WHEN_T> condition() <ELSE_T> )*
-//   waveform() [ <WHEN_T> condition() ] 
+//   waveform() [ <WHEN_T> condition() ]
 
 //waveform()
  //   ( LOOKAHEAD( <WHEN> condition() <ELSE>)
@@ -793,12 +811,12 @@ void configuration_declaration() :  {QCString s,s1;}
 {
  <CONFIGURATION_T> s=identifier() <OF_T> s1=name() <IS_T>
   {
- 
+
   confName=s+"::"+s1;
   addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
-  }      
+  }
     configuration_declarative_part()
-    block_configuration() 
+    block_configuration()
  <END_T> [ <CONFIGURATION_T> ] [ name() ] <SEMI_T>
  { genLabels.resize(0); confName="";}
 }
@@ -812,7 +830,7 @@ void configuration_declarative_item() : {}
 
 void configuration_declarative_part() :  {}
 {
- (configuration_declarative_item())* 
+ (configuration_declarative_item())*
 }
 
 void configuration_item ():  {}
@@ -820,25 +838,25 @@ void configuration_item ():  {}
  LOOKAHEAD(component_configuration())
  component_configuration()
  | block_configuration()
- 
+
 }
 
 void configuration_specification() :  {}
 {
-<FOR_T> component_specification() binding_indication() <SEMI_T> 
+<FOR_T> component_specification() binding_indication() <SEMI_T>
 }
 
 QCString constant_declaration() :  {QCString s,s1,s2;Token *t=0;}
 {
-   <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <SEMI_T>    
+   <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <SEMI_T>
     {
      if(t)
-	  s2.prepend(":=");
-	 QCString it=s1+s2;
+      s2.prepend(":=");
+     QCString it=s1+s2;
      addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
      it.prepend("constant ");
-	 return it;
-	}
+     return it;
+    }
 }
 
 QCString constraint_array_definition (): {QCString s,s1;}
@@ -852,12 +870,12 @@ void context_clause (): {}
 }
 
 QCString constraint () :{QCString s;}
- {   
-	LOOKAHEAD(range_constraint())
-	s=range_constraint(){ return s;}
+ {
+    LOOKAHEAD(range_constraint())
+    s=range_constraint(){ return s;}
     |
-	LOOKAHEAD(index_constraint())
-	 s=index_constraint(){ return s;}
+    LOOKAHEAD(index_constraint())
+     s=index_constraint(){ return s;}
 }
 
 void context_item() :  {}
@@ -866,7 +884,7 @@ void context_item() :  {}
 | use_clause()
 }
 
-QCString decimal_literal() :  {Token *tok;}
+QCString decimal_literal() :  {Token *tok=0;}
 {
  tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
 }
@@ -887,7 +905,7 @@ void design_file() :  {}
 void design_unit() :  {}
 {
  context_clause()library_unit()
- 
+
 }
 
 QCString designator() : {QCString s;}
@@ -896,7 +914,7 @@ QCString designator() : {QCString s;}
  | s=operator_symbol(){return s;}
 }
 
-QCString direction ():  {Token *tok;}
+QCString direction ():  {Token *tok=0;}
 {
 tok=<TO_T>  { return tok->image.c_str();}
 | tok=<DOWNTO_T> { return tok->image.c_str();}
@@ -916,18 +934,18 @@ QCString discrete_range() : {QCString s;}
 {
   LOOKAHEAD(range())
   s=range() { return s;}
-  | 
+  |
   LOOKAHEAD(subtype_indication())
    s=subtype_indication() { return s;}
 }
 
 QCString element_association() :  {QCString s,s1;}
 {
-[LOOKAHEAD(choices() <ARROW_T>) s=choices() <ARROW_T> ]  s1=expression() 
- { 
-if(!s.isEmpty()) 
+[LOOKAHEAD(choices() <ARROW_T>) s=choices() <ARROW_T> ]  s1=expression()
+ {
+if(!s.isEmpty())
  return s+"=>"+s1;
-return s1; 
+return s1;
  }
 }
 
@@ -937,7 +955,7 @@ s=identifier_list() <COLON_T> s1=subtype_indication() <SEMI_T> {return s+":"+s1;
 }
 
 
-QCString entity_aspect() :  {Token *tok;QCString s,s1;}
+QCString entity_aspect() :  {Token *tok=0;QCString s,s1;}
 {
 tok=<ENTITY_T> s=name() [ LOOKAHEAD(1)<LPAREN_T> s1=identifier() <RPAREN_T> {s+="("+s1+")";} ] { return s;}
 | tok=<CONFIGURATION_T> s=name() { return tok->image.c_str()+s;}
@@ -967,7 +985,7 @@ QCString entity_class() :  {}
 
 QCString entity_class_entry() :  {QCString s;}
 {
- s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;} 
+ s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;}
 }
 
 QCString entity_class_entry_list() :  {QCString s,s1,s2;}
@@ -978,19 +996,19 @@ QCString entity_class_entry_list() :  {QCString s,s1,s2;}
 void entity_declaration() :  {QCString s;}
 {
    // try{
-	<ENTITY_T> s=identifier()  <IS_T>
-	         {
+    <ENTITY_T> s=identifier()  <IS_T>
+             {
                 lastEntity=current;
                 lastCompound=0;
                 addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
                }
         entity_header()
         entity_declarative_part ()
-      [ <BEGIN_T> entity_statement_part() ] 
+      [ <BEGIN_T> entity_statement_part() ]
        <END_T> [ <ENTITY_T> ] [ name() ]
-     //	}catch(...){error_skipto(SEMI_T);}  
-	 <SEMI_T>
-	 { lastEntity=0;lastCompound=0; genLabels.resize(0); }
+     //    }catch(...){error_skipto(SEMI_T);}
+     <SEMI_T>
+     { lastEntity=0;lastCompound=0; genLabels.resize(0); }
 }
 
 void entity_declarative_item() : {}
@@ -1004,13 +1022,13 @@ subprogram_declaration()
 | variable_declaration()
 | file_declaration()
 | alias_declaration()
-| 
+|
 LOOKAHEAD(attribute_declaration())
 attribute_declaration()
 | attribute_specification()
 | disconnection_specification()
 | use_clause()
-| 
+|
 LOOKAHEAD(3)
 group_template_declaration()
 | group_declaration()
@@ -1034,7 +1052,7 @@ s=entity_tag() [ s1=signature() ] { return s+s1;}
 void entity_header() : {}
 {
  [  { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; } generic_clause()]
- [ { currP=VhdlDocGen::PORT; } port_clause()] 
+ [ { currP=VhdlDocGen::PORT; } port_clause()]
 }
 
 QCString entity_name_list() :  {QCString s,s1;}
@@ -1062,7 +1080,7 @@ LOOKAHEAD(process_statement())
 
 void entity_statement_part() :  {}
 {
- (entity_statement())*  
+ (entity_statement())*
 }
 
 
@@ -1086,14 +1104,14 @@ QCString enumeration_type_definition() : {QCString s,s1;}
 
 QCString exit_statement() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
 {
-[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ] 
+[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
 [ t1=<WHEN_T> s2=condition() ] <SEMI_T>
 {
-  lab.resize(0);         
+  lab.resize(0);
   if(t) s+=":";
   if(t1) s2.prepend(" when ");
-   FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data()); 
- 
+   FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
+
   return s+s1+s2+";";
 }
 }
@@ -1128,10 +1146,10 @@ s=primary() [LOOKAHEAD(1) <DOUBLEMULT_T> s1=primary(){ s+="**";s+=s1;} ] { retur
 
 QCString file_declaration() :  {QCString s,s1,s2,s3;}
 {
- <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T> 
+ <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
    {
    QCString t1=s2+" "+s3;
-   addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);     
+   addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
    return " file "+s+":"+s2+" "+s3+";";
    }
  }
@@ -1156,10 +1174,10 @@ QCString floating_type_definition() :  {QCString s;}
   s=range_constraint(){ return s;}
 }
 
-QCString formal_designator() : {QCString s;Token *tok;} 
+QCString formal_designator() : {QCString s;Token *tok=0;}
 {
     s=name()  { return s; }
-	|tok=<INTEGER> { return tok->image.c_str();}
+    |tok=<INTEGER> { return tok->image.c_str();}
 }
 
 
@@ -1177,13 +1195,13 @@ QCString full_type_declaration() :  {QCString s,s1,s2;}
 {
 <TYPE_T> s=identifier() <IS_T>
  try{
-     s2=type_definition() 
-   	}catch(...){error_skipto(SEMI_T);}  
-	 <SEMI_T>  
-	 {
-	   addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
-   	   return "type "+s+" is "+s2+";";
-	 }
+     s2=type_definition()
+       }catch(...){error_skipto(SEMI_T);}
+     <SEMI_T>
+     {
+       addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
+          return "type "+s+" is "+s2+";";
+     }
 }
 
 QCString function_call() :  {QCString s,s1;}
@@ -1195,12 +1213,12 @@ void generate_statement() :  {QCString s;}
 {
 s=identifier() <COLON_T>
           try{
-		generate_scheme() <GENERATE_T> 
+        generate_scheme() <GENERATE_T>
         { pushLabel(genLabels,s); }
           generate_statement_body1()
-		<END_T> 
-			     }catch(...){error_skipto(GENERATE_T);}  
-		<GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
+        <END_T>
+                 }catch(...){error_skipto(GENERATE_T);}
+        <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
 }
 
 void generate_scheme() : {}
@@ -1226,18 +1244,18 @@ void generic_map_aspect() :  {}
 
 QCString group_constituent() :  {QCString s;}
 {
- s=name() { return s; } 
+ s=name() { return s; }
  | s=character_literal() { return s;}
 }
 
 QCString group_constituent_list() : {QCString s,s1,s2;}
 {
-  (s1=group_constituent())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;} 
+  (s1=group_constituent())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;}
 }
 
 QCString group_declaration() :  {QCString s,s1,s2;}
 {
-  <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T> 
+  <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T>
   {
    return "group "+s+":"+s1+"("+s2+");";
   }
@@ -1245,7 +1263,7 @@ QCString group_declaration() :  {QCString s,s1,s2;}
 
 QCString group_template_declaration() : {QCString s,s1;}
 {
- <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T> 
+ <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T>
   {
     return "group "+s+ "is ("+s1+");";
   }
@@ -1256,7 +1274,7 @@ void guarded_signal_specification() : {}
  signal_list() <COLON_T> type_mark()
 }
 
-QCString identifier() : {Token *tok;}
+QCString identifier() : {Token *tok=0;}
 {
   tok=<EXTENDED_CHARACTER>{ return tok->image.c_str(); }
   |tok=<BASIC_IDENTIFIER> { return tok->image.c_str(); }
@@ -1271,33 +1289,33 @@ void if_statement() :  {QCString s,s1;}
 {
 [LOOKAHEAD(1) identifier() <COLON_T> ]
     <IF_T> s=condition() <THEN_T>
-	{
+    {
     s.prepend("if ");
     FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
-  }  
-        sequence_of_statement() 
-		( 
-		  <ELSIF_T> s1=condition() <THEN_T> 
-		  { 
+  }
+        sequence_of_statement()
+        (
+          <ELSIF_T> s1=condition() <THEN_T>
+          {
            s1.prepend("elsif ");
            FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
           }
-		  sequence_of_statement() 
-		)*
-		[LOOKAHEAD(1) <ELSE_T> 
-		 {
+          sequence_of_statement()
+        )*
+        [LOOKAHEAD(1) <ELSE_T>
+         {
            FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
-         } 
-		sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T> 
-		 {
+         }
+        sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
+         {
           FlowChart::moveToPrevLevel();
           FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
-        } 
+        }
 }
 
 QCString incomplete_type_declaration() :  {QCString s;}
 {
-  <TYPE_T> s=identifier() <SEMI_T> 
+  <TYPE_T> s=identifier() <SEMI_T>
   {
    return "type "+s+";";
   }
@@ -1319,17 +1337,17 @@ QCString index_specification() : {QCString s;}
 
 QCString index_subtype_definition() :  {QCString s;}
 {
- s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";} 
+ s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";}
 }
 
-QCString instantiation_unit() :  {QCString s,s1,s2;Token *tok;}
+QCString instantiation_unit() :  {QCString s,s1,s2;Token *tok=0;}
 {
 [ tok=<COMPONENT_T> ] s=identifier() {s1="component"; return s; }
 | tok=<ENTITY_T> s2=name() {s=tok->image.c_str()+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
 | <CONFIGURATION_T> s=name() {s1="configuration ";return s;}
 }
 
-QCString instantiation_list() : {QCString s;Token *tok;}
+QCString instantiation_list() : {QCString s;Token *tok=0;}
 {
   s=identifier_list() { return s;}
 | tok=<OTHER_T> {return tok->image.c_str();}
@@ -1353,13 +1371,13 @@ LOOKAHEAD(5)
  s=interface_subprogram_declaration() { return s;}
 
 |interface_package_declaration() { return s;}
-| 
+|
  LOOKAHEAD(5)
  s=interface_variable_declaration() { return s;}
-| 
+|
 LOOKAHEAD(5)
 interface_file_declaration() { return s;}
-| 
+|
 LOOKAHEAD(subprogram_declaration())
 subprogram_declaration() { return s;}
 |
@@ -1367,8 +1385,8 @@ subprogram_declaration() { return s;}
  {
  if (parse_sec==GEN_SEC)
     addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
-    return s;    
-	}
+    return s;
+    }
 }
 
 QCString interface_element() :  {QCString s;}
@@ -1379,7 +1397,7 @@ s=interface_declaration(){ return s;}
 QCString interface_file_declaration() : {QCString s,s1;}
 {
 <FILE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
-{ 
+{
    addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
    return " file "+s+":"+s1;
 }
@@ -1394,20 +1412,20 @@ s=interface_element() (LOOKAHEAD(1) <SEMI_T> s1=interface_element(){s2+=";";s2+=
 
 QCString interface_variable_declaration() :  {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;}
 {
-[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ] 
-  s=identifier_list() <COLON_T> [ s1=mode() ] 
-  s2=subtype_indication()  [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ] 
+[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
+  s=identifier_list() <COLON_T> [ s1=mode() ]
+  s2=subtype_indication()  [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
 {
                     if(tok)
-					s5=tok->image.c_str();
-					
-					if(tok1)
-					 s3=tok->image.data();
-					 
-					if(tok2)
-					 s3+=":=";
-					 
-					QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
+                    s5=tok->image.c_str();
+
+                    if(tok1)
+                     s3=tok1->image.data();
+
+                    if(tok2)
+                     s3+=":=";
+
+                    QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
                     if (currP!=VhdlDocGen::COMPONENT)
                     {
                       if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
@@ -1424,8 +1442,8 @@ QCString interface_variable_declaration() :  {Token *tok=0;Token *tok1=0;Token *
                       }
                       //   fprintf(stderr,"\n\n <<port  %s  >>\n",$$.data());
                     } // if component
-			  return it;
-			}
+              return it;
+            }
 }
 
 QCString iteration_scheme() :  {QCString s;}
@@ -1434,15 +1452,15 @@ QCString iteration_scheme() :  {QCString s;}
 {
    s.prepend("while ");
    FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
-   lab="";    
-  return s;   
+   lab="";
+  return s;
 }
 | <FOR_T> s=parameter_specification()
 {
     QCString q=lab+" for "+s;
     FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
     lab="";
-	return q;
+    return q;
 }
 }
 
@@ -1454,14 +1472,14 @@ QCString label() :  {QCString s;}
 QCString library_clause() :  {QCString s;}
 {
  (<LIBRARY_T> s=identifier_list() <SEMI_T>
- ) 
+ )
  {
                if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
                    {
-				           addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);          
+                           addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
                    }
                    QCString s1="library "+s;
-				   return s1;
+                   return s1;
  }
 }
 
@@ -1471,19 +1489,19 @@ LOOKAHEAD(2)
 primary_unit() {  return s; }
 |  secondary_unit() {  return s; }
 |  context_declaration()
- 
+
 }
 
 QCString literal() :  {QCString s;}
 {
- 
+
  LOOKAHEAD(bit_string_literal())
 s=bit_string_literal() { return s;}
 |
  LOOKAHEAD(numeric_literal())
  s=numeric_literal() { return s;}
-| 
- 
+|
+
 LOOKAHEAD(enumeration_literal())
 s=enumeration_literal() { return s;}
 | s=string_literal() { return s;}
@@ -1499,21 +1517,21 @@ QCString loop_statement() :  {QCString s,s1,s2,s3;}
 {
 [ s=identifier() <COLON_T> {s+=":";} ]
     [ s1=iteration_scheme()  ]
-	  {
-	   if(s1.isEmpty())
- 	   FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
-	   }
-	  <LOOP_T>
-        s2=sequence_of_statement() 
-		<END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T> 
-		{
-		 QCString q = s+" loop "+s2+" end loop" +s3;
+      {
+       if(s1.isEmpty())
+        FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+       }
+      <LOOP_T>
+        s2=sequence_of_statement()
+        <END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T>
+        {
+         QCString q = s+" loop "+s2+" end loop" +s3;
          QCString endLoop="end loop" + s3;
          FlowChart::moveToPrevLevel();
          FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
-		return q;
-		}
-		
+        return q;
+        }
+
 }
 
 
@@ -1524,7 +1542,7 @@ QCString miscellaneous_operator():{Token *t=0;}
   | <NOT_T> {return "not";}
 }
 
-QCString mode() :  {Token *tok;}
+QCString mode() :  {Token *tok=0;}
 {
 tok=<IN_T> { return "in"; }
 | tok=<OUT_T> { return "out"; }
@@ -1533,7 +1551,7 @@ tok=<IN_T> { return "in"; }
 | tok=<LINKAGE_T> { return "linkage"; }
 }
 
-QCString multiplying_operation() : {Token *tok;}
+QCString multiplying_operation() : {Token *tok=0;}
 {
 tok=<MULT_T>      { return tok->image.c_str(); }
 | tok=<SLASH_T>  { return tok->image.c_str(); }
@@ -1558,46 +1576,46 @@ QCString name_ext1() : {QCString s,s1,s2;}
 
  QCString name_ext() : {QCString s,s1,s2;}
  {
- 
+
   (
- LOOKAHEAD(<DOT_T> suffix()) 
+ LOOKAHEAD(<DOT_T> suffix())
  <DOT_T> s1=suffix(){s+=".";s+=s1;}
-| 
+|
   LOOKAHEAD(test_att_name())
    s1=test_att_name() { s+=s1;}
- | 
+ |
  LOOKAHEAD( <LPAREN_T> discrete_range() <RPAREN_T>)
   <LPAREN_T> s1=discrete_range() <RPAREN_T> {s+="(";s+=s1;s+=")";}
-   | 
+   |
   LOOKAHEAD( "(" expression() ("," expression() )* ")" )
-  <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T>  s1=expression(){s+=",";s+=s1;})*  <RPAREN_T> { s+=")";} 
+  <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T>  s1=expression(){s+=",";s+=s1;})*  <RPAREN_T> { s+=")";}
 
  )
  {return s;}
  }
- 
+
  QCString test_att_name() : {QCString s,s1;}
  {
-  [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}] 
-  <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;} 
-  [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}] 
+  [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}]
+  <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;}
+  [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}]
    { return s;}
  }
- 
+
  QCString indexed_name() : {QCString s,s1,s2;}
- {   
+ {
    s2=identifier() <LPAREN_T> s1=expression(){s=s2+"("+s1;} (<COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> {return s+")";}
- } 
+ }
 
 QCString next_statement() :  {QCString s,s1,s2;Token *t=0;Token *t1=0;}
 {
-[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ] 
+[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ]
 [LOOKAHEAD(1)  t1=<WHEN_T> s2=condition() ] <SEMI_T>
 {
   if(t) s+=":";
-   FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data()); 
+   FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
     lab.resize(0);
-  if(t1) s2.prepend("when ");                
+  if(t1) s2.prepend("when ");
   return s+s1+s2+";";
 }
 }
@@ -1609,7 +1627,7 @@ QCString null_statement() : {QCString s;}
 
 QCString numeric_literal() :  {QCString s;}
 {
- 
+
  LOOKAHEAD(physical_literal())
   s=physical_literal(){ return s;}
  | s=abstract_literal() { return s;}
@@ -1625,14 +1643,14 @@ QCString object_class() :  {}
 |<TYPE_T>              { return "type"; }
 }
 
-QCString operator_symbol() :  {Token *tok;}
+QCString operator_symbol() :  {Token *tok=0;}
 {
 tok=<STRINGLITERAL> {return tok->image.c_str();}
 }
 
 void options() :  {}
 {
-  [ <GUARDED_T> ] [ delay_mechanism() ] 
+  [ <GUARDED_T> ] [ delay_mechanism() ]
 }
 
 void package_body() :  {QCString s;}
@@ -1643,7 +1661,7 @@ void package_body() :  {QCString s;}
                         s.prepend("_");
                         addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
                       }
- package_body_declarative_part() 
+ package_body_declarative_part()
 
 <END_T> [<PACKAGE_T> <BODY_T>  ] [ name() ] <SEMI_T> { lastCompound=0; genLabels.resize(0); }
 }
@@ -1659,7 +1677,7 @@ subprogram_declaration()
 | file_declaration()
 | alias_declaration()
 | use_clause()
-| 
+|
 LOOKAHEAD(3)
 group_template_declaration()
 | group_declaration()
@@ -1672,7 +1690,7 @@ void package_body_declarative_part() :  {}
 
 void package_declaration():  {QCString s;}
 {
- 
+
  <PACKAGE_T> s=identifier() <IS_T>
                           {
                           lastCompound=current;
@@ -1680,14 +1698,14 @@ void package_declaration():  {QCString s;}
                           clone->section=Entry::NAMESPACE_SEC;
                           clone->spec=VhdlDocGen::PACKAGE;
                           clone->name=s;
-                          clone->startLine=getLine();
-                          clone->bodyLine=getLine();
+                          clone->startLine=getLine(PACKAGE_T);
+                          clone->bodyLine=getLine(PACKAGE_T);
                           clone->protection=Package;
                           current_root->addSubEntry(clone);
-                          addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);  
-						  }
-	package_declarative_part() 
-<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T> 
+                          addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+                          }
+    package_declarative_part()
+<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
 { lastEntity=0;lastCompound=0; genLabels.resize(0); }
 }
 
@@ -1746,13 +1764,13 @@ QCString physical_type_definition() : {QCString s,s1,s2;}
         <UNITS_T>
             s=identifier()<SEMI_T>
             (s1=secondary_unit_declaration(){s2+=s1;s2+="#";})*
-			<END_T> <UNITS_T>  [name()] 
-			{  
-			 current->args=s2;
-          	 current->args.prepend("units");
+            <END_T> <UNITS_T>  [name()]
+            {
+             current->args=s2;
+               current->args.prepend("units");
              current->spec=VhdlDocGen::UNITS;
-		    return s2;
-		   }
+            return s2;
+           }
 }
 
 void port_clause() :  {}
@@ -1777,21 +1795,21 @@ s=function_call() { return s;}
 |
 LOOKAHEAD(<LPAREN_T> expression() <RPAREN_T>)
  <LPAREN_T> s1=expression() <RPAREN_T>{ s="("+s1+")"; return s;}
-| 
+|
 LOOKAHEAD(qualified_expression())
 s=qualified_expression() { return s;}
-| 
+|
 LOOKAHEAD(type_conversion())
 s=type_conversion() { return s;}
-| 
+|
 LOOKAHEAD(literal())
 s=literal() { s.prepend(" ");return s;}
-| 
+|
 LOOKAHEAD(name())
 s=name() { return s;}
-| 
+|
 allocator() { return "";}
-| 
+|
 s=aggregate() { return s; }
 }
 
@@ -1800,7 +1818,7 @@ void primary_unit() : {}
 {
 entity_declaration()
 | configuration_declaration()
-| 
+|
 LOOKAHEAD(package_instantiation_declaration())
 package_instantiation_declaration()
 |
@@ -1812,13 +1830,13 @@ LOOKAHEAD(4)
 
 QCString procedure_call() : {QCString s,s1;}
 {
- s=name()  [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}] 
+ s=name()  [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}]
 { return s+s1;}
  }
 
 QCString procedure_call_statement() :  {QCString s,s1;}
 {
-[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T> 
+[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T>
 {
   return s+s1+";";
 }
@@ -1834,12 +1852,12 @@ subprogram_declaration() { return "";}
 | s=variable_declaration() { return s;}
 | s=file_declaration() { return s;}
 | s=alias_declaration() { return s;}
-| 
+|
 LOOKAHEAD(3)
 s=attribute_declaration() { return s;}
 | s=attribute_specification() { return s;}
 | s=use_clause() { return s;}
-| 
+|
 LOOKAHEAD(3)
 s=group_template_declaration()  { return s;}
 | s=group_declaration() { return s;}
@@ -1853,38 +1871,38 @@ QCString process_declarative_part() :{QCString s,s1;}
 void process_statement() : {QCString s,s1,s2;Token *tok=0;}
 {
 [ s=identifier() <COLON_T> ]
-[ <POSTPONED_T> ] 
- {  
-               currP=VhdlDocGen::PROCESS; 
+[ <POSTPONED_T> ]
+ {
+               currP=VhdlDocGen::PROCESS;
                current->startLine=getLine();
                current->bodyLine=getLine();
   }
  <PROCESS_T>
  //try{
  [ <LPAREN_T> (tok=<ALL_T> | s1=sensitivity_list()) <RPAREN_T> ] [ <IS_T> ]
-        s2=process_declarative_part() 
-		     {
+        s2=process_declarative_part()
+             {
               if (s2.data())
                   FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0);
                 FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
                }
-		<BEGIN_T>
+        <BEGIN_T>
         process_statement_part()
-		<END_T> [ <POSTPONED_T> ] 
-		 // }catch(...){error_skipto(PROCESS_T);}  
-		<PROCESS_T> [ identifier() ] <SEMI_T>
- { 
+        <END_T> [ <POSTPONED_T> ]
+         // }catch(...){error_skipto(PROCESS_T);}
+        <PROCESS_T> [ identifier() ] <SEMI_T>
+ {
   if(s.isEmpty())
    currName=VhdlDocGen::getProcessNumber();
    else
    currName=s;
-   
+
    current->name=currName;
    tempEntry=current;
    current->endBodyLine=getLine();
    currP=0;
  if(tok)
-   s1=tok->image.data(); 
+   s1=tok->image.data();
   createFunction(currName,VhdlDocGen::PROCESS,s1.data());
   createFlow();
    currName="";
@@ -1894,16 +1912,16 @@ void process_statement() : {QCString s,s1,s2;Token *tok=0;}
 
 void process_statement_part() :  {}
 {
-  (sequential_statement())* 
+  (sequential_statement())*
 }
 
 QCString qualified_expression() :  {QCString s,s1;}
 {
-  s1=identifier() <APOSTROPHE_T> {s=s1+"'";} 
-  ( 
+  s1=identifier() <APOSTROPHE_T> {s=s1+"'";}
+  (
     LOOKAHEAD(aggregate())
-	s1=aggregate(){s+=s1;}
-	| <LPAREN_T> s1=expression() <RPAREN_T>{s+="(";s+=s1;s+=")";}
+    s1=aggregate(){s+=s1;}
+    | <LPAREN_T> s1=expression() <RPAREN_T>{s+="(";s+=s1;s+=")";}
  )
  {return s;}
 }
@@ -1912,7 +1930,7 @@ QCString range() :  {QCString s,s1,s2;}
 {
    LOOKAHEAD( simple_expression() direction() simple_expression())
    s=simple_expression() s1=direction() s2=simple_expression(){return s+" "+s1+" "+s2;}
-  | 
+  |
  LOOKAHEAD(attribute_name())
   s=attribute_name(){ return s;}
 }
@@ -1921,15 +1939,15 @@ QCString range_constraint() :  {QCString s,s1;}
 {
 <RANGE_T> s=range(){return " range "+s;}
 }
- 
+
 void record_type_definition() : {}
 {
     <RECORD_T>
      //  try{
-	   (element_declaration())+ 
-	   	 //    }catch(...){error_skipto(END_T);}  
-       <END_T> 
-	   <RECORD_T> [ name()] 
+       (element_declaration())+
+            //    }catch(...){error_skipto(END_T);}
+       <END_T>
+       <RECORD_T> [ name()]
 }
 
 QCString relation() :  {QCString s,s1,s2;}
@@ -1945,25 +1963,25 @@ QCString relation_operator() :  {}
  |<GREATERTHAN_T> {return ">=";}
  |<LESSTHAN_T> {return "<=";}
  |<NOTEQU_T> {return "/=";}
- 
+
 }
 
 QCString report_statement() :  {Token *t=0;Token *t1=0;QCString s,s1,s2;}
 {
 [ s=identifier() t=<COLON_T> ]
     <REPORT_T> s1=expression()
-        [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T> 
-		{
-		if(t) s.append(":");
-		s1.prepend(" report ");
-		if(t1) s2.prepend(" severity ");
-		return s+s1+s2+";";
-		}
+        [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T>
+        {
+        if(t) s.append(":");
+        s1.prepend(" report ");
+        if(t1) s2.prepend(" severity ");
+        return s+s1+s2+";";
+        }
 }
 
 QCString return_statement() :  {QCString s,s1;}
 {
-[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T> 
+[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T>
 { return s+" return "+s1+";";}
 }
 
@@ -1982,7 +2000,7 @@ architecture_body()
 
 QCString secondary_unit_declaration() :  {QCString s,s1;}
 {
-s=identifier() <EQU_T> s1=physical_literal() <SEMI_T> { return s+"="+s1; } 
+s=identifier() <EQU_T> s1=physical_literal() <SEMI_T> { return s+"="+s1; }
 }
 
 QCString selected_name() : {QCString s,s1;}
@@ -2024,47 +2042,47 @@ QCString sequence_of_statement() : {QCString s,s1;}
 QCString sequential_statement() :{QCString s;}
 {
     LOOKAHEAD( [ identifier() ":" ] target() "<=")
-	s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
-    | 
-	LOOKAHEAD(3)
-	s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
-    | 
-	 LOOKAHEAD(3)
-	s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
-    | 
-	LOOKAHEAD(3)
-	s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
-    | 
+    s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    |
+    LOOKAHEAD(3)
+    s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    |
+     LOOKAHEAD(3)
+    s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    |
+    LOOKAHEAD(3)
+    s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    |
     LOOKAHEAD(  [ identifier() ":" ] target() ":=" )
-	s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
-    | 
+    s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    |
+    LOOKAHEAD(3)
+    s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
+    |
+     LOOKAHEAD(3)
+    if_statement(){return s;}
+    |
+     LOOKAHEAD(3)
+    case_statement(){return s;}
+    |
     LOOKAHEAD(3)
-	s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
-    | 
-	 LOOKAHEAD(3)
-	if_statement(){return s;}
-    | 
-	 LOOKAHEAD(3)
-	case_statement(){return s;}
-    | 
-	LOOKAHEAD(3)
-	loop_statement(){return s;}
-    | 
-	LOOKAHEAD(3)
-	s=next_statement() {return s;} 
-	| 
-	LOOKAHEAD(3)	
-	s=exit_statement(){return s;}
-    | 
+    loop_statement(){return s;}
+    |
     LOOKAHEAD(3)
-	s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
-    | 
-	s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+    s=next_statement() {return s;}
+    |
+    LOOKAHEAD(3)
+    s=exit_statement(){return s;}
+    |
+    LOOKAHEAD(3)
+    s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
+    |
+    s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
 }
 
 QCString shift_expression() :  {QCString s,s1,s2;}
 {
- s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;} 
+ s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;}
 }
 QCString shift_operator() :  {}
 {
@@ -2087,14 +2105,14 @@ QCString signal_assignment_statement() : {QCString s,s1,s2,s3;}
 
   LOOKAHEAD(conditional_signal_assignment_wave())
   conditional_signal_assignment_wave(){ return ""; }
-| 
+|
   LOOKAHEAD(selected_signal_assignment_wave())
   selected_signal_assignment_wave() { return ""; }
   |
-  [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";} ] 
-s1=target() <LESSTHAN_T> 
-[ s2=delay_mechanism() ] 
-s3=waveform() <SEMI_T> 
+  [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";} ]
+s1=target() <LESSTHAN_T>
+[ s2=delay_mechanism() ]
+s3=waveform() <SEMI_T>
 {
   return s+s1+"<="+s2+s3+";";
 }
@@ -2103,38 +2121,38 @@ s3=waveform() <SEMI_T>
 
 void semi() :  {}
 {
-<SEMI_T> 
+<SEMI_T>
 }
 
 void signal_declaration() :  { Token* tok=0;QCString s,s1,s2,s3,s4;}
 {
-<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T> 
+<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T>
      {
-	 if(tok)
-	  s3.prepend(":=");
-	 s4=s1+s2+s3;
-	 addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+     if(tok)
+      s3.prepend(":=");
+     s4=s1+s2+s3;
+     addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
      }
 }
 QCString signal_kind() :  {}
 {
-  <REGISTER_T> { return "register";} 
+  <REGISTER_T> { return "register";}
   | <BUS_T>  { return "bus";}
 }
 
 QCString signal_list() : {QCString s,s1;}
 {
- s=name() (<COMMA_T>  s1=name() { s+=",";s+=s1;})*  
+ s=name() (<COMMA_T>  s1=name() { s+=",";s+=s1;})*
 | <OTHER_T> { return "other";}
 | <ALL_T> { return "all";}
 }
 
 QCString signature() : {QCString s,s1,s2;}
 {
-<LBRACKET_T> 
- [ s=name()  (<COMMA_T> s1=name() {s+=",";s+=s1; })* ] 
+<LBRACKET_T>
+ [ s=name()  (<COMMA_T> s1=name() {s+=",";s+=s1; })* ]
  [ <RETURN_T> s1=name() {s+="return ";s+=s1;}]
-  <RBRACKET_T> 
+  <RBRACKET_T>
   { s1="["+s+"]";return s1;}
  }
 
@@ -2153,14 +2171,14 @@ QCString slice_name() :  {QCString s,s1;}
  s=identifier() <LPAREN_T> s1=discrete_range() <RPAREN_T> {return s+"("+s1+")";}
 }
 
-QCString string_literal() : {Token *tok;}
+QCString string_literal() : {Token *tok=0;}
 {
 tok=<STRINGLITERAL> {return tok->image.c_str();}
 }
 
  void subprogram_body() : {QCString s;}
 {
-//subprogram_specification() 
+//subprogram_specification()
 <IS_T>
  //try{
  s=subprogram_declarative_part()
@@ -2170,14 +2188,14 @@ tok=<STRINGLITERAL> {return tok->image.c_str();}
         FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0);
       }
       FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
-    } 
- // }catch(...){error_skipto(BEGIN_T);}  
+    }
+ // }catch(...){error_skipto(BEGIN_T);}
 <BEGIN_T>
 subprogram_statement_part()
-<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T> 
+<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
  {
       tempEntry->endBodyLine=getLine(END_T);
-      createFlow();    
+      createFlow();
       currP=0;
     }
 }
@@ -2192,7 +2210,7 @@ subprogram_specification()subprogram_1(){currP=0;}
 
 void subprogram_1() :  {}
 {
- 
+
  subprogram_body()
  | <SEMI_T>
 }
@@ -2207,12 +2225,12 @@ subprogram_declaration(){ return "";}
 | s=variable_declaration(){ return s;}
 | s=file_declaration(){ return s;}
 | s=alias_declaration(){ return s;}
-| 
+|
 LOOKAHEAD(attribute_declaration())
 s=attribute_declaration(){ return s;}
 | s=attribute_specification(){ return s;}
 | s=use_clause(){ return s;}
-| 
+|
 LOOKAHEAD(3)
 s=group_template_declaration(){ return s;}
 | s=group_declaration() { return s;}
@@ -2231,33 +2249,33 @@ void subprogram_kind() :  {}
 
 void subprogram_specification() : {QCString s;Token *tok=0;Token *t;}
 {
- <PROCEDURE_T> s=designator() 
+ <PROCEDURE_T> s=designator()
  {
-              currP=VhdlDocGen::PROCEDURE; 
-              createFunction(s.data(),currP,0); 
+              currP=VhdlDocGen::PROCEDURE;
+              createFunction(s.data(),currP,0);
               tempEntry=current;
-			   current->startLine=getLine(PROCEDURE_T);
-	           current->bodyLine=getLine(PROCEDURE_T);
-			  
-			  } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
-			 [LOOKAHEAD(2) gen_interface_list()]
-			 [ LOOKAHEAD(2) gen_assoc_list()] 
-			 param()
-			  {  newEntry(); }
+               current->startLine=getLine(PROCEDURE_T);
+               current->bodyLine=getLine(PROCEDURE_T);
+
+              } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
+             [LOOKAHEAD(2) gen_interface_list()]
+             [ LOOKAHEAD(2) gen_assoc_list()]
+             param()
+              {  newEntry(); }
 |
- [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator() 
+ [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator()
   {
      currP=VhdlDocGen::FUNCTION;
-	 if(tok)
-     createFunction(tok->image.c_str(),currP,s.data()); 
-	 else
-	 createFunction(0,currP,s.data()); 	 
-	  tempEntry=current;
-	  current->startLine=getLine(FUNCTION_T);
-	  current->bodyLine=getLine(FUNCTION_T);
+     if(tok)
+     createFunction(tok->image.c_str(),currP,s.data());
+     else
+     createFunction(0,currP,s.data());
+      tempEntry=current;
+      current->startLine=getLine(FUNCTION_T);
+      current->bodyLine=getLine(FUNCTION_T);
   }
  [{ param_sec=PARAM_SEC; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { param_sec=0; }]
-    <RETURN_T> s=type_mark() 
+    <RETURN_T> s=type_mark()
              {
                 tempEntry=current;
                 current->type=s;
@@ -2303,7 +2321,7 @@ QCString target() :  {QCString s;}
 
 QCString term() : {QCString s,s1,s2;}
 {
- s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;} 
+ s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;}
 }
 
 QCString timeout_clause() : {QCString s;}
@@ -2334,7 +2352,7 @@ s=scalar_type_definition(){ return s;}
 | s=access_type_definition(){ return s;}
 | s=file_type_definition(){ return s;}
 |
- LOOKAHEAD(2) 
+ LOOKAHEAD(2)
  protected_type_body()            { return ""; }
 | protected_type_declaration()     { return ""; }
 //}catch(...){error_skipto(SEMI_T); return "";}
@@ -2358,15 +2376,15 @@ QCString unconstraint_array_definition() :  {QCString s,s1,s2,s3;}
                    QStringList ql1=QStringList::split(",",s,FALSE);
                    for (uint j=0;j<ql1.count();j++)
                    {
-                    QStringList ql=QStringList::split(".",ql1[j],FALSE);                    
-					QCString it=ql[1].utf8();
+                    QStringList ql=QStringList::split(".",ql1[j],FALSE);
+                    QCString it=ql[1].utf8();
                      if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
                      {
                        VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
                      }
                    }
                    s1="use "+s;
-				   return s1;
+                   return s1;
    }
 }
 
@@ -2375,35 +2393,35 @@ QCString variable_assignment_statement() :  {QCString s,s1,s2;}
 [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";}]
  s1=target() <VARASSIGN_T> s2=expression() <SEMI_T>
  {return s+s1+":="+s2+";";}
- | 
- selected_variable_assignment() { return "";  } 
+ |
+ selected_variable_assignment() { return "";  }
 }
 
 QCString variable_declaration() :  {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
 {
-[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication() 
-[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T> 
+[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
+[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
 
 {
     int spec;
-	if(t1)
-	 s2.prepend(":=");
-	QCString val=" variable "+s+":"+s1+s2+";";
-	QCString it=s1;
-	if(tok != 0)
-	{
-	 it.prepend(" shared ");
-	 val.prepend(" shared");
-	 spec=VhdlDocGen::SHAREDVARIABLE;
-	 }
-	 else
-	 spec=VhdlDocGen::SHAREDVARIABLE;
-    
-	if(t1){
-	 it+=":=";
+    if(t1)
+     s2.prepend(":=");
+    QCString val=" variable "+s+":"+s1+s2+";";
+    QCString it=s1;
+    if(tok != 0)
+    {
+     it.prepend(" shared ");
+     val.prepend(" shared");
+     spec=VhdlDocGen::SHAREDVARIABLE;
+     }
+     else
+     spec=VhdlDocGen::SHAREDVARIABLE;
+
+    if(t1){
+     it+=":=";
      it+=s2;
-	 }
-	addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
+     }
+    addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
     return val;
  }
 
@@ -2411,7 +2429,7 @@ QCString variable_declaration() :  {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
 
 QCString wait_statement() :  {QCString s,s1,s2,s3;Token *t=0;}
 {
-[ s=identifier() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T> 
+[ s=identifier() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T>
 {
   if(t) s.append(":");
   return s+" wait "+s1+s2+s3+";";
@@ -2421,16 +2439,16 @@ QCString wait_statement() :  {QCString s,s1,s2,s3;Token *t=0;}
 QCString waveform() :  {QCString s,s1;}
 {
 s=waveform_element() (LOOKAHEAD(1) <COMMA_T> s1=waveform_element(){s+=","; s+=s1;})* { return s;}
-| 
+|
 <UNAFFECTED_T> { return " unaffected ";}
 
 }
 
 QCString waveform_element() :  {QCString s,s1;}
 {
- s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ] 
+ s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ]
  { return s+s1;}
-//<NULL_T> [ <AFTER_T> expression() ] 
+//<NULL_T> [ <AFTER_T> expression() ]
 }
 
 // -----------------------------------------------------------------
@@ -2440,60 +2458,60 @@ QCString waveform_element() :  {QCString s,s1;}
 QCString protected_type_body() :{ }
 {
   // try{
-   <PROTECTED_T> <BODY_T> 
-          protected_type_body_declarative_part()    
-   
-	//}catch(...){error_skipto(END_T);} 
-	<END_T><PROTECTED_T> <BODY_T>   [identifier()]  {return "";}  
+   <PROTECTED_T> <BODY_T>
+          protected_type_body_declarative_part()
+
+    //}catch(...){error_skipto(END_T);}
+    <END_T><PROTECTED_T> <BODY_T>   [identifier()]  {return "";}
 }
 
 void protected_type_body_declarative_item() :    { }
- {   
-	subprogram_declaration()    
-    | subprogram_body()    
-    | type_declaration()   
+ {
+    subprogram_declaration()
+    | subprogram_body()
+    | type_declaration()
     | subtype_declaration()
     | constant_declaration()
     | variable_declaration()
     | file_declaration()
     | alias_declaration()
-    | 
-	  LOOKAHEAD( attribute_declaration())
-	  attribute_declaration()
+    |
+      LOOKAHEAD( attribute_declaration())
+      attribute_declaration()
     | attribute_specification()
     | use_clause()
     | LOOKAHEAD(3)
-	  group_template_declaration()
+      group_template_declaration()
     | group_declaration()
-	
+
 }
 
 void protected_type_body_declarative_part() :{  }
 {
-    ( protected_type_body_declarative_item ())*   
+    ( protected_type_body_declarative_item ())*
 }
 
 
 QCString protected_type_declaration() : {  }
- {   
-   <PROTECTED_T>    
-        try{  
-		  protected_type_declarative_part() 
-		}catch(...){error_skipto(END_T);}  
+ {
+   <PROTECTED_T>
+        try{
+          protected_type_declarative_part()
+        }catch(...){error_skipto(END_T);}
        <END_T><PROTECTED_T> [ identifier() ] { return "";}
  }
 
 
 void protected_type_declarative_item():    { }
 {
-    subprogram_specification()   
-    | attribute_specification()    
-    | use_clause()    
+    subprogram_specification()
+    | attribute_specification()
+    | use_clause()
 }
 
 void protected_type_declarative_part() :    {}
 {
-    (protected_type_declarative_item ()<SEMI_T>)*   
+    (protected_type_declarative_item ()<SEMI_T>)*
 }
 
 // -----------------------------------------------------------------
@@ -2501,10 +2519,10 @@ void protected_type_declarative_part() :    {}
 // -----------------------------------------------------------------
 
 QCString context_ref() : {QCString s;}
-{ 
- <CONTEXT_T>  s=identifier_list() <SEMI_T> 
- {  
-  return "context "+s ; 
+{
+ <CONTEXT_T>  s=identifier_list() <SEMI_T>
+ {
+  return "context "+s ;
  }
 }
 
@@ -2518,7 +2536,7 @@ void context_declaration(): {QCString s,s1;}
 }
 
 QCString libustcont_stats(): {QCString s;}
-{  
+{
    s=use_clause()  { return s;}
    | s=library_clause() { return s;}
    | s=context_ref() { return s;}
@@ -2528,20 +2546,20 @@ QCString libustcont_stats(): {QCString s;}
  {
  <PACKAGE_T> s=identifier() <IS_T>  <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
     {
-      QCString q=" is new "+s1+s2; 
+      QCString q=" is new "+s1+s2;
       addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
     }
 }
-	
+
 QCString interface_package_declaration(): {QCString s,s1;}
 {
- <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()] 
+ <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
                         {
                           current->name=s;
-  				          return "package "+s+" is new "+s1;
+                            return "package "+s+" is new "+s1;
                          }
-}		
-	
+}
+
 QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
 {
  <FUNCTION_T>  s=identifier() <IS_T> <NEW_T> s1=name()  s2=signature() [gen_assoc_list()] <SEMI_T>
@@ -2549,10 +2567,10 @@ QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
      QCString q= " is new "+s1+s2;
       addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
     return q;
-	}
+    }
 }
-		
-	
+
+
 void gen_assoc_list():{}
 {
    <GENERIC_T> <MAP_T> <LPAREN_T>  association_list()<RPAREN_T>
@@ -2570,8 +2588,8 @@ void gen_interface_list() : {}
                         //  QCString vo=$3;
                           parse_sec=0;
                         }
-						<RPAREN_T>
-}	
+                        <RPAREN_T>
+}
 
 void case_scheme (): {}
 {
@@ -2589,19 +2607,20 @@ void when_stats() : {}
 void ttend(): {}
 {
   <END_T> [identifier()] <SEMI_T>
- } 
+ }
+
 
- 
 void generate_statement_body() : {}
 {
    <BEGIN_T> generate_statement_body()
 }
- 
+
 void generate_statement_body1() : {}
 {
-   LOOKAHEAD(block_declarative_item()<BEGIN_T> )
-   (block_declarative_item() )*  <BEGIN_T> (concurrent_statement())*
-   | (concurrent_statement())*
+  //   [LOOKAHEAD(block_declarative_item()<BEGIN_T> )(block_declarative_item() )*  <BEGIN_T>] (concurrent_statement())*
+
+   [(LOOKAHEAD(block_declarative_item())block_declarative_item() )*  <BEGIN_T>] (concurrent_statement())*
+  // | (concurrent_statement())*
 }
 
 QCString external_name(): {QCString s,s1,s2;}
@@ -2610,7 +2629,7 @@ QCString external_name(): {QCString s,s1,s2;}
                         {
                          QCString t="<<"+s;
                          QCString t1=s1+":"+s2+">>";
-                         return   s+s1;					
+                         return   s+s1;
                         }
 }
 
@@ -2619,7 +2638,7 @@ QCString sig_stat(): {Token *t;}
   t=<CONSTANT_T>      { return t->image.data(); }
   | t=<SIGNAL_T>      { return t->image.data(); }
   | t=<VARIABLE_T>   { return t->image.data(); }
- 
+
 }
 
 QCString external_pathname(): {QCString s;}
@@ -2632,7 +2651,7 @@ QCString external_pathname(): {QCString s;}
 QCString absolute_pathname(): {QCString s,s1;}
 {
  LOOKAHEAD(<DOT_T>  pathname_element_list())
- <DOT_T>  s=pathname_element_list() s1=identifier() { return "."+s+s1;} 
+ <DOT_T>  s=pathname_element_list() s1=identifier() { return "."+s+s1;}
 | <DOT_T>  s=identifier (){ return "."+s;}
 }
 
@@ -2643,24 +2662,24 @@ QCString relative_pathname():{QCString s,s1,s2;}
 
 QCString neg_list(): {QCString s;}
 {
- (<NEG_T> <DOT_T>{s+="^.";})+     {return s; }  
+ (<NEG_T> <DOT_T>{s+="^.";})+     {return s; }
 }
 
 QCString pathname_element ():{QCString s,s1;}
 {
-  s=identifier() [<LPAREN_T> s1=expression()  <RPAREN_T>] 
+  s=identifier() [<LPAREN_T> s1=expression()  <RPAREN_T>]
   {
     if(!s1.isEmpty())
-	 return s+"("+s1+")";
-	
-    return s;	
+     return s+"("+s1+")";
+
+    return s;
   }
  }
 
 QCString pathname_element_list():{QCString s,s1,s2;}
 {
-        ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })* 
-		{ return s+s2; }
+        ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
+        { return s+s2; }
 }
 
 QCString package_path_name():{QCString s;}
@@ -2669,10 +2688,10 @@ QCString package_path_name():{QCString s;}
 }
 
 void conditional_signal_assignment_wave(): {}
-{ 
+{
   LOOKAHEAD(conditional_force_assignment())
-  conditional_force_assignment() 
-  |conditional_waveform_assignment()   
+  conditional_force_assignment()
+  |conditional_waveform_assignment()
 }
 
 void conditional_waveform_assignment():{}
@@ -2680,7 +2699,7 @@ void conditional_waveform_assignment():{}
  target() <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element() <WHEN_T> expression() [else_wave_list()] <SEMI_T>
  }
 
-void  else_wave_list(): {} 
+void  else_wave_list(): {}
 {
 <ELSE_T> expression() [ <WHEN_T> expression()]
 }
@@ -2690,15 +2709,15 @@ void conditional_force_assignment(): {}
  target()  <LESSTHAN_T> <FORCE_T>  [inout_stat()] expression() <WHEN_T> [expression() else_stat()] <SEMI_T>
 }
 
-void selected_signal_assignment_wave() : {} 
+void selected_signal_assignment_wave() : {}
 {
  LOOKAHEAD(selected_force_assignment() )
- selected_force_assignment() 
+ selected_force_assignment()
 | selected_waveform_assignment()
 }
 
 void selected_variable_assignment():{}
-{ 
+{
   <WITH_T> expression() <SELECT_T> [<Q_T>] select_name() <VARASSIGN_T> sel_var_list() // { $$=""; }
 }
 
@@ -2707,7 +2726,7 @@ void select_name(): {}
  LOOKAHEAD(aggregate())
  aggregate()
   | name()
-  
+
 }
 
 void selected_waveform_assignment():{}
@@ -2717,7 +2736,7 @@ void selected_waveform_assignment():{}
 }
 
 void selected_force_assignment():{}
-{ 
+{
 <WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
                                                   [inout_stat()] sel_var_list()
 }
@@ -2730,23 +2749,23 @@ void sel_var_list(): {}
 
 
 void sel_wave_list() : {}
-{  
+{
    waveform_element() <WHEN_T> choices() (LOOKAHEAD(1) <COMMA_T> sel_wave_list())* <SEMI_T>
   // |  sel_wave_list_1()
 }
 
 void inout_stat(): {}
-{ 
-  <IN_T> 
- | <OUT_T> 
+{
+  <IN_T>
+ | <OUT_T>
  }
 
 void else_stat(): {}
-{ 
+{
    (<ELSE_T> expression() [LOOKAHEAD(1) <WHEN_T> expression()])+
 }
 
-					
+
 
 QCString interface_subprogram_declaration(): {QCString s;}
 {
@@ -2754,32 +2773,32 @@ QCString interface_subprogram_declaration(): {QCString s;}
  | s=ifunc()  { return s; }
 }
 
-QCString iproc(): {QCString s,s1;} 
+QCString iproc(): {QCString s,s1;}
  {
-  <PROCEDURE_T> s=identifier()  s1=param() 
-  { 
-  current->name=s; 
-  return "procedure "+s+s1; 
+  <PROCEDURE_T> s=identifier()  s1=param()
+  {
+  current->name=s;
+  return "procedure "+s+s1;
   }
  }
 
 QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
 {
- 
+
  [t=<PURE_T> | t=<IMPURE_T> ] <FUNCTION_T>  s=name() s1=param() <RETURN_T> s2=name() [t1=<IS_T> (s3=identifier() | t2=<BOX_T>)]
-    {  
-	  QCString q;
-	  if(t) q=t->image.data();
+    {
+      QCString q;
+      if(t) q=t->image.data();
       if(t2) s3="<>";
-	  if (!s3.isEmpty())
+      if (!s3.isEmpty())
       {
         s3.prepend(" is ");
       }
      current->name=s;
-	if (parse_sec==GEN_SEC)
+    if (parse_sec==GEN_SEC)
                     {
-                      QCString ss=q+" function "+s1+" return "+s2+s3; 
-					  int a=getLine(FUNCTION_T);
+                      QCString ss=q+" function "+s1+" return "+s2+s3;
+                      int a=getLine(FUNCTION_T);
                       int b=getLine(PROCEDURE_T);
 
                       if (a>b) b=a;
@@ -2787,25 +2806,25 @@ QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
                     }
          currP=0;return "";
        }
-   	
+
     }
- 
- 
-QCString param(): {QCString s,s1;Token *tok=0;} 
-{ 
+
+
+QCString param(): {QCString s,s1;Token *tok=0;}
+{
 [ tok=<PARAMETER_T> ] { param_sec=PARAM_SEC; }
                   [ <LPAREN_T>  s1=interface_list() <RPAREN_T>]
-                   { 
-				  	 if(tok) 
-					 {
-					  s = tok->image.data();
-					     param_sec=0; 
-				    }
-					  return s+"("+s1+")";
-					}
-	    
+                   {
+                       if(tok)
+                     {
+                      s = tok->image.data();
+                         param_sec=0;
+                    }
+                      return s+"("+s1+")";
+                    }
+
  }
- 
+
  // -----------------------------------------------------------------
  // needed for inline (function/process/procedure) parsing
 
diff --git a/vhdlparser/vhdlparser.patch b/vhdlparser/vhdlparser.patch
deleted file mode 100644
index 37cca10..0000000
--- a/vhdlparser/vhdlparser.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- VhdlParser.h	2014-07-27 14:26:18.000000000 +0200
-+++ VhdlParser.h.new	2014-07-27 14:23:22.000000000 +0200
-@@ -6,6 +6,7 @@
- #include "TokenManager.h"
- #include "VhdlParserTokenManager.h"
- #include "VhdlParser.h"
-+#include "vhdljjparser.h"
- 
- #include "VhdlParserConstants.h"
- #include "ErrorHandler.h"
diff --git a/vhdlparser/vhdlparser.pro b/vhdlparser/vhdlparser.pro
deleted file mode 100644
index cc034f0..0000000
--- a/vhdlparser/vhdlparser.pro
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# This file was generated from vhdlparser.pro.in on Thu Aug 21 10:48:35 CEST 2014
-#
-
-TEMPLATE	= lib
-CONFIG		= warn_on staticlib debug
-HEADERS		= CharStream.h \
-		  ErrorHandler.h \
-                  JavaCC.h \
-                  ParseException.h \
-		  TokenManager.h \
-		  Token.h \
-		  vhdlstring.h \
-		  VhdlParser.h \
-		  VhdlParserConstants.h \
-		  VhdlParserTokenManager.h \
-		  TokenMgrError.h \
-	          VhdlParserIF.h \
-                  VhdlParserErrorHandler.hpp
-
-SOURCES		= CharStream.cc \
-		  ParseException.cc \
-		  Token.cc \
-		  TokenMgrError.cc \
-		  VhdlParser.cc \
-		  VhdlParserTokenManager.cc \
-                  VhdlParserIF.cpp
-
-INCLUDEPATH = . ../src ../qtools generated_src/doxygen
-#TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQ T_LITE_UNICODE
-
-#must enable -fexceptions because we have try catch blocks in VhdlParser.cc
-TMAKE_CXXFLAGS +=-w -fexceptions -DQT_LITE_UNICODE
-win32:TMAKE_CXXFLAGS += -fexceptions -DQT_NODLL
-win32-g++:TMAKE_CXXFLAGS += -fexceptions -D__CYGWIN__ -DALL_STATIC
-OBJECTS_DIR = ../objects/vhdlparser
-DESTDIR = ../lib
-TMAKE_MOC = /usr/bin/moc
-LIBS += -L/opt/local/lib
-INCLUDEPATH += /opt/local/include
diff --git a/vhdlparser/vhdlstring.h b/vhdlparser/vhdlstring.h
index ec13907..fde6ce4 100644
--- a/vhdlparser/vhdlstring.h
+++ b/vhdlparser/vhdlstring.h
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+
 /** @brief Minimal string class with std::string like behaviour that fulfills the JavaCC
  *  string requirements.
  */
@@ -49,7 +50,7 @@ class VhdlString
     }
    ~VhdlString()
     {
-      delete[] m_str;
+      free(m_str);
     }
     VhdlString& append(const char *s,int size)
     {
@@ -90,7 +91,8 @@ class VhdlString
     char &      operator[](int i)       { return m_str[i]; }
     const char &operator[](int i) const { return m_str[i]; }
     void        clear()                 { free(m_str); init(); }
-    VhdlString  operator+=(char c)      { char s[2]; s[0]=c; s[1]=0; return append(s); }
+    VhdlString  &operator+=(char c)      { char s[2]; s[0]=c; s[1]=0; return append(s); }
+    VhdlString  &operator+=(const char *s) { return append(s); }
 
   private:
     void init() { m_str=(char*)calloc(1,1); m_len=0; }
diff --git a/winbuild/.gitignore b/winbuild/.gitignore
deleted file mode 100644
index a073474..0000000
--- a/winbuild/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Debug/
-Debug64/
-Release/
-Release64/
-Doxygen.ncb
-Doxygen.suo
-*.user
\ No newline at end of file
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 882e514..03764f2 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -35,6 +35,9 @@
 			RelativePath=".\Gen_head.rules"
 		/>
 		<ToolFile
+			RelativePath=".\GenResources.rules"
+		/>
+		<ToolFile
 			RelativePath=".\Languages.rules"
 		/>
 	</ToolFiles>
@@ -75,6 +78,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -196,6 +202,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -317,6 +326,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -439,6 +451,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -879,6 +894,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\resourcemgr.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\rtfdocvisitor.cpp"
 				>
 			</File>
@@ -1391,10 +1410,2862 @@
 			</File>
 		</Filter>
 		<Filter
+			Name="Generating Resource Files"
+			>
+                        <File
+                                RelativePath="..\templates\html\arrowdown.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\arrowright.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bc_s.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bdwn.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bib2xhtml.pl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\close.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\closed.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doc.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.bst"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\dynsections.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\extsearch.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\folderclosed.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\folderopen.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\footer.html"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\header.html"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlallmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlannotated.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlbase.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclass.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclasses.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldeclcomp.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldir.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldirtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldyncontents.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldynheader.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlfile.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlfiles.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlflmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlinclude.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlindexpages.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmljsnavindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmljsnavtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmllayout.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemberindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmembertabs.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdecl.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdecls.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdef.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmeminherit.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemlist.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemsummary.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmodule.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmodules.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnamespace.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnamespaces.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnavpath.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnavtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnsmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnsmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlobjlink.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlpage.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlpages.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlsource.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmltabs.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmltypeconstraints.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\jquery.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\mag.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\mag_sel.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_f.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_g.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_h.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\navtree.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\navtree.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\open.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\resize.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_functions.php"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_l.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_m.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_opensearch.php"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_r.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\splitbar.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\svgpan.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\sync_off.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\sync_on.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_a.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_b.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_h.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_s.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tabs.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\latex\doxygen.sty"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\xml\compound.xsd"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\xml\index.xsd"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+		</Filter>
+		<Filter
 			Name="Generating header Files"
 			>
 			<File
-				RelativePath="..\src\bib2xhtml.pl"
+				RelativePath="..\src\layout_default.xml"
 				>
 				<FileConfiguration
 					Name="Debug|Win32"
@@ -1425,817 +4296,45 @@
 					/>
 				</FileConfiguration>
 			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
 			<File
-				RelativePath="..\src\compound.xsd"
+				RelativePath="..\src\arguments.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.bst"
+				RelativePath="..\src\bufstr.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.css"
+				RelativePath="..\src\ce_parse.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.sty"
+				RelativePath="..\vhdlparser\CharStream.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\dynsections.js"
+				RelativePath="..\src\cite.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\extsearch.js"
+				RelativePath="..\src\clangparser.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\footer.html"
+				RelativePath="..\src\classdef.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\header.html"
+				RelativePath="..\src\classlist.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\index.xsd"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_fx.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p1.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p2.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p3.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_pt.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_ui.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\layout_default.xml"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\navtree.css"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\navtree.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\resize.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search.css"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search_functions.php"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search_opensearch.php"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\svgpan.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl"
-			>
-			<File
-				RelativePath="..\src\arguments.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\bib2xhtml.pl.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\bufstr.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\ce_parse.h"
-				>
-			</File>
-			<File
-				RelativePath="..\vhdlparser\CharStream.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\cite.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\clangparser.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\classdef.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\classlist.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\cmdmapper.h"
+				RelativePath="..\src\cmdmapper.h"
 				>
 			</File>
 			<File
@@ -2251,10 +4350,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\compound_xsd.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\condparser.h"
 				>
 			</File>
@@ -2347,22 +4442,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\doxygen_bst.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\doxygen_css.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\doxygen_sty.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\dynsections_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\eclipsehelp.h"
 				>
 			</File>
@@ -2379,10 +4458,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\extsearch_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\filedef.h"
 				>
 			</File>
@@ -2395,10 +4470,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\footer_html.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\formula.h"
 				>
 			</File>
@@ -2423,10 +4494,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\header_html.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\htags.h"
 				>
 			</File>
@@ -2463,10 +4530,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(INtDir)\index_xsd.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\instdox.h"
 				>
 			</File>
@@ -2475,30 +4538,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\jquery_fx_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p1_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p2_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p3_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_pt_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_ui_js.h"
-				>
-			</File>
-			<File
 				RelativePath="$(IntDir)\lang_cfg.h"
 				>
 			</File>
@@ -2587,10 +4626,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\navtree_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\objcache.h"
 				>
 			</File>
@@ -2659,7 +4694,11 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\resize_js.h"
+				RelativePath="$(IntDir)\resources.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\src\resourcemgr.h"
 				>
 			</File>
 			<File
@@ -2679,22 +4718,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\search_css.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_functionsjs.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_opensearch_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\searchindex.h"
 				>
 			</File>
@@ -2711,10 +4734,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\svgpan_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\store.h"
 				>
 			</File>
diff --git a/winbuild/GenResources.rules b/winbuild/GenResources.rules
new file mode 100644
index 0000000..a496ea5
--- /dev/null
+++ b/winbuild/GenResources.rules
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+	Name="GenResources"
+	Version="8.00"
+	>
+	<Rules>
+		<CustomBuildRule
+			Name="GenResources"
+			DisplayName="GenResources"
+			CommandLine="python "$(ProjectDir)..\src\res2cc_cmd.py" "$(ProjectDir)..\templates" $(IntDir)\resources.cpp"
+			Outputs="$(IntDir)\resources.cpp"
+			FileExtensions=".*"
+			AdditionalDependencies="$(ProjectDir)..\src\res2cc_cmd.py"
+			ExecutionDescription="Executing res2cc_cmd on $(ProjectDir)..\templates ..."
+			ShowOnlyRuleProperties="false"
+			>
+		</CustomBuildRule>
+	</Rules>
+</VisualStudioToolFile>
diff --git a/winbuild/qtools.vcproj b/winbuild/qtools.vcproj
index adc1ba9..6e94d3f 100644
--- a/winbuild/qtools.vcproj
+++ b/winbuild/qtools.vcproj
@@ -1328,7 +1328,7 @@
 				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\qtools\scstring.cpp"
+				RelativePath="..\qtools\qcstring.cpp"
 				>
 				<FileConfiguration
 					Name="Release|Win32"
@@ -1576,10 +1576,6 @@
 				RelativePath="..\qtools\qxml.h"
 				>
 			</File>
-			<File
-				RelativePath="..\qtools\scstring.h"
-				>
-			</File>
 		</Filter>
 	</Files>
 	<Globals>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/doxygen.git



More information about the Reproducible-commits mailing list