Imported Upstream version 1.8.6 upstream/1.8.6
authorDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 15 Oct 2021 01:50:10 +0000 (10:50 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 15 Oct 2021 01:50:10 +0000 (10:50 +0900)
232 files changed:
.gitignore
Doxyfile
Makefile.in
Makefile.win_make.in
Makefile.win_nmake.in
addon/doxmlparser/examples/metrics/Makefile.in
addon/doxmlparser/src/Makefile.in
addon/doxmlparser/test/Makefile.in
addon/doxyapp/Makefile.in
addon/doxyapp/doxyapp.cpp
addon/doxyapp/doxyapp.pro.in
addon/doxysearch/Makefile.in
addon/doxysearch/doxysearch.pro.in
addon/doxywizard/Makefile.in
addon/doxywizard/config_doxyw.l [new file with mode: 0644]
addon/doxywizard/configdoc.cpp [deleted file]
addon/doxywizard/doxywizard.cpp
addon/doxywizard/doxywizard.pro.in
addon/doxywizard/expert.cpp
configure
doc/Makefile.in
doc/changelog.doc
doc/commands.doc
doc/config.doc
doc/doxygen_manual.tex
doc/index.doc
doc/install.doc
doc/language.doc
doc/language.tpl
doc/maintainers.txt
doc/markdown.doc
doc/translator.py
doc/trouble.doc
examples/Makefile.in
libmd5/Makefile.in
packages/rpm/doxygen.spec.in
qtools/Doxyfile
qtools/Makefile.in
qtools/qglobal.h
qtools/qtextcodec.cpp
qtools/qxml.h
src/Makefile.in
src/bib2xhtml.h [deleted file]
src/bufstr.h
src/cite.cpp
src/clangparser.h
src/classdef.cpp
src/classdef.h
src/classlist.cpp
src/cmdmapper.cpp
src/cmdmapper.h
src/code.h
src/code.l
src/commentcnv.l
src/commentscan.l
src/compound.xsd
src/compound_xsd.h [deleted file]
src/config.h
src/config.l
src/config.xml
src/configoptions.cpp [deleted file]
src/constexp.h
src/constexp.l
src/constexp.y
src/context.cpp [new file with mode: 0644]
src/context.h [new file with mode: 0644]
src/dbusxmlscanner.cpp
src/dbusxmlscanner.h
src/debug.cpp
src/debug.h
src/declinfo.l
src/defargs.l
src/definition.cpp
src/definition.h
src/dia.cpp [new file with mode: 0644]
src/dia.h [new file with mode: 0644]
src/dirdef.cpp
src/dirdef.h
src/docbookgen.cpp
src/docbookvisitor.cpp
src/docbookvisitor.h
src/docparser.cpp
src/docparser.h
src/doctokenizer.h
src/doctokenizer.l
src/docvisitor.h
src/dot.cpp
src/dot.h
src/doxygen.cpp
src/doxygen.css
src/doxygen.h
src/doxygen.md
src/doxygen_bst.h [deleted file]
src/doxygen_css.h [deleted file]
src/doxygen_sty.h [deleted file]
src/dynsections_js.h [deleted file]
src/extsearch_js.h [deleted file]
src/filedef.cpp
src/filedef.h
src/footer_html.h [deleted file]
src/fortrancode.h
src/fortrancode.l
src/fortranscanner.h
src/fortranscanner.l
src/ftextstream.h
src/ftvhelp.cpp
src/groupdef.cpp
src/header_html.h [deleted file]
src/htmldocvisitor.cpp
src/htmldocvisitor.h
src/htmlgen.cpp
src/htmlgen.h
src/htmlhelp.cpp
src/increasebuffer.pl [deleted file]
src/increasebuffer.py [new file with mode: 0755]
src/index.cpp
src/index_xsd.h [deleted file]
src/jquery_fx_js.h [deleted file]
src/jquery_p1_js.h [deleted file]
src/jquery_p2_js.h [deleted file]
src/jquery_p3_js.h [deleted file]
src/jquery_pt_js.h [deleted file]
src/jquery_ui_js.h [deleted file]
src/lang_cfg.h
src/lang_cfg.py [new file with mode: 0644]
src/language.cpp
src/languages.py [new file with mode: 0755]
src/latexdocvisitor.cpp
src/latexdocvisitor.h
src/latexgen.cpp
src/layout.cpp
src/libdoxycfg.t.in
src/libdoxygen.pro.in
src/libdoxygen.t.in
src/mandocvisitor.cpp
src/mandocvisitor.h
src/markdown.cpp
src/markdown.h
src/memberdef.cpp
src/memberdef.h
src/membergroup.h
src/memberlist.cpp
src/memberlist.h
src/message.cpp
src/message.h
src/msc.cpp
src/msc.h
src/namespacedef.cpp
src/namespacedef.h
src/navtree.js
src/navtree_css.h [deleted file]
src/navtree_js.h [deleted file]
src/pagedef.cpp
src/pagedef.h
src/parserintf.h
src/perlmodgen.cpp
src/portable.cpp
src/pre.l
src/printdocvisitor.h
src/pycode.h
src/pycode.l
src/pyscanner.h
src/pyscanner.l
src/resize.js
src/rtfdocvisitor.cpp
src/rtfdocvisitor.h
src/rtfgen.cpp
src/scanner.h
src/scanner.l
src/search.js
src/search_css.h [deleted file]
src/search_functions.php
src/search_functions_php.h [deleted file]
src/search_js.h [deleted file]
src/search_opensearch_php.h [deleted file]
src/searchindex.cpp
src/settings.py [new file with mode: 0755]
src/sortdict.h
src/svgpan_js.h [deleted file]
src/tclscanner.h
src/tclscanner.l
src/template.cpp [new file with mode: 0644]
src/template.h [new file with mode: 0644]
src/textdocvisitor.h
src/to_c_cmd.py [new file with mode: 0755]
src/translator_br.h
src/translator_en.h
src/translator_fa.h
src/translator_fr.h
src/translator_jp.h
src/translator_lv.h
src/translator_mk.h
src/translator_ro.h
src/translator_ru.h
src/translator_sc.h
src/util.cpp
src/util.h
src/version.py [new file with mode: 0755]
src/vhdlcode.h
src/vhdlcode.l
src/vhdldocgen.cpp
src/vhdlparser.y
src/vhdlscanner.h
src/vhdlscanner.l
src/xmldocvisitor.cpp
src/xmldocvisitor.h
src/xmlgen.cpp
testing/012/citelist.xml
testing/014/indexpage.xml
tmake/lib/linux-g++/tmake.conf
tmake/lib/unix/generic.t
tmake/lib/win32-borland/generic.t
tmake/lib/win32-g++/generic.t
tmake/lib/win32-mingw/generic.t
tmake/lib/win32-msvc/generic.t
tmake/lib/win32-symantec/generic.t
tmake/lib/win32-visage/generic.t
tmake/lib/win32-watcom/generic.t
winbuild/Config.rules [new file with mode: 0644]
winbuild/Doxygen.sln
winbuild/Doxygen.vcproj
winbuild/Doxywizard.vcproj [changed mode: 0644->0755]
winbuild/Gen_head.rules [new file with mode: 0644]
winbuild/Languages.rules [new file with mode: 0755]
winbuild/Lex.rules
winbuild/Settings.rules [new file with mode: 0644]
winbuild/Version.rules [new file with mode: 0644]
winbuild/doxyindexer.vcproj
winbuild/doxysearch.vcproj
winbuild/iconv.vcproj
winbuild/qtools.vcproj
winbuild/runbison.bat

index 4abda47..af29780 100644 (file)
 /addon/doxysearch/Makefile.doxyindexer
 /addon/doxysearch/Makefile.doxysearch
 /addon/doxmlparser/examples/metrics/Makefile
+/addon/doxmlparser/examples/metrics/Makefile.metrics
 /addon/doxmlparser/src/Makefile
+/addon/doxmlparser/src/Makefile.doxmlparser
 /addon/doxmlparser/test/Makefile
 /addon/doxyapp/Makefile
+/addon/doxyapp/Makefile.doxyapp
 /addon/doxywizard/Makefile
 /addon/doxywizard/Makefile.doxywizard
-/addon/doxywizard/config_lex.cpp
+/addon/doxywizard/config_doxyw.cpp
+/addon/doxywizard/configdoc.cpp
 /addon/doxywizard/moc
 /addon/doxywizard/obj
 /addon/doxywizard/rcc
+/addon/doxmlparser/objects
+/addon/doxmlparser/lib
+/addon/doxmlparser/test/Makefile.xmlparse
+/addon/doxmlparser/test/xmlparse.exe
+/addon/doxmlparser/examples/metrics/obj
+/addon/doxmlparser/examples/metrics/metrics.exe
 /winbuild/config_lex.cpp
 /winbuild/moc
 /winbuild/obj
 /src/pyscanner.cpp
 /src/scanner.cpp
 /src/tclscanner.cpp
-/src/unistd.h
 /src/version.cpp
 /src/vhdlcode.cpp
 /src/vhdlparser.cpp
 /src/vhdlparser.h
 /src/vhdlscanner.cpp
+/src/configoptions.cpp
 /src/Makefile
+/src/bib2xhtml.pl.h
+/src/compound.xsd.h
+/src/constexp.cpp
+/src/doxygen.bst.h
+/src/doxygen.css.h
+/src/doxygen.sty.h
+/src/dynsections.js.h
+/src/extsearch.js.h
+/src/footer.html.h
+/src/header.html.h
+/src/index.xsd.h
+/src/jquery_fx.js.h
+/src/jquery_p1.js.h
+/src/jquery_p2.js.h
+/src/jquery_p3.js.h
+/src/jquery_pt.js.h
+/src/jquery_ui.js.h
+/src/layout_default.xml.h
+/src/navtree.css.h
+/src/navtree.js.h
+/src/resize.js.h
+/src/search.css.h
+/src/search.js.h
+/src/search_functions.php.h
+/src/search_opensearch.php.h
+/src/svgpan.js.h
+
 
 /doc/Makefile
 /doc/translator_report.txt
 
+/doxygen_docs
+/doxygen.tag
+
 /examples/*/html
 /html
 /latex
index f3b3877..2c49548 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
@@ -127,31 +127,30 @@ EXCLUDE                = src/code.cpp \
                          src/vhdlcode.cpp \
                          src/tclscanner.cpp \
                          src/lodepng.cpp \
-                         src/doxygen_css.h \
-                         src/doxygen_js.h \
-                         src/doxygen_php.h \
-                         src/compound_xsd.h \
-                         src/layout_default.h \
-                         src/bib2xhtml.h \
-                         src/doxygen_bst.h \
-                         src/header_html.h \
-                         src/index_xsd.h \
-                         src/jquery_js.h \
-                         src/jquery_fx_js.h \
-                         src/jquery_ui_js.h \
-                         src/navtree_css.h \
-                         src/navtree_hs.h \
-                         src/search_css.h \
-                         src/search_functions_php.h \
-                         src/search_opensearch_php.h \
-                         src/search_js.h \
-                         src/sizzle_js.h \
-                        src/navtree_js.h \
-                        src/resize_js.h \
-                        src/svgpan_js.h \
-                        src/dynsections_js.h \
-                        src/extsearch_js.h \
-                        src/footer_html.h \
+                         src/doxygen.css.h \
+                         src/doxygen.js.h \
+                         src/doxygen.php.h \
+                         src/compound.xsd.h \
+                         src/layout_default.xml.h \
+                         src/bib2xhtml.pl.h \
+                         src/doxygen.bst.h \
+                         src/header.html.h \
+                         src/index.xsd.h \
+                         src/jquery.js.h \
+                         src/jquery_fx.js.h \
+                         src/jquery_ui.js.h \
+                         src/navtree.css.h \
+                         src/navtree.hs.h \
+                         src/search.css.h \
+                         src/search_functions.php.h \
+                         src/search_opensearch.php.h \
+                         src/search.js.h \
+                         src/navtree.js.h \
+                         src/resize.js.h \
+                         src/svgpan.js.h \
+                         src/dynsections.js.h \
+                         src/extsearch.js.h \
+                         src/footer.html.h
 EXCLUDE_SYMLINKS       = NO
 EXCLUDE_SYMBOLS        =
 EXAMPLE_PATH           =
index fed6560..fff10db 100644 (file)
@@ -10,12 +10,20 @@ doxywizard:
 doxysearch:
        cd addon/doxysearch ; $(MAKE) 
 
+doxmlparser:
+       cd addon/doxmlparser/src ; $(MAKE)
+       cd addon/doxmlparser/test ; $(MAKE)
+       cd addon/doxmlparser/examples/metrics ; $(MAKE)
+
+doxyapp:
+       cd addon/doxyapp ; $(MAKE) clean
+
 clean: FORCE
-       cd examples ; $(MAKE) clean
-       cd doc ; $(MAKE) clean
-       cd qtools ; $(MAKE) clean
-       cd src ; $(MAKE) clean
-       cd libmd5 ; $(MAKE) clean
+       cd examples ; $(MAKE) clean
+       cd doc ; $(MAKE) clean
+       cd qtools ; $(MAKE) clean
+       cd src ; $(MAKE) clean
+       cd libmd5 ; $(MAKE) clean
        -cd addon/doxywizard ; $(MAKE) clean
        -cd addon/doxysearch ; $(MAKE) clean
        -cd addon/doxyapp ; $(MAKE) clean
@@ -26,8 +34,8 @@ clean: FORCE
        -rm -f objects/*.o
 
 distclean: clean
-       cd src ; $(MAKE) distclean
-       cd libmd5 ; $(MAKE) distclean
+       -cd src ; $(MAKE) distclean
+       -cd libmd5 ; $(MAKE) distclean
        -cd addon/doxywizard ; $(MAKE) distclean
        -cd addon/doxysearch ; $(MAKE) distclean
        -cd addon/doxyapp ; $(MAKE) distclean
@@ -42,35 +50,52 @@ distclean: clean
        -rm -f src/Makefile.doxygen src/Makefile.libdoxygen 
        -rm -f src/Makefile.libdoxycfg src/libdoxycfg.t src/libdoxygen.t
        -rm -f libmd5/Makefile.libmd5
-       -rm -f Makefile qtools/Makefile src/Makefile examples/Makefile doc/Makefile 
        -rm -f .makeconfig .tmakeconfig
        -rm -f src/doxygen.pro src/libdoxygen.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro
        -rm -f src/version.cpp 
-       -rm -r addon/doxywizard/Makefile
        -rm -f addon/doxywizard/doxywizard.pro
        -rm -f VERSION
        -rm -f packages/rpm/doxygen.spec
+       -rm -r addon/doxywizard/Makefile
+       -rm -f addon/doxysearch/Makefile
+       -rm -f addon/doxyapp/Makefile
+       -rm -f addon/doxmlparser/src/Makefile
+       -rm -f addon/doxmlparser/test/Makefile
+       -rm -f addon/doxmlparser/examples/metrics/Makefile
+       -rm -f qtools/Makefile src/Makefile examples/Makefile doc/Makefile 
+       -rm -f Makefile
+
+realclean: clean
+       -cd src ; $(MAKE) realclean
+       -cd libmd5 ; $(MAKE) realclean
+       -cd addon/doxywizard ; $(MAKE) realclean
+       -cd addon/doxysearch ; $(MAKE) realclean
+       -cd addon/doxyapp ; $(MAKE) realclean
+       -cd addon/doxmlparser/src ; $(MAKE) realclean
+       -cd addon/doxmlparser/test ; $(MAKE) realclean
+       -cd addon/doxmlparser/examples/metrics ; $(MAKE) realclean
+       -$(MAKE) distclean
 
 DATE=$(shell date "+%B %Y")
 
 MAN1DIR = man/man1
 
 install: doxywizard_install doxysearch_install
-       $(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/bin
-       $(INSTTOOL) -m 755 bin/doxygen        $(DESTDIR)/$(INSTALL)/bin
-       $(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/$(MAN1DIR)
+       $(INSTTOOL) -d $(DESTDIR)$(INSTALL)/bin
+       $(INSTTOOL) -m 755 bin/doxygen        $(DESTDIR)$(INSTALL)/bin
+       $(INSTTOOL) -d $(DESTDIR)$(INSTALL)/$(MAN1DIR)
        cat doc/doxygen.1    | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxygen.1 
-       $(INSTTOOL) -m 644 doxygen.1 $(DESTDIR)/$(INSTALL)/$(MAN1DIR)/doxygen.1
+       $(INSTTOOL) -m 644 doxygen.1 $(DESTDIR)$(INSTALL)/$(MAN1DIR)/doxygen.1
        rm doxygen.1
 
 install_docs: 
-       $(INSTTOOL) -d $(DESTDIR)/$(DOCDIR)
+       $(INSTTOOL) -d $(DESTDIR)$(DOCDIR)
        $(MAKE) -C examples
        $(MAKE) -C doc 
        $(MAKE) -C latex 
-       $(INSTTOOL) -m 644 latex/doxygen_manual.pdf $(DESTDIR)/$(DOCDIR)
-       cp -r examples $(DESTDIR)/$(DOCDIR)
-       cp -r html $(DESTDIR)/$(DOCDIR)
+       $(INSTTOOL) -m 644 latex/doxygen_manual.pdf $(DESTDIR)$(DOCDIR)
+       cp -r examples $(DESTDIR)$(DOCDIR)
+       cp -r html $(DESTDIR)$(DOCDIR)
 
 docs: FORCE
        cd examples ; $(MAKE)
@@ -79,7 +104,7 @@ docs: FORCE
 pdf: docs
        cd latex ; $(MAKE)
 
-DISTFILES =  Doxyfile libmd5 addon tmake doc examples bin lib objects \
+DISTFILES =  Doxyfile 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
index 175dc6f..1218979 100644 (file)
@@ -19,6 +19,8 @@ distclean: clean
        -del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
        -del src\version.cpp
 
+realclean: distclean
+
 docs:
        set TMAKEPATH=$(TMAKEPATH) & cd examples & $(MAKE)
        set TMAKEPATH=$(TMAKEPATH) & cd doc & $(MAKE)
index 723d4fd..069bb53 100644 (file)
@@ -31,6 +31,8 @@ distclean: clean
        -del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
        -del src\version.cpp
 
+realclean: distclean
+
 docs: FORCE
        cd examples 
        $(MAKE)
index 83cbc28..a3eb784 100644 (file)
@@ -4,6 +4,8 @@ all clean depend: Makefile.metrics
 distclean: clean
        $(RM) -rf Makefile.metrics metrics.pro Makefile obj
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) $(TMAKE) metrics.pro >Makefile.metrics
 
index 049f969..47d20c2 100644 (file)
@@ -4,6 +4,8 @@ all clean depend: Makefile.doxmlparser
 distclean: clean
        $(RM) -rf Makefile.doxmlparser doxmlparser.pro Makefile obj
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) $(TMAKE) doxmlparser.pro >Makefile.doxmlparser
 
index 1dfbd17..87b1829 100644 (file)
@@ -4,6 +4,8 @@ all clean depend: Makefile.xmlparse
 distclean: clean
        $(RM) -rf Makefile.xmlparse xmlparse.pro Makefile obj
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) $(TMAKE) xmlparse.pro >Makefile.xmlparse
 
index 49ddb4d..d0629d9 100644 (file)
@@ -5,6 +5,8 @@ all clean depend distclean: Makefile.doxyapp
 distclean: clean
        $(RM) -rf Makefile doxyapp.pro Makefile.doxyapp
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) "$(TMAKE)" doxyapp.pro >Makefile.doxyapp
 
index 651bc36..a05f414 100644 (file)
@@ -49,6 +49,9 @@ class XRefDummyCodeGenerator : public CodeOutputInterface
     void codify(const char *) {}
     void writeCodeLink(const char *,const char *,const char *,const char *,const char *)  {}
     void writeLineNumber(const char *,const char *,const char *,int) {}
+    virtual void writeTooltip(const char *,const DocLinkInfo &,
+                              const char *,const char *,const SourceLinkInfo &, 
+                              const SourceLinkInfo &) {}
     void startCodeLine(bool) {}
     void endCodeLine() {}
     void startCodeAnchor(const char *) {}
@@ -107,6 +110,9 @@ static void findXRefSymbols(FileDef *fd)
   // get the interface to a parser that matches the file extension
   ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
 
+  // get the programming language from the file name
+  SrcLangExt lang = getLanguageFromFileName(fd->name());
+
   // reset the parsers state
   pIntf->resetCodeParserState();
 
@@ -117,6 +123,7 @@ static void findXRefSymbols(FileDef *fd)
   pIntf->parseCode(*xrefGen,
                 0,
                 fileToString(fd->absFilePath()),
+                lang,
                 FALSE,
                 0,
                 fd);
index f83fe30..4a49a56 100644 (file)
@@ -2,7 +2,7 @@ TEMPLATE     =  app.t
 CONFIG       = console warn_on debug
 HEADERS      = 
 SOURCES      = doxyapp.cpp
-LIBS          += -L../../lib -L../../lib -ldoxygen -lqtools -lmd5 -ldoxycfg 
+LIBS          += -L../../lib -ldoxygen -lqtools -lmd5 -ldoxycfg -lpthread -liconv
 DESTDIR        = 
 OBJECTS_DIR    = ../../objects
 TARGET         = ../../bin/doxyapp
index 7daafee..f3ed662 100644 (file)
@@ -7,6 +7,8 @@ distclean: clean
        $(RM) -rf Makefile doxysearch.pro Makefile.doxysearch
        $(RM) -rf Makefile doxyindexer.pro Makefile.doxyindexer
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) "$(TMAKE)" doxysearch.pro >Makefile.doxysearch
        $(ENV) $(PERL) "$(TMAKE)" doxyindexer.pro >Makefile.doxyindexer
index fce6d82..c860fd1 100644 (file)
@@ -1,8 +1,8 @@
 TEMPLATE     = app.t
-CONFIG       = console warn_on debug
+CONFIG       = console warn_on debug cgi
 HEADERS      = 
 SOURCES      = doxysearch.cpp
-LIBS        += -lxapian 
+LIBS        += -lxapian
 DESTDIR      = 
 OBJECTS_DIR  = ../../objects
 TARGET       = ../../bin/doxysearch.cgi
index 727409a..152c2b7 100644 (file)
 # See the GNU General Public License for more details.
 # 
 
-QMAKE=qmake $(MKSPECS)
+QMAKE=$(QTDIR)/bin/qmake $(MKSPECS)
+INCBUFSIZE=$(PYTHON) ../../src/increasebuffer.py
 
 all: Makefile.doxywizard  
-       $(MAKE) -f Makefile.doxywizard 
+       $(MAKE) -f Makefile.doxywizard LEX=$(LEX) PYTHON=$(PYTHON) INCBUFSIZE="$(INCBUFSIZE)"
 
 Makefile.doxywizard: doxywizard.pro
        $(QMAKE) doxywizard.pro -o Makefile.doxywizard
@@ -28,6 +29,11 @@ distclean: Makefile.doxywizard
        $(MAKE) -f Makefile.doxywizard distclean 
        $(RM) Makefile.doxywizard
 
+realclean: Makefile.doxywizard
+       $(RM) configdoc.cpp
+       $(RM) config_doxyw.cpp
+       $(MAKE) distclean
+       
 install:
        $(INSTTOOL) -d $(INSTALL)/bin   
        $(INSTTOOL) -m 755 ../../bin/doxywizard $(INSTALL)/bin  
diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l
new file mode 100644 (file)
index 0000000..3a26eb6
--- /dev/null
@@ -0,0 +1,555 @@
+/******************************************************************************
+ *
+ * $Id: config_templ.l,v 1.8 2001/01/01 10:15:16 root Exp $
+ *
+ * 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 
+ * 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.
+ *
+ */
+
+%{
+
+/*
+ *     includes
+ */
+#include "config.h"
+#include "input.h"
+#include <QtCore>
+
+#define MAX_INCLUDE_DEPTH 10
+
+
+/* -----------------------------------------------------------------
+ *
+ *     static variables
+ */
+
+struct ConfigFileState
+{
+  int lineNr;
+  FILE *file;
+  YY_BUFFER_STATE oldState;
+  YY_BUFFER_STATE newState;
+  QString fileName;
+};  
+
+static const QHash<QString,Input*>   *g_options;
+static FILE                          *g_file;
+static QString                        g_yyFileName;
+static QString                        g_includeName;
+static QVariant                       g_includePathList;
+static QStack<ConfigFileState*>       g_includeStack;  
+static int                            g_includeDepth;
+static QVariant                      *g_arg;
+static Input                         *g_curOption=0;
+static QString                        g_elemStr;
+static QTextCodec                    *g_codec     = QTextCodec::codecForName("UTF-8");
+static QString                        g_codecName = QString::fromAscii("UTF-8");
+static int                            g_lastState;
+static QByteArray                     g_tmpString;
+
+/* -----------------------------------------------------------------
+ */
+#undef YY_INPUT
+#define        YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
+
+static int yyread(char *buf,int maxSize)
+{
+    // no file included
+    if (g_includeStack.isEmpty()) 
+    {
+      return fread(buf,1,maxSize,g_file);
+    } 
+    else 
+    {
+      return fread(buf,1,maxSize,g_includeStack.top()->file);
+    }
+}
+
+void config_err(const char *fmt, ...)
+{
+  va_list args;
+  va_start(args, fmt);
+  vfprintf(stderr, fmt, args);
+  va_end(args); 
+}
+void config_warn(const char *fmt, ...)
+{
+  va_list args;
+  va_start(args, fmt);
+  vfprintf(stderr, fmt, args);
+  va_end(args);
+}
+
+static void substEnvVarsInStrList(QStringList &sl);
+static void substEnvVarsInString(QString &s);
+
+static void checkEncoding()
+{
+  Input *option = g_options->value(QString::fromAscii("DOXYFILE_ENCODING"));
+  if (option && option->value().toString()!=g_codecName)
+  {
+    QTextCodec *newCodec = QTextCodec::codecForName(option->value().toString().toAscii());
+    if (newCodec)
+    {
+      g_codec = newCodec;
+      g_codecName = option->value().toString();
+    }
+  }
+}
+
+static FILE *tryPath(const QString &path,const QString &fileName)
+{
+  QString absName=!path.isEmpty() ? path+QString::fromAscii("/")+fileName : fileName;
+  QFileInfo fi(absName);
+  if (fi.exists() && fi.isFile())
+  {
+    FILE *f = fopen(absName.toLocal8Bit(),"r");
+    if (f==NULL)
+      config_err("Error: could not open file %s for reading\n",absName.toLatin1().data());
+    else 
+      return f;
+  }
+  return NULL;
+}
+
+static FILE *findFile(const QString &fileName)
+{
+  if (QFileInfo(fileName).isAbsolute()) // absolute path
+  {
+    return tryPath(QString(), fileName);
+  }
+
+  // relative path, try with include paths in the list
+  QStringList sl = g_includePathList.toStringList();
+  substEnvVarsInStrList(sl);
+  foreach (QString s, sl) 
+  {
+    FILE *f = tryPath(s,fileName);
+    if (f) return f;
+  }
+  // try cwd if g_includePathList fails
+  return tryPath(QString::fromAscii("."),fileName);
+}
+
+static void readIncludeFile(const QString &incName)
+{
+  if (g_includeDepth==MAX_INCLUDE_DEPTH) 
+  {
+    config_err("Error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
+       MAX_INCLUDE_DEPTH,qPrintable(incName));
+    exit(1);
+  } 
+
+  QString inc = incName;
+  substEnvVarsInString(inc);
+  inc = inc.trimmed();
+  uint incLen = inc.length();
+  if (inc.at(0)==QChar::fromAscii('"') && 
+      inc.at(incLen-1)==QChar::fromAscii('"')) // strip quotes
+  {
+    inc=inc.mid(1,incLen-2);
+  }
+
+  FILE *f = findFile(inc);
+  if (f) // see if the include file can be found
+  {
+    // For debugging
+#if SHOW_INCLUDES
+    for (i=0;i<includeStack.count();i++) msg("  ");
+    msg("@INCLUDE = %s: parsing...\n",inc.toLatin1().data());
+#endif
+
+    // store the state of the old file 
+    ConfigFileState *fs=new ConfigFileState;
+    fs->oldState=YY_CURRENT_BUFFER;
+    fs->fileName=g_yyFileName;
+    fs->file=f;
+    // push the state on the stack
+    g_includeStack.push(fs);
+    // set the scanner to the include file
+    yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE));
+    fs->newState=YY_CURRENT_BUFFER;
+    g_yyFileName=inc;
+    g_includeDepth++;
+  } 
+  else
+  {
+    config_err("Error: @INCLUDE = %s: not found!\n",inc.toLatin1().data());
+    exit(1);
+  }
+}
+
+
+%}
+
+%option nounput
+%option noyywrap
+%option yylineno
+
+%x      Start
+%x     SkipComment
+%x      SkipInvalid
+%x      GetString
+%x      GetStrList
+%x      GetQuotedString
+%x      GetEnvVar
+%x      Include
+
+%%
+
+<*>\0x0d
+<Start,GetString,GetStrList,SkipInvalid>"#"     { BEGIN(SkipComment); }
+<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"="  { QString cmd = g_codec->toUnicode(yytext);
+                                           cmd=cmd.left(cmd.length()-1).trimmed(); 
+                                          g_curOption = g_options->value(cmd);
+                                          if (g_curOption==0) // oops not known
+                                          {
+                                            config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+                                                qPrintable(cmd),yylineno,qPrintable(g_yyFileName)); 
+                                            BEGIN(SkipInvalid);
+                                          }
+                                          else // known tag
+                                          {
+                                            //option->setEncoding(encoding);
+                                            g_arg = &g_curOption->value();
+                                            switch(g_curOption->kind())
+                                            {
+                                              case Input::StrList:
+                                                g_elemStr = QString();
+                                                *g_arg = QStringList();
+                                                BEGIN(GetStrList);
+                                                break;
+                                              case Input::String:
+                                                BEGIN(GetString);
+                                                break;
+                                              case Input::Int:
+                                                BEGIN(GetString);
+                                                break;
+                                              case Input::Bool:
+                                                BEGIN(GetString);
+                                                break;
+                                              case Input::Obsolete:
+                                                config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+                                                           "To avoid this warning please update your configuration "
+                                                           "file using \"doxygen -u\"\n", qPrintable(cmd),
+                                                           yylineno,qPrintable(g_yyFileName)); 
+                                                BEGIN(SkipInvalid);
+                                                break;
+                                            }
+                                          }
+                                       }
+<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"+="        { QString cmd=g_codec->toUnicode(yytext);
+                                          cmd=cmd.left(cmd.length()-2).trimmed(); 
+                                         g_curOption = g_options->value(cmd);
+                                         if (g_curOption==0) // oops not known
+                                         {
+                                           config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+                                               yytext,yylineno,qPrintable(g_yyFileName)); 
+                                           BEGIN(SkipInvalid);
+                                         }
+                                         else // known tag
+                                         {
+                                           switch(g_curOption->kind())
+                                           {
+                                             case Input::StrList:
+                                               g_arg = &g_curOption->value();
+                                               g_elemStr=QString();
+                                               BEGIN(GetStrList);
+                                               break;
+                                             case Input::String:
+                                             case Input::Int:
+                                             case Input::Bool:
+                                               config_err("Warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
+                                                   yytext,yylineno,qPrintable(g_yyFileName)); 
+                                               BEGIN(SkipInvalid);
+                                               break;
+                                             case Input::Obsolete:
+                                                config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+                                                           "To avoid this warning please update your configuration "
+                                                           "file using \"doxygen -u\"\n", 
+                                                           qPrintable(cmd),yylineno,qPrintable(g_yyFileName)); 
+                                                BEGIN(SkipInvalid);
+                                                break;
+                                            }
+                                          }
+                                       }
+<Start>"@INCLUDE_PATH"[ \t]*"="        { BEGIN(GetStrList); g_arg=&g_includePathList; *g_arg = QStringList(); g_elemStr=QString(); }
+  /* include a config file */
+<Start>"@INCLUDE"[ \t]*"="                     { BEGIN(Include);}
+<Include>([^ \"\t\r\n]+)|("\""[^\n\"]+"\"") { 
+                                         readIncludeFile(g_codec->toUnicode(yytext)); 
+                                         BEGIN(Start);
+                                       }
+<<EOF>>                                        {
+                                          //printf("End of include file\n");
+                                         //printf("Include stack depth=%d\n",g_includeStack.count());
+                                          if (g_includeStack.isEmpty())
+                                         {
+                                           //printf("Terminating scanner!\n");
+                                           yyterminate();
+                                         }
+                                         else
+                                         {
+                                           ConfigFileState *fs = g_includeStack.pop();
+                                           fclose(fs->file);
+                                           YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
+                                           yy_switch_to_buffer( fs->oldState );
+                                           yy_delete_buffer( oldBuf );
+                                           g_yyFileName=fs->fileName;
+                                           delete fs; 
+                                            g_includeDepth--;
+                                         }
+                                       }
+
+<Start>[a-z_A-Z0-9]+                   { config_err("Warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yylineno,qPrintable(g_yyFileName)); }
+<GetString,SkipInvalid>\n              { BEGIN(Start); }
+<GetStrList>\n                         { 
+                                         if (!g_elemStr.isEmpty())
+                                         {
+                                           //printf("elemStr1=`%s'\n",elemStr.toLatin1().data());
+                                           *g_arg = QVariant(g_arg->toStringList() << g_elemStr);
+                                         }
+                                         BEGIN(Start); 
+                                       }
+<GetStrList>[ \t]+                     {
+                                         if (!g_elemStr.isEmpty())
+                                         {
+                                           //printf("elemStr2=`%s'\n",elemStr.toLatin1().data());
+                                           *g_arg = QVariant(g_arg->toStringList() << g_elemStr);
+                                         }
+                                         g_elemStr = QString();
+                                       }
+<GetString>[^ \"\t\r\n]+               { 
+                                          *g_arg = QVariant(g_codec->toUnicode(yytext)); 
+                                          checkEncoding();
+                                        }
+<GetString,GetStrList,SkipInvalid>"\"" { g_lastState=YY_START;
+                                         BEGIN(GetQuotedString); 
+                                          g_tmpString="";
+                                       }
+<GetQuotedString>"\""|"\n"             { 
+                                          // we add a bogus space to signal that the string was quoted. This space will be stripped later on.
+                                          g_tmpString+=" ";
+                                         //printf("Quoted String = `%s'\n",tmpString.toLatin1().data());
+                                         if (g_lastState==GetString)
+                                         {
+                                           *g_arg = g_codec->toUnicode(g_tmpString);
+                                            checkEncoding();
+                                         }
+                                         else
+                                         {
+                                           g_elemStr+=g_codec->toUnicode(g_tmpString);
+                                         }
+                                         if (*yytext=='\n')
+                                         {
+                                           config_err("Warning: Missing end quote (\") on line %d, file %s\n",yylineno,
+                                                qPrintable(g_yyFileName));
+                                         }
+                                         BEGIN(g_lastState);
+                                       }
+<GetQuotedString>"\\\""                        {
+                                         g_tmpString+='"';
+                                       }
+<GetQuotedString>.                     { g_tmpString+=*yytext; }
+<GetStrList>[^ \#\"\t\r\n]+            {
+                                         g_elemStr+=g_codec->toUnicode(yytext);
+                                       }
+<SkipComment>\n                                { BEGIN(Start); }
+<SkipComment>\\[ \r\t]*\n              { BEGIN(Start); }
+<*>\\[ \r\t]*\n                                { }
+<*>\n
+<*>.                                   
+
+%%
+
+/*@ ----------------------------------------------------------------------------
+ */
+
+static void substEnvVarsInString(QString &s)
+{
+  static QRegExp re(QString::fromAscii("\\$\\([a-z_A-Z0-9]+\\)"));
+  if (s.isEmpty()) return;
+  int p=0;
+  int i,l;
+  //printf("substEnvVarInString(%s) start\n",s.toLatin1().data());
+  while ((i=re.indexIn(s,p))!=-1)
+  {
+    l = re.matchedLength();
+    //printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).toLatin1().data());
+    QString env=g_codec->toUnicode(getenv(s.mid(i+2,l-3).toLatin1()));
+    substEnvVarsInString(env); // recursively expand variables if needed.
+    s = s.left(i)+env+s.right(s.length()-i-l);
+    p=i+env.length(); // next time start at the end of the expanded string
+  }
+  s=s.trimmed(); // to strip the bogus space that was added when an argument
+                         // has quotes
+  //printf("substEnvVarInString(%s) end\n",s.toLatin1().data());
+}
+
+static void substEnvVarsInStrList(QStringList &sl)
+{
+  QStringList out;
+
+  foreach (QString result, sl)
+  {
+    // an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE.
+    bool wasQuoted = (result.indexOf(QChar::fromAscii(' '))!=-1) || 
+                     (result.indexOf(QChar::fromAscii('\t'))!=-1);
+    // here we strip the quote again
+    substEnvVarsInString(result);
+
+    //printf("Result %s was quoted=%d\n",result.toLatin1().data(),wasQuoted);
+
+    if (!wasQuoted) /* as a result of the expansion, a single string
+                      may have expanded into a list, which we'll
+                      add to sl. If the original string already
+                      contained multiple elements no further 
+                      splitting is done to allow quoted items with spaces! */
+    {
+      int l=result.length();
+      int i,p=0;
+      // skip spaces
+      // search for a "word"
+      for (i=0;i<l;i++)
+      {
+       QChar c=0;
+       // skip until start of new word
+       while (i<l && ((c=result.at(i))==QChar::fromAscii(' ') || c==QChar::fromAscii('\t'))) i++; 
+       p=i; // p marks the start index of the word
+       // skip until end of a word
+       while (i<l && ((c=result.at(i))!=QChar::fromAscii(' ') && 
+                     c!=QChar::fromAscii('\t') && 
+                     c!=QChar::fromAscii('"'))) i++;
+       if (i<l) // not at the end of the string
+       {
+         if (c==QChar::fromAscii('"')) // word within quotes
+         {
+           p=i+1;
+           for (i++;i<l;i++)
+           {
+             c=result.at(i);
+             if (c==QChar::fromAscii('"')) // end quote
+             {
+                out += result.mid(p,i-p);
+               p=i+1;
+               break; 
+             }
+             else if (c==QChar::fromAscii('\\')) // skip escaped stuff
+             {
+               i++;
+             }
+           }
+         }
+         else if (c==QChar::fromAscii(' ') || c==QChar::fromAscii('\t')) // separator
+         {
+            out += result.mid(p,i-p);
+           p=i+1;
+         }
+       }
+      }
+      if (p!=l) // add the leftover as a string
+      {
+        out += result.right(l-p);
+      }
+    }
+    else // just goto the next element in the list
+    {
+      out += result;
+    }
+  }
+  sl = out;
+}
+
+//--------------------------------------------------------------------------
+
+bool parseConfig(
+      const QString &fileName,
+      const QHash<QString,Input *> &options
+    )
+{
+  QHashIterator<QString, Input*> i(options);
+  g_file = fopen(fileName.toLocal8Bit(),"r");
+  if (g_file==NULL) return false;
+
+  // reset all values
+  i.toFront();
+  while (i.hasNext()) 
+  {
+    i.next();
+    if (i.value())
+    {
+      i.value()->reset();
+    }
+  }
+
+  // parse config file
+  g_options       = &options;
+  g_yyFileName    = fileName;
+  g_includeStack.clear();
+  g_includeDepth  = 0;
+  config_doxywYYrestart( config_doxywYYin );
+  BEGIN( Start );
+  config_doxywYYlex();
+
+  // update the values in the UI
+  i.toFront();
+  while (i.hasNext()) 
+  {
+    i.next();
+    if (i.value())
+    {
+      //printf("Updating: %s\n",qPrintable(i.key()));
+      i.value()->update();
+    }
+    else
+    {
+      printf("Invalid option: %s\n",qPrintable(i.key()));
+    }
+  } 
+  fclose(g_file);
+  return true;
+}
+
+void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
+{
+  QChar c;
+  bool needsEscaping=FALSE;
+  // convert the string back to it original encoding
+  //QByteArray se = codec->fromUnicode(s);
+  t.setCodec(codec);
+  const QChar *p=s.data();
+  if (!s.isEmpty() && !p->isNull())
+  {
+    while (!(c=*p++).isNull() && !needsEscaping) 
+    {
+      needsEscaping = (c==QChar::fromAscii(' ')  || 
+                      c==QChar::fromAscii('\n') || 
+                      c==QChar::fromAscii('\t') || 
+                      c==QChar::fromAscii('"'));
+    }
+    if (needsEscaping)
+    { 
+      t << "\"";
+      p=s.data();
+      while (!p->isNull())
+      {
+       if (*p   ==QChar::fromAscii(' ') && 
+          *(p+1)==QChar::fromAscii('\0')) break; // skip inserted space at the end
+       if (*p   ==QChar::fromAscii('"')) t << "\\"; // escape quotes
+       t << *p++;
+      }
+      t << "\"";
+    }
+    else
+    {
+      t << s;
+    }
+  }
+}
+
diff --git a/addon/doxywizard/configdoc.cpp b/addon/doxywizard/configdoc.cpp
deleted file mode 100644 (file)
index c439322..0000000
+++ /dev/null
@@ -1,2241 +0,0 @@
-/* WARNING: This file is generated!
- * Do not edit this file, but edit config.xml instead and run
- * python configgen.py -wiz config.xml to regenerate this file!
- */
-#include "configdoc.h"
-#include "docintf.h"
-
-void addConfigDocs(DocIntf *doc)
-{
-  doc->setHeader(
-              "This file describes the settings to be used by the documentation system\n"
-              "doxygen (www.doxygen.org) for a project.\n"
-              "\n"
-              "All text after a double hash (##) is considered a comment and is placed in\n"
-              "front of the TAG it is preceding.\n"
-              "\n"
-              "All text after a single hash (#) is considered a comment and will be ignored.\n"
-              "The format is:\n"
-              "TAG = value [value, ...]\n"
-              "For lists, items can also be appended using:\n"
-              "TAG += value [value, ...]\n"
-              "Values that contain spaces should be placed between quotes (\\\" \\\")."
-             );
-  doc->add(
-              "DOXYFILE_ENCODING",
-              "This tag specifies the encoding used for all characters in the config file\n"
-              "that follow. The default is UTF-8 which is also the encoding used for all text\n"
-              "before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n"
-              "built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n"
-              "for the list of possible encodings.\n"
-              "The default value is: UTF-8."
-          );
-  doc->add(
-              "PROJECT_NAME",
-              "The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n"
-              "double-quotes, unless you are using Doxywizard) that should identify the\n"
-              "project for which the documentation is generated. This name is used in the\n"
-              "title of most generated pages and in a few other places.\n"
-              "The default value is: My Project."
-          );
-  doc->add(
-              "PROJECT_NUMBER",
-              "The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n"
-              "could be handy for archiving the generated documentation or if some version\n"
-              "control system is used."
-          );
-  doc->add(
-              "PROJECT_BRIEF",
-              "Using the PROJECT_BRIEF tag one can provide an optional one line description\n"
-              "for a project that appears at the top of each page and should give viewer a\n"
-              "quick idea about the purpose of the project. Keep the description short."
-          );
-  doc->add(
-              "PROJECT_LOGO",
-              "With the PROJECT_LOGO tag one can specify an logo or icon that is included in\n"
-              "the documentation. The maximum height of the logo should not exceed 55 pixels\n"
-              "and the maximum width should not exceed 200 pixels. Doxygen will copy the logo\n"
-              "to the output directory."
-          );
-  doc->add(
-              "OUTPUT_DIRECTORY",
-              "The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n"
-              "into which the generated documentation will be written. If a relative path is\n"
-              "entered, it will be relative to the location where doxygen was started. If\n"
-              "left blank the current directory will be used."
-          );
-  doc->add(
-              "CREATE_SUBDIRS",
-              "If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-\n"
-              "directories (in 2 levels) under the output directory of each output format and\n"
-              "will distribute the generated files over these directories. Enabling this\n"
-              "option can be useful when feeding doxygen a huge amount of source files, where\n"
-              "putting all generated files in the same directory would otherwise causes\n"
-              "performance problems for the file system.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "OUTPUT_LANGUAGE",
-              "The OUTPUT_LANGUAGE tag is used to specify the language in which all\n"
-              "documentation generated by doxygen is written. Doxygen will use this\n"
-              "information to generate all constant output in the proper language.\n"
-              "Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-\n"
-              "Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi,\n"
-              "Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en,\n"
-              "Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish,\n"
-              "Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,\n"
-              "Turkish, Ukrainian and Vietnamese.\n"
-              "The default value is: English."
-          );
-  doc->add(
-              "BRIEF_MEMBER_DESC",
-              "If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member\n"
-              "descriptions after the members that are listed in the file and class\n"
-              "documentation (similar to Javadoc). Set to NO to disable this.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "REPEAT_BRIEF",
-              "If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief\n"
-              "description of a member or function before the detailed description\n"
-              "\n"
-              "Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n"
-              "brief descriptions will be completely suppressed.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "ABBREVIATE_BRIEF",
-              "This tag implements a quasi-intelligent brief description abbreviator that is\n"
-              "used to form the text in various listings. Each string in this list, if found\n"
-              "as the leading text of the brief description, will be stripped from the text\n"
-              "and the result, after processing the whole list, is used as the annotated\n"
-              "text. Otherwise, the brief description is used as-is. If left blank, the\n"
-              "following values are used ($name is automatically replaced with the name of\n"
-              "the entity):The $name class, The $name widget, The $name file, is, provides,\n"
-              "specifies, contains, represents, a, an and the."
-          );
-  doc->add(
-              "ALWAYS_DETAILED_SEC",
-              "If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n"
-              "doxygen will generate a detailed section even if there is only a brief\n"
-              "description.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INLINE_INHERITED_MEMB",
-              "If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n"
-              "inherited members of a class in the documentation of that class as if those\n"
-              "members were ordinary class members. Constructors, destructors and assignment\n"
-              "operators of the base classes will not be shown.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "FULL_PATH_NAMES",
-              "If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path\n"
-              "before files name in the file list and in the header files. If set to NO the\n"
-              "shortest path that makes the file name unique will be used\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "STRIP_FROM_PATH",
-              "The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n"
-              "Stripping is only done if one of the specified strings matches the left-hand\n"
-              "part of the path. The tag can be used to show relative paths in the file list.\n"
-              "If left blank the directory from which doxygen is run is used as the path to\n"
-              "strip.\n"
-              "\n"
-              "Note that you can specify absolute paths here, but also relative paths, which\n"
-              "will be relative from the directory where doxygen is started.\n"
-              "This tag requires that the tag FULL_PATH_NAMES is set to YES."
-          );
-  doc->add(
-              "STRIP_FROM_INC_PATH",
-              "The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n"
-              "path mentioned in the documentation of a class, which tells the reader which\n"
-              "header file to include in order to use a class. If left blank only the name of\n"
-              "the header file containing the class definition is used. Otherwise one should\n"
-              "specify the list of include paths that are normally passed to the compiler\n"
-              "using the -I flag."
-          );
-  doc->add(
-              "SHORT_NAMES",
-              "If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n"
-              "less readable) file names. This can be useful is your file systems doesn't\n"
-              "support long names like on DOS, Mac, or CD-ROM.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "JAVADOC_AUTOBRIEF",
-              "If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n"
-              "first line (until the first dot) of a Javadoc-style comment as the brief\n"
-              "description. If set to NO, the Javadoc-style will behave just like regular Qt-\n"
-              "style comments (thus requiring an explicit @brief command for a brief\n"
-              "description.)\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "QT_AUTOBRIEF",
-              "If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n"
-              "line (until the first dot) of a Qt-style comment as the brief description. If\n"
-              "set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n"
-              "requiring an explicit \\brief command for a brief description.)\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "MULTILINE_CPP_IS_BRIEF",
-              "The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n"
-              "multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n"
-              "a brief description. This used to be the default behavior. The new default is\n"
-              "to treat a multi-line C++ comment block as a detailed description. Set this\n"
-              "tag to YES if you prefer the old behavior instead.\n"
-              "\n"
-              "Note that setting this tag to YES also means that rational rose comments are\n"
-              "not recognized any more.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INHERIT_DOCS",
-              "If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n"
-              "documentation from any documented member that it re-implements.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SEPARATE_MEMBER_PAGES",
-              "If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a\n"
-              "new page for each member. If set to NO, the documentation of a member will be\n"
-              "part of the file/class/namespace that contains it.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "TAB_SIZE",
-              "The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n"
-              "uses this value to replace tabs by spaces in code fragments.\n"
-              "Minimum value: 1, maximum value: 16, default value: 4."
-          );
-  doc->add(
-              "ALIASES",
-              "This tag can be used to specify a number of aliases that act as commands in\n"
-              "the documentation. An alias has the form:\n"
-              "name=value\n"
-              "For example adding\n"
-              "\"sideeffect=@par Side Effects:\\n\"\n"
-              "will allow you to put the command \\sideeffect (or @sideeffect) in the\n"
-              "documentation, which will result in a user-defined paragraph with heading\n"
-              "\"Side Effects:\". You can put \\n's in the value part of an alias to insert\n"
-              "newlines."
-          );
-  doc->add(
-              "TCL_SUBST",
-              "This tag can be used to specify a number of word-keyword mappings (TCL only).\n"
-              "A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n"
-              "will allow you to use the command class in the itcl::class meaning."
-          );
-  doc->add(
-              "OPTIMIZE_OUTPUT_FOR_C",
-              "Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n"
-              "only. Doxygen will then generate output that is more tailored for C. For\n"
-              "instance, some of the names that are used will be different. The list of all\n"
-              "members will be omitted, etc.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "OPTIMIZE_OUTPUT_JAVA",
-              "Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n"
-              "Python sources only. Doxygen will then generate output that is more tailored\n"
-              "for that language. For instance, namespaces will be presented as packages,\n"
-              "qualified scopes will look different, etc.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "OPTIMIZE_FOR_FORTRAN",
-              "Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n"
-              "sources. Doxygen will then generate output that is tailored for Fortran.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "OPTIMIZE_OUTPUT_VHDL",
-              "Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n"
-              "sources. Doxygen will then generate output that is tailored for VHDL.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTENSION_MAPPING",
-              "Doxygen selects the parser to use depending on the extension of the files it\n"
-              "parses. With this tag you can assign which parser to use for a given\n"
-              "extension. Doxygen has a built-in mapping, but you can override or extend it\n"
-              "using this tag. The format is ext=language, where ext is a file extension, and\n"
-              "language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n"
-              "C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make\n"
-              "doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n"
-              "(default is Fortran), use: inc=Fortran f=C.\n"
-              "\n"
-              "Note For files without extension you can use no_extension as a placeholder.\n"
-              "\n"
-              "Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n"
-              "the files are not read by doxygen."
-          );
-  doc->add(
-              "MARKDOWN_SUPPORT",
-              "If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n"
-              "according to the Markdown format, which allows for more readable\n"
-              "documentation. See http://daringfireball.net/projects/markdown/ for details.\n"
-              "The output of markdown processing is further processed by doxygen, so you can\n"
-              "mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n"
-              "case of backward compatibilities issues.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "AUTOLINK_SUPPORT",
-              "When enabled doxygen tries to link words that correspond to documented\n"
-              "classes, or namespaces to their corresponding documentation. Such a link can\n"
-              "be prevented in individual cases by by putting a % sign in front of the word\n"
-              "or globally by setting AUTOLINK_SUPPORT to NO.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "BUILTIN_STL_SUPPORT",
-              "If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n"
-              "to include (a tag file for) the STL sources as input, then you should set this\n"
-              "tag to YES in order to let doxygen match functions declarations and\n"
-              "definitions whose arguments contain STL classes (e.g. func(std::string);\n"
-              "versus func(std::string) {}). This also make the inheritance and collaboration\n"
-              "diagrams that involve STL classes more complete and accurate.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "CPP_CLI_SUPPORT",
-              "If you use Microsoft's C++/CLI language, you should set this option to YES to\n"
-              "enable parsing support.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SIP_SUPPORT",
-              "Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n"
-              "http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n"
-              "will parse them like normal C++ but will assume all classes use public instead\n"
-              "of private inheritance when no explicit protection keyword is present.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "IDL_PROPERTY_SUPPORT",
-              "For Microsoft's IDL there are propget and propput attributes to indicate\n"
-              "getter and setter methods for a property. Setting this option to YES will make\n"
-              "doxygen to replace the get and set methods by a property in the documentation.\n"
-              "This will only work if the methods are indeed getting or setting a simple\n"
-              "type. If this is not the case, or you want to show the methods anyway, you\n"
-              "should set this option to NO.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "DISTRIBUTE_GROUP_DOC",
-              "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n"
-              "tag is set to YES, then doxygen will reuse the documentation of the first\n"
-              "member in the group (if any) for the other members of the group. By default\n"
-              "all members of a group must be documented explicitly.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SUBGROUPING",
-              "Set the SUBGROUPING tag to YES to allow class member groups of the same type\n"
-              "(for instance a group of public functions) to be put as a subgroup of that\n"
-              "type (e.g. under the Public Functions section). Set it to NO to prevent\n"
-              "subgrouping. Alternatively, this can be done per class using the\n"
-              "\\nosubgrouping command.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "INLINE_GROUPED_CLASSES",
-              "When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n"
-              "are shown inside the group in which they are included (e.g. using \\ingroup)\n"
-              "instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n"
-              "and RTF).\n"
-              "\n"
-              "Note that this feature does not work in combination with\n"
-              "SEPARATE_MEMBER_PAGES.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INLINE_SIMPLE_STRUCTS",
-              "When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n"
-              "with only public data fields or simple typedef fields will be shown inline in\n"
-              "the documentation of the scope in which they are defined (i.e. file,\n"
-              "namespace, or group documentation), provided this scope is documented. If set\n"
-              "to NO, structs, classes, and unions are shown on a separate page (for HTML and\n"
-              "Man pages) or section (for LaTeX and RTF).\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "TYPEDEF_HIDES_STRUCT",
-              "When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n"
-              "enum is documented as struct, union, or enum with the name of the typedef. So\n"
-              "typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n"
-              "with name TypeT. When disabled the typedef will appear as a member of a file,\n"
-              "namespace, or class. And the struct will be named TypeS. This can typically be\n"
-              "useful for C code in case the coding convention dictates that all compound\n"
-              "types are typedef'ed and only the typedef is referenced, never the tag name.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "LOOKUP_CACHE_SIZE",
-              "The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n"
-              "cache is used to resolve symbols given their name and scope. Since this can be\n"
-              "an expensive process and often the same symbol appears multiple times in the\n"
-              "code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n"
-              "doxygen will become slower. If the cache is too large, memory is wasted. The\n"
-              "cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n"
-              "is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n"
-              "symbols. At the end of a run doxygen will report the cache usage and suggest\n"
-              "the optimal cache size from a speed point of view.\n"
-              "Minimum value: 0, maximum value: 9, default value: 0."
-          );
-  doc->add(
-              "EXTRACT_ALL",
-              "If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\n"
-              "documentation are documented, even if no documentation was available. Private\n"
-              "class members and static file members will be hidden unless the\n"
-              "EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n"
-              "Note: This will also disable the warnings about undocumented members that are\n"
-              "normally produced when WARNINGS is set to YES.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTRACT_PRIVATE",
-              "If the EXTRACT_PRIVATE tag is set to YES all private members of a class will\n"
-              "be included in the documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTRACT_PACKAGE",
-              "If the EXTRACT_PACKAGE tag is set to YES all members with package or internal\n"
-              "scope will be included in the documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTRACT_STATIC",
-              "If the EXTRACT_STATIC tag is set to YES all static members of a file will be\n"
-              "included in the documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTRACT_LOCAL_CLASSES",
-              "If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined\n"
-              "locally in source files will be included in the documentation. If set to NO\n"
-              "only classes defined in header files are included. Does not have any effect\n"
-              "for Java sources.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "EXTRACT_LOCAL_METHODS",
-              "This flag is only useful for Objective-C code. When set to YES local methods,\n"
-              "which are defined in the implementation section but not in the interface are\n"
-              "included in the documentation. If set to NO only methods in the interface are\n"
-              "included.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTRACT_ANON_NSPACES",
-              "If this flag is set to YES, the members of anonymous namespaces will be\n"
-              "extracted and appear in the documentation as a namespace called\n"
-              "'anonymous_namespace{file}', where file will be replaced with the base name of\n"
-              "the file that contains the anonymous namespace. By default anonymous namespace\n"
-              "are hidden.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "HIDE_UNDOC_MEMBERS",
-              "If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n"
-              "undocumented members inside documented classes or files. If set to NO these\n"
-              "members will be included in the various overviews, but no documentation\n"
-              "section is generated. This option has no effect if EXTRACT_ALL is enabled.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "HIDE_UNDOC_CLASSES",
-              "If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n"
-              "undocumented classes that are normally visible in the class hierarchy. If set\n"
-              "to NO these classes will be included in the various overviews. This option has\n"
-              "no effect if EXTRACT_ALL is enabled.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "HIDE_FRIEND_COMPOUNDS",
-              "If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n"
-              "(class|struct|union) declarations. If set to NO these declarations will be\n"
-              "included in the documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "HIDE_IN_BODY_DOCS",
-              "If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n"
-              "documentation blocks found inside the body of a function. If set to NO these\n"
-              "blocks will be appended to the function's detailed documentation block.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INTERNAL_DOCS",
-              "The INTERNAL_DOCS tag determines if documentation that is typed after a\n"
-              "\\internal command is included. If the tag is set to NO then the documentation\n"
-              "will be excluded. Set it to YES to include the internal documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "CASE_SENSE_NAMES",
-              "If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n"
-              "names in lower-case letters. If set to YES upper-case letters are also\n"
-              "allowed. This is useful if you have classes or files whose names only differ\n"
-              "in case and if your file system supports case sensitive file names. Windows\n"
-              "and Mac users are advised to set this option to NO.\n"
-              "The default value is: system dependent."
-          );
-  doc->add(
-              "HIDE_SCOPE_NAMES",
-              "If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n"
-              "their full class and namespace scopes in the documentation. If set to YES the\n"
-              "scope will be hidden.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SHOW_INCLUDE_FILES",
-              "If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n"
-              "the files that are included by a file in the documentation of that file.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "FORCE_LOCAL_INCLUDES",
-              "If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n"
-              "files with double quotes in the documentation rather than with sharp brackets.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INLINE_INFO",
-              "If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n"
-              "documentation for inline members.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SORT_MEMBER_DOCS",
-              "If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n"
-              "(detailed) documentation of file and class members alphabetically by member\n"
-              "name. If set to NO the members will appear in declaration order.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SORT_BRIEF_DOCS",
-              "If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n"
-              "descriptions of file, namespace and class members alphabetically by member\n"
-              "name. If set to NO the members will appear in declaration order.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SORT_MEMBERS_CTORS_1ST",
-              "If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n"
-              "(brief and detailed) documentation of class members so that constructors and\n"
-              "destructors are listed first. If set to NO the constructors will appear in the\n"
-              "respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n"
-              "Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n"
-              "member documentation.\n"
-              "Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n"
-              "detailed member documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SORT_GROUP_NAMES",
-              "If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n"
-              "of group names into alphabetical order. If set to NO the group names will\n"
-              "appear in their defined order.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "SORT_BY_SCOPE_NAME",
-              "If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n"
-              "fully-qualified names, including namespaces. If set to NO, the class list will\n"
-              "be sorted only by class name, not including the namespace part.\n"
-              "Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n"
-              "Note: This option applies only to the class list, not to the alphabetical\n"
-              "list.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "STRICT_PROTO_MATCHING",
-              "If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n"
-              "type resolution of all parameters of a function it will reject a match between\n"
-              "the prototype and the implementation of a member function even if there is\n"
-              "only one candidate or it is obvious which candidate to choose by doing a\n"
-              "simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n"
-              "accept a match between prototype and implementation in such cases.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "GENERATE_TODOLIST",
-              "The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the\n"
-              "todo list. This list is created by putting \\todo commands in the\n"
-              "documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "GENERATE_TESTLIST",
-              "The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the\n"
-              "test list. This list is created by putting \\test commands in the\n"
-              "documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "GENERATE_BUGLIST",
-              "The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug\n"
-              "list. This list is created by putting \\bug commands in the documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "GENERATE_DEPRECATEDLIST",
-              "The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)\n"
-              "the deprecated list. This list is created by putting \\deprecated commands in\n"
-              "the documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "ENABLED_SECTIONS",
-              "The ENABLED_SECTIONS tag can be used to enable conditional documentation\n"
-              "sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n"
-              "... \\endcond blocks."
-          );
-  doc->add(
-              "MAX_INITIALIZER_LINES",
-              "The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n"
-              "initial value of a variable or macro / define can have for it to appear in the\n"
-              "documentation. If the initializer consists of more lines than specified here\n"
-              "it will be hidden. Use a value of 0 to hide initializers completely. The\n"
-              "appearance of the value of individual variables and macros / defines can be\n"
-              "controlled using \\showinitializer or \\hideinitializer command in the\n"
-              "documentation regardless of this setting.\n"
-              "Minimum value: 0, maximum value: 10000, default value: 30."
-          );
-  doc->add(
-              "SHOW_USED_FILES",
-              "Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n"
-              "the bottom of the documentation of classes and structs. If set to YES the list\n"
-              "will mention the files that were used to generate the documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SHOW_FILES",
-              "Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n"
-              "will remove the Files entry from the Quick Index and from the Folder Tree View\n"
-              "(if specified).\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SHOW_NAMESPACES",
-              "Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n"
-              "page. This will remove the Namespaces entry from the Quick Index and from the\n"
-              "Folder Tree View (if specified).\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "FILE_VERSION_FILTER",
-              "The FILE_VERSION_FILTER tag can be used to specify a program or script that\n"
-              "doxygen should invoke to get the current version for each file (typically from\n"
-              "the version control system). Doxygen will invoke the program by executing (via\n"
-              "popen()) the command command input-file, where command is the value of the\n"
-              "FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n"
-              "by doxygen. Whatever the program writes to standard output is used as the file\n"
-              "version. For an example see the documentation."
-          );
-  doc->add(
-              "LAYOUT_FILE",
-              "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n"
-              "by doxygen. The layout file controls the global structure of the generated\n"
-              "output files in an output format independent way. To create the layout file\n"
-              "that represents doxygen's defaults, run doxygen with the -l option. You can\n"
-              "optionally specify a file name after the option, if omitted DoxygenLayout.xml\n"
-              "will be used as the name of the layout file.\n"
-              "\n"
-              "Note that if you run doxygen from a directory containing a file called\n"
-              "DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n"
-              "tag is left empty."
-          );
-  doc->add(
-              "CITE_BIB_FILES",
-              "The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n"
-              "the reference definitions. This must be a list of .bib files. The .bib\n"
-              "extension is automatically appended if omitted. This requires the bibtex tool\n"
-              "to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n"
-              "For LaTeX the style of the bibliography can be controlled using\n"
-              "LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n"
-              "search path. Do not use file names with spaces, bibtex cannot handle them. See\n"
-              "also \\cite for info how to create references."
-          );
-  doc->add(
-              "QUIET",
-              "The QUIET tag can be used to turn on/off the messages that are generated to\n"
-              "standard output by doxygen. If QUIET is set to YES this implies that the\n"
-              "messages are off.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "WARNINGS",
-              "The WARNINGS tag can be used to turn on/off the warning messages that are\n"
-              "generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES\n"
-              "this implies that the warnings are on.\n"
-              "\n"
-              "Tip: Turn warnings on while writing the documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "WARN_IF_UNDOCUMENTED",
-              "If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate\n"
-              "warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n"
-              "will automatically be disabled.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "WARN_IF_DOC_ERROR",
-              "If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n"
-              "potential errors in the documentation, such as not documenting some parameters\n"
-              "in a documented function, or documenting parameters that don't exist or using\n"
-              "markup commands wrongly.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "WARN_NO_PARAMDOC",
-              "This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n"
-              "are documented, but have no documentation for their parameters or return\n"
-              "value. If set to NO doxygen will only warn about wrong or incomplete parameter\n"
-              "documentation, but not about the absence of documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "WARN_FORMAT",
-              "The WARN_FORMAT tag determines the format of the warning messages that doxygen\n"
-              "can produce. The string should contain the $file, $line, and $text tags, which\n"
-              "will be replaced by the file and line number from which the warning originated\n"
-              "and the warning text. Optionally the format may contain $version, which will\n"
-              "be replaced by the version of the file (if it could be obtained via\n"
-              "FILE_VERSION_FILTER)\n"
-              "The default value is: $file:$line: $text."
-          );
-  doc->add(
-              "WARN_LOGFILE",
-              "The WARN_LOGFILE tag can be used to specify a file to which warning and error\n"
-              "messages should be written. If left blank the output is written to standard\n"
-              "error (stderr)."
-          );
-  doc->add(
-              "INPUT",
-              "The INPUT tag is used to specify the files and/or directories that contain\n"
-              "documented source files. You may enter file names like myfile.cpp or\n"
-              "directories like /usr/src/myproject. Separate the files or directories with\n"
-              "spaces.\n"
-              "Note: If this tag is empty the current directory is searched."
-          );
-  doc->add(
-              "INPUT_ENCODING",
-              "This tag can be used to specify the character encoding of the source files\n"
-              "that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n"
-              "libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n"
-              "documentation (see: http://www.gnu.org/software/libiconv) for the list of\n"
-              "possible encodings.\n"
-              "The default value is: UTF-8."
-          );
-  doc->add(
-              "FILE_PATTERNS",
-              "If the value of the INPUT tag contains directories, you can use the\n"
-              "FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n"
-              "*.h) to filter out the source-files in the directories. If left blank the\n"
-              "following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,\n"
-              "*.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,\n"
-              "*.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,\n"
-              "*.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,\n"
-              "*.qsf, *.as and *.js."
-          );
-  doc->add(
-              "RECURSIVE",
-              "The RECURSIVE tag can be used to specify whether or not subdirectories should\n"
-              "be searched for input files as well.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXCLUDE",
-              "The EXCLUDE tag can be used to specify files and/or directories that should be\n"
-              "excluded from the INPUT source files. This way you can easily exclude a\n"
-              "subdirectory from a directory tree whose root is specified with the INPUT tag.\n"
-              "\n"
-              "Note that relative paths are relative to the directory from which doxygen is\n"
-              "run."
-          );
-  doc->add(
-              "EXCLUDE_SYMLINKS",
-              "The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n"
-              "directories that are symbolic links (a Unix file system feature) are excluded\n"
-              "from the input.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXCLUDE_PATTERNS",
-              "If the value of the INPUT tag contains directories, you can use the\n"
-              "EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n"
-              "certain files from those directories.\n"
-              "\n"
-              "Note that the wildcards are matched against the file with absolute path, so to\n"
-              "exclude all test directories for example use the pattern */test/*"
-          );
-  doc->add(
-              "EXCLUDE_SYMBOLS",
-              "The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n"
-              "(namespaces, classes, functions, etc.) that should be excluded from the\n"
-              "output. The symbol name can be a fully qualified name, a word, or if the\n"
-              "wildcard * is used, a substring. Examples: ANamespace, AClass,\n"
-              "AClass::ANamespace, ANamespace::*Test\n"
-              "\n"
-              "Note that the wildcards are matched against the file with absolute path, so to\n"
-              "exclude all test directories use the pattern */test/*"
-          );
-  doc->add(
-              "EXAMPLE_PATH",
-              "The EXAMPLE_PATH tag can be used to specify one or more files or directories\n"
-              "that contain example code fragments that are included (see the \\include\n"
-              "command)."
-          );
-  doc->add(
-              "EXAMPLE_PATTERNS",
-              "If the value of the EXAMPLE_PATH tag contains directories, you can use the\n"
-              "EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n"
-              "*.h) to filter out the source-files in the directories. If left blank all\n"
-              "files are included."
-          );
-  doc->add(
-              "EXAMPLE_RECURSIVE",
-              "If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n"
-              "searched for input files to be used with the \\include or \\dontinclude commands\n"
-              "irrespective of the value of the RECURSIVE tag.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "IMAGE_PATH",
-              "The IMAGE_PATH tag can be used to specify one or more files or directories\n"
-              "that contain images that are to be included in the documentation (see the\n"
-              "\\image command)."
-          );
-  doc->add(
-              "INPUT_FILTER",
-              "The INPUT_FILTER tag can be used to specify a program that doxygen should\n"
-              "invoke to filter for each input file. Doxygen will invoke the filter program\n"
-              "by executing (via popen()) the command:\n"
-              "\n"
-              "<filter> <input-file>\n"
-              "\n"
-              "where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n"
-              "name of an input file. Doxygen will then use the output that the filter\n"
-              "program writes to standard output. If FILTER_PATTERNS is specified, this tag\n"
-              "will be ignored.\n"
-              "\n"
-              "Note that the filter must not add or remove lines; it is applied before the\n"
-              "code is scanned, but not when the output code is generated. If lines are added\n"
-              "or removed, the anchors will not be placed correctly."
-          );
-  doc->add(
-              "FILTER_PATTERNS",
-              "The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n"
-              "basis. Doxygen will compare the file name with each pattern and apply the\n"
-              "filter if there is a match. The filters are a list of the form: pattern=filter\n"
-              "(like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n"
-              "filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n"
-              "patterns match the file name, INPUT_FILTER is applied."
-          );
-  doc->add(
-              "FILTER_SOURCE_FILES",
-              "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n"
-              "INPUT_FILTER ) will also be used to filter the input files that are used for\n"
-              "producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "FILTER_SOURCE_PATTERNS",
-              "The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n"
-              "pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n"
-              "it is also possible to disable source filtering for a specific pattern using\n"
-              "*.ext= (so without naming a filter).\n"
-              "This tag requires that the tag FILTER_SOURCE_FILES is set to YES."
-          );
-  doc->add(
-              "USE_MDFILE_AS_MAINPAGE",
-              "If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n"
-              "is part of the input, its contents will be placed on the main page\n"
-              "(index.html). This can be useful if you have a project on for instance GitHub\n"
-              "and want to reuse the introduction page also for the doxygen output."
-          );
-  doc->add(
-              "SOURCE_BROWSER",
-              "If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n"
-              "generated. Documented entities will be cross-referenced with these sources.\n"
-              "\n"
-              "Note: To get rid of all source code in the generated output, make sure that\n"
-              "also VERBATIM_HEADERS is set to NO.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "INLINE_SOURCES",
-              "Setting the INLINE_SOURCES tag to YES will include the body of functions,\n"
-              "classes and enums directly into the documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "STRIP_CODE_COMMENTS",
-              "Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n"
-              "special comment blocks from generated source code fragments. Normal C, C++ and\n"
-              "Fortran comments will always remain visible.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "REFERENCED_BY_RELATION",
-              "If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n"
-              "function all documented functions referencing it will be listed.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "REFERENCES_RELATION",
-              "If the REFERENCES_RELATION tag is set to YES then for each documented function\n"
-              "all documented entities called/used by that function will be listed.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "REFERENCES_LINK_SOURCE",
-              "If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n"
-              "to YES, then the hyperlinks from functions in REFERENCES_RELATION and\n"
-              "REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n"
-              "link to the documentation.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "SOURCE_TOOLTIPS",
-              "If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n"
-              "source code will show a tooltip with additional information such as prototype,\n"
-              "brief description and links to the definition and documentation. Since this\n"
-              "will make the HTML file larger and loading of large files a bit slower, you\n"
-              "can opt to disable this feature.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag SOURCE_BROWSER is set to YES."
-          );
-  doc->add(
-              "USE_HTAGS",
-              "If the USE_HTAGS tag is set to YES then the references to source code will\n"
-              "point to the HTML generated by the htags(1) tool instead of doxygen built-in\n"
-              "source browser. The htags tool is part of GNU's global source tagging system\n"
-              "(see http://www.gnu.org/software/global/global.html). You will need version\n"
-              "4.8.6 or higher.\n"
-              "\n"
-              "To use it do the following:\n"
-              "- Install the latest version of global\n"
-              "- Enable SOURCE_BROWSER and USE_HTAGS in the config file\n"
-              "- Make sure the INPUT points to the root of the source tree\n"
-              "- Run doxygen as normal\n"
-              "\n"
-              "Doxygen will invoke htags (and that will in turn invoke gtags), so these\n"
-              "tools must be available from the command line (i.e. in the search path).\n"
-              "\n"
-              "The result: instead of the source browser generated by doxygen, the links to\n"
-              "source code will now point to the output of htags.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SOURCE_BROWSER is set to YES."
-          );
-  doc->add(
-              "VERBATIM_HEADERS",
-              "If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n"
-              "verbatim copy of the header file for each class for which an include is\n"
-              "specified. Set to NO to disable this.\n"
-              "See also: Section \\class.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "CLANG_ASSISTED_PARSING",
-              "If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the\n"
-              "clang parser (see: http://clang.llvm.org/) for more acurate parsing at the\n"
-              "cost of reduced performance. This can be particularly helpful with template\n"
-              "rich C++ code for which doxygen's built-in parser lacks the necessary type\n"
-              "information.\n"
-              "Note: The availability of this option depends on whether or not doxygen was\n"
-              "compiled with the --with-libclang option.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "CLANG_OPTIONS",
-              "If clang assisted parsing is enabled you can provide the compiler with command\n"
-              "line options that you would normally use when invoking the compiler. Note that\n"
-              "the include paths will already be set by doxygen for the files and directories\n"
-              "specified with INPUT and INCLUDE_PATH.\n"
-              "This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES."
-          );
-  doc->add(
-              "ALPHABETICAL_INDEX",
-              "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n"
-              "compounds will be generated. Enable this if the project contains a lot of\n"
-              "classes, structs, unions or interfaces.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "COLS_IN_ALPHA_INDEX",
-              "The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n"
-              "which the alphabetical index list will be split.\n"
-              "Minimum value: 1, maximum value: 20, default value: 5.\n"
-              "This tag requires that the tag ALPHABETICAL_INDEX is set to YES."
-          );
-  doc->add(
-              "IGNORE_PREFIX",
-              "In case all classes in a project start with a common prefix, all classes will\n"
-              "be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n"
-              "can be used to specify a prefix (or a list of prefixes) that should be ignored\n"
-              "while generating the index headers.\n"
-              "This tag requires that the tag ALPHABETICAL_INDEX is set to YES."
-          );
-  doc->add(
-              "GENERATE_HTML",
-              "If the GENERATE_HTML tag is set to YES doxygen will generate HTML output\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "HTML_OUTPUT",
-              "The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: html.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_FILE_EXTENSION",
-              "The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n"
-              "generated HTML page (for example: .htm, .php, .asp).\n"
-              "The default value is: .html.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_HEADER",
-              "The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n"
-              "each generated HTML page. If the tag is left blank doxygen will generate a\n"
-              "standard header.\n"
-              "\n"
-              "To get valid HTML the header file that includes any scripts and style sheets\n"
-              "that doxygen needs, which is dependent on the configuration options used (e.g.\n"
-              "the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n"
-              "default header using\n"
-              "doxygen -w html new_header.html new_footer.html new_stylesheet.css\n"
-              "YourConfigFile\n"
-              "and then modify the file new_header.html. See also section \"Doxygen usage\"\n"
-              "for information on how to generate the default header that doxygen normally\n"
-              "uses.\n"
-              "Note: The header is subject to change so you typically have to regenerate the\n"
-              "default header when upgrading to a newer version of doxygen. For a description\n"
-              "of the possible markers and block names see the documentation.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_FOOTER",
-              "The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n"
-              "generated HTML page. If the tag is left blank doxygen will generate a standard\n"
-              "footer. See HTML_HEADER for more information on how to generate a default\n"
-              "footer and what special commands can be used inside the footer. See also\n"
-              "section \"Doxygen usage\" for information on how to generate the default footer\n"
-              "that doxygen normally uses.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_STYLESHEET",
-              "The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n"
-              "sheet that is used by each HTML page. It can be used to fine-tune the look of\n"
-              "the HTML output. If left blank doxygen will generate a default style sheet.\n"
-              "See also section \"Doxygen usage\" for information on how to generate the style\n"
-              "sheet that doxygen normally uses.\n"
-              "Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n"
-              "it is more robust and this tag (HTML_STYLESHEET) will in the future become\n"
-              "obsolete.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_EXTRA_STYLESHEET",
-              "The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-\n"
-              "defined cascading style sheet that is included after the standard style sheets\n"
-              "created by doxygen. Using this option one can overrule certain style aspects.\n"
-              "This is preferred over using HTML_STYLESHEET since it does not replace the\n"
-              "standard style sheet and is therefor more robust against future updates.\n"
-              "Doxygen will copy the style sheet file to the output directory. For an example\n"
-              "see the documentation.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_EXTRA_FILES",
-              "The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n"
-              "other source files which should be copied to the HTML output directory. Note\n"
-              "that these files will be copied to the base HTML output directory. Use the\n"
-              "$relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n"
-              "files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n"
-              "files will be copied as-is; there are no commands or markers available.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_COLORSTYLE_HUE",
-              "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n"
-              "will adjust the colors in the stylesheet and background images according to\n"
-              "this color. Hue is specified as an angle on a colorwheel, see\n"
-              "http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n"
-              "0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n"
-              "purple, and 360 is red again.\n"
-              "Minimum value: 0, maximum value: 359, default value: 220.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_COLORSTYLE_SAT",
-              "The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n"
-              "in the HTML output. For a value of 0 the output will use grayscales only. A\n"
-              "value of 255 will produce the most vivid colors.\n"
-              "Minimum value: 0, maximum value: 255, default value: 100.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_COLORSTYLE_GAMMA",
-              "The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n"
-              "luminance component of the colors in the HTML output. Values below 100\n"
-              "gradually make the output lighter, whereas values above 100 make the output\n"
-              "darker. The value divided by 100 is the actual gamma applied, so 80 represents\n"
-              "a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n"
-              "change the gamma.\n"
-              "Minimum value: 40, maximum value: 240, default value: 80.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_TIMESTAMP",
-              "If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n"
-              "page will contain the date and time when the page was generated. Setting this\n"
-              "to NO can help when comparing the output of multiple runs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_DYNAMIC_SECTIONS",
-              "If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n"
-              "documentation will contain sections that can be hidden and shown after the\n"
-              "page has loaded.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "HTML_INDEX_NUM_ENTRIES",
-              "With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n"
-              "shown in the various tree structured indices initially; the user can expand\n"
-              "and collapse entries dynamically later on. Doxygen will expand the tree to\n"
-              "such a level that at most the specified number of entries are visible (unless\n"
-              "a fully collapsed tree already exceeds this amount). So setting the number of\n"
-              "entries 1 will produce a full collapsed tree by default. 0 is a special value\n"
-              "representing an infinite number of entries and will result in a full expanded\n"
-              "tree by default.\n"
-              "Minimum value: 0, maximum value: 9999, default value: 100.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "GENERATE_DOCSET",
-              "If the GENERATE_DOCSET tag is set to YES, additional index files will be\n"
-              "generated that can be used as input for Apple's Xcode 3 integrated development\n"
-              "environment (see: http://developer.apple.com/tools/xcode/), introduced with\n"
-              "OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n"
-              "Makefile in the HTML output directory. Running make will produce the docset in\n"
-              "that directory and running make install will install the docset in\n"
-              "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n"
-              "startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n"
-              "for more information.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "DOCSET_FEEDNAME",
-              "This tag determines the name of the docset feed. A documentation feed provides\n"
-              "an umbrella under which multiple documentation sets from a single provider\n"
-              "(such as a company or product suite) can be grouped.\n"
-              "The default value is: Doxygen generated docs.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-          );
-  doc->add(
-              "DOCSET_BUNDLE_ID",
-              "This tag specifies a string that should uniquely identify the documentation\n"
-              "set bundle. This should be a reverse domain-name style string, e.g.\n"
-              "com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-          );
-  doc->add(
-              "DOCSET_PUBLISHER_ID",
-              "The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n"
-              "the documentation publisher. This should be a reverse domain-name style\n"
-              "string, e.g. com.mycompany.MyDocSet.documentation.\n"
-              "The default value is: org.doxygen.Publisher.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-          );
-  doc->add(
-              "DOCSET_PUBLISHER_NAME",
-              "The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n"
-              "The default value is: Publisher.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-          );
-  doc->add(
-              "GENERATE_HTMLHELP",
-              "If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n"
-              "additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n"
-              "index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n"
-              "(see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n"
-              "Windows.\n"
-              "\n"
-              "The HTML Help Workshop contains a compiler that can convert all HTML output\n"
-              "generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n"
-              "files are now used as the Windows 98 help format, and will replace the old\n"
-              "Windows help format (.hlp) on all Windows platforms in the future. Compressed\n"
-              "HTML files also contain an index, a table of contents, and you can search for\n"
-              "words in the documentation. The HTML workshop also contains a viewer for\n"
-              "compressed HTML files.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "CHM_FILE",
-              "The CHM_FILE tag can be used to specify the file name of the resulting .chm\n"
-              "file. You can add a path in front of the file if the result should not be\n"
-              "written to the html output directory.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "HHC_LOCATION",
-              "The HHC_LOCATION tag can be used to specify the location (absolute path\n"
-              "including file name) of the HTML help compiler ( hhc.exe). If non-empty\n"
-              "doxygen will try to run the HTML help compiler on the generated index.hhp.\n"
-              "The file has to be specified with full path.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "GENERATE_CHI",
-              "The GENERATE_CHI flag controls if a separate .chi index file is generated (\n"
-              "YES) or that it should be included in the master .chm file ( NO).\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "CHM_INDEX_ENCODING",
-              "The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)\n"
-              "and project file content.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "BINARY_TOC",
-              "The BINARY_TOC flag controls whether a binary table of contents is generated (\n"
-              "YES) or a normal table of contents ( NO) in the .chm file.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "TOC_EXPAND",
-              "The TOC_EXPAND flag can be set to YES to add extra items for group members to\n"
-              "the table of contents of the HTML help documentation and to the tree view.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-          );
-  doc->add(
-              "GENERATE_QHP",
-              "If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n"
-              "QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n"
-              "can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n"
-              "(.qch) of the generated HTML documentation.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "QCH_FILE",
-              "If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n"
-              "the file name of the resulting .qch file. The path specified is relative to\n"
-              "the HTML output folder.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHP_NAMESPACE",
-              "The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n"
-              "Project output. For more information please see Qt Help Project / Namespace\n"
-              "(see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHP_VIRTUAL_FOLDER",
-              "The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n"
-              "Help Project output. For more information please see Qt Help Project / Virtual\n"
-              "Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n"
-              "folders).\n"
-              "The default value is: doc.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHP_CUST_FILTER_NAME",
-              "If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n"
-              "filter to add. For more information please see Qt Help Project / Custom\n"
-              "Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n"
-              "filters).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHP_CUST_FILTER_ATTRS",
-              "The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n"
-              "custom filter to add. For more information please see Qt Help Project / Custom\n"
-              "Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n"
-              "filters).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHP_SECT_FILTER_ATTRS",
-              "The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n"
-              "project's filter section matches. Qt Help Project / Filter Attributes (see:\n"
-              "http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "QHG_LOCATION",
-              "The QHG_LOCATION tag can be used to specify the location of Qt's\n"
-              "qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n"
-              "generated .qhp file.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-          );
-  doc->add(
-              "GENERATE_ECLIPSEHELP",
-              "If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n"
-              "generated, together with the HTML files, they form an Eclipse help plugin. To\n"
-              "install this plugin and make it available under the help contents menu in\n"
-              "Eclipse, the contents of the directory containing the HTML and XML files needs\n"
-              "to be copied into the plugins directory of eclipse. The name of the directory\n"
-              "within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n"
-              "After copying Eclipse needs to be restarted before the help appears.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "ECLIPSE_DOC_ID",
-              "A unique identifier for the Eclipse help plugin. When installing the plugin\n"
-              "the directory name containing the HTML and XML files should also have this\n"
-              "name. Each documentation set should have its own identifier.\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES."
-          );
-  doc->add(
-              "DISABLE_INDEX",
-              "If you want full control over the layout of the generated HTML pages it might\n"
-              "be necessary to disable the index and replace it with your own. The\n"
-              "DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n"
-              "of each HTML page. A value of NO enables the index and the value YES disables\n"
-              "it. Since the tabs in the index contain the same information as the navigation\n"
-              "tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "GENERATE_TREEVIEW",
-              "The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n"
-              "structure should be generated to display hierarchical information. If the tag\n"
-              "value is set to YES, a side panel will be generated containing a tree-like\n"
-              "index structure (just like the one that is generated for HTML Help). For this\n"
-              "to work a browser that supports JavaScript, DHTML, CSS and frames is required\n"
-              "(i.e. any modern browser). Windows users are probably better off using the\n"
-              "HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can\n"
-              "further fine-tune the look of the index. As an example, the default style\n"
-              "sheet generated by doxygen has an example that shows how to put an image at\n"
-              "the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n"
-              "the same information as the tab index, you could consider setting\n"
-              "DISABLE_INDEX to YES when enabling this option.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "ENUM_VALUES_PER_LINE",
-              "The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n"
-              "doxygen will group on one line in the generated HTML documentation.\n"
-              "\n"
-              "Note that a value of 0 will completely suppress the enum values from appearing\n"
-              "in the overview section.\n"
-              "Minimum value: 0, maximum value: 20, default value: 4.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "TREEVIEW_WIDTH",
-              "If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n"
-              "to set the initial width (in pixels) of the frame in which the tree is shown.\n"
-              "Minimum value: 0, maximum value: 1500, default value: 250.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "EXT_LINKS_IN_WINDOW",
-              "When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to\n"
-              "external symbols imported via tag files in a separate window.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "FORMULA_FONTSIZE",
-              "Use this tag to change the font size of LaTeX formulas included as images in\n"
-              "the HTML documentation. When you change the font size after a successful\n"
-              "doxygen run you need to manually remove any form_*.png images from the HTML\n"
-              "output directory to force them to be regenerated.\n"
-              "Minimum value: 8, maximum value: 50, default value: 10.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "FORMULA_TRANSPARENT",
-              "Use the FORMULA_TRANPARENT tag to determine whether or not the images\n"
-              "generated for formulas are transparent PNGs. Transparent PNGs are not\n"
-              "supported properly for IE 6.0, but are supported on all modern browsers.\n"
-              "\n"
-              "Note that when changing this option you need to delete any form_*.png files in\n"
-              "the HTML output directory before the changes have effect.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "USE_MATHJAX",
-              "Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n"
-              "http://www.mathjax.org) which uses client side Javascript for the rendering\n"
-              "instead of using prerendered bitmaps. Use this if you do not have LaTeX\n"
-              "installed or if you want to formulas look prettier in the HTML output. When\n"
-              "enabled you may also need to install MathJax separately and configure the path\n"
-              "to it using the MATHJAX_RELPATH option.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "MATHJAX_FORMAT",
-              "When MathJax is enabled you can set the default output format to be used for\n"
-              "the MathJax output. See the MathJax site (see:\n"
-              "http://docs.mathjax.org/en/latest/output.html) for more details.\n"
-              "Possible values are: HTML-CSS (which is slower, but has the best\n"
-              "compatibility), NativeMML (i.e. MathML) and SVG.\n"
-              "The default value is: HTML-CSS.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-          );
-  doc->add(
-              "MATHJAX_RELPATH",
-              "When MathJax is enabled you need to specify the location relative to the HTML\n"
-              "output directory using the MATHJAX_RELPATH option. The destination directory\n"
-              "should contain the MathJax.js script. For instance, if the mathjax directory\n"
-              "is located at the same level as the HTML output directory, then\n"
-              "MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n"
-              "Content Delivery Network so you can quickly see the result without installing\n"
-              "MathJax. However, it is strongly recommended to install a local copy of\n"
-              "MathJax from http://www.mathjax.org before deployment.\n"
-              "The default value is: http://cdn.mathjax.org/mathjax/latest.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-          );
-  doc->add(
-              "MATHJAX_EXTENSIONS",
-              "The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n"
-              "extension names that should be enabled during MathJax rendering. For example\n"
-              "MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-          );
-  doc->add(
-              "MATHJAX_CODEFILE",
-              "The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n"
-              "of code that will be used on startup of the MathJax code. See the MathJax site\n"
-              "(see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n"
-              "example see the documentation.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-          );
-  doc->add(
-              "SEARCHENGINE",
-              "When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n"
-              "the HTML output. The underlying search engine uses javascript and DHTML and\n"
-              "should work on any modern browser. Note that when using HTML help\n"
-              "(GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n"
-              "there is already a search function so this one should typically be disabled.\n"
-              "For large projects the javascript based search engine can be slow, then\n"
-              "enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n"
-              "search using the keyboard; to jump to the search box use <access key> + S\n"
-              "(what the <access key> is depends on the OS and browser, but it is typically\n"
-              "<CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n"
-              "key> to jump into the search results window, the results can be navigated\n"
-              "using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n"
-              "the search. The filter options can be selected when the cursor is inside the\n"
-              "search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n"
-              "to select a filter and <Enter> or <escape> to activate or cancel the filter\n"
-              "option.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-          );
-  doc->add(
-              "SERVER_BASED_SEARCH",
-              "When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n"
-              "implemented using a web server instead of a web client using Javascript. There\n"
-              "are two flavours of web server based searching depending on the\n"
-              "EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for\n"
-              "searching and an index file used by the script. When EXTERNAL_SEARCH is\n"
-              "enabled the indexing and searching needs to be provided by external tools. See\n"
-              "the section \"External Indexing and Searching\" for details.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "EXTERNAL_SEARCH",
-              "When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n"
-              "script for searching. Instead the search results are written to an XML file\n"
-              "which needs to be processed by an external indexer. Doxygen will invoke an\n"
-              "external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n"
-              "search results.\n"
-              "\n"
-              "Doxygen ships with an example indexer ( doxyindexer) and search engine\n"
-              "(doxysearch.cgi) which are based on the open source search engine library\n"
-              "Xapian (see: http://xapian.org/).\n"
-              "\n"
-              "See the section \"External Indexing and Searching\" for details.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "SEARCHENGINE_URL",
-              "The SEARCHENGINE_URL should point to a search engine hosted by a web server\n"
-              "which will return the search results when EXTERNAL_SEARCH is enabled.\n"
-              "\n"
-              "Doxygen ships with an example indexer ( doxyindexer) and search engine\n"
-              "(doxysearch.cgi) which are based on the open source search engine library\n"
-              "Xapian (see: http://xapian.org/). See the section \"External Indexing and\n"
-              "Searching\" for details.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "SEARCHDATA_FILE",
-              "When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n"
-              "search data is written to a file for indexing by an external tool. With the\n"
-              "SEARCHDATA_FILE tag the name of this file can be specified.\n"
-              "The default file is: searchdata.xml.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "EXTERNAL_SEARCH_ID",
-              "When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n"
-              "EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n"
-              "useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n"
-              "projects and redirect the results back to the right project.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "EXTRA_SEARCH_MAPPINGS",
-              "The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n"
-              "projects other than the one defined by this configuration file, but that are\n"
-              "all added to the same external search index. Each project needs to have a\n"
-              "unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n"
-              "to a relative location where the documentation can be found. The format is:\n"
-              "EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-          );
-  doc->add(
-              "GENERATE_LATEX",
-              "If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "LATEX_OUTPUT",
-              "The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: latex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_CMD_NAME",
-              "The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n"
-              "invoked.\n"
-              "\n"
-              "Note that when enabling USE_PDFLATEX this option is only used for generating\n"
-              "bitmaps for formulas in the HTML output, but not in the Makefile that is\n"
-              "written to the output directory.\n"
-              "The default file is: latex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "MAKEINDEX_CMD_NAME",
-              "The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n"
-              "index for LaTeX.\n"
-              "The default file is: makeindex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "COMPACT_LATEX",
-              "If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX\n"
-              "documents. This may be useful for small projects and may help to save some\n"
-              "trees in general.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "PAPER_TYPE",
-              "The PAPER_TYPE tag can be used to set the paper type that is used by the\n"
-              "printer.\n"
-              "Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n"
-              "14 inches) and executive (7.25 x 10.5 inches).\n"
-              "The default value is: a4.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "EXTRA_PACKAGES",
-              "The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n"
-              "that should be included in the LaTeX output. To get the times font for\n"
-              "instance you can specify\n"
-              "EXTRA_PACKAGES=times\n"
-              "If left blank no extra packages will be included.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_HEADER",
-              "The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n"
-              "generated LaTeX document. The header should contain everything until the first\n"
-              "chapter. If it is left blank doxygen will generate a standard header. See\n"
-              "section \"Doxygen usage\" for information on how to let doxygen write the\n"
-              "default header to a separate file.\n"
-              "\n"
-              "Note: Only use a user-defined header if you know what you are doing! The\n"
-              "following commands have a special meaning inside the header: $title,\n"
-              "$datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will\n"
-              "replace them by respectively the title of the page, the current date and time,\n"
-              "only the current date, the version number of doxygen, the project name (see\n"
-              "PROJECT_NAME), or the project number (see PROJECT_NUMBER).\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_FOOTER",
-              "The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n"
-              "generated LaTeX document. The footer should contain everything after the last\n"
-              "chapter. If it is left blank doxygen will generate a standard footer.\n"
-              "\n"
-              "Note: Only use a user-defined footer if you know what you are doing!\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_EXTRA_FILES",
-              "The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n"
-              "other source files which should be copied to the LATEX_OUTPUT output\n"
-              "directory. Note that the files will be copied as-is; there are no commands or\n"
-              "markers available.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "PDF_HYPERLINKS",
-              "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n"
-              "prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n"
-              "contain links (just like the HTML output) instead of page references. This\n"
-              "makes the output suitable for online browsing using a PDF viewer.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "USE_PDFLATEX",
-              "If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n"
-              "the PDF file directly from the LaTeX files. Set this option to YES to get a\n"
-              "higher quality PDF documentation.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_BATCHMODE",
-              "If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n"
-              "command to the generated LaTeX files. This will instruct LaTeX to keep running\n"
-              "if errors occur, instead of asking the user for help. This option is also used\n"
-              "when generating formulas in HTML.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_HIDE_INDICES",
-              "If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n"
-              "index chapters (such as File Index, Compound Index, etc.) in the output.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_SOURCE_CODE",
-              "If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n"
-              "code with syntax highlighting in the LaTeX output.\n"
-              "\n"
-              "Note that which sources are shown also depends on other settings such as\n"
-              "SOURCE_BROWSER.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "LATEX_BIB_STYLE",
-              "The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n"
-              "bibliography, e.g. plainnat, or ieeetr. See\n"
-              "http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n"
-              "The default value is: plain.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-          );
-  doc->add(
-              "GENERATE_RTF",
-              "If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The\n"
-              "RTF output is optimized for Word 97 and may not look too pretty with other RTF\n"
-              "readers/editors.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "RTF_OUTPUT",
-              "The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: rtf.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-          );
-  doc->add(
-              "COMPACT_RTF",
-              "If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF\n"
-              "documents. This may be useful for small projects and may help to save some\n"
-              "trees in general.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-          );
-  doc->add(
-              "RTF_HYPERLINKS",
-              "If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n"
-              "contain hyperlink fields. The RTF file will contain links (just like the HTML\n"
-              "output) instead of page references. This makes the output suitable for online\n"
-              "browsing using Word or some other Word compatible readers that support those\n"
-              "fields.\n"
-              "\n"
-              "Note: WordPad (write) and others do not support links.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-          );
-  doc->add(
-              "RTF_STYLESHEET_FILE",
-              "Load stylesheet definitions from file. Syntax is similar to doxygen's config\n"
-              "file, i.e. a series of assignments. You only have to provide replacements,\n"
-              "missing definitions are set to their default value.\n"
-              "\n"
-              "See also section \"Doxygen usage\" for information on how to generate the\n"
-              "default style sheet that doxygen normally uses.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-          );
-  doc->add(
-              "RTF_EXTENSIONS_FILE",
-              "Set optional variables used in the generation of an RTF document. Syntax is\n"
-              "similar to doxygen's config file. A template extensions file can be generated\n"
-              "using doxygen -e rtf extensionFile.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-          );
-  doc->add(
-              "GENERATE_MAN",
-              "If the GENERATE_MAN tag is set to YES doxygen will generate man pages for\n"
-              "classes and files.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "MAN_OUTPUT",
-              "The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it. A directory man3 will be created inside the directory specified by\n"
-              "MAN_OUTPUT.\n"
-              "The default directory is: man.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES."
-          );
-  doc->add(
-              "MAN_EXTENSION",
-              "The MAN_EXTENSION tag determines the extension that is added to the generated\n"
-              "man pages. In case the manual section does not start with a number, the number\n"
-              "3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n"
-              "optional.\n"
-              "The default value is: .3.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES."
-          );
-  doc->add(
-              "MAN_LINKS",
-              "If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n"
-              "will generate one additional man file for each entity documented in the real\n"
-              "man page(s). These additional files only source the real man page, but without\n"
-              "them the man command would be unable to find the correct page.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES."
-          );
-  doc->add(
-              "GENERATE_XML",
-              "If the GENERATE_XML tag is set to YES doxygen will generate an XML file that\n"
-              "captures the structure of the code including all documentation.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "XML_OUTPUT",
-              "The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: xml.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-          );
-  doc->add(
-              "XML_SCHEMA",
-              "The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a\n"
-              "validating XML parser to check the syntax of the XML files.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-          );
-  doc->add(
-              "XML_DTD",
-              "The XML_DTD tag can be used to specify a XML DTD, which can be used by a\n"
-              "validating XML parser to check the syntax of the XML files.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-          );
-  doc->add(
-              "XML_PROGRAMLISTING",
-              "If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program\n"
-              "listings (including syntax highlighting and cross-referencing information) to\n"
-              "the XML output. Note that enabling this will significantly increase the size\n"
-              "of the XML output.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-          );
-  doc->add(
-              "GENERATE_DOCBOOK",
-              "If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files\n"
-              "that can be used to generate PDF.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "DOCBOOK_OUTPUT",
-              "The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n"
-              "If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n"
-              "front of it.\n"
-              "The default directory is: docbook.\n"
-              "This tag requires that the tag GENERATE_DOCBOOK is set to YES."
-          );
-  doc->add(
-              "GENERATE_AUTOGEN_DEF",
-              "If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen\n"
-              "Definitions (see http://autogen.sf.net) file that captures the structure of\n"
-              "the code including all documentation. Note that this feature is still\n"
-              "experimental and incomplete at the moment.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "GENERATE_PERLMOD",
-              "If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module\n"
-              "file that captures the structure of the code including all documentation.\n"
-              "\n"
-              "Note that this feature is still experimental and incomplete at the moment.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "PERLMOD_LATEX",
-              "If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary\n"
-              "Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n"
-              "output from the Perl module output.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES."
-          );
-  doc->add(
-              "PERLMOD_PRETTY",
-              "If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely\n"
-              "formatted so it can be parsed by a human reader. This is useful if you want to\n"
-              "understand what is going on. On the other hand, if this tag is set to NO the\n"
-              "size of the Perl module output will be much smaller and Perl will parse it\n"
-              "just the same.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES."
-          );
-  doc->add(
-              "PERLMOD_MAKEVAR_PREFIX",
-              "The names of the make variables in the generated doxyrules.make file are\n"
-              "prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n"
-              "so different doxyrules.make files included by the same Makefile don't\n"
-              "overwrite each other's variables.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES."
-          );
-  doc->add(
-              "ENABLE_PREPROCESSING",
-              "If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all\n"
-              "C-preprocessor directives found in the sources and include files.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "MACRO_EXPANSION",
-              "If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names\n"
-              "in the source code. If set to NO only conditional compilation will be\n"
-              "performed. Macro expansion can be done in a controlled way by setting\n"
-              "EXPAND_ONLY_PREDEF to YES.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "EXPAND_ONLY_PREDEF",
-              "If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n"
-              "the macro expansion is limited to the macros specified with the PREDEFINED and\n"
-              "EXPAND_AS_DEFINED tags.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "SEARCH_INCLUDES",
-              "If the SEARCH_INCLUDES tag is set to YES the includes files in the\n"
-              "INCLUDE_PATH will be searched if a #include is found.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "INCLUDE_PATH",
-              "The INCLUDE_PATH tag can be used to specify one or more directories that\n"
-              "contain include files that are not input files but should be processed by the\n"
-              "preprocessor.\n"
-              "This tag requires that the tag SEARCH_INCLUDES is set to YES."
-          );
-  doc->add(
-              "INCLUDE_FILE_PATTERNS",
-              "You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n"
-              "patterns (like *.h and *.hpp) to filter out the header-files in the\n"
-              "directories. If left blank, the patterns specified with FILE_PATTERNS will be\n"
-              "used.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "PREDEFINED",
-              "The PREDEFINED tag can be used to specify one or more macro names that are\n"
-              "defined before the preprocessor is started (similar to the -D option of e.g.\n"
-              "gcc). The argument of the tag is a list of macros of the form: name or\n"
-              "name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n"
-              "is assumed. To prevent a macro definition from being undefined via #undef or\n"
-              "recursively expanded use the := operator instead of the = operator.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "EXPAND_AS_DEFINED",
-              "If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n"
-              "tag can be used to specify a list of macro names that should be expanded. The\n"
-              "macro definition that is found in the sources will be used. Use the PREDEFINED\n"
-              "tag if you want to use a different macro definition that overrules the\n"
-              "definition found in the source code.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "SKIP_FUNCTION_MACROS",
-              "If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n"
-              "remove all refrences to function-like macros that are alone on a line, have an\n"
-              "all uppercase name, and do not end with a semicolon. Such function macros are\n"
-              "typically used for boiler-plate code, and will confuse the parser if not\n"
-              "removed.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-          );
-  doc->add(
-              "TAGFILES",
-              "The TAGFILES tag can be used to specify one or more tag files. For each tag\n"
-              "file the location of the external documentation should be added. The format of\n"
-              "a tag file without this location is as follows:\n"
-              "TAGFILES = file1 file2 ...\n"
-              "Adding location for the tag files is done as follows:\n"
-              "TAGFILES = file1=loc1 \"file2 = loc2\" ...\n"
-              "where loc1 and loc2 can be relative or absolute paths or URLs. See the\n"
-              "section \"Linking to external documentation\" for more information about the use\n"
-              "of tag files.\n"
-              "Note: Each tag file must have an unique name (where the name does NOT include\n"
-              "the path). If a tag file is not located in the directory in which doxygen is\n"
-              "run, you must also specify the path to the tagfile here."
-          );
-  doc->add(
-              "GENERATE_TAGFILE",
-              "When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n"
-              "tag file that is based on the input files it reads. See section \"Linking to\n"
-              "external documentation\" for more information about the usage of tag files."
-          );
-  doc->add(
-              "ALLEXTERNALS",
-              "If the ALLEXTERNALS tag is set to YES all external class will be listed in the\n"
-              "class index. If set to NO only the inherited external classes will be listed.\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "EXTERNAL_GROUPS",
-              "If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in\n"
-              "the modules index. If set to NO, only the current project's groups will be\n"
-              "listed.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "EXTERNAL_PAGES",
-              "If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in\n"
-              "the related pages index. If set to NO, only the current project's pages will\n"
-              "be listed.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "PERL_PATH",
-              "The PERL_PATH should be the absolute path and name of the perl script\n"
-              "interpreter (i.e. the result of 'which perl').\n"
-              "The default file (with absolute path) is: /usr/bin/perl."
-          );
-  doc->add(
-              "CLASS_DIAGRAMS",
-              "If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram\n"
-              "(in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n"
-              "NO turns the diagrams off. Note that this option also works with HAVE_DOT\n"
-              "disabled, but it is recommended to install and use dot, since it yields more\n"
-              "powerful graphs.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "MSCGEN_PATH",
-              "You can define message sequence charts within doxygen comments using the \\msc\n"
-              "command. Doxygen will then run the mscgen tool (see:\n"
-              "http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n"
-              "documentation. The MSCGEN_PATH tag allows you to specify the directory where\n"
-              "the mscgen tool resides. If left empty the tool is assumed to be found in the\n"
-              "default search path."
-          );
-  doc->add(
-              "HIDE_UNDOC_RELATIONS",
-              "If set to YES, the inheritance and collaboration graphs will hide inheritance\n"
-              "and usage relations if the target is undocumented or is not a class.\n"
-              "The default value is: YES."
-          );
-  doc->add(
-              "HAVE_DOT",
-              "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n"
-              "available from the path. This tool is part of Graphviz (see:\n"
-              "http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n"
-              "Bell Labs. The other options in this section have no effect if this option is\n"
-              "set to NO\n"
-              "The default value is: NO."
-          );
-  doc->add(
-              "DOT_NUM_THREADS",
-              "The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n"
-              "to run in parallel. When set to 0 doxygen will base this on the number of\n"
-              "processors available in the system. You can set it explicitly to a value\n"
-              "larger than 0 to get control over the balance between CPU load and processing\n"
-              "speed.\n"
-              "Minimum value: 0, maximum value: 32, default value: 0.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_FONTNAME",
-              "When you want a differently looking font n the dot files that doxygen\n"
-              "generates you can specify the font name using DOT_FONTNAME. You need to make\n"
-              "sure dot is able to find the font, which can be done by putting it in a\n"
-              "standard location or by setting the DOTFONTPATH environment variable or by\n"
-              "setting DOT_FONTPATH to the directory containing the font.\n"
-              "The default value is: Helvetica.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_FONTSIZE",
-              "The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n"
-              "dot graphs.\n"
-              "Minimum value: 4, maximum value: 24, default value: 10.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_FONTPATH",
-              "By default doxygen will tell dot to use the default font as specified with\n"
-              "DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n"
-              "the path where dot can find it using this tag.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "CLASS_GRAPH",
-              "If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n"
-              "each documented class showing the direct and indirect inheritance relations.\n"
-              "Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "COLLABORATION_GRAPH",
-              "If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n"
-              "graph for each documented class showing the direct and indirect implementation\n"
-              "dependencies (inheritance, containment, and class references variables) of the\n"
-              "class with other documented classes.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "GROUP_GRAPHS",
-              "If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n"
-              "groups, showing the direct groups dependencies.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "UML_LOOK",
-              "If the UML_LOOK tag is set to YES doxygen will generate inheritance and\n"
-              "collaboration diagrams in a style similar to the OMG's Unified Modeling\n"
-              "Language.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "UML_LIMIT_NUM_FIELDS",
-              "If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n"
-              "class node. If there are many fields or methods and many nodes the graph may\n"
-              "become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n"
-              "number of items for each type to make the size more manageable. Set this to 0\n"
-              "for no limit. Note that the threshold may be exceeded by 50% before the limit\n"
-              "is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n"
-              "but if the number exceeds 15, the total amount of fields shown is limited to\n"
-              "10.\n"
-              "Minimum value: 0, maximum value: 100, default value: 10.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "TEMPLATE_RELATIONS",
-              "If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n"
-              "collaboration graphs will show the relations between templates and their\n"
-              "instances.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "INCLUDE_GRAPH",
-              "If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n"
-              "YES then doxygen will generate a graph for each documented file showing the\n"
-              "direct and indirect include dependencies of the file with other documented\n"
-              "files.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "INCLUDED_BY_GRAPH",
-              "If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n"
-              "set to YES then doxygen will generate a graph for each documented file showing\n"
-              "the direct and indirect include dependencies of the file with other documented\n"
-              "files.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "CALL_GRAPH",
-              "If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n"
-              "dependency graph for every global function or class method.\n"
-              "\n"
-              "Note that enabling this option will significantly increase the time of a run.\n"
-              "So in most cases it will be better to enable call graphs for selected\n"
-              "functions only using the \\callgraph command.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "CALLER_GRAPH",
-              "If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n"
-              "dependency graph for every global function or class method.\n"
-              "\n"
-              "Note that enabling this option will significantly increase the time of a run.\n"
-              "So in most cases it will be better to enable caller graphs for selected\n"
-              "functions only using the \\callergraph command.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "GRAPHICAL_HIERARCHY",
-              "If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n"
-              "hierarchy of all classes instead of a textual one.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DIRECTORY_GRAPH",
-              "If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n"
-              "dependencies a directory has on other directories in a graphical way. The\n"
-              "dependency relations are determined by the #include relations between the\n"
-              "files in the directories.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_IMAGE_FORMAT",
-              "The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n"
-              "generated by dot.\n"
-              "Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n"
-              "to make the SVG files visible in IE 9+ (other browsers do not have this\n"
-              "requirement).\n"
-              "Possible values are: png, jpg, gif and svg.\n"
-              "The default value is: png.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "INTERACTIVE_SVG",
-              "If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n"
-              "enable generation of interactive SVG images that allow zooming and panning.\n"
-              "\n"
-              "Note that this requires a modern browser other than Internet Explorer. Tested\n"
-              "and working are Firefox, Chrome, Safari, and Opera.\n"
-              "Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n"
-              "the SVG files visible. Older versions of IE do not have SVG support.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_PATH",
-              "The DOT_PATH tag can be used to specify the path where the dot tool can be\n"
-              "found. If left blank, it is assumed the dot tool can be found in the path.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOTFILE_DIRS",
-              "The DOTFILE_DIRS tag can be used to specify one or more directories that\n"
-              "contain dot files that are included in the documentation (see the \\dotfile\n"
-              "command).\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "MSCFILE_DIRS",
-              "The MSCFILE_DIRS tag can be used to specify one or more directories that\n"
-              "contain msc files that are included in the documentation (see the \\mscfile\n"
-              "command)."
-          );
-  doc->add(
-              "DOT_GRAPH_MAX_NODES",
-              "The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n"
-              "that will be shown in the graph. If the number of nodes in a graph becomes\n"
-              "larger than this value, doxygen will truncate the graph, which is visualized\n"
-              "by representing a node as a red box. Note that doxygen if the number of direct\n"
-              "children of the root node in a graph is already larger than\n"
-              "DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n"
-              "the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n"
-              "Minimum value: 0, maximum value: 10000, default value: 50.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "MAX_DOT_GRAPH_DEPTH",
-              "The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n"
-              "generated by dot. A depth value of 3 means that only nodes reachable from the\n"
-              "root by following a path via at most 3 edges will be shown. Nodes that lay\n"
-              "further from the root node will be omitted. Note that setting this option to 1\n"
-              "or 2 may greatly reduce the computation time needed for large code bases. Also\n"
-              "note that the size of a graph can be further restricted by\n"
-              "DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n"
-              "Minimum value: 0, maximum value: 1000, default value: 0.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_TRANSPARENT",
-              "Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n"
-              "background. This is disabled by default, because dot on Windows does not seem\n"
-              "to support this out of the box.\n"
-              "\n"
-              "Warning: Depending on the platform used, enabling this option may lead to\n"
-              "badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n"
-              "read).\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_MULTI_TARGETS",
-              "Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\n"
-              "files in one run (i.e. multiple -o and -T options on the command line). This\n"
-              "makes dot run faster, but since only newer versions of dot (>1.8.10) support\n"
-              "this, this feature is disabled by default.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "GENERATE_LEGEND",
-              "If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n"
-              "explaining the meaning of the various boxes and arrows in the dot generated\n"
-              "graphs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-  doc->add(
-              "DOT_CLEANUP",
-              "If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot\n"
-              "files that are used to generate the various graphs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-          );
-}
index 11bd8f2..ce764e0 100644 (file)
@@ -224,9 +224,13 @@ void MainWindow::updateConfigFileName(const QString &fileName)
 
 void MainWindow::loadConfigFromFile(const QString & fileName)
 {
-  m_expert->loadConfig(fileName);
-  m_wizard->refresh();
+  // save full path info of original file
+  QString absFileName = QFileInfo(fileName).absoluteFilePath();
+  // updates the current directory
   updateConfigFileName(fileName);
+  // open the specified configuration file
+  m_expert->loadConfig(absFileName);
+  m_wizard->refresh();
   updateLaunchButtonState();
   m_modified = false;
   updateTitle();
index 4ec2b0e..01832df 100644 (file)
@@ -21,14 +21,21 @@ macx-g++ {
 # 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 ../../src/version.cpp expert.cpp wizard.cpp \
+SOURCES     += doxywizard.cpp expert.cpp wizard.cpp \
                inputbool.cpp inputstring.cpp inputint.cpp inputstrlist.cpp 
-LEXSOURCES  += config.l
 RESOURCES   += doxywizard.qrc
+INCBUFSIZE=$(PYTHON)  ../../src/increasebuffer.py
 win32:RC_FILE += doxywizard.rc
 
+config.target = config_doxyw.cpp
+config.commands = $(LEX) -P$*YY -t $*.l | $(INCBUFSIZE) >$*.cpp
+config.depends = config_doxyw.l  ../../src/increasebuffer.py
 configdoc.target = configdoc.cpp
-configdoc.commands = python ../../src/configgen.py -wiz ../../src/config.xml > configdoc.cpp
+configdoc.commands = $(PYTHON) ../../src/configgen.py -wiz ../../src/config.xml > configdoc.cpp
 configdoc.depends = ../../src/config.xml ../../src/configgen.py
-QMAKE_EXTRA_TARGETS += configdoc
-GENERATED_SOURCES += $$configdoc.target
+version.target = ../../src/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
+
index efc5b00..4c988c9 100644 (file)
@@ -22,7 +22,7 @@ static QString convertToComment(const QString &s)
   else
   {
     return SA("# ")+
-           s.trimmed().replace(SA("\n"),SA("\n# "))+
+           s.trimmed().replace(SA("\n"),SA("\n# ")).replace(SA("# \n"), SA("#\n"))+
            SA("\n");
   }
 }
index 7b554a3..9c3d28b 100755 (executable)
--- a/configure
+++ b/configure
@@ -17,7 +17,7 @@
 
 doxygen_version_major=1
 doxygen_version_minor=8
-doxygen_version_revision=5
+doxygen_version_revision=6
 
 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
 doxygen_version_mmn=NO
@@ -29,23 +29,30 @@ f_shared=YES
 f_make=NO
 f_dot=NO
 f_perl=NO
+f_python=NO
 f_plf_auto=NO
 f_prefix=/usr/local
 f_insttool=NO
 f_english=NO
 f_wizard=NO
 f_app=NO
+f_doxmlparser=NO
 f_thread=NO
 f_flex=NO
 f_bison=NO
 f_search=NO
-f_langs=nl,sv,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,mk,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,sc,vi,tr,eo,am
 f_sqlite3=NO
 f_sqlite3static=NO
 f_sqlite3_path=NO
 f_libclang=NO
 f_libclangstatic=NO
 
+#
+# first setup the list with availabe languages, so we cannot forget any
+# list will be in case as specified (f_langs) and in uppercase (f_ulangs) as used in the internal perl script
+#
+f_langs=`ls -1 src/translator_??.h | sed -e 's%src/translator_%%g' | sed -e 's/\.h//' | tr '\012' ',' | sed -e 's/,$//'`
+
 while test -n "$1";  do
   case $1 in
     --prefix | -prefix)
@@ -81,6 +88,9 @@ while test -n "$1";  do
     --dot | -dot)
        shift; f_dot=$1
        ;;
+    --python | -python)
+       shift; f_python=$1
+       ;;
     --perl | -perl)
        shift; f_perl=$1
        ;;
@@ -99,6 +109,9 @@ while test -n "$1";  do
     --with-doxyapp | -with-doxyapp)
        f_app=YES
        ;;
+    --with-doxmlparser | -with-doxmlparser)
+       f_doxmlparser=YES
+       ;;
     --with-doxysearch | -with-doxysearch)
        f_search=YES
        ;;
@@ -133,13 +146,14 @@ done
 
 if test "$f_help" = y; then
   cat <<EOF
-Usage: $0 [--help] [--shared] [--static] [--release] [--debug] 
+Usage: $0 [--help] [--shared] [--static] [--release] [--debug] [--python name]
           [--perl name] [--flex name] [--bison name] [--make name] 
           [--dot name] [--platform target] [--prefix dir] [--docdir dir] 
           [--install name] [--english-only] [--enable-langs list] 
           [--with-sqlite3] [--with-sqlite3-static] [--sqlite3-path]
           [--with-libclang] [--with-libclang-static]
           [--with-doxywizard] [--with-doxysearch] [--with-doxyapp]
+          [--with-doxxmlparser]
 
 Options: 
 
@@ -148,6 +162,8 @@ Options:
                        [default: shared]
   --release | --debug   Build for release or debug 
                        [default: release]
+  --python name         Use \`name' as the name of the python interpreter 
+                       [default: autodetect]
   --perl name           Use \`name' as the name of the perl interpreter 
                        [default: autodetect]
   --flex name           Use \`name' as the name of the GNU lexical scanner 
@@ -178,6 +194,7 @@ Options:
   --with-doxysearch     Build external search tools (doxysearch and doxyindexer)
                         requires Xapian library version 1.2
   --with-doxyapp        Example showing how to embed doxygen in an application.
+  --with-doxmlparser    Example showing how to parse doxygen's XML output.
 
 EOF
   test "$f_error" = y && exit 1
@@ -312,11 +329,18 @@ if test "$f_wizard" = YES; then
     for d in /usr/{lib,share,qt}/{qt-4,qt4,qt,qt*,4} /usr; do
       if test -x "$d/bin/qmake"; then
         QTDIR=$d
+        break 2
       fi
     done
   else
-    echo "  Detected Qt via the QTDIR environment variable..."
-    printf "                    "
+    if test -e "$QTDIR/bin/qmake"; then
+      printf "  Detected Qt via the QTDIR environment variable..."
+    else
+      printf "ERROR Detected Qt via the QTDIR environment variable..."
+      echo ", but $QTDIR/bin/qmake does not exist."
+      echo "      Set the QTDIR environment variable such that \$QTDIR/bin/qmake exists."
+      exit 2
+    fi
   fi
   if test -z "$QTDIR"; then
     echo "QTDIR not set and Qt not found at standard locations!"
@@ -325,6 +349,7 @@ if test "$f_wizard" = YES; then
     echo "check the Qt installation instructions!"
     exit 2
   fi
+  echo using $QTDIR
 fi
 
 #- check for xapian -----------------------------------------------------------
@@ -335,13 +360,24 @@ if test "$f_search" = YES; then
     for d in /usr /usr/local /opt/local; do
       if test -e "$d/include/xapian.h"; then
         XAPIAN=$d
+        break 2
       fi
     done
+  else
+    if test -e "$XAPIAN/include/xapian.h"; then
+      printf "  Detected Xapian via the XAPIAN environment variable..."
+    else
+      printf "ERROR Detected Xapian via the XAPIAN environment variable..."
+      echo ", but $XAPIAN/include/xapian.h does not exist."
+      echo "      Set the XAPIAN environment variable such that \$XAPIAN/include/xapian.h exists."
+      exit 2
+    fi
   fi
   if test -z "$XAPIAN"; then
     echo "XAPIAN not set and xapian.h not found at standard locations!"
     exit 2;
   fi
+  echo using $XAPIAN
 fi
    
 # - check for make ------------------------------------------------------------
@@ -520,6 +556,39 @@ if test "$f_libclang" = YES; then
   fi
 fi
 
+# - check for python ----------------------------------------------------------
+
+printf "  Checking for python... "
+if test "$f_python" = NO; then
+  python_names="python"
+  python_dirs="$bin_dirs /usr/bin /usr/local/bin /bin /sbin"
+  python_prog=NO
+  python_found=NO
+  for i in $python_names; do
+    for j in $python_dirs; do
+      if test -x "$j/$i"; then
+        python_found=YES
+        if test `$j/$i -c "import sys; print sys.version_info[0]"` = 2; then
+          python_prog="$j/$i"
+          break 2
+        fi
+      fi
+    done
+  done
+  f_python="$python_prog" 
+fi
+
+if test "$f_python" = NO; then
+  if test "$python_found" = YES; then
+    echo "version should be python 2."
+  else
+    echo "not found!";
+  fi
+  echo
+  exit 2
+fi
+echo "using $f_python";
+
 # - check for perl ------------------------------------------------------------
 
 printf "  Checking for perl... "
@@ -625,7 +694,8 @@ TMAKEPATH = $configPWD/tmake/lib/$f_platform
 ENV       = env TMAKEPATH="\$(TMAKEPATH)"
 TMAKE     = $configPWD/tmake/bin/tmake
 MAKE      = $f_make
-PERL      = $f_perl
+PYTHON    = $f_python
+LEX       = $f_flex
 RM        = rm -f
 CP        = cp
 VERSION   = `cat VERSION`
@@ -729,12 +799,6 @@ TMAKE_MOC = $QTDIR/bin/moc
 EOF
 fi
 
-if test "$f_english" = YES; then
-  cat >> .tmakeconfig <<EOF
-TMAKE_CXXFLAGS += -DENGLISH_ONLY
-EOF
-fi
-
 if test "$f_search" = YES; then
   cat >> .tmakeconfig <<EOF
 LIBS += -L$XAPIAN/lib
@@ -777,6 +841,11 @@ EOF
        if test $f_app = YES; then
          echo "        \$(MAKE) -C addon/doxyapp" >> $DST
        fi
+       if test $f_doxmlparser = YES; then
+         echo "        \$(MAKE) -C addon/doxmlparser/src" >> $DST
+         echo "        \$(MAKE) -C addon/doxmlparser/test" >> $DST
+         echo "        \$(MAKE) -C addon/doxmlparser/examples/metrics" >> $DST
+       fi
        echo "" >> $DST
        echo "doxywizard_install:" >> $DST
        if test $f_wizard = YES; then
@@ -796,8 +865,8 @@ EOF
      echo "  Created $DST from $SRC..."
 done
 
-cat src/libdoxycfg.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" > src/libdoxycfg.t
-cat src/libdoxygen.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" > src/libdoxygen.t
+cat src/libdoxycfg.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" -e "s|%%PYTHON%%|$f_python|g" > src/libdoxycfg.t
+cat src/libdoxygen.t.in | sed -e "s|%%FLEX%%|$f_flex|g" -e "s|%%BISON%%|$f_bison|g" -e "s|%%PYTHON%%|$f_python|g" > src/libdoxygen.t
 
 f_inprofiles="qtools/qtools.pro.in src/libdoxygen.pro.in src/libdoxycfg.pro.in src/doxygen.pro.in addon/doxywizard/doxywizard.pro.in addon/doxmlparser/src/doxmlparser.pro.in addon/doxmlparser/test/xmlparse.pro.in addon/doxmlparser/examples/metrics/metrics.pro.in libmd5/libmd5.pro.in addon/doxyapp/doxyapp.pro.in addon/doxysearch/doxysearch.pro.in addon/doxysearch/doxyindexer.pro.in" 
 
@@ -824,46 +893,27 @@ EOF
 done
 
 # - generating src/lang_cfg.h 
+# use consistent method on Linux and Windows
 
 if test -f "src/lang_cfg.h"; then
     chmod u+w src/lang_cfg.h   # make sure file can be overwritten
 fi
 echo "  Generating src/lang_cfg.h..."
-echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>); 
-        chomp @l; 
-       @allowed=(split(/,/,"NL,SV,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC,VI,TR,EO,AM"));
-       foreach my $elem (@l){ 
-            $elem =~ tr/a-z/A-Z/;
-            $r=0;
-            foreach my $tst (@allowed){
-               if ($tst eq $elem) { $r=1; last; }              
-            }      
-            if ($r!=1) { die "ERROR: Invalid language $elem was selected!\n"; } 
-            print "#define LANG_$elem\n";
-        };' > ./src/lang_cfg.h   
+if test "$f_english" = YES; then
+   $f_python src/lang_cfg.py ENONLY > src/lang_cfg.h
+else
+   f_ulangs=`echo $f_langs | tr '[a-z,]' '[A-Z ]'`
+   $f_python src/lang_cfg.py $f_ulangs > src/lang_cfg.h
+fi
 
 if test -f "src/config.h"; then
     chmod u+w src/config.h
 fi
-echo "  Generating src/settings.h..."
-echo "#ifndef SETTINGS_H" > src/settings.h
-echo "#define SETTINGS_H" >> src/settings.h
-echo "" >> src/settings.h
-if test "$f_sqlite3" != NO; then
-echo "#define USE_SQLITE3  1" >> src/settings.h
-else
-echo "#define USE_SQLITE3  0" >> src/settings.h
+if test -f "src/settings.h"; then
+    chmod u+w src/settings.h
 fi
-if test "$f_libclang" != NO; then
-echo "#define USE_LIBCLANG 1" >> src/settings.h
-else
-echo "#define USE_LIBCLANG 0" >> src/settings.h
-fi
-echo "" >> src/settings.h
-echo "#define IS_SUPPORTED(x) \\" >> src/settings.h
-echo "  ((USE_SQLITE3  && strcmp(\"USE_SQLITE3\",(x))==0)  || \\" >> src/settings.h 
-echo "   (USE_LIBCLANG && strcmp(\"USE_LIBCLANG\",(x))==0) || \\" >> src/settings.h 
-echo "  0)" >> src/settings.h 
-echo "" >> src/settings.h
-echo "#endif" >> src/settings.h
-echo
+echo "  Generating src/settings.h..."
+cd src
+$f_python settings.py $f_sqlite3 $f_libclang
+cd ..
+echo "  Finished"
index cf1e461..5036116 100644 (file)
@@ -31,9 +31,9 @@ clean:
 language: language.doc 
 
 language.doc: $(wildcard ../src/translator*.h) maintainers.txt language.tpl translator.py
-       python translator.py
+       $(PYTHON) translator.py
 
 config.doc:  ../src/config.xml ../src/configgen.py
-       python ../src/configgen.py -doc ../src/config.xml > config.doc
+       $(PYTHON) ../src/configgen.py -doc ../src/config.xml > config.doc
 
 FORCE:
index 05f8202..9eaf192 100644 (file)
@@ -2,6 +2,139 @@
 \tableofcontents
 \section log_1_8 1.8 Series
 
+\subsection log_1_8_6 Release 1.8.6
+\htmlonly
+<b>(release date 24-12-2013)</b>
+<a name="1.8.6"></a>
+<h3>Bug fixes (ids refer to the <a href="http://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&newqueryname=&form_name=query&order=bugs.bug_id">bugzilla</a> database, lines with bug refer to commit is <a href="https://github.com/doxygen/doxygen/commits/master">GitHub</a>)</h3>
+<ul>
+<li> Bug 154880 - if "using namespace" used, call of a static member function in C++ is not recognized or recognized wrong
+<li> Bug 647517  - make install prepends a slash to the installation path Removed superfluous /
+<li> Bug 668424 - HTML links in RTF output are broken
+<li> Bug 683897 - class list not sorted?
+<li> Bug 692004 - show includes for free functions
+<li> Bug 693537 - Create possibility to keep user comments in Doxyfile
+<li> Bug 701949 - Latex: Hyperlinks for \secreflist / \refitem
+<li> Bug 702265 - Generated Doxyfile differs from result of doxygen -u (partial fix)
+<li> Bug 705910 - Indexing and searching cannot treat non ASCII identifiers
+<li> Bug 706520 - Fortran: in body documentation lands on wrong place In some cases, in propriety code, with in body Fortran documentation doxygen crashed. I REOPENED Bug_706520 for this
+<li> Bug 706804 - Fortran: Doxygen mixes up function-attributes with the return type test string should not be equal to "function" but should contain "function"
+<li> Bug 706813 - RPM build via spec file fails
+<li> Bug 706874 - Doxygen crash if missing new-line in a snippet
+<li> Bug 706916 - C++ exception specifications are no longer parsed correctly
+<li> Bug 707102 - update the Japanese translation
+<li> Bug 707353 - Accept IDs using unicode(non ASCII) characters in python codes
+<li> Bug 707389 - GENERATE_TREEVIEW=YES disables touch scrolling with Android 3.x
+<li> Bug 707431 - Cannot @ref or @link C++ operator overloads
+<li> Bug 707483 - Wrong page number and header in pdf output
+<li> Bug 707554 - When I use @INCLUDE DoxyWizard is closed Current directory was not changed at the right time so the include files could not be found in the "current" directory (i.e. the directory where the Doxyfile resides too, as this directory is shown as the current directory in the doxywizard). This is also important when the doxywizard is started from a shortcut.
+<li> Bug 707567 - Asterisks in comment wrongly displayed for @code
+<li> Bug 707641 - `FILTER_SOURCE_FILES=YES` required to build CALL_GRAPHS https://bugzilla.gnome.org/show_bug.cgi?id=707641
+<li> Bug 707685 - Fortran: error message when missing last EOL In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.
+<li> Bug 707713 - Add support for dia diagrams
+<li> Bug 707825 - Const treatment
+<li> Bug 707925 - False warning for Java "warning: missing ( in exception list on member"
+<li> Bug 707985 - Strange output when : appended to an parameter description
+<li> Bug 707995 - @copydoc not working for const member overloads
+<li> Bug 708446 - Deprecated list breaks HTML tree with xhtml extension
+<li> Bug 708455 - Enabling INLINE_SIMPLE_STRUCTS messes up Data Structures in tree
+<li> Bug 708806 - Wrong path to graph_legend figure in graph_legend.html when CREATE_SUBDIRS = YES
+<li> Bug 709052 - Templated and non-templated method mixup documentation
+<li> Bug 709226 - Struct member fields not documented with INLINE_SIMPLE_STRUCTS
+<li> Bug 709526 - C++ parsing problem with operators &lt;&lt;, &lt;, &gt;, &gt;&gt; inside templates
+<li> Bug 709706 - Terminating C comments within markdown files breaks aliases
+<li> Bug 709780 - Copying of files via \image tag can get confused by symlinks at the destination
+<li> Bug 709803 - Generated hhc file contains an error for a section of a mainpage
+<li> Bug 709845 - Fortran: problem with types with name starting with is
+<li> Bug 709870 - Broken links on members HTML page when using BUILTIN_STL_SUPPORT
+<li> Bug 709921 - position of linebreak in template argument list affects inheritance relation
+<li> Bug 710917 - Segfault while parsing a C file
+<li> Bug 710998 - latex_count=5 is not enough
+<li> Bug 711004 - Vertical bars cannot be sent straight to makeindex
+<li> Bug 711097 - Compiler warnings because char is unsigned on ARM/PPC: "comparison is always false"
+<li> Bug 711378 - Nested Aliases fail when the nested alias has two or more arguments.
+<li> Bug 711639 - [PATCH] #include does not work with absolute paths
+<li> Bug 711723 - Comment /**/ confuses doxygen
+<li> Bug 711787 - Long initialization line in C stops doxygen An extra "breakpoint" in the input string has been created in the form of a , (comma), so for initialization lines the line will be shorter and the , (comma) will be copied later on.
+<li> Bug 712795 - segmentation fault in memberdef.cpp
+<li> Bug 712819 - Some external namespaces appear in list despite having ALLEXTERNALS = NO
+<li> Bug 715172 - Consistently document Fortran's equivalent function bodies
+<li> Bug 719389 - HTML escaping incorrectly applied in source tooltips
+<li> Bug 719422 - private java class is mentioned in inherited by list of super class
+<li> Bug 719463 - Invalid null key and segmentation fault
+<li> Bug 719489 - Label "abstract" instead of "pure virtual" for Java language
+<li> Bug 719525 - Can't build because the definitions of ***YY_flex_debug are missing.
+<li> Bug 719591 - expand_as_defined macro does not properly work
+<li> Bug 719639 - @xrefitem with empty heading string
+<li> Bug 720046 - Document inline objective-C blocks
+<li> Bug 720092 - USE_MDFILE_AS_MAINPAGE doesn't work if full path is specified.
+<li> Bug 720580 - inline source browser shows wrong code with muilti-line c++11's raw strings
+<li> Add support for honoring svg image format preference in msc
+<li> Added @parblock and @endparblock commands
+<li> Added compile support for Mavericks
+<li> Added fix to avoid errors with older compilers.
+<li> Added generated files to gitignore
+<li> Added missing docs tag
+<li> Added missing pthread lib to doxyapp
+<li> Added missing space after @parblock
+<li> Added rudimentary support for Django like template system for output creation.
+<li> Added the possibility to specify the -d option in the Visual studio GUI on windows for the lex rules
+<li> Adjust internationalization part to current situation
+<li> Alignment of @code and @verbatim section When having a code and a verbatim section the boxes are not alligned, this patch fixes this. Example code, aa.c; standard Doxyfile: /** \file
+<li> Allow @ref to unlabeled markdown page by name, i.e. @ref mypage.md
+<li> Allow links to other markdown pages of the form [link text](page.md)
+<li> Avoid accessing uninitialized memory in fileToString
+<li> Build problem with unistd.h and Cygwin The standard g++ compiler under windows (win32-g++) has unistd.gh file; Microsoft windows does not have it, therfore it is better to use the winbuild directory in case of windows adn no dependency otherwise
+<li> Consistency in language part of the documentation Made documentation more inline with other parts of the documentation (regarding the way e.g. filenames are presented) Corrected some spelling errors Corrected the warning in the language.doc by placing ta reference to the files from which language.doc is generated Corrected the color for the languages that are still v1.4.6 (language name now also red  in stead of a pink background, was confusing with languages that were 1.5 / 1.6 compatible)
+<li> Corrected some inconsistencies in the comments
+<li> Debug output for lexical analyzer
+<li> Deleted generated files from source repository
+<li> Doxygen didn't allow @ref to parameters of type reference to an array.
+<li> Doxysearch under Cygwin should not have extension cgi.exe but just .cgi
+<li> Esperanto not supported by htmlhelp compiler reverting for esperanto to default language (US English)
+<li> Fixed a number of compiler warnings reported by newer clang compiler
+<li> Fixed compilation issues in doxyapp
+<li> Fixed compile warning
+<li> Fixed compiler warning related to implicit size_t to int conversion
+<li> Fixed constness warning
+<li> Fixed invalid if statement found by cppcheck
+<li> Fixed issue with Romanian translator preventing treeview from working
+<li> Fixed regression autolinking C# template such as MyGenericClass&lt;T&gt;.g()
+<li> Fixed regression in argument matching for the template example
+<li> Fortran added keyword IMPURE
+<li> French translator up-to-date.
+<li> Internal documentation for debug possibilities Documentation regarding usage of -d option with [f]lex Initial documentation regarding the -d options with doxygen
+<li> LaTeX: Fix ToC entries of index/bibliography
+<li> Made lexer rule explicit
+<li> Make Python detection in configure work with version older than 2.7
+<li> Minor layout tweaks and extra guard
+<li> More fixes for the Windows build
+<li> Patch regarding generating the rules file for the windows build regarding languages, some inconsistencies in the (windows) build system, corrections to some spelling.
+<li> Regenerated language.doc
+<li> Removed japanese characters in maintainers.txt as they break the build
+<li> Removed redundant backslashes in regexp pattern
+<li> Report details about fork() failure in logs.
+<li> Russian translator updated, new Russian maintainer added.
+<li> Small spelling correction to generate an rtf extensions file -&gt; to generate a rtf extensions file
+<li> Some texts can be independent of \htmlonly / \latexonly
+<li> Space missing in error message. the word 'in' and the vale of filesOption were concatenated
+<li> This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commends have been replaced with python scripts so that on windows only python is need (besides flex and and bison). On *nix also perl is required for the generation using tmake.
+<li> Updated Visual Studio project files to include new source files
+<li> Usage of the -d opion corrected Giving an error when a wrong -d option is given. Made some error mesages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.
+<li> VHDL-2008 and arrays on unconstrained elements
+<li> consider currentFile when searching for global symbols
+<li> doc/language.doc generated from the updated sources (bgcolored)
+<li> doc/language.tpl -- UTF-8 reflected in the langhowto template
+<li> doc/language.tpl -- trailing spaces removed
+<li> doc/translator.py -- coloured status in HTML
+<li> doxygen /** style creates spurious code blocks with markdown enabled
+<li> doxygen version 1.8.5 throws many "Internal Inconsistency" errors when parsing .idl files
+<li> doxygen.sty.h was not ignored and not included/generated properly
+<li> testing dir was missing from 'make archive'
+<li> usage: make -d print dev doxygen options
+</ul>
+\endhtmlonly
+
 \subsection log_1_8_5 Release 1.8.5
 \htmlonly
 <b>(release date 23-08-2013)</b>
 <ul>
 <li>Added SOURCE_TOOLTIPS option for advanced tooltip support while source browsing.
 </ul>
-<h3>Bug fixes (ids refer to the <a href="http://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&newqueryname=&form_name=query&order=bugs.bug_id">bugzilla</a> database)</h3>
+<h3>Bug fixes</h3>
 <ul>
 <li> Bug 668007 - HTML commands - documentation of &lt;/dd&gt; tag missing
 <li> Bug 676879 - parameter on doxywizard manual Added sentenc in respect to possible argument for doxywizard Added images to the LaTex / pdf version of the manual
index 7054c11..d13c68b 100644 (file)
@@ -65,6 +65,7 @@ documentation:
 \refitem cmddefgroup \\defgroup
 \refitem cmddeprecated \\deprecated
 \refitem cmddetails \\details
+\refitem cmddiafile \\diafile
 \refitem cmddir \\dir
 \refitem cmddocbookonly \\docbookonly
 \refitem cmddontinclude \\dontinclude
@@ -85,6 +86,7 @@ documentation:
 \refitem cmdendlink \\endlink
 \refitem cmdendmanonly \\endmanonly
 \refitem cmdendmsc \\endmsc
+\refitem cmdendparblock \\endparblock
 \refitem cmdendrtfonly \\endrtfonly
 \refitem cmdendsecreflist \\endsecreflist
 \refitem cmdendverbatim \\endverbatim
@@ -136,6 +138,7 @@ documentation:
 \refitem cmdpar \\par
 \refitem cmdparagraph \\paragraph
 \refitem cmdparam \\param
+\refitem cmdparblock \\parblock
 \refitem cmdpost \\post
 \refitem cmdpre \\pre
 \refitem cmdprivate \\private
@@ -227,7 +230,7 @@ Structural indicators
   any of the commands.
 
   The title is optional, so this command can also be used to add a number of
-  entities to an existing group using \@{ and \@} like this:
+  entities to an existing group using \c \@{ and \c \@} like this:
 
 \verbatim
   /*! \addtogroup mygrp
@@ -1473,6 +1476,35 @@ void setPosition(double x,double y,double z,double t)
 \endverbatim
 
 <hr>
+\section cmdparblock \\parblock
+  \addindex \\parblock
+  For commands that expect a single paragraph as argument
+  (such as \ref cmdpar "\\par", \ref cmdparam "\\param" and \ref cmdwarning "\\warning"),
+  the \ref cmdparblock "\\parblock" command allows to start a
+  description that covers multiple paragraphs, which then ends with
+  \ref cmdendparblock "\\endparblock".
+
+  Example:
+\verbatim
+/** Example of a param command with a description consisting of two paragraphs
+ *  \param p 
+ *  \parblock
+ *  First paragraph of the param description.
+ *
+ *  Second paragraph of the param description.
+ *  \endparblock
+ *  Rest of the comment block continues.
+ */
+\endverbatim
+  Note that the \\parblock command may also appear directly after
+  \\param's first argument.
+
+<hr>
+\section cmdendparblock \\endparblock
+  \addindex \\endparblock
+  This ends a block of paragraphs started with \\ref cmdparblock "\\parblock".
+
+<hr>
 \section cmdtparam \\tparam <template-parameter-name> { description }
 
   \addindex \\tparam
@@ -1708,6 +1740,26 @@ void setPosition(double x,double y,double z,double t)
  Note the use of escaped quotes for the second and third argument of the
  \c \\xrefitem command.
 
+ In case parameter "(heading)" is the empty string no heading is generated. This can be useful
+ when used in combination with the \ref cmdpage "\\page" command e.g.
+\verbatim
+/** @page my_errors My Errors
+ *  @brief Errors page
+ *
+ *  Errors page contents.
+ */
+
+/** \error ERROR 101: in case a file can not be opened.
+    Check about file system read/write access. */
+#define MY_ERR_CANNOT_OPEN_FILE                   101
+
+/** \error ERROR 102: in case a file can not be closed.
+    Check about file system read/write access. */
+#define MY_ERR_CANNOT_CLOSE_FILE                  102
+\endverbatim
+ with \c \\error defined as
+ \verbatim ALIASES += "error=\xrefitem my_errors \"\" \"\"" \endverbatim
+
 <hr>
 
 \htmlonly <center> \endhtmlonly
@@ -2487,6 +2539,24 @@ class Receiver
   \sa section \ref cmdmsc "\\msc".
 
 <hr>
+\section cmddiafile \\diafile <file> ["caption"]
+
+  \addindex \\diafile
+  Inserts an image made in dia from \<file\> into the documentation.
+
+  The first 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_diafile_dirs "DIAFILE_DIRS" tag.
+  If the dia file is found it will be used as an input file dia.
+  The resulting image will be put into the correct output directory.
+  If the dia file name contains spaces you'll have to put quotes ("...") around it.
+
+  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.
+
+<hr>
 \section cmde \\e <word>
 
   \addindex \\e
index 99c4e83..9b27733 100644 (file)
@@ -88,6 +88,8 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_compact_rtf COMPACT_RTF
 \refitem cfg_cpp_cli_support CPP_CLI_SUPPORT
 \refitem cfg_create_subdirs CREATE_SUBDIRS
+\refitem cfg_diafile_dirs DIAFILE_DIRS
+\refitem cfg_dia_path DIA_PATH
 \refitem cfg_directory_graph DIRECTORY_GRAPH
 \refitem cfg_disable_index DISABLE_INDEX
 \refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
@@ -276,6 +278,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_server_based_search SERVER_BASED_SEARCH
 \refitem cfg_short_names SHORT_NAMES
 \refitem cfg_show_files SHOW_FILES
+\refitem cfg_show_grouped_memb_inc SHOW_GROUPED_MEMB_INC
 \refitem cfg_show_include_files SHOW_INCLUDE_FILES
 \refitem cfg_show_namespaces SHOW_NAMESPACES
 \refitem cfg_show_used_files SHOW_USED_FILES
@@ -395,6 +398,7 @@ The default value is: <code>NO</code>.
 Possible values are: 
 <code>Afrikaans</code>, 
 <code>Arabic</code>, 
+<code>Armenian</code>, 
 <code>Brazilian</code>, 
 <code>Catalan</code>, 
 <code>Chinese</code>, 
@@ -403,28 +407,31 @@ Possible values are:
 <code>Czech</code>, 
 <code>Danish</code>, 
 <code>Dutch</code>, 
-<code>English</code>, 
+<code>English</code> (United States)
 <code>Esperanto</code>, 
-<code>Farsi</code>, 
+<code>Farsi</code> (Persian)
 <code>Finnish</code>, 
 <code>French</code>, 
 <code>German</code>, 
 <code>Greek</code>, 
 <code>Hungarian</code>, 
+<code>Indonesian</code>, 
 <code>Italian</code>, 
 <code>Japanese</code>, 
-<code>Japanese-en</code>, 
+<code>Japanese-en</code> (Japanese with English messages)
 <code>Korean</code>, 
-<code>Korean-en</code>, 
+<code>Korean-en</code> (Korean with English messages)
 <code>Latvian</code>, 
-<code>Norwegian</code>, 
+<code>Lithuanian</code>, 
 <code>Macedonian</code>, 
-<code>Persian</code>, 
+<code>Norwegian</code>, 
+<code>Persian</code> (Farsi), 
 <code>Polish</code>, 
 <code>Portuguese</code>, 
 <code>Romanian</code>, 
 <code>Russian</code>, 
 <code>Serbian</code>, 
+<code>Serbian-Cyrillic</code>, 
 <code>Slovak</code>, 
 <code>Slovene</code>, 
 <code>Spanish</code>, 
@@ -1020,6 +1027,16 @@ The default value is: <code>NO</code>.
 
 The default value is: <code>YES</code>.
 
+ \anchor cfg_show_grouped_memb_inc
+<dt>\c SHOW_GROUPED_MEMB_INC <dd>
+ \addindex SHOW_GROUPED_MEMB_INC
+ If the SHOW_GROUPED_MEMB_INC tag is set to \c YES then Doxygen 
+ will add for each grouped member an include statement to the documentation,
+ telling the reader which file to include in order to use the member.
+
+
+The default value is: <code>NO</code>.
+
  \anchor cfg_force_local_includes
 <dt>\c FORCE_LOCAL_INCLUDES <dd>
  \addindex FORCE_LOCAL_INCLUDES
@@ -1056,7 +1073,8 @@ The default value is: <code>YES</code>.
  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
- declaration order.
+ declaration order. Note that this will also influence the order of the
+ classes in the class list.
 
 
 The default value is: <code>NO</code>.
@@ -3305,6 +3323,14 @@ The default value is: <code>YES</code>.
  specify the directory where the \c mscgen tool resides. If left empty the tool is assumed to 
  be found in the default search path.
 
+ \anchor cfg_dia_path
+<dt>\c DIA_PATH <dd>
+ \addindex DIA_PATH
+You can include diagrams made with dia in doxygen documentation. Doxygen will then run 
+dia to produce the diagram and insert it in the documentation. The DIA_PATH tag allows 
+you to specify the directory where the dia binary resides. If left empty dia is assumed 
+to be found in the default search path.
+
  \anchor cfg_hide_undoc_relations
 <dt>\c HIDE_UNDOC_RELATIONS <dd>
  \addindex HIDE_UNDOC_RELATIONS
@@ -3591,6 +3617,13 @@ This tag requires that the tag \ref cfg_have_dot "HAVE_DOT" is set to \c YES.
  contain msc files that are included in the documentation (see the
  \ref cmdmscfile "\\mscfile" command).
 
+ \anchor cfg_diafile_dirs
+<dt>\c DIAFILE_DIRS <dd>
+ \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).
+
  \anchor cfg_dot_graph_max_nodes
 <dt>\c DOT_GRAPH_MAX_NODES <dd>
  \addindex DOT_GRAPH_MAX_NODES
index 51c2e47..f62f017 100644 (file)
@@ -73,12 +73,13 @@ Written by Dimitri van Heesch\\[2ex]
 \copyright 1997-\thisyear
 \end{center}
 \end{titlepage}
+\pagenumbering{Roman}
 \clearemptydoublepage
 \tableofcontents
 \clearemptydoublepage
 \pagenumbering{arabic}
-\include{index}
 \part{User Manual}
+\chapter{Introduction}\label{intro}\hypertarget{intro}{}\input{index}
 \chapter{Installation}\label{install}\hypertarget{install}{}\input{install}
 \chapter{Getting Started}\label{starting}\hypertarget{starting}{}\input{starting}
 \chapter{Documenting the code}\label{docblocks}\hypertarget{docblocks}{}\input{docblocks}
index 55dceff..298d413 100644 (file)
@@ -137,22 +137,12 @@ input used in their production; they are not affected by this license.
 
 Doxygen supports a number of \ref output "output formats" where HTML is the
 most popular one. I've gathered 
-\htmlonly
 <a href="http://www.doxygen.org/results.html">some nice examples</a> 
-\endhtmlonly
-\latexonly
-some nice examples (see {\tt http://www.doxygen.org/results.html})
-\endlatexonly
 of real-life projects using doxygen.
 
 These are part of a larger
-\htmlonly
 <a href="http://www.doxygen.org/projects.html">list of projects</a> 
 that use doxygen.
-\endhtmlonly
-\latexonly
-list of projects that use doxygen (see {\tt http://www.doxygen.org/projects.html}).
-\endlatexonly
 If you know other projects, let <a href="mailto:dimitri@stack.nl?subject=New%20project%20using%20Doxygen">me</a> 
 know and I'll add them. 
 
index a4fe2f7..94f1099 100644 (file)
@@ -269,10 +269,12 @@ compile doxygen. Alternatively, you can compile doxygen
 <a href="http://en.wikipedia.org/wiki/Cygwin">Cygwin</a>
 or <a href="http://www.mingw.org/">MinGW</a>.
 
-The next step is to install \c bison, \c flex, and \c tar
-(see http://gnuwin32.sourceforge.net/packages.html).
-This packages are needed during the
-compilation process if you use a CVS snapshot of doxygen (the official source releases 
+The next step is to install modern versions of \c bison and \c flex
+(see http://sourceforge.net/projects/winflexbison. After installation and adding them to
+your `path` rename `win_flex.exe` to `flex.exe` and `win_bison.exe` to `bison.exe`)
+Furthermore you have to install \c python (version 2, see http://www.python.org).
+These packages are needed during the
+compilation process if you use a GitHub snapshot of doxygen (the official source releases 
 come with pre-generated sources).
 
 Download doxygen's source tarball and put it somewhere (e.g. use <code>c:\\tools</code>)
@@ -282,7 +284,9 @@ Now start a new command shell and type
 cd c:\tools
 tar zxvf doxygen-x.y.z.src.tar.gz
 \endverbatim
-to unpack the sources.
+to unpack the sources (you can obtain \c tar from e.g. http://gnuwin32.sourceforge.net/packages.html).
+Alternatively you can use an unpack program, like 7-Zip (see http://www.7-zip.org)
+or use the build in unpack feature of modern Windows systems).
 
 Now your environment is setup to build \c doxygen.
 
index 570bf4c..f923be3 100644 (file)
@@ -1,15 +1,16 @@
 /******************************************************************************
- * Do not edit this file. It was generated by the translator.py script. 
+ * Do not edit this file. It was generated by the translator.py script.
+ * Instead edit language.tpl and maintainers.txt
  *
  * 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 
- * 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.
  *
- * Documents produced by Doxygen are derivative works derived from the
+ * Documents produced by doxygen are derivative works derived from the
  * input used in their production; they are not affected by this license.
  *
  */
 Doxygen has built-in support for multiple languages. This means that the
 text fragments, generated by doxygen, can be produced in languages other
 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.4), 40 languages 
+Currently (version 1.8.5), 40 languages
 are supported (sorted alphabetically):
 Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
 Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
 Esperanto, Finnish, French, German, Greek, Hungarian, Indonesian,
 Italian, Japanese (+En), Korean (+En), Latvian, Lithuanian,
 Macedonian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian,
-Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish,
+Serbian, SerbianCyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
 Ukrainian, and Vietnamese..
 
 The table of information related to the supported languages follows.
@@ -52,256 +54,256 @@ when the translator was updated.
   <!-- table content begin -->
 
   <tr bgcolor="#ffffff">
-    <td>Afrikaans</td>
+    <td bgcolor="#ffffff">Afrikaans</td>
     <td>Johan Prinsloo</td>
     <td>johan at zippysnoek dot com</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Arabic</td>
+    <td bgcolor="#ff5555">Arabic</td>
     <td>Moaz Reyad<br/>Muhammad Bashir Al-Noimi</td>
     <td><span style="color: brown">[resigned]</span><br/>mbnoimi at gmail dot com</td>
-    <td>1.4.6</td>
+    <td bgcolor="#ff5555">1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Armenian</td>
+    <td bgcolor="#ffffff">Armenian</td>
     <td>Armen Tangamyan</td>
     <td>armen dot tangamyan at anu dot edu dot au</td>
-    <td>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Brazilian Portuguese</td>
+    <td bgcolor="#ffffff">Brazilian Portuguese</td>
     <td>Fabio "FJTC" Jun Takada Chino</td>
     <td>jun-chino at uol dot com dot br</td>
-    <td>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Catalan</td>
+    <td bgcolor="#ffffff">Catalan</td>
     <td>Maximiliano Pin<br/>Albert Mora</td>
     <td>max dot pin at bitroit dot com<br/><span style="color: brown">[unreachable]</span></td>
-    <td>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Chinese</td>
+    <td bgcolor="#ffffff">Chinese</td>
     <td>Lian Yang<br/>Li Daobing<br/>Wei Liu</td>
     <td>lian dot yang dot cn at gmail dot com<br/>lidaobing at gmail dot com<br/>liuwei at asiainfo dot com</td>
-    <td>1.8.2</td>
+    <td bgcolor="#ffffcc">1.8.2</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Chinese Traditional</td>
+    <td bgcolor="#ffffff">Chinese Traditional</td>
     <td>Daniel YC Lin<br/>Gary Lee</td>
     <td>dlin dot tw at gmail dot com<br/>garywlee at gmail dot com</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ffffff">almost up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Croatian</td>
+    <td bgcolor="#ffffff">Croatian</td>
     <td>Boris Bralo</td>
     <td>boris dot bralo at gmail dot com</td>
-    <td>1.8.2</td>
+    <td bgcolor="#ffffcc">1.8.2</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Czech</td>
+    <td bgcolor="#ffffff">Czech</td>
     <td>Petr Přikryl</td>
     <td>prikryl at atlas dot cz</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Danish</td>
+    <td bgcolor="#ffffff">Danish</td>
     <td>Poul-Erik Hansen<br/>Erik Søe Sørensen</td>
     <td>pouhan at gnotometrics dot dk<br/>eriksoe+doxygen at daimi dot au dot dk</td>
-    <td>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Dutch</td>
+    <td bgcolor="#ffffff">Dutch</td>
     <td>Dimitri van Heesch</td>
     <td>dimitri at stack dot nl</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>English</td>
+    <td bgcolor="#ffffff">English</td>
     <td>Dimitri van Heesch</td>
     <td>dimitri at stack dot nl</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Esperanto</td>
+    <td bgcolor="#ffffff">Esperanto</td>
     <td>Ander Martínez</td>
     <td>ander dot basaundi at gmail dot com</td>
-    <td>1.8.4</td>
+    <td bgcolor="#ffffcc">1.8.4</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Finnish</td>
+    <td bgcolor="#ffffff">Finnish</td>
     <td>Antti Laine</td>
     <td>antti dot a dot laine at tut dot fi</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>French</td>
+    <td bgcolor="#ffffff">French</td>
     <td>David Martinet<br/>Xavier Outhier<br/>Benoît BROSSE</td>
     <td>contact at e-concept-applications dot fr<br/>xouthier at yahoo dot fr<br/>Benoit dot BROSSE at ingenico dot com</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>German</td>
+    <td bgcolor="#ffffff">German</td>
     <td>Peter Grotrian<br/>Jens Seidel</td>
     <td>Peter dot Grotrian at pdv-FS dot de<br/>jensseidel at users dot sf dot net</td>
-    <td>1.8.4</td>
+    <td bgcolor="#ffffcc">1.8.4</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Greek</td>
+    <td bgcolor="#ffffff">Greek</td>
     <td>Paul Gessos</td>
     <td>gessos dot paul at yahoo dot gr</td>
-    <td>1.8.4</td>
+    <td bgcolor="#ffffcc">1.8.4</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Hungarian</td>
+    <td bgcolor="#ff5555">Hungarian</td>
     <td>Ákos Kiss<br/>Földvári György</td>
     <td>akiss at users dot sourceforge dot net<br/><span style="color: brown">[unreachable]</span></td>
-    <td>1.4.6</td>
+    <td bgcolor="#ff5555">1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Indonesian</td>
+    <td bgcolor="#ffffff">Indonesian</td>
     <td>Hendy Irawan</td>
     <td>ceefour at gauldong dot net</td>
-    <td>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Italian</td>
+    <td bgcolor="#ffffff">Italian</td>
     <td>Alessandro Falappa<br/>Ahmed Aldo Faisal</td>
     <td>alessandro at falappa dot net<br/>aaf23 at cam dot ac dot uk</td>
-    <td>1.8.2</td>
+    <td bgcolor="#ffffcc">1.8.2</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Japanese</td>
-    <td>Hiroki Iseri<br/>Ryunosuke Satoh<br/>Kenji Nagamatsu<br/>Iwasa Kazmi</td>
-    <td>goyoki at gmail dot com<br/>sun594 at hotmail dot com<br/>naga at joyful dot club dot ne dot jp<br/><span style="color: brown">[unreachable]</span></td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffffff">Japanese</td>
+    <td>Suzumizaki-Kimikata<br/>Hiroki Iseri<br/>Ryunosuke Satoh<br/>Kenji Nagamatsu<br/>Iwasa Kazmi</td>
+    <td>szmml at h12u.com<br/>goyoki at gmail dot com<br/>sun594 at hotmail dot com<br/><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[unreachable]</span></td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>JapaneseEn</td>
+    <td bgcolor="#ffffff">JapaneseEn</td>
     <td>see the Japanese language</td>
     <td>&nbsp;</td>
-    <td>English based</td>
+    <td bgcolor="#ccffcc">English based</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Korean</td>
+    <td bgcolor="#ffffff">Korean</td>
     <td>Kim Taedong<br/>SooYoung Jung<br/>Richard Kim</td>
     <td>fly1004 at gmail dot com<br/>jung5000 at gmail dot com<br/><span style="color: brown">[unreachable]</span></td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>KoreanEn</td>
+    <td bgcolor="#ffffff">KoreanEn</td>
     <td>see the Korean language</td>
     <td>&nbsp;</td>
-    <td>English based</td>
+    <td bgcolor="#ccffcc">English based</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Latvian</td>
+    <td bgcolor="#ffffff">Latvian</td>
     <td>Lauris</td>
     <td>lauris at nix.lv</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ffffcc">1.8.4</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Lithuanian</td>
+    <td bgcolor="#ff5555">Lithuanian</td>
     <td>Tomas Simonaitis<br/>Mindaugas Radzius<br/>Aidas Berukstis<br/><span style="color: red; background-color: yellow">-- searching for the maintainer --</span></td>
     <td><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[Please, try to help to find someone.]</span></td>
-    <td>1.4.6</td>
+    <td bgcolor="#ff5555">1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Macedonian</td>
+    <td bgcolor="#ffffff">Macedonian</td>
     <td>Slave Jovanovski</td>
     <td>slavejovanovski at yahoo dot com</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Norwegian</td>
+    <td bgcolor="#ff5555">Norwegian</td>
     <td>Lars Erik Jordet</td>
     <td>lejordet at gmail dot com</td>
-    <td>1.4.6</td>
+    <td bgcolor="#ff5555">1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Persian</td>
+    <td bgcolor="#ffffff">Persian</td>
     <td>Ali Nadalizadeh</td>
     <td>nadalizadeh at gmail dot com</td>
-    <td>1.7.5</td>
+    <td bgcolor="#ffcccc">1.7.5</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Polish</td>
+    <td bgcolor="#ffffff">Polish</td>
     <td>Piotr Kaminski<br/>Grzegorz Kowal<br/>Krzysztof Kral</td>
     <td><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[unreachable]</span><br/>krzysztof dot kral at gmail dot com</td>
-    <td>1.8.2</td>
+    <td bgcolor="#ffffcc">1.8.2</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Portuguese</td>
+    <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>1.8.0</td>
+    <td bgcolor="#ffffcc">1.8.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Romanian</td>
+    <td bgcolor="#ffffff">Romanian</td>
     <td>Ionut Dumitrascu<br/>Alexandru Iosup</td>
     <td>reddumy at yahoo dot com<br/>aiosup at yahoo dot com</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ffffff">almost up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Russian</td>
-    <td>Alexandr Chelpanov</td>
-    <td>cav at cryptopro dot ru</td>
-    <td>1.7.5</td>
+    <td bgcolor="#ffffff">Russian</td>
+    <td>Brilliantov Kirill Vladimirovich<br/>Alexandr Chelpanov</td>
+    <td>brilliantov at byterg dot ru<br/>cav at cryptopro dot ru</td>
+    <td bgcolor="#ffffff">almost up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Serbian</td>
+    <td bgcolor="#ffffff">Serbian</td>
     <td>Dejan Milosavljevic</td>
     <td><span style="color: brown">[unreachable]</span></td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>SerbianCyrilic</td>
+    <td bgcolor="#ffffff">SerbianCyrillic</td>
     <td>Nedeljko Stefanovic</td>
     <td>stenedjo at yahoo dot com</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Slovak</td>
+    <td bgcolor="#ffffff">Slovak</td>
     <td>Kali+Laco Švec<br/>Petr Přikryl</td>
     <td><span style="color: brown">[the Slovak language advisors]</span><br/>prikryl at atlas dot cz</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Slovene</td>
+    <td bgcolor="#ff5555">Slovene</td>
     <td>Matjaž Ostroveršnik</td>
     <td>matjaz dot ostroversnik at ostri dot org</td>
-    <td>1.4.6</td>
+    <td bgcolor="#ff5555">1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Spanish</td>
+    <td bgcolor="#ffffff">Spanish</td>
     <td>Bartomeu<br/>Francisco Oltra Thennet<br/>David Vaquero</td>
     <td>bartomeu at loteria3cornella dot com<br/><span style="color: brown">[unreachable]</span><br/>david at grupoikusnet dot com</td>
-    <td>up-to-date</td>
+    <td bgcolor="#ccffcc">up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Swedish</td>
+    <td bgcolor="#ffffff">Swedish</td>
     <td>Mikael Hallin</td>
     <td>mikaelhallin at yahoo dot se</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Turkish</td>
+    <td bgcolor="#ffffff">Turkish</td>
     <td>Emin Ilker Cetinbas</td>
     <td>niw3 at yahoo dot com</td>
-    <td>1.7.5</td>
+    <td bgcolor="#ffcccc">1.7.5</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Ukrainian</td>
+    <td bgcolor="#ffffff">Ukrainian</td>
     <td>Olexij Tkatchenko<br/>Petro  Yermolenko</td>
     <td><span style="color: brown">[resigned]</span><br/>python at i dot ua</td>
-    <td>1.8.4</td>
+    <td bgcolor="#ffffcc">1.8.4</td>
   </tr>
   <tr bgcolor="#ffffff">
-    <td>Vietnamese</td>
+    <td bgcolor="#ffffff">Vietnamese</td>
     <td>Dang Minh Tuan</td>
     <td>tuanvietkey at gmail dot com</td>
-    <td>1.6.0</td>
+    <td bgcolor="#ffcccc">1.6.0</td>
   </tr>
   <!-- table content end -->
   </table>
@@ -335,7 +337,7 @@ when the translator was updated.
   ~ & Li Daobing & {\tt\tiny lidaobing at gmail dot com} & ~ \\
   ~ & Wei Liu & {\tt\tiny liuwei at asiainfo dot com} & ~ \\
   \hline
-  Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin dot tw at gmail dot com} & up-to-date \\
+  Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin dot tw at gmail dot com} & almost up-to-date \\
   ~ & Gary Lee & {\tt\tiny garywlee at gmail dot com} & ~ \\
   \hline
   Croatian & Boris Bralo & {\tt\tiny boris dot bralo at gmail dot com} & 1.8.2 \\
@@ -370,9 +372,10 @@ when the translator was updated.
   Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.8.2 \\
   ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\
   \hline
-  Japanese & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & 1.6.0 \\
+  Japanese & Suzumizaki-Kimikata & {\tt\tiny szmml at h12u.com} & up-to-date \\
+  ~ & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & ~ \\
   ~ & Ryunosuke Satoh & {\tt\tiny sun594 at hotmail dot com} & ~ \\
-  ~ & Kenji Nagamatsu & {\tt\tiny naga at joyful dot club dot ne dot jp} & ~ \\
+  ~ & Kenji Nagamatsu & {\tt\tiny [unreachable] naga at joyful dot club dot ne dot jp} & ~ \\
   ~ & Iwasa Kazmi & {\tt\tiny [unreachable] iwasa at cosmo-system dot jp} & ~ \\
   \hline
   JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
@@ -383,7 +386,7 @@ when the translator was updated.
   \hline
   KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
   \hline
-  Latvian & Lauris & {\tt\tiny lauris at nix.lv} & up-to-date \\
+  Latvian & Lauris & {\tt\tiny lauris at nix.lv} & 1.8.4 \\
   \hline
   Lithuanian & Tomas Simonaitis & {\tt\tiny [unreachable] haden at homelan dot lt} & 1.4.6 \\
   ~ & Mindaugas Radzius & {\tt\tiny [unreachable] mindaugasradzius at takas dot lt} & ~ \\
@@ -403,14 +406,15 @@ when the translator was updated.
   Portuguese & Rui Godinho Lopes & {\tt\tiny [resigned] rgl at ruilopes dot com} & 1.8.0 \\
   ~ & 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} & up-to-date \\
+  Romanian & Ionut Dumitrascu & {\tt\tiny reddumy at yahoo dot com} & almost up-to-date \\
   ~ & Alexandru Iosup & {\tt\tiny aiosup at yahoo dot com} & ~ \\
   \hline
-  Russian & Alexandr Chelpanov & {\tt\tiny cav at cryptopro dot ru} & 1.7.5 \\
+  Russian & Brilliantov Kirill Vladimirovich & {\tt\tiny brilliantov at byterg dot ru} & almost up-to-date \\
+  ~ & Alexandr Chelpanov & {\tt\tiny cav at cryptopro dot ru} & ~ \\
   \hline
   Serbian & Dejan Milosavljevic & {\tt\tiny [unreachable] dmilos at email dot com} & 1.6.0 \\
   \hline
-  SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\
+  SerbianCyrillic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\
   \hline
   Slovak & Kali+Laco Švec & {\tt\tiny [the Slovak language advisors]} & up-to-date \\
   ~ & Petr Přikryl & {\tt\tiny prikryl at atlas dot cz} & ~ \\
@@ -436,91 +440,99 @@ when the translator was updated.
 
 
 Most people on the list have indicated that they were also busy
-doing other things, so if you want to help to speed things up please 
+doing other things, so if you want to help to speed things up please
 let them (or me) know.
 
-If you want to add support for a language that is not yet listed 
+If you want to add support for a language that is not yet listed
 please read the next section.
 
 
 <h3>Adding a new language to doxygen</h3>
 
-This short HOWTO explains how to add support for the new language to Doxygen:
+This short HOWTO explains how to add support for the new language to doxygen:
 
-Just follow these steps:
+Just follow the following steps:
 <ol>
 <li>Tell me for which language you want to add support. If no one else
-    is already working on support for that language, you will be 
-    assigned as the maintainer for the language. 
-<li>Create a copy of translator_en.h and name it 
-    translator_\<your_2_letter_country_code\>.h
-    I'll use xx in the rest of this document.
-<li>Add definition of the symbol for your language in the configure 
-at two places in the script:
-  <ol>
-  <li>After the <code>f_langs=</code> is statement, in lower case.
-  <li>In the string that following <code>\@allowed=</code> in upper case.
-  </ol>
-The rerun the configure script such that is generates src/lang_cfg.h.
-This file should now contain a \#define for your language code.
-<li>Edit language.cpp:
-    Add a 
+    is already working on support for that language, you will be
+    assigned as the maintainer for the language.
+<li>Create a copy of `doxygen/src/translator_en.h` and name it
+    `doxygen/src/translator_<your_2_letter_country_code>.h`
+    I'll use `xx` in the rest of this document (and `XX` for the uppercase version).
+<li>Edit `doxygen/src/language.cpp`:
+    Add the following code:
 \verbatim
-#ifdef LANG_xx
+#ifdef LANG_XX
 #include<translator_xx.h>
 #endif
 \endverbatim
-    Remember to use the same symbol LANG_xx that you added to \c lang_cfg.h.
-    I.e., the \c xx should be capital letters that identify your language.
-    On the other hand, the \c xx inside your \c translator_xx.h should use
-    lower case.
+    Remember to use the same symbol `LANG_XX` that was added to `doxygen/src/lang_cfg.h`.
     <p>Now, in <code>setTranslator()</code> add
 \verbatim
-#ifdef LANG_xx
+#ifdef LANG_XX
     else if (L_EQUAL("your_language_name"))
     {
       theTranslator = new TranslatorYourLanguage;
     }
-#endif    
+#endif
 \endverbatim
     after the <code>if { ... }</code>. I.e., it must be placed after the code
-    for creating the English translator at the beginning, and before the 
-    <code>else { ... }</code> part that creates the translator for the 
+    for creating the English translator at the beginning, and before the
+    <code>else { ... }</code> part that creates the translator for the
     default language (English again).
-<li>Edit libdoxygen.pro.in and add \c translator_xx.h to 
-    the \c HEADERS line.
-<li>Edit <code>translator_xx.h</code>:
+<li>Edit <code>doxygen/src/translator_xx.h</code>:
    <ul>
-   <li>Rename <code>TRANSLATOR_EN_H</code> to <code>TRANSLATOR_XX_H</code> 
-       twice (i.e. in the \c \#ifndef and \c \#define preprocessor commands at 
+   <li>Use the UTF-8 capable editor and open the file using the UTF-8 mode.
+   <li>Rename <code>TRANSLATOR_EN_H</code> to <code>TRANSLATOR_XX_H</code>
+       twice (i.e. in the \c \#ifndef and \c \#define preprocessor commands at
        the beginning of the file).
-   <li>Rename TranslatorEnglish to TranslatorYourLanguage 
-   <li>In the member <code>idLanguage()</code> change "english" into the 
+   <li>Rename \c TranslatorEnglish to \c TranslatorYourLanguage
+   <li>In the member <code>idLanguage()</code> change "english" into the
      name of your language (use lower case characters only). Depending
-     on the language you may also wish to change the member functions 
-     latexLanguageSupportCommand(), idLanguageCharset() and others
-     (you will recognize them when you start the work).
-   <li>Edit all the strings that are returned by the member functions that 
-     start with tr. 
+     on the language you may also wish to change the member functions
+     `latexLanguageSupportCommand()` and other (you will recognize them when
+     you start the work).
+   <li>Edit all the strings that are returned by the member functions that
+     start with \c tr.
      Try to match punctuation and capitals!
      To enter special characters (with accents) you can:
      <ul>
-     <li>  Enter them directly if your keyboard supports that and you are 
-           using a Latin-1 font. Doxygen will translate the
-           characters to proper \f$\mbox{\LaTeX}\f$ and leave the
-           HTML and man output for what it is (which is fine, if
-           idLanguageCharset() is set correctly).
-     <li>  Use html codes like \&auml; for an a with an umlaut (i.e. &auml;).
+     <li>  Enter them directly if your keyboard supports that. Recall that
+           the text is expected to be saved using the UTF-8 encoding. Doxygen
+           will translate the characters to proper \f$\mbox{\LaTeX}\f$ and
+           leaves the HTML and man output in UTF-8.
+     <li>  Use HTML codes like \c \&auml; for an \c a with an \c umlaut (i.e. \c &auml;).
            See the HTML specification for the codes.
      </ul>
    </ul>
-<li>Run configure and make again from the root of the distribution, 
-    in order to regenerated the Makefiles.
-<li>Now you can use <code>OUTPUT_LANGUAGE = your_language_name</code> 
+<li>
+    <ul>
+      <li>On *nix systems:<br>
+    <ul>
+        <li>Rerun the `configure` script from the root (i.e. in the \c doxygen  directory) so
+        that it generates `doxygen/src/lang_cfg.h`.
+        This file should now contain a  \c \#define for your language code.<br>
+        <li>Run \c make again from the root (i.e. in the \c doxygen
+        directory) of the distribution, in order to regenerate the `Makefile`s.
+    </ul>
+      <li> On Windows:<br>
+    <ul>
+       <li>stop Visual Stdio<br>
+       <li>open a command window<br>
+       <li>goto the directory `doxygen\src`<br>
+       <li>give the command `python languages.py > ..\winbuild\Languages.rules`<br>
+       <li>close the command window<br>
+       <li>start Visual Studio again<br>
+       <li>Your language should now be selectable in the `General` part of the `Settings` of the `Properties`
+       window of `lang_cfg.py`, by default Your language will be `on`. Rebuild `doxygen` (and `doxywizard`) now.
+    </ul>
+    </ul>
+<li>Now you can use <code>OUTPUT_LANGUAGE = your_language_name</code>
     in the config file to generate output in your language.
 <li>Send <code>translator_xx.h</code> to me so I can add it to doxygen.
     Send also your name and e-mail address to be included in the
-    \c maintainers.txt list.
+    \c maintainers.txt list. You can also clone the doxygen repository
+    at GitHub and make a Pull Request later.
 </ol>
 
 
@@ -536,7 +548,7 @@ until all language maintainers have translated the new sentences and
 sent the results would not be very practical. The following text
 describes the usage of translator adapters to solve the problem.
 
-<b>The role of Translator Adapters.</b> 
+<b>The role of Translator Adapters.</b>
 Whenever the \c Translator class interface changes in the new
 release, the new class \c TranslatorAdapter_x_y_z is added to the \c
 translator_adapter.h file (here x, y, and z are numbers that
@@ -552,7 +564,7 @@ TranslatorAdapter_x_y_z class may use the obsolete method to get the
 result which is as close as possible to the older result in the
 target language.  If it is not possible, the result (the default
 translation) is obtained using the English translator, which is (by
-definition) always up-to-date.  
+definition) always up-to-date.
 
 <b>For example,</b> when the new \c trFile() method with
 parameters (to determine the capitalization of the first letter and
@@ -582,7 +594,7 @@ of the translator adapter classes:
 
 The \c trFiles() is not present in the \c TranslatorEnglish class,
 because it was removed as obsolete.  However, it was used until now
-and its call was replaced by 
+and its call was replaced by
 
 \verbatim
     trFile(true, false)
@@ -596,7 +608,7 @@ from the abstract \c Translator class.  On the other hand, the old
 translator for a different language does not implement the new \c
 trFile() method.  Because of that it is derived from another base
 class -- \c TranslatorAdapter_x_y_z. The \c TranslatorAdapter_x_y_z
-class have to implement the new, required \c trFile() method.
+class has to implement the new, required \c trFile() method.
 However, the translator adapter would not be compiled if the \c
 trFiles() method was not implemented. This is the reason for
 implementing the old method in the translator adapter class (using
@@ -616,9 +628,9 @@ users.  Here the maintainer of the language translator should
 implement at least that one particular method.
 
 <b>What says the base class of a language translator?</b>
-If the language translator class inherits from any adapter class the
-maintenance is needed.  In such case, the language translator is not
-considered up-to-date.  On the other hand, if the language
+If the language translator class inherits from any adapter class then
+maintenance is needed.  In such case, the language translator is
+considered not up-to-date.  On the other hand, if the language
 translator derives directly from the abstract class \c Translator, the
 language translator is up-to-date.
 
@@ -637,7 +649,7 @@ TranslatorAdapterBase class that derives directly from the abstract
 \c Translator class.  It adds only the private English-translator
 member for easy implementation of the default translation inside the
 adapter classes, and it also enforces implementation of one method
-for noticing the user that the language translation is not up-to-date
+for notifying the user that the language translation is not up-to-date
 (because of that some sentences in the generated files may appear in
 English).
 
@@ -648,16 +660,16 @@ translator adapter classes.
 
 <b>To simplify the maintenance of the language translator classes</b>
 for the supported languages, the \c translator.py Python
-script was developed (located in \c doxygen/doc directory). 
+script was developed (located in \c doxygen/doc directory).
 It extracts the important information about obsolete and
-new methods from the source files for each of the languages.  
+new methods from the source files for each of the languages.
 The information is stored in the translator report ASCII file
-(\c translator_report.txt). 
+(\c translator_report.txt).
 
 \htmlonly If you compiled this documentation
 from sources and if you have also doxygen sources available the
 link <a href="../doc/translator_report.txt"
-><code>doxygen/doc/translator_report.txt</code></a> should be valid.\endhtmlonly 
+><code>doxygen/doc/translator_report.txt</code></a> should be valid.\endhtmlonly
 
 Looking at the base class of the language translator, the script
 guesses also the status of the translator -- see the last column of
@@ -668,7 +680,7 @@ Of course, you are not forced to use the results of the script.  You
 can find the same information by looking at the adapter class and
 its base classes.
 
-<b>How should I update my language translator?</b> Firstly, you
+<b>How should I update my language translator?</b> First, you
 should be the language maintainer, or you should let him/her know
 about the changes.  The following text was written for the language
 maintainers as the primary audience.
@@ -680,7 +692,7 @@ expected, you can always decide use some suitable translator adapter to
 finish the changes later and still make your translator working.
 
 <b>The most radical way of updating the language translator</b> is
-to make your translator class derive directly 
+to make your translator class derive directly
 from the abstract class \c Translator and provide translations for the
 methods that are required to be implemented -- the compiler will
 tell you if you forgot to implement some of them.  If you are in
@@ -693,14 +705,16 @@ because the adapter classes do implement also the obsolete methods
 In other words, the up-to-date language translators do not need the
 \c TranslatorAdapter_x_y_z classes at all, and you do not need to
 implement anything else than the methods required by the Translator
-class (i.e. the pure virtual methods of the \c Translator -- they 
+class (i.e. the pure virtual methods of the \c Translator -- they
 end with <code>=0;</code>).
 
 If everything compiles fine, try to run \c translator.py, and have a
 look at the translator report (ASCII file) at the \c doxygen/doc
-directory. Even if your translator is marked as up-to-date, there
-still may be some remarks related to your source code. Namely, the
-obsolete methods--that are not used at all--may be listed in the
+directory. Your translator is marked as up-to-date only if the script
+does not detect anything special. If the translator uses the \c Translator
+base class, there still may be some remarks related to your source code.
+In the case, the translator is marked as <em>almost up-to-date</em>.
+Namely, the obsolete methods--that are not used at all--may be listed in the
 section for your language. Simply, remove their code (and run the \c
 translator.py again). Also, you will be informed when you forgot to
 change the base class of your translator class to some newer adapter
@@ -720,7 +734,7 @@ comment that uses the same version numbers as your translator adapter
 class. (For example, your translator class have to use the \c
 TranslatorAdapter_1_2_4, if it does not implement the methods below
 the comment <code>new since 1.2.4</code>. When you implement them,
-your class should use newer translator adapter.
+your class should use newer translator adapter.
 
 Run the \c translator.py script occasionally and give it your \c xx
 identification (from \c translator_xx.h) to create the translator
@@ -728,8 +742,8 @@ report shorter (also produced faster) -- it will contain only the
 information related to your translator. Once you reach the state when
 the base class should be changed to some newer adapter, you will see
 the note in the translator report.
-Warning: Don't forget to compile Doxygen to discover, whether it is
+
+Warning: Don't forget to compile doxygen to discover, whether it is
 compilable. The \c translator.py does not check if everything is
 correct with respect to the compiler. Because of that, it may lie
 sometimes about the necessary base class.
@@ -742,8 +756,8 @@ TranslatorEnglish class, which is by definition always up-to-date.
 When doing so, all the missing methods will be replaced by the
 English translation.  This means that not-implemented methods will
 always return the English result.  Such translators are marked using
-word \c obsolete.  You should read it <b>really obsolete</b>. No
-guess about the last update can be done.  
+the word \c obsolete.  You should read it <b>really obsolete</b>. No
+guess about the last update can be done.
 
 Often, it is possible to construct better result from the obsolete
 methods.  Because of that, the translator adapter classes should be
index 80b81da..25c498f 100644 (file)
@@ -3,17 +3,17 @@ ATTENTION! This is the template for generating language.doc. If you want to
 change the language.doc, make the changes here and inside maintainers.txt.
 
 /******************************************************************************
- * %(editnote)s 
+ * %(editnote)s
  *
  * 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 
- * 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.
  *
- * Documents produced by Doxygen are derivative works derived from the
+ * Documents produced by doxygen are derivative works derived from the
  * input used in their production; they are not affected by this license.
  *
  */
@@ -24,9 +24,10 @@ change the language.doc, make the changes here and inside maintainers.txt.
 Doxygen has built-in support for multiple languages. This means that the
 text fragments, generated by doxygen, can be produced in languages other
 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 %(doxVersion)s), %(numLangStr)s languages 
+Currently (version %(doxVersion)s), %(numLangStr)s languages
 are supported (sorted alphabetically):
 %(supportedLangReadableStr)s.
 
@@ -38,91 +39,99 @@ when the translator was updated.
 %(informationTable)s
 
 Most people on the list have indicated that they were also busy
-doing other things, so if you want to help to speed things up please 
+doing other things, so if you want to help to speed things up please
 let them (or me) know.
 
-If you want to add support for a language that is not yet listed 
+If you want to add support for a language that is not yet listed
 please read the next section.
 
 
 <h3>Adding a new language to doxygen</h3>
 
-This short HOWTO explains how to add support for the new language to Doxygen:
+This short HOWTO explains how to add support for the new language to doxygen:
 
-Just follow these steps:
+Just follow the following steps:
 <ol>
 <li>Tell me for which language you want to add support. If no one else
-    is already working on support for that language, you will be 
-    assigned as the maintainer for the language. 
-<li>Create a copy of translator_en.h and name it 
-    translator_\<your_2_letter_country_code\>.h
-    I'll use xx in the rest of this document.
-<li>Add definition of the symbol for your language in the configure 
-at two places in the script:
-  <ol>
-  <li>After the <code>f_langs=</code> is statement, in lower case.
-  <li>In the string that following <code>\@allowed=</code> in upper case.
-  </ol>
-The rerun the configure script such that is generates src/lang_cfg.h.
-This file should now contain a \#define for your language code.
-<li>Edit language.cpp:
-    Add a 
+    is already working on support for that language, you will be
+    assigned as the maintainer for the language.
+<li>Create a copy of `doxygen/src/translator_en.h` and name it
+    `doxygen/src/translator_<your_2_letter_country_code>.h`
+    I'll use `xx` in the rest of this document (and `XX` for the uppercase version).
+<li>Edit `doxygen/src/language.cpp`:
+    Add the following code:
 \verbatim
-#ifdef LANG_xx
+#ifdef LANG_XX
 #include<translator_xx.h>
 #endif
 \endverbatim
-    Remember to use the same symbol LANG_xx that you added to \c lang_cfg.h.
-    I.e., the \c xx should be capital letters that identify your language.
-    On the other hand, the \c xx inside your \c translator_xx.h should use
-    lower case.
+    Remember to use the same symbol `LANG_XX` that was added to `doxygen/src/lang_cfg.h`.
     <p>Now, in <code>setTranslator()</code> add
 \verbatim
-#ifdef LANG_xx
+#ifdef LANG_XX
     else if (L_EQUAL("your_language_name"))
     {
       theTranslator = new TranslatorYourLanguage;
     }
-#endif    
+#endif
 \endverbatim
     after the <code>if { ... }</code>. I.e., it must be placed after the code
-    for creating the English translator at the beginning, and before the 
-    <code>else { ... }</code> part that creates the translator for the 
+    for creating the English translator at the beginning, and before the
+    <code>else { ... }</code> part that creates the translator for the
     default language (English again).
-<li>Edit libdoxygen.pro.in and add \c translator_xx.h to 
-    the \c HEADERS line.
-<li>Edit <code>translator_xx.h</code>:
+<li>Edit <code>doxygen/src/translator_xx.h</code>:
    <ul>
-   <li>Rename <code>TRANSLATOR_EN_H</code> to <code>TRANSLATOR_XX_H</code> 
-       twice (i.e. in the \c \#ifndef and \c \#define preprocessor commands at 
+   <li>Use the UTF-8 capable editor and open the file using the UTF-8 mode.
+   <li>Rename <code>TRANSLATOR_EN_H</code> to <code>TRANSLATOR_XX_H</code>
+       twice (i.e. in the \c \#ifndef and \c \#define preprocessor commands at
        the beginning of the file).
-   <li>Rename TranslatorEnglish to TranslatorYourLanguage 
-   <li>In the member <code>idLanguage()</code> change "english" into the 
+   <li>Rename \c TranslatorEnglish to \c TranslatorYourLanguage
+   <li>In the member <code>idLanguage()</code> change "english" into the
      name of your language (use lower case characters only). Depending
-     on the language you may also wish to change the member functions 
-     latexLanguageSupportCommand(), idLanguageCharset() and others
-     (you will recognize them when you start the work).
-   <li>Edit all the strings that are returned by the member functions that 
-     start with tr. 
+     on the language you may also wish to change the member functions
+     `latexLanguageSupportCommand()` and other (you will recognize them when
+     you start the work).
+   <li>Edit all the strings that are returned by the member functions that
+     start with \c tr.
      Try to match punctuation and capitals!
      To enter special characters (with accents) you can:
      <ul>
-     <li>  Enter them directly if your keyboard supports that and you are 
-           using a Latin-1 font. Doxygen will translate the
-           characters to proper \f$\mbox{\LaTeX}\f$ and leave the
-           HTML and man output for what it is (which is fine, if
-           idLanguageCharset() is set correctly).
-     <li>  Use html codes like \&auml; for an a with an umlaut (i.e. &auml;).
+     <li>  Enter them directly if your keyboard supports that. Recall that
+           the text is expected to be saved using the UTF-8 encoding. Doxygen
+           will translate the characters to proper \f$\mbox{\LaTeX}\f$ and
+           leaves the HTML and man output in UTF-8.
+     <li>  Use HTML codes like \c \&auml; for an \c a with an \c umlaut (i.e. \c &auml;).
            See the HTML specification for the codes.
      </ul>
    </ul>
-<li>Run configure and make again from the root of the distribution, 
-    in order to regenerated the Makefiles.
-<li>Now you can use <code>OUTPUT_LANGUAGE = your_language_name</code> 
+<li>
+    <ul>
+      <li>On *nix systems:<br>
+    <ul>
+        <li>Rerun the `configure` script from the root (i.e. in the \c doxygen  directory) so
+        that it generates `doxygen/src/lang_cfg.h`.
+        This file should now contain a  \c \#define for your language code.<br>
+        <li>Run \c make again from the root (i.e. in the \c doxygen
+        directory) of the distribution, in order to regenerate the `Makefile`s.
+    </ul>
+      <li> On Windows:<br>
+    <ul>
+       <li>stop Visual Stdio<br>
+       <li>open a command window<br>
+       <li>goto the directory `doxygen\src`<br>
+       <li>give the command `python languages.py > ..\winbuild\Languages.rules`<br>
+       <li>close the command window<br>
+       <li>start Visual Studio again<br>
+       <li>Your language should now be selectable in the `General` part of the `Settings` of the `Properties`
+       window of `lang_cfg.py`, by default Your language will be `on`. Rebuild `doxygen` (and `doxywizard`) now.
+    </ul>
+    </ul>
+<li>Now you can use <code>OUTPUT_LANGUAGE = your_language_name</code>
     in the config file to generate output in your language.
 <li>Send <code>translator_xx.h</code> to me so I can add it to doxygen.
     Send also your name and e-mail address to be included in the
-    \c maintainers.txt list.
+    \c maintainers.txt list. You can also clone the doxygen repository
+    at GitHub and make a Pull Request later.
 </ol>
 
 
@@ -138,7 +147,7 @@ until all language maintainers have translated the new sentences and
 sent the results would not be very practical. The following text
 describes the usage of translator adapters to solve the problem.
 
-<b>The role of Translator Adapters.</b> 
+<b>The role of Translator Adapters.</b>
 Whenever the \c Translator class interface changes in the new
 release, the new class \c TranslatorAdapter_x_y_z is added to the \c
 translator_adapter.h file (here x, y, and z are numbers that
@@ -154,7 +163,7 @@ TranslatorAdapter_x_y_z class may use the obsolete method to get the
 result which is as close as possible to the older result in the
 target language.  If it is not possible, the result (the default
 translation) is obtained using the English translator, which is (by
-definition) always up-to-date.  
+definition) always up-to-date.
 
 <b>For example,</b> when the new \c trFile() method with
 parameters (to determine the capitalization of the first letter and
@@ -184,7 +193,7 @@ of the translator adapter classes:
 
 The \c trFiles() is not present in the \c TranslatorEnglish class,
 because it was removed as obsolete.  However, it was used until now
-and its call was replaced by 
+and its call was replaced by
 
 \verbatim
     trFile(true, false)
@@ -198,7 +207,7 @@ from the abstract \c Translator class.  On the other hand, the old
 translator for a different language does not implement the new \c
 trFile() method.  Because of that it is derived from another base
 class -- \c TranslatorAdapter_x_y_z. The \c TranslatorAdapter_x_y_z
-class have to implement the new, required \c trFile() method.
+class has to implement the new, required \c trFile() method.
 However, the translator adapter would not be compiled if the \c
 trFiles() method was not implemented. This is the reason for
 implementing the old method in the translator adapter class (using
@@ -218,9 +227,9 @@ users.  Here the maintainer of the language translator should
 implement at least that one particular method.
 
 <b>What says the base class of a language translator?</b>
-If the language translator class inherits from any adapter class the
-maintenance is needed.  In such case, the language translator is not
-considered up-to-date.  On the other hand, if the language
+If the language translator class inherits from any adapter class then
+maintenance is needed.  In such case, the language translator is
+considered not up-to-date.  On the other hand, if the language
 translator derives directly from the abstract class \c Translator, the
 language translator is up-to-date.
 
@@ -239,7 +248,7 @@ TranslatorAdapterBase class that derives directly from the abstract
 \c Translator class.  It adds only the private English-translator
 member for easy implementation of the default translation inside the
 adapter classes, and it also enforces implementation of one method
-for noticing the user that the language translation is not up-to-date
+for notifying the user that the language translation is not up-to-date
 (because of that some sentences in the generated files may appear in
 English).
 
@@ -250,15 +259,15 @@ translator adapter classes.
 
 <b>To simplify the maintenance of the language translator classes</b>
 for the supported languages, the \c translator.py Python
-script was developed (located in \c doxygen/doc directory). 
+script was developed (located in \c doxygen/doc directory).
 It extracts the important information about obsolete and
-new methods from the source files for each of the languages.  
+new methods from the source files for each of the languages.
 The information is stored in the translator report ASCII file
-(\c %(translatorReportFileName)s). 
+(\c %(translatorReportFileName)s).
 
 \htmlonly If you compiled this documentation
 from sources and if you have also doxygen sources available the
-link %(translatorReportLink)s should be valid.\endhtmlonly 
+link %(translatorReportLink)s should be valid.\endhtmlonly
 
 Looking at the base class of the language translator, the script
 guesses also the status of the translator -- see the last column of
@@ -269,7 +278,7 @@ Of course, you are not forced to use the results of the script.  You
 can find the same information by looking at the adapter class and
 its base classes.
 
-<b>How should I update my language translator?</b> Firstly, you
+<b>How should I update my language translator?</b> First, you
 should be the language maintainer, or you should let him/her know
 about the changes.  The following text was written for the language
 maintainers as the primary audience.
@@ -281,7 +290,7 @@ expected, you can always decide use some suitable translator adapter to
 finish the changes later and still make your translator working.
 
 <b>The most radical way of updating the language translator</b> is
-to make your translator class derive directly 
+to make your translator class derive directly
 from the abstract class \c Translator and provide translations for the
 methods that are required to be implemented -- the compiler will
 tell you if you forgot to implement some of them.  If you are in
@@ -294,14 +303,16 @@ because the adapter classes do implement also the obsolete methods
 In other words, the up-to-date language translators do not need the
 \c TranslatorAdapter_x_y_z classes at all, and you do not need to
 implement anything else than the methods required by the Translator
-class (i.e. the pure virtual methods of the \c Translator -- they 
+class (i.e. the pure virtual methods of the \c Translator -- they
 end with <code>=0;</code>).
 
 If everything compiles fine, try to run \c translator.py, and have a
 look at the translator report (ASCII file) at the \c doxygen/doc
-directory. Even if your translator is marked as up-to-date, there
-still may be some remarks related to your source code. Namely, the
-obsolete methods--that are not used at all--may be listed in the
+directory. Your translator is marked as up-to-date only if the script
+does not detect anything special. If the translator uses the \c Translator
+base class, there still may be some remarks related to your source code.
+In the case, the translator is marked as <em>almost up-to-date</em>.
+Namely, the obsolete methods--that are not used at all--may be listed in the
 section for your language. Simply, remove their code (and run the \c
 translator.py again). Also, you will be informed when you forgot to
 change the base class of your translator class to some newer adapter
@@ -321,7 +332,7 @@ comment that uses the same version numbers as your translator adapter
 class. (For example, your translator class have to use the \c
 TranslatorAdapter_1_2_4, if it does not implement the methods below
 the comment <code>new since 1.2.4</code>. When you implement them,
-your class should use newer translator adapter.
+your class should use newer translator adapter.
 
 Run the \c translator.py script occasionally and give it your \c xx
 identification (from \c translator_xx.h) to create the translator
@@ -329,8 +340,8 @@ report shorter (also produced faster) -- it will contain only the
 information related to your translator. Once you reach the state when
 the base class should be changed to some newer adapter, you will see
 the note in the translator report.
-Warning: Don't forget to compile Doxygen to discover, whether it is
+
+Warning: Don't forget to compile doxygen to discover, whether it is
 compilable. The \c translator.py does not check if everything is
 correct with respect to the compiler. Because of that, it may lie
 sometimes about the necessary base class.
@@ -343,8 +354,8 @@ TranslatorEnglish class, which is by definition always up-to-date.
 When doing so, all the missing methods will be replaced by the
 English translation.  This means that not-implemented methods will
 always return the English result.  Such translators are marked using
-word \c obsolete.  You should read it <b>really obsolete</b>. No
-guess about the last update can be done.  
+the word \c obsolete.  You should read it <b>really obsolete</b>. No
+guess about the last update can be done.
 
 Often, it is possible to construct better result from the obsolete
 methods.  Because of that, the translator adapter classes should be
index e09218e..1c76647 100644 (file)
@@ -85,9 +85,10 @@ Alessandro Falappa: alessandro at falappa dot net
 Ahmed Aldo Faisal: aaf23 at cam dot ac dot uk
 
 TranslatorJapanese
+Suzumizaki-Kimikata: szmml at h12u.com
 Hiroki Iseri: goyoki at gmail dot com
 Ryunosuke Satoh: sun594 at hotmail dot com
-Kenji Nagamatsu: naga at joyful dot club dot ne dot jp
+Kenji Nagamatsu: [unreachable] naga at joyful dot club dot ne dot jp
 Iwasa Kazmi: [unreachable] iwasa at cosmo-system dot jp
 
 TranslatorKorean
@@ -127,12 +128,13 @@ Ionut Dumitrascu: reddumy at yahoo dot com
 Alexandru Iosup: aiosup at yahoo dot com
 
 TranslatorRussian
+Brilliantov Kirill Vladimirovich: brilliantov at byterg dot ru
 Alexandr Chelpanov: cav at cryptopro dot ru
 
 TranslatorSerbian
 Dejan Milosavljevic: [unreachable] dmilos at email dot com
 
-TranslatorSerbianCyrilic
+TranslatorSerbianCyrillic
 Nedeljko Stefanovic: stenedjo at yahoo dot com
 
 TranslatorSlovak
index afd1add..90caebe 100644 (file)
@@ -445,6 +445,12 @@ when processed by doxygen:
 
     Documentation that will appear on the main page
 
+If a page has a label you can link to it using \ref cmdref "\@ref" as 
+is shown above. To refer to a markdown page without
+such label you can simple use the file name of the page, e.g.
+
+    See [the other page](other.md) for more info.
+
 \subsection md_html_blocks Treatment of HTML blocks
 
 Markdown is quite strict in the way it processes block-level HTML:
index 2abce71..2e2a200 100644 (file)
@@ -62,6 +62,8 @@
                was prefixed by backslash (was LaTeX related error).
   2013/02/19 - Better diagnostics when translator_xx.h is too crippled.
   2013/06/25 - TranslatorDecoder checks removed after removing the class.
+  2013/09/04 - Coloured status in langhowto. *ALMOST up-to-date* category
+               of translators introduced.
   """
 
 from __future__ import generators
@@ -1123,7 +1125,7 @@ class Transl:
             if not self.missingMethods:
                 self.note = 'Change the base class to Translator.'
                 self.status = ''
-                self.readableStatus = 'up-to-date'
+                self.readableStatus = 'almost up-to-date'
             elif self.baseClassId != 'TranslatorEnglish':
                 # The translator uses some of the adapters.
                 # Look at the missing methods and check what adapter
@@ -1161,7 +1163,7 @@ class Transl:
            if self.note != '':
                self.note += '\n\t\t'
            if self.txtMAX_DOT_GRAPH_HEIGHT_flag:
-                self.note += 'The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()'
+               self.note += 'The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()'
 
         # If everything seems OK, but there are obsolete methods, set
         # the note to clean-up source. This note will be used only when
@@ -1169,6 +1171,11 @@ class Transl:
         if not self.note and self.status == '' and self.obsoleteMethods:
             self.note = 'Remove the obsolete methods (never used).'
 
+        # If there is at least some note but the status suggests it is
+        # otherwise up-to-date, mark is as ALMOST up-to-date.
+        if self.note and self.status == '':
+            self.readableStatus = 'almost up-to-date'
+
 
     def report(self, fout):
         """Returns the report part for the source as a multiline string.
@@ -1522,6 +1529,24 @@ class TrManager:
         return lst
 
 
+    def getBgcolorByReadableStatus(self, readableStatus):
+        if readableStatus == 'up-to-date':
+            color = '#ccffcc'    # green
+        elif readableStatus.startswith('almost'):
+            color = '#ffffff'    # white
+        elif readableStatus.startswith('English'):
+            color = '#ccffcc'    # green
+        elif readableStatus.startswith('1.8'):
+            color = '#ffffcc'    # yellow
+        elif readableStatus.startswith('1.7'):
+            color = '#ffcccc'    # pink
+        elif readableStatus.startswith('1.6'):
+            color = '#ffcccc'    # pink
+        else:
+            color = '#ff5555'    # red
+        return color
+
+
     def generateTranslatorReport(self):
         """Generates the translator report."""
 
@@ -1558,13 +1583,12 @@ class TrManager:
         # in the translator report.
         fmail = open('mailto.txt', 'w')
 
-        # Write the list of up-to-date translator classes.
+        # Write the list of "up-to-date" translator classes.
         if self.upToDateIdLst:
             s = '''The following translator classes are up-to-date (sorted
                 alphabetically). This means that they derive from the
-                Translator class and they implement all %d of the required
-                methods. Anyway, there still may be some details listed even
-                for them:'''
+                Translator class, they implement all %d of the required
+                methods, and even minor problems were not spotted by the script:'''
             s = s % len(self.requiredMethodsDic)
             f.write('-' * 70 + '\n')
             f.write(fill(s) + '\n\n')
@@ -1572,19 +1596,35 @@ class TrManager:
             mailtoLst = []
             for x in self.upToDateIdLst:
                 obj = self.__translDic[x]
-                f.write('  ' + obj.classId)
-                if obj.note:
-                    f.write(' -- ' + obj.note)
-                f.write('\n')
-                mailtoLst.extend(self.__emails(obj.classId))
+                if obj.note is None:
+                    f.write('  ' + obj.classId + '\n')
+                    mailtoLst.extend(self.__emails(obj.classId))
 
             fmail.write('up-to-date\n')
             fmail.write('; '.join(mailtoLst))
 
+
+            # Write separately the list of "ALMOST up-to-date" translator classes.
+            s = '''The following translator classes are ALMOST up-to-date (sorted
+                alphabetically). This means that they derive from the
+                Translator class, but there still may be some minor problems
+                listed for them:'''
+            f.write('\n' + ('-' * 70) + '\n')
+            f.write(fill(s) + '\n\n')
+            mailtoLst = []
+            for x in self.upToDateIdLst:
+                obj = self.__translDic[x]
+                if obj.note is not None:
+                    f.write('  ' + obj.classId + '\t-- ' + obj.note + '\n')
+                    mailtoLst.extend(self.__emails(obj.classId))
+
+            fmail.write('\n\nalmost up-to-date\n')
+            fmail.write('; '.join(mailtoLst))
+
         # Write the list of the adapter based classes. The very obsolete
         # translators that derive from TranslatorEnglish are included.
         if self.adaptIdLst:
-            s = '''The following translator classes need some maintenance
+            s = '''The following translator classes need maintenance
                 (the most obsolete at the end). The other info shows the
                 estimation of Doxygen version when the class was last
                 updated and number of methods that must be implemented to
@@ -1789,7 +1829,7 @@ class TrManager:
         # document template.
         tplDic = {}
 
-        s = u'Do not edit this file. It was generated by the %s script.' % self.script_name
+        s = u'Do not edit this file. It was generated by the %s script.\n * Instead edit %s and %s' % (self.script_name, self.languageTplFileName, self.maintainersFileName)
         tplDic['editnote'] = s
 
         tplDic['doxVersion'] = self.doxVersion
@@ -1828,14 +1868,22 @@ class TrManager:
         htmlTableTpl = dedent(htmlTableTpl)
         htmlTrTpl = u'\n  <tr bgcolor="#ffffff">%s\n  </tr>'
         htmlTdTpl = u'\n    <td>%s</td>'
+        htmlTdStatusColorTpl = u'\n    <td bgcolor="%s">%s</td>'
 
         # Loop through transl objects in the order of sorted readable names
         # and add generate the content of the HTML table.
         trlst = []
         for name, obj in self.langLst:
             # Fill the table data elements for one row. The first element
-            # contains the readable name of the language.
-            lst = [ htmlTdTpl % obj.langReadable ]
+            # contains the readable name of the language. Only the oldest
+            # translator are colour marked in the language columnt. Less
+            # "heavy" color is used (when compared with the Status column).
+            if obj.readableStatus.startswith('1.4'):
+                bkcolor = self.getBgcolorByReadableStatus('1.4')
+            else:
+                bkcolor = '#ffffff'
+
+            lst = [ htmlTdStatusColorTpl % (bkcolor, obj.langReadable) ]
 
             # The next two elements contain the list of maintainers
             # and the list of their mangled e-mails. For English-based
@@ -1882,7 +1930,8 @@ class TrManager:
             lst.append(htmlTdTpl % ee)
 
             # The last element contains the readable form of the status.
-            lst.append(htmlTdTpl % obj.readableStatus)
+            bgcolor = self.getBgcolorByReadableStatus(obj.readableStatus)
+            lst.append(htmlTdStatusColorTpl % (bgcolor, obj.readableStatus))
 
             # Join the table data to one table row.
             trlst.append(htmlTrTpl % (''.join(lst)))
index 3a89922..c71e63d 100644 (file)
     read \ref unix_problems "this section" first.
 <li>Doxygen is <em>not</em> a real compiler, it is only a lexical scanner.
     This means that it can and will not detect errors in your source code.
+<li>Doxygen has a build in preprocessor, but this works slightly different than
+    the C preprocessor. Doxygen assumes a header file is properly guarded against
+    multiple inclusion, and that each include file is standalone (i.e. it could be placed
+    at the top of a source file without causing compiler errors). As long as this is
+    true (and this is a good design practice) you should not encounter problems.
 <li>Since it is impossible to test all possible code fragments, it is
     very well possible, that some valid piece of C/C++ code is not handled
     properly. If you find such a piece, please send it to me, so I can
index 33b4cb3..b9c9f20 100644 (file)
@@ -1,3 +1,4 @@
+DOXYGEN_BIN="$(DOXYGEN)/bin/doxygen"
 
 all: class/html/index.html \
      define/html/index.html \
@@ -26,7 +27,7 @@ all: class/html/index.html \
      pyexample/html/index.html \
      tclexample/html/index.html \
      mux/html/index.html \
-     manual/html/index.html 
+     manual/html/index.html
 
 # Disabled since it is broken :-(
 #     dbusxml/html/index.html
@@ -38,91 +39,91 @@ clean:
                memgrp docstring pyexample mux manual dbusxml tclexample
 
 class/html/index.html: class.h class.cfg
-       "$(DOXYGEN)/bin/doxygen" class.cfg
+       $(DOXYGEN_BIN) class.cfg
 
 define/html/index.html: define.h define.cfg
-       "$(DOXYGEN)/bin/doxygen" define.cfg
+       $(DOXYGEN_BIN) define.cfg
 
 enum/html/index.html: enum.h enum.cfg
-       "$(DOXYGEN)/bin/doxygen" enum.cfg
+       $(DOXYGEN_BIN) enum.cfg
 
 file/html/index.html: file.h file.cfg
-       "$(DOXYGEN)/bin/doxygen" file.cfg
+       $(DOXYGEN_BIN) file.cfg
 
 func/html/index.html: func.h func.cfg
-       "$(DOXYGEN)/bin/doxygen" func.cfg
+       $(DOXYGEN_BIN) func.cfg
 
 page/html/index.html: page.doc page.cfg
-       "$(DOXYGEN)/bin/doxygen" page.cfg
+       $(DOXYGEN_BIN) page.cfg
 
 relates/html/index.html: relates.cpp relates.cfg
-       "$(DOXYGEN)/bin/doxygen" relates.cfg
+       $(DOXYGEN_BIN) relates.cfg
 
 author/html/index.html: author.cpp author.cfg
-       "$(DOXYGEN)/bin/doxygen" author.cfg
+       $(DOXYGEN_BIN) author.cfg
 
 par/html/index.html: par.cpp par.cfg
-       "$(DOXYGEN)/bin/doxygen" par.cfg
+       $(DOXYGEN_BIN) par.cfg
 
 overload/html/index.html: overload.cpp overload.cfg
-       "$(DOXYGEN)/bin/doxygen" overload.cfg
+       $(DOXYGEN_BIN) overload.cfg
 
-example/html/index.html: example.cpp example_test.cpp example.cfg 
-       "$(DOXYGEN)/bin/doxygen" example.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/doxygen" include.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/doxygen" qtstyle.cfg
+qtstyle/html/index.html: qtstyle.cpp qtstyle.cfg
+       $(DOXYGEN_BIN) qtstyle.cfg
 
-jdstyle/html/index.html: jdstyle.cpp jdstyle.cfg 
-       "$(DOXYGEN)/bin/doxygen" jdstyle.cfg
+jdstyle/html/index.html: jdstyle.cpp jdstyle.cfg
+       $(DOXYGEN_BIN) jdstyle.cfg
 
-structcmd/html/index.html: structcmd.h structcmd.cfg 
-       "$(DOXYGEN)/bin/doxygen" structcmd.cfg
+structcmd/html/index.html: structcmd.h structcmd.cfg
+       $(DOXYGEN_BIN) structcmd.cfg
 
-autolink/html/index.html: autolink.cpp autolink.cfg 
-       "$(DOXYGEN)/bin/doxygen" autolink.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/doxygen" tag.cfg
+       $(DOXYGEN_BIN) tag.cfg
 
-restypedef/html/index.html: restypedef.cpp restypedef.cfg 
-       "$(DOXYGEN)/bin/doxygen" restypedef.cfg
+restypedef/html/index.html: restypedef.cpp restypedef.cfg
+       $(DOXYGEN_BIN) restypedef.cfg
 
 afterdoc/html/index.html: afterdoc.h afterdoc.cfg
-       "$(DOXYGEN)/bin/doxygen" afterdoc.cfg
+       $(DOXYGEN_BIN) afterdoc.cfg
 
 template/html/index.html: templ.cpp templ.cfg
-       "$(DOXYGEN)/bin/doxygen" templ.cfg
+       $(DOXYGEN_BIN) templ.cfg
 
 group/html/index.html: group.cpp group.cfg
-       "$(DOXYGEN)/bin/doxygen" group.cfg
+       $(DOXYGEN_BIN) group.cfg
 
 memgrp/html/index.html: memgrp.cpp memgrp.cfg
-       "$(DOXYGEN)/bin/doxygen" memgrp.cfg
+       $(DOXYGEN_BIN) memgrp.cfg
 
 pyexample/html/index.html: pyexample.py pyexample.cfg
-       "$(DOXYGEN)/bin/doxygen" pyexample.cfg
+       $(DOXYGEN_BIN) pyexample.cfg
 
 tclexample/html/index.html: tclexample.tcl tclexample.cfg
-       "$(DOXYGEN)/bin/doxygen" tclexample.cfg
+       $(DOXYGEN_BIN) tclexample.cfg
 
 mux/html/index.html: mux.vhdl mux.cfg
-       "$(DOXYGEN)/bin/doxygen" mux.cfg
+       $(DOXYGEN_BIN) mux.cfg
 
 manual/html/index.html: manual.c manual.cfg
-       "$(DOXYGEN)/bin/doxygen" manual.cfg
+       $(DOXYGEN_BIN) manual.cfg
 
 docstring/html/index.html: docstring.py docstring.cfg
-       "$(DOXYGEN)/bin/doxygen" docstring.cfg
+       $(DOXYGEN_BIN) docstring.cfg
 
 #dbusxml/html/index.html: dbusxml.xml dbusxml.cfg
-#      $(DOXYGEN)/bin/doxygen 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/doxygen" diagrams.cfg
+       $(DOXYGEN_BIN) diagrams.cfg
 endif
 
index 1a6caab..08c03b8 100644 (file)
@@ -7,6 +7,8 @@ clean: Makefile.libmd5
 distclean: clean
        $(RM) -f Makefile.libmd5 libmd5.pro Makefile 
 
+realclean: distclean
+
 tmake:
        $(ENV) $(PERL) "$(TMAKE)" libmd5.pro >Makefile.libmd5
 
index 2888ef2..f78322a 100644 (file)
@@ -80,7 +80,7 @@ rm -rf $RPM_BUILD_ROOT
 %files
 %defattr(-,root,root)
 
-%doc README LICENSE LANGUAGE.HOWTO examples ./latex/*.pdf
+%doc README.md LICENSE LANGUAGE.HOWTO examples ./latex/*.pdf
 %doc /usr/man/man1/doxygen.1.gz
 
 %{_bindir}/doxygen
index 9b5af64..fee2bd5 100644 (file)
@@ -174,7 +174,7 @@ QHP_SECT_FILTER_ATTRS  =
 QHG_LOCATION           =
 GENERATE_ECLIPSEHELP   = YES
 ECLIPSE_DOC_ID         = org.doxygen.qtools
-DISABLE_INDEX          = YES
+DISABLE_INDEX          = NO
 GENERATE_TREEVIEW      = YES
 ENUM_VALUES_PER_LINE   = 4
 TREEVIEW_WIDTH         = 250
index ca66cc1..c8e1f5a 100644 (file)
@@ -27,4 +27,6 @@ clean: Makefile.qtools
 
 distclean: clean
 
+realclean: distclean
+
 FORCE:
index 9a97015..024b40c 100644 (file)
 #  if !defined(MAC_OS_X_VERSION_10_8)
 #       define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 10
 #  endif
-#  if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_8)
+#  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)
 #    warning "This version of Mac OS X is unsupported"
 #  endif
 #elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
index bb8bff4..9721c25 100644 (file)
@@ -1967,7 +1967,7 @@ public:
     int heuristicNameMatch(const char* hint) const;
 
 private:
-    int forwardIndex;
+    //int forwardIndex;
 };
 
 
index 0797b94..b44e42c 100644 (file)
@@ -117,7 +117,7 @@ private:
     QValueStack<QMap<QString, QString> > nsStack;
     QMap<QString, QString> ns;
 
-    QXmlNamespaceSupportPrivate *d;
+    //QXmlNamespaceSupportPrivate *d;
 };
 
 
@@ -150,7 +150,7 @@ private:
     QStringList localnameList;
     QStringList valueList;
 
-    QXmlAttributesPrivate *d;
+    //QXmlAttributesPrivate *d;
 
     friend class QXmlSimpleReader;
 };
@@ -175,7 +175,7 @@ private:
 
     QString input;
 
-    QXmlInputSourcePrivate *d;
+    //QXmlInputSourcePrivate *d;
 };
 
 //
@@ -202,7 +202,7 @@ private:
     QString pub;
     QString sys;
 
-    QXmlParseExceptionPrivate *d;
+    //QXmlParseExceptionPrivate *d;
 };
 
 
@@ -392,7 +392,7 @@ public:
 private:
     QXmlSimpleReader* reader;
 
-    QXmlLocatorPrivate *d;
+    //QXmlLocatorPrivate *d;
 };
 
 //
@@ -511,7 +511,7 @@ public:
     QString errorString();
 
 private:
-    QXmlDefaultHandlerPrivate *d;
+    //QXmlDefaultHandlerPrivate *d;
 };
 
 #ifdef _WS_QWS_
index 2e78088..7d1d0d9 100644 (file)
@@ -1,60 +1,61 @@
 
 #
-# 
+#
 #
 # 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 
-# 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.
-# 
+#
 # Documents produced by Doxygen are derivative works derived from the
 # input used in their production; they are not affected by this license.
-# 
+#
 
 all: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile
-       $(MAKE) -f Makefile.libdoxycfg PERL=$(PERL) $@
-       $(MAKE) -f Makefile.libdoxygen PERL=$(PERL) $@
-       $(MAKE) -f Makefile.doxygen    PERL=$(PERL) $@
+       $(MAKE) -f Makefile.libdoxycfg $@
+       $(MAKE) -f Makefile.libdoxygen $@
+       $(MAKE) -f Makefile.doxygen    $@
 
-Makefile.libdoxygen: libdoxygen.pro libdoxygen.t 
+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 
+Makefile.libdoxycfg: libdoxycfg.pro libdoxycfg.t
        $(ENV) $(PERL) "$(TMAKE)" libdoxycfg.pro >Makefile.libdoxycfg
 
-Makefile.doxygen: doxygen.pro 
+Makefile.doxygen: doxygen.pro
        $(ENV) $(PERL) "$(TMAKE)" doxygen.pro >Makefile.doxygen
 
-tmake: 
+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 
+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
-       -$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
-               ce_parse.cpp ce_parse.h tag.cpp commentscan.cpp \
+       -$(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 vhdlparser.h \
-              vhdlparser.cpp \
+              vhdlparser.cpp
 
 # clean also the generated files which are in SVN
 realclean: distclean
-       -$(RM) index_xsd.h compound_xsd.h layout_default.h \
-              header_html.h footer_html.h search_functions_php.h search_opensearch_php.h \
-              search_js.h search_css.h doxygen_css.h navtree_js.h navindex_js.h resize_js.h \
-              jquery_fx_js.h jquery_p1_js.h jquery_p2_js.h \
-              jquery_p3_js.h jquery_ui_js.h navtree_css.h svgpan_js.h dynsections_js.h \
-              doxygen_bst.h bib2xhtml.h configoptions.cpp
+       -$(RM) index.xsd.h compound.xsd.h layout_default.xml.h \
+              header.html.h footer.html.h search_functions.php.h search_opensearch.php.h \
+              search.js.h search.css.h doxygen.css.h navtree.js.h resize.js.h \
+              doxygen.sty.h jquery_fx.js.h jquery_p1.js.h jquery_p2.js.h \
+              jquery_p3.js.h jquery_ui.js.h navtree.css.h svgpan.js.h dynsections.js.h \
+              doxygen.bst.h bib2xhtml.pl.h configoptions.cpp jquery_pt.js.h extsearch.js.h
 
 FORCE:
diff --git a/src/bib2xhtml.h b/src/bib2xhtml.h
deleted file mode 100644 (file)
index 3615cee..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-"#\n"
-"# Below is a stripped down version of bib2xhtml used by doxygen.\n"
-"# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/\n"
-"#\n"
-"# Convert from bibtex to XHTML.\n"
-"#\n"
-"# (C) Copyright 1995, 1996 David Hull.\n"
-"# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)\n"
-"#\n"
-"# (C) Copyright 2002-2010 Diomidis Spinellis\n"
-"# http://www.spinellis.gr\n"
-"#\n"
-"# This program is free software.  You can redistribute it and/or modify\n"
-"# it under the terms of the GNU General Public License.  See the\n"
-"# files README and COPYING for details.\n"
-"#\n"
-"# This source code contains UTF-8 characters.  You might want to use\n"
-"# an appropriate editor, if you want to view/modify the LaTeX to Unicode\n"
-"# substitution commands.\n"
-"#\n"
-"\n"
-"use Getopt::Std;\n"
-"use open IO => ':crlf';\n"
-"$label_styles{'numbered'} =   $LABEL_NUMBERED =       2;\n"
-"$list_start[$LABEL_NUMBERED] = 'dl class=\"citelist\"';\n"
-"$list_end[$LABEL_NUMBERED] = \"/dl\";\n"
-"@tmpfiles = ();\n"
-"sub html_ent {\n"
-"      s/\\\\i\\b/i/g;\n"
-"      s/\\\\\\'(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2acute;/gs;\n"
-"      s/\\\\\\'([AEIOUaeiou])/&$1acute;/g;\n"
-"      s/\\\\\\`(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2grave;/gs;\n"
-"      s/\\\\\\`([AEIOUaeiou])/&$1grave;/g;\n"
-"      s/\\\\\\\"(\\001\\d+)\\{([AEIOUaeiouy])\\1\\}/&$2uml;/gs;\n"
-"      s/\\\\\\\"([AEIOUaeiouy])/&$1uml;/g;\n"
-"      s/\\\\\\~(\\001\\d+)\\{([ANOano])\\1\\}/&$2tilde;/gs;\n"
-"      s/\\\\\\~([ANOano])/&$1tilde;/g;\n"
-"      s/\\\\\\^(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2circ;/gs;\n"
-"      s/\\\\\\^([AEIOUaeiou])/&$1circ;/g;\n"
-"      s/\\\\c(\\001\\d+)\\{([Cc])\\1\\}/&$2cedil;/gs;\n"
-"      s/\\\\u(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-"      s/\\\\v(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-"      s/\\\\([lL])\\b/$1/g;\n"
-"      s/\\\\\\=(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-"      s/\\\\\\=(.)/$1/g;\n"
-"      s/\\\\\\.(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-"      s/\\\\\\.(.)/$1/g;\n"
-"      s/\\\\([Oo])\\b\\s*/&$1slash;/g;\n"
-"      s/\\\\AA\\b\\s*/&Aring;/g;\n"
-"      s/\\\\aa\\b\\s*/&aring;/g;\n"
-"      s/\\\\AE\\b\\s*/&AElig;/g;\n"
-"      s/\\\\ae\\b\\s*/&aelig;/g;\n"
-"      s/\\\\ss\\b\\s*/&szlig;/g;\n"
-"      s/\\\\S\\b\\s*/&sect;/g;\n"
-"      s/\\\\P\\b\\s*/&para;/g;\n"
-"      s/\\\\pounds\\b\\s*/&pound;/g;\n"
-"      s/\\?\\`/&iquest;/g;\n"
-"      s/\\!\\`/&iexcl;/g;\n"
-"      s/\\-\\-\\-/&mdash;/g;\n"
-"      s/([^\\!])\\-\\-([^\\>])/$1&ndash;$2/g;\n"
-"      s/\\\\([aA]lpha)\\b/&$1;/g;\n"
-"      s/\\\\([bB]eta)\\b/&$1;/g;\n"
-"      s/\\\\([gG]amma)\\b/&$1;/g;\n"
-"      s/\\\\([dD]elta)\\b/&$1;/g;\n"
-"      s/\\\\varepsilon\\b/&epsilon;/g;\n"
-"      s/\\\\([eE]psilon)\\b/&$1;/g;\n"
-"      s/\\\\([zZ]eta)\\b/&$1;/g;\n"
-"      s/\\\\([eE]ta)\\b/&$1;/g;\n"
-"      s/\\\\([tT]heta)\\b/&$1;/g;\n"
-"      s/\\\\vartheta\\b/&theta;/g;\n"
-"      s/\\\\([iI]ota)\\b/&$1;/g;\n"
-"      s/\\\\([kK]appa)\\b/&$1;/g;\n"
-"      s/\\\\([lL]ambda)\\b/&$1;/g;\n"
-"      s/\\\\([mM]u)\\b/&$1;/g;\n"
-"      s/\\\\([nN]u)\\b/&$1;/g;\n"
-"      s/\\\\([xX]i)\\b/&$1;/g;\n"
-"      s/\\\\([oO]micron)\\b/&$1;/g;\n"
-"      s/\\\\([pP]i)\\b/&$1;/g;\n"
-"      s/\\\\varpi\\b/&pi;/g;\n"
-"      s/\\\\([rR]ho)\\b/&$1;/g;\n"
-"      s/\\\\varrho\\b/&rho;/g;\n"
-"      s/\\\\([sS]igma)\\b/&$1;/g;\n"
-"      s/\\\\varsigma\\b/&sigmaf;/g;\n"
-"      s/\\\\([tT]au)\\b/&$1;/g;\n"
-"      s/\\\\([uU]psilon)\\b/&$1;/g;\n"
-"      s/\\\\([pP]hi)\\b/&$1;/g;\n"
-"      s/\\\\varphi\\b/&phi;/g;\n"
-"      s/\\\\([cC]hi)\\b/&$1;/g;\n"
-"      s/\\\\([pP]si)\\b/&$1;/g;\n"
-"      s/\\\\([oO]mega)\\b/&$1;/g;\n"
-"      s/\\\\S\\b/&sect;/g;\n"
-"      s/^\\\\circ\\b/&deg;/g;\n"
-"      s/\\\\infty\\b/&infin;/g;\n"
-"      s/\\\\emptyset\\b/&empty;/g;\n"
-"      s/\\\\pm\\b/&plusmn;/g;\n"
-"      s/\\\\times\\b/&times;/g;\n"
-"      s/\\\\cdot\\b/&sdot;/g;\n"
-"      s/\\\\partial\\b/&part;/g;\n"
-"      s/\\\\nabla\\b/&nabla;/g;\n"
-"      s/\\\\surd\\b/&radic;/g;\n"
-"      s/\\\\perp\\b/&perp;/g;\n"
-"      s/\\\\sum\\b/&sum;/g;\n"
-"      s/\\\\int\\b/&int;/g;\n"
-"      s/\\\\prod\\b/&prod;/g;\n"
-"      s/\\\\sim\\b/&sim;/g;\n"
-"      s/\\\\approx\\b/&asymp;/g;\n"
-"      s/\\\\ne\\b/&ne;/g;\n"
-"      s/\\\\equiv\\b/&equiv;/g;\n"
-"      s/\\\\propto\\b/&prop;/g;\n"
-"      s/\\\\le\\b/&le;/g;\n"
-"      s/\\\\ge\\b/&ge;/g;\n"
-"      s/\\\\leftarrow\\b/&larr;/g;\n"
-"      s/\\\\rightarrow\\b/&rarr;/g;\n"
-"      s/\\\\in\\b/&isin;/g;\n"
-"      s/\\\\notin\\b/&notin;/g;\n"
-"      s/\\\\lceil\\b/&lceil;/g;\n"
-"      s/\\\\rceil\\b/&rceil;/g;\n"
-"      s/\\\\lfloor\\b/&lfloor;/g;\n"
-"      s/\\\\rfloor\\b/&rfloor;/g;\n"
-"}\n"
-"foreach (@ARGV) {\n"
-"  if (/\\.bib$/) {\n"
-"    $bibfile = $_;\n"
-"    $bibfile =~ s/\\.bib$//;\n"
-"    push(@bibfiles,$bibfile);\n"
-"  } else {\n"
-"    $htmlfile = $_;\n"
-"  }\n"
-"}\n"
-"exit(1) unless defined($htmlfile);\n"
-"$bibdatacmd=\"\\\\bibdata{\".join(',',@bibfiles).\"}\";\n"
-"$label_style = $LABEL_NUMBERED;\n"
-"$bstfile = \"doxygen\";\n"
-"umask(077);\n"
-"open(HTMLFILE,\">$htmlfile$$\");\n"
-"if (open(OHTMLFILE, \"$htmlfile\")) {\n"
-"    $mode = (stat OHTMLFILE)[2] & 0xfff;\n"
-"} else {\n"
-"  print \"Error opening $htmlfile\\n\";\n"
-"  exit(1);\n"
-"}\n"
-"$beginstring = \"<!-- BEGIN CITATIONS -->\";\n"
-"$endstring = \"<!-- END CITATIONS -->\";\n"
-"@citations = ();\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-"  print HTMLFILE;\n"
-"  last loop if m/^$beginstring$/;\n"
-"}\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-"  print HTMLFILE;\n"
-"  last loop if m/^$endstring$/;\n"
-"  push(@citations, $2) if m/^([^\\\\]*)?(.+\\})(.*)?$/;\n"
-"}\n"
-"push(@citations, $bibdatacmd);\n"
-"$auxfile = \"bib$$\";\n"
-"push(@tmpfiles, \"$auxfile.aux\");\n"
-"open(AUXFILE, \">$auxfile\" . \".aux\");\n"
-"print AUXFILE \"\\\\relax\\n\\\\bibstyle{$bstfile}\\n\";\n"
-"foreach $citation (@citations) {\n"
-"  print AUXFILE \"$citation\\n\";\n"
-"}\n"
-"close(AUXFILE);\n"
-"push(@tmpfiles, \"$auxfile.blg\");\n"
-"push(@tmpfiles, \"$auxfile.bbl\");\n"
-"`bibtex $auxfile 2>&1`;\n"
-"if ($?==-1)\n"
-"{\n"
-"  print \"bibtex command failed: $!\\n\";\n"
-"}\n"
-"$beginstring = \"<!-- BEGIN BIBLIOGRAPHY -->\";\n"
-"$endstring = \"<!-- END BIBLIOGRAPHY -->\";\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-"  last loop if m/^$beginstring$/;\n"
-"  print HTMLFILE;\n"
-"}\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-"  last loop if m/^$endstring$/;\n"
-"}\n"
-"print HTMLFILE \"$beginstring\\n\";\n"
-"$t = $auxfile . \".bbl\";\n"
-"$/ = \"\";\n"
-"open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
-"$nentry = 0;\n"
-"loop:\n"
-"while (<BBLFILE>) {\n"
-"    if (($nentry == 0) && (m/^#/)) {\n"
-"      if ((m/#\\s*label-style:\\s*(\\S+)/) && (! defined $label_style)) {\n"
-"          $label_style = $label_styles{$1};\n"
-"          if (! defined $label_style) {\n"
-"              print STDERR \"label style unknown: \\n\";\n"
-"              next loop;\n"
-"          }\n"
-"      }\n"
-"      next loop;\n"
-"    }\n"
-"    $nentry++;\n"
-"    ($bcite, $blabel) = m+<dt><a name=\\\"([^\\\"]*)\\\">\\[([^\\]]*)\\]</a></dt><dd>+;\n"
-"    $blabel = \"$nentry\";\n"
-"    $bibcite{$bcite} = $blabel;\n"
-"}\n"
-"close(BBLFILE);\n"
-"$label_style = $LABEL_DEFAULT if (! defined $label_style);\n"
-"$list_start = $list_start[$label_style];\n"
-"$list_end = $list_end[$label_style];\n"
-"print HTMLFILE \"<$list_start>\\n\\n\";\n"
-"open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
-"$nentry = 0;\n"
-"loop:\n"
-"while (<BBLFILE>) {\n"
-"    next loop if (($nentry == 0) && (m/^#/));\n"
-"    $nentry++;\n"
-"    s/\\\\\\{/\\002/g;\n"
-"    s/\\\\\\}/\\003/g;\n"
-"    s/\\\\\\$/\\004/g;\n"
-"    {\n"
-"      local ($c, $l, $z) = (0, 0, ());\n"
-"      s/([\\{\\}])/join(\"\",\"\\001\",($1 eq \"\\{\" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;\n"
-"    }\n"
-"    s/\\%\\n//g;\n"
-"    s/(\\.(<\\/cite>|<\\/a>|\\')+)\\./$1/g;\n"
-"    s:(<dt><a name=\\\"[^\\\"]*\\\">\\[)[^\\]]*(\\]</a></dt><dd>):$1$nentry$2:;\n"
-"    while (m/(\\\\(cite(label)?)(\\001\\d+)\\{([^\\001]+)\\4\\})/) {\n"
-"      $old = $1;\n"
-"      $cmd = $2;\n"
-"      $doxref = defined($3);\n"
-"      $bcite = $5;\n"
-"      if (! defined $bibcite{$bcite}) {\n"
-"          $blabel = \" [\" . $bcite . \"]\";\n"
-"      } elsif ($doxref) {\n"
-"          $blabel = \" <a href=\\\"#$bcite\\\">[\" . $bibcite{$bcite} . \"]<\\/a>\";\n"
-"      } else {\n"
-"          $blabel = \" [\" . $bibcite{$bcite} . \"]\";\n"
-"      }\n"
-"      $old =~ s/(\\W)/\\\\$1/g;\n"
-"      s/\\s*$old/$blabel/g;\n"
-"    }\n"
-"    s/In (<a href=\\\"[^\\\"]*\\\">)([^\\[]+) \\[(\\2)/In $1\\[$2/;\n"
-"    s/\\\\htmladdnormallink(foot)?(\\001\\d+)\\{([^\\001]+)\\2\\}(\\001\\d+)\\{([^\\001]+)\\4\\}/<a href=\"$5\">$3<\\/a>/gs;\n"
-"    s/\\&amp;/\\005/g;\n"
-"    s/\\\\?&/&amp;/g;\n"
-"    s/\\005/&amp;/g;\n"
-"    html_ent();\n"
-"    while (m/\\\\char([\\'\\\"]?[0-9a-fA-F]+)/) {\n"
-"      $o = $r = $1;\n"
-"      if ($r =~ s/^\\'//) {\n"
-"          $r = oct($r);\n"
-"      } elsif ($r =~ s/^\\\"//) {\n"
-"          $r = hex($r);\n"
-"      }\n"
-"      s/\\\\char$o\\s*/&#$r;/g;\n"
-"    }\n"
-"    s/{\\\\etalchar\\001(\\d+)\\{(.)}\\001\\1\\}/$2/g;\n"
-"    s/\\\\par\\b/<p \\/>/g;\n"
-"    s/\\\\url(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
-"    s/\\\\href(\\001\\d+)\\{(.*)\\1\\}(\\001\\d+)\\{([^\\001]*)\\3\\}/<a href=\"$2\">$4<\\/a>/gs;\n"
-"    s/\\\\href(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
-"    s/(\\001\\d+)\\{\\\\rm\\s+(.*)\\1\\}/$2/gs;\n"
-"    s/\\\\textrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-"    s/(\\001\\d+)\\{\\\\em\\s+(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
-"    s/(\\001\\d+)\\{\\\\it\\s+(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-"    s/(\\001\\d+)\\{\\\\bf\\s+(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-"    s/(\\001\\d+)\\{\\\\tt\\s+(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-"    s/\\\\emph(\\001\\d+)\\{(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
-"    s/\\\\textit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-"    s/\\\\textbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-"    s/\\\\texttt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-"    s/\\\\mathrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-"    s/\\\\mathnormal(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-"    s/\\\\mathsf(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-"    s/\\\\mathbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-"    s/\\\\mathcal(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-"    s/\\\\mathit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-"    s/\\\\mathtt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-"    s/\\\\bibxhtmlname(\\001\\d+)\\{(.*)\\1\\}/$2/ges;\n"
-"    sub domath {\n"
-"      local($t) = @_;\n"
-"      $t =~ s/\\^(\\001\\d+)\\{\\\\circ\\1\\}/\\&\\#176;/gs;\n"
-"      $t =~ s/\\^\\\\circ/\\&\\#176;/g;\n"
-"      $t =~ s/\\^(\\001\\d+)\\{(.*)\\1\\}/<sup>$2<\\/sup>/gs;\n"
-"      $t =~ s/\\^(\\w)/<sup>$1<\\/sup>/g;\n"
-"      $t =~ s/\\_(\\001\\d+)\\{(.*)\\1\\}/<sub>$2<\\/sub>/gs;\n"
-"      $t =~ s/\\_(\\w)/<sub>$1<\\/sub>/g;\n"
-"      $t;\n"
-"    }\n"
-"    s/(\\$([^\\$]+)\\$)/&domath($2)/ge;\n"
-"    s/(\\\\\\((([^\\\\]|\\\\[^\\(\\)])+)\\\\\\))/&domath($2)/ge;\n"
-"    s/\\\\mbox(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-"    while (s/(\\<a href\\=\\\"[^\"]*?)\\~/$1\\005/g) { ; }\n"
-"    s/([^\\\\])~/$1&nbsp;/g;\n"
-"    s/\\\\\\,/&thinsp;/g;\n"
-"    s/\\\\ldots\\b/&hellip;/g;\n"
-"    s/\\\\dots\\b/&hellip;/g;\n"
-"    s/\\005/\\~/g;\n"
-"    s/\\\\ / /g;\n"
-"    s/\\\\textasciitilde\\b\\s*/~/g;\n"
-"    s/\\\\([\\#\\&\\%\\~\\_\\^\\|])/$1/g;\n"
-"    s/\\\\\\W//g;\n"
-"    s/\\001(\\d+)\\{\\\\[A-Za-z]+\\001(\\d+)\\{([^\\001]*)\\001\\2\\}\\001\\1\\}/$3/g;\n"
-"    s/\\\\([A-Za-z]+)/ $1 /g;\n"
-"    s+In <a href=\\\"[^\\\"]*\\\"></a>++;\n"
-"    s/\\001\\d+[\\{\\}]//gs;\n"
-"    tr/\\002\\003\\004/{}$/;\n"
-"    print HTMLFILE $_;\n"
-"}\n"
-"close(BBLFILE);\n"
-"print HTMLFILE \"<$list_end>\\n\\n$endstring\\n\";\n"
-"while (<OHTMLFILE>) {\n"
-"  print HTMLFILE;\n"
-"}\n"
-"close (OHTMLFILE);\n"
-"close(HTMLFILE);\n"
-"chmod($mode, \"$htmlfile$$\");\n"
-"rename(\"$htmlfile$$\", $htmlfile);\n"
-"unlink(@tmpfiles);\n"
-"exit(0);\n"
index 427b012..cfb89c4 100644 (file)
@@ -33,7 +33,7 @@ class BufStr
     BufStr(int size) 
       : m_size(size), m_writeOffset(0), m_spareRoom(10240), m_buf(0) 
     {
-      m_buf = (char *)malloc(size);
+      m_buf = (char *)calloc(size,1);
     }
     ~BufStr()
     {
@@ -62,12 +62,17 @@ class BufStr
     }
     void resize( uint newlen )
     {
+      uint oldsize = m_size;
       m_size=newlen;
       if (m_writeOffset>=m_size) // offset out of range -> enlarge
       {
         m_size=m_writeOffset+m_spareRoom;
       }
       m_buf = (char *)realloc(m_buf,m_size);
+      if (m_size>oldsize)
+      {
+        memset(m_buf+oldsize,0,m_size-oldsize);
+      }
     }
     int size() const
     {
index 576c4bf..3e3eb43 100644 (file)
 //--------------------------------------------------------------------------
 
 static const char *doxygen_bst =
-#include "doxygen_bst.h"
+#include "doxygen.bst.h"
 ;
 
 static const char *bib2xhtml_pl =
-#include "bib2xhtml.h"
+#include "bib2xhtml.pl.h"
 ;
 
 //--------------------------------------------------------------------------
@@ -94,10 +94,15 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
   QCString style = Config_getString("LATEX_BIB_STYLE");
   if (style.isEmpty())
     style="plain";
+  QCString unit;
+  if (Config_getBool("COMPACT_LATEX"))
+    unit = "section";
+  else
+    unit = "chapter";
   t << "% Bibliography\n"
        "\\newpage\n"
        "\\phantomsection\n"
-       "\\addcontentsline{toc}{part}{" << theTranslator->trCiteReferences() << "}\n"
+       "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"
        "\\bibliographystyle{" << style << "}\n"
        "\\bibliography{" << getListOfBibFiles(",",TRUE) << "}\n"
        "\n";
index 214ea50..6072208 100644 (file)
@@ -16,7 +16,7 @@ class ClangParser
     
     /** Start parsing a file.
      *  @param[in] fileName The name of the file to parse.
-     *  @param[in,out] filesInTanslationUnit Other files that are
+     *  @param[in,out] filesInTranslationUnit Other files that are
      *                 part of the input and included by the file.
      *                 The function will return a subset of the files,
      *                 only including the onces that were actually found 
@@ -26,7 +26,7 @@ class ClangParser
 
     /** Switches to another file within the translation unit started
      *  with start().
-     *  @param[in] The name of the file to switch to.
+     *  @param[in] fileName The name of the file to switch to.
      */
     void switchToFile(const char *fileName);
 
index 07a275c..6404431 100644 (file)
@@ -1,12 +1,12 @@
 /******************************************************************************
  *
- * 
+ *
  *
  * 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 
- * 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.
  *
@@ -57,29 +57,29 @@ class ClassDefImpl
               const QCString &ctStr, const char *fName);
 
     /*! file name that forms the base for the output file containing the
-     *  class documentation. For compatibility with Qt (e.g. links via tag 
+     *  class documentation. For compatibility with Qt (e.g. links via tag
      *  files) this name cannot be derived from the class name directly.
      */
-    QCString fileName;                   
+    QCString fileName;
 
     /*! Include information about the header file should be included
      *  in the documentation. 0 by default, set by setIncludeFile().
      */
-    IncludeInfo *incInfo;                
+    IncludeInfo *incInfo;
 
     /*! List of base class (or super-classes) from which this class derives
-     *  directly. 
+     *  directly.
      */
     BaseClassList *inherits;
 
-    /*! List of sub-classes that directly derive from this class 
+    /*! List of sub-classes that directly derive from this class
      */
     BaseClassList *inheritedBy;
 
-    /*! Namespace this class is part of 
+    /*! Namespace this class is part of
      *  (this is the inner most namespace in case of nested namespaces)
      */
-    NamespaceDef  *nspace;              
+    NamespaceDef  *nspace;
 
     /*! File this class is defined in */
     FileDef *fileDef;
@@ -94,7 +94,7 @@ class ClassDefImpl
     ArgumentList *typeConstraints;
 
     /*! Files that were used for generating the class documentation. */
-    QStrList files;
+    FileList files;
 
     /*! Examples that use this class */
     ExampleSDict *exampleSDict;
@@ -102,10 +102,10 @@ class ClassDefImpl
     /*! Holds the kind of "class" this is. */
     ClassDef::CompoundType compType;
 
-    /*! The protection level in which this class was found. 
+    /*! The protection level in which this class was found.
      *  Typically Public, but for nested classes this can also be Protected
      *  or Private.
-     */ 
+     */
     Protection prot;
 
     /*! The inner classes contained in this class. Will be 0 if there are
@@ -120,13 +120,13 @@ class ClassDefImpl
 
     /*! Template instances that exists of this class, the key in the
      *  dictionary is the template argument list.
-     */ 
+     */
     QDict<ClassDef> *templateInstances;
 
     /*! Template instances that exists of this class, as defined by variables.
      *  We do NOT want to document these individually. The key in the
      *  dictionary is the template argument list.
-     */ 
+     */
     QDict<ClassDef> *variableInstances;
 
     QDict<int> *templBaseClassNames;
@@ -162,10 +162,10 @@ class ClassDefImpl
     bool isTemplArg;
 
     /*! Does this class group its user-grouped members
-     *  as a sub-section of the normal (public/protected/..) 
+     *  as a sub-section of the normal (public/protected/..)
      *  groups?
      */
-    bool subGrouping; 
+    bool subGrouping;
 
     /** Reason of existence is a "use" relation */
     bool usedOnly;
@@ -238,7 +238,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
 
   // we cannot use getLanguage at this point, as setLanguage has not been called.
   SrcLangExt lang = getLanguageFromFileName(defFileName);
-  if ((lang==SrcLangExt_Cpp || lang==SrcLangExt_ObjC) && 
+  if ((lang==SrcLangExt_Cpp || lang==SrcLangExt_ObjC) &&
       guessSection(defFileName)==Entry::SOURCE_SEC)
   {
     isLocal=TRUE;
@@ -280,7 +280,7 @@ ClassDef::ClassDef(
     const char *defFileName,int defLine,int defColumn,
     const char *nm,CompoundType ct,
     const char *lref,const char *fName,
-    bool isSymbol,bool isJavaEnum) 
+    bool isSymbol,bool isJavaEnum)
  : Definition(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol)
 {
   visited=FALSE;
@@ -312,7 +312,7 @@ QCString ClassDef::displayName(bool includeScope) const
   {
     n = VhdlDocGen::getClassName(this);
   }
-  else 
+  else
   {
     if (includeScope)
     {
@@ -337,7 +337,14 @@ QCString ClassDef::displayName(bool includeScope) const
   //  n = n.left(n.length()-2);
   //}
   //printf("ClassDef::displayName()=%s\n",n.data());
-  return n;
+  if (n.find('@')!=-1)
+  {
+    return removeAnonymousScopes(n);
+  }
+  else
+  {
+    return n;
+  }
 }
 
 // inserts a base/super class in the inheritance list
@@ -360,6 +367,8 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p,
                                 Specifier s,const char *t)
 {
   //printf("*** insert sub class %s into %s\n",cd->name().data(),name().data());
+  static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
+  if (!extractPrivate && cd->protection()==Private) return;
   if (m_impl->inheritedBy==0)
   {
     m_impl->inheritedBy   = new BaseClassList;
@@ -388,7 +397,7 @@ void ClassDef::addMembersToMemberGroup()
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
-      if (mg->allMembersInSameSection() && m_impl->subGrouping) 
+      if (mg->allMembersInSameSection() && m_impl->subGrouping)
       {
         //printf("addToDeclarationSection(%s)\n",mg->header().data());
         mg->addToDeclarationSection();
@@ -456,14 +465,14 @@ void ClassDef::internalInsertMember(MemberDef *md,
         case MemberType_Slot:   // Qt specific
           switch (prot)
           {
-            case Protected: 
+            case Protected:
             case Package: // slots in packages are not possible!
               addMemberToList(MemberListType_proSlots,md,TRUE);
               break;
-            case Public:    
+            case Public:
               addMemberToList(MemberListType_pubSlots,md,TRUE);
               break;
-            case Private:   
+            case Private:
               addMemberToList(MemberListType_priSlots,md,TRUE);
               break;
           }
@@ -475,16 +484,16 @@ void ClassDef::internalInsertMember(MemberDef *md,
             {
               switch (prot)
               {
-                case Protected: 
+                case Protected:
                   addMemberToList(MemberListType_proStaticAttribs,md,TRUE);
                   break;
-                case Package: 
+                case Package:
                   addMemberToList(MemberListType_pacStaticAttribs,md,TRUE);
                   break;
-                case Public:    
+                case Public:
                   addMemberToList(MemberListType_pubStaticAttribs,md,TRUE);
                   break;
-                case Private:   
+                case Private:
                   addMemberToList(MemberListType_priStaticAttribs,md,TRUE);
                   break;
               }
@@ -493,16 +502,16 @@ void ClassDef::internalInsertMember(MemberDef *md,
             {
               switch (prot)
               {
-                case Protected: 
+                case Protected:
                   addMemberToList(MemberListType_proStaticMethods,md,TRUE);
                   break;
-                case Package: 
+                case Package:
                   addMemberToList(MemberListType_pacStaticMethods,md,TRUE);
                   break;
-                case Public:    
+                case Public:
                   addMemberToList(MemberListType_pubStaticMethods,md,TRUE);
                   break;
-                case Private:   
+                case Private:
                   addMemberToList(MemberListType_priStaticMethods,md,TRUE);
                   break;
               }
@@ -514,17 +523,17 @@ void ClassDef::internalInsertMember(MemberDef *md,
             {
               switch (prot)
               {
-                case Protected: 
+                case Protected:
                   addMemberToList(MemberListType_proAttribs,md,TRUE);
                   break;
                 case Package:
                   addMemberToList(MemberListType_pacAttribs,md,TRUE);
                   break;
-                case Public:    
+                case Public:
                   addMemberToList(MemberListType_pubAttribs,md,TRUE);
                   isSimple=!md->isFunctionPtr();
                   break;
-                case Private:   
+                case Private:
                   addMemberToList(MemberListType_priAttribs,md,TRUE);
                   break;
               }
@@ -533,17 +542,17 @@ void ClassDef::internalInsertMember(MemberDef *md,
             {
               switch (prot)
               {
-                case Protected: 
+                case Protected:
                   addMemberToList(MemberListType_proTypes,md,TRUE);
                   break;
-                case Package: 
+                case Package:
                   addMemberToList(MemberListType_pacTypes,md,TRUE);
                   break;
-                case Public:    
+                case Public:
                   addMemberToList(MemberListType_pubTypes,md,TRUE);
                   isSimple=QCString(md->typeString()).find(")(")==-1;
                   break;
-                case Private:   
+                case Private:
                   addMemberToList(MemberListType_priTypes,md,TRUE);
                   break;
               }
@@ -552,22 +561,22 @@ void ClassDef::internalInsertMember(MemberDef *md,
             {
               switch (prot)
               {
-                case Protected: 
+                case Protected:
                   addMemberToList(MemberListType_proMethods,md,TRUE);
                   break;
-                case Package: 
+                case Package:
                   addMemberToList(MemberListType_pacMethods,md,TRUE);
                   break;
-                case Public:    
+                case Public:
                   addMemberToList(MemberListType_pubMethods,md,TRUE);
                   break;
-                case Private:   
+                case Private:
                   addMemberToList(MemberListType_priMethods,md,TRUE);
                   break;
               }
             }
           }
-          break; 
+          break;
       }
     }
     if (!isSimple) // not a simple field -> not a simple struct
@@ -641,17 +650,17 @@ void ClassDef::internalInsertMember(MemberDef *md,
                 err("Unexpected member type %d found!\n",md->memberType());
             }
           }
-          break; 
+          break;
       }
     }
 
     /*************************************************/
     /* insert member in the appropriate member group */
     /*************************************************/
-    // Note: this must be done AFTER inserting the member in the 
+    // Note: this must be done AFTER inserting the member in the
     // regular groups
     //addMemberToGroup(md,groupId);
-    
+
   }
 
   if (md->virtualness()==Pure)
@@ -665,10 +674,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
   }
 
   //::addClassMemberNameToIndex(md);
-  if (addToAllList && 
+  if (addToAllList &&
       !(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
         md->isFriend() &&
-        (QCString(md->typeString())=="friend class" || 
+        (QCString(md->typeString())=="friend class" ||
          QCString(md->typeString())=="friend struct" ||
          QCString(md->typeString())=="friend union")))
   {
@@ -764,16 +773,17 @@ void ClassDef::findSectionsInDocumentation()
 
 
 // add a file name to the used files set
-void ClassDef::insertUsedFile(const char *f)
+void ClassDef::insertUsedFile(FileDef *fd)
 {
-  if (m_impl->files.find(f)==-1) m_impl->files.append(f);
+  if (fd==0) return;
+  if (m_impl->files.find(fd)==-1) m_impl->files.append(fd);
   if (m_impl->templateInstances)
   {
     QDictIterator<ClassDef> qdi(*m_impl->templateInstances);
     ClassDef *cd;
     for (qdi.toFirst();(cd=qdi.current());++qdi)
     {
-      cd->insertUsedFile(f);
+      cd->insertUsedFile(fd);
     }
   }
 }
@@ -814,7 +824,7 @@ void ClassDef::setIncludeFile(FileDef *fd,
     m_impl->incInfo->includeName = includeName;
     m_impl->incInfo->local       = local;
   }
-  if (force && includeName) 
+  if (force && includeName)
   {
     m_impl->incInfo->includeName = includeName;
     m_impl->incInfo->local       = local;
@@ -829,7 +839,7 @@ void ClassDef::setIncludeFile(FileDef *fd,
 //  int pi=0;
 //  if (m_impl->tempArgs) return m_impl->tempArgs;
 //  // find the outer most class scope
-//  while ((ti=name().find("::",pi))!=-1 && 
+//  while ((ti=name().find("::",pi))!=-1 &&
 //      (pcd=getClass(name().left(ti)))==0
 //        ) pi=ti+2;
 //  if (pcd)
@@ -858,7 +868,7 @@ static void searchTemplateSpecs(/*in*/  Definition *d,
     }
     name+=clName;
     bool isSpecialization = d->localName().find('<')!=-1;
-    if (cd->templateArguments()) 
+    if (cd->templateArguments())
     {
       result.append(cd->templateArguments());
       if (!isSpecialization)
@@ -881,7 +891,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
   searchTemplateSpecs(d,specs,name);
   if (specs.count()>0) // class has template scope specifiers
   {
-    ol.startSubsubsection(); 
+    ol.startSubsubsection();
     QListIterator<ArgumentList> spi(specs);
     ArgumentList *al;
     for (spi.toFirst();(al=spi.current());++spi)
@@ -900,7 +910,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
         {
           ol.docify(" = ");
           ol.docify(a->defval);
-        } 
+        }
         a=al->next();
         if (a) ol.docify(", ");
       }
@@ -918,7 +928,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
 
 void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
 {
-  if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
+  if (hasBriefDescription())
   {
     ol.startParagraph();
     ol.generateDoc(briefFile(),briefLine(),this,0,
@@ -929,10 +939,7 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
     ol.enable(OutputGenerator::RTF);
     ol.popGeneratorState();
 
-    if (Config_getBool("REPEAT_BRIEF") || 
-        !documentation().isEmpty() || 
-        exampleFlag
-       )
+    if (hasDetailedDescription() || exampleFlag)
     {
       writeMoreLink(ol,anchor());
     }
@@ -990,14 +997,20 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
   ol.endTextBlock();
 }
 
+bool ClassDef::hasDetailedDescription() const
+{
+  static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
+  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+  return ((!briefDescription().isEmpty() && repeatBrief) ||
+          !documentation().isEmpty() ||
+          (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef()));
+}
+
 // write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag, 
+void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag,
                                         const QCString &title,const QCString &anchor)
 {
-  if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || 
-      !documentation().isEmpty() || 
-      (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef()) ||
-      exampleFlag)
+  if (hasDetailedDescription() || exampleFlag)
   {
     ol.pushGeneratorState();
       ol.disable(OutputGenerator::Html);
@@ -1029,111 +1042,113 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageTy
     //writeTemplateSpec(ol,this,pageType);
   }
 }
-    
-void ClassDef::showUsedFiles(OutputList &ol)
-{
-  ol.pushGeneratorState();
-  ol.disable(OutputGenerator::Man);
 
+QCString ClassDef::generatedFromFiles() const
+{
+  QCString result;
   SrcLangExt lang = getLanguage();
-  ol.writeRuler();
   if (lang==SrcLangExt_Fortran)
   {
-    ol.parseText(theTranslator->trGeneratedFromFilesFortran(
+    result = theTranslator->trGeneratedFromFilesFortran(
           getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType,
-          m_impl->files.count()==1));
+          m_impl->files.count()==1);
   }
   else if (isJavaEnum())
   {
-    ol.parseText(theTranslator->trEnumGeneratedFromFiles(m_impl->files.count()==1));
+    result = theTranslator->trEnumGeneratedFromFiles(m_impl->files.count()==1);
   }
   else if (m_impl->compType==Service)
   {
-    ol.parseText(theTranslator->trServiceGeneratedFromFiles(m_impl->files.count()==1));
+    result = theTranslator->trServiceGeneratedFromFiles(m_impl->files.count()==1);
   }
   else if (m_impl->compType==Singleton)
   {
-    ol.parseText(theTranslator->trSingletonGeneratedFromFiles(m_impl->files.count()==1));
+    result = theTranslator->trSingletonGeneratedFromFiles(m_impl->files.count()==1);
   }
   else
   {
-    ol.parseText(theTranslator->trGeneratedFromFiles(
+    result = theTranslator->trGeneratedFromFiles(
           getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType,
-          m_impl->files.count()==1));  
+          m_impl->files.count()==1);
   }
+  return result;
+}
+
+void ClassDef::showUsedFiles(OutputList &ol)
+{
+  ol.pushGeneratorState();
+  ol.disable(OutputGenerator::Man);
+
+
+  ol.writeRuler();
+  ol.parseText(generatedFromFiles());
 
   bool first=TRUE;
-  const char *file = m_impl->files.first();
-  while (file)
+  FileDef *fd = m_impl->files.first();
+  while (fd)
   {
-    bool ambig;
-    FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
-    if (fd)
+    if (first)
     {
-      if (first)
-      {
-        first=FALSE;   
-        ol.startItemList();
-      }
-
-      ol.startItemListItem();
-      QCString path=fd->getPath();
-      if (Config_getBool("FULL_PATH_NAMES"))
-      {
-        ol.docify(stripFromPath(path));
-      }
+      first=FALSE;
+      ol.startItemList();
+    }
 
-      QCString fname = fd->name();
-      if (!fd->getVersion().isEmpty()) // append version if available
-      {
-        fname += " (" + fd->getVersion() + ")";
-      }
+    ol.startItemListItem();
+    QCString path=fd->getPath();
+    if (Config_getBool("FULL_PATH_NAMES"))
+    {
+      ol.docify(stripFromPath(path));
+    }
 
-      // for HTML 
-      ol.pushGeneratorState();
-      ol.disableAllBut(OutputGenerator::Html);
-      if (fd->generateSourceFile())
-      {
-        ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
-      }
-      else if (fd->isLinkable())
-      {
-        ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
-            fname);
-      }
-      else
-      {
-        ol.docify(fname);
-      }
-      ol.popGeneratorState();
+    QCString fname = fd->name();
+    if (!fd->getVersion().isEmpty()) // append version if available
+    {
+      fname += " (" + fd->getVersion() + ")";
+    }
 
-      // for other output formats
-      ol.pushGeneratorState();
-      ol.disable(OutputGenerator::Html);
-      if (fd->isLinkable())
-      {
-        ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
-            fname);
-      }
-      else
-      {
-        ol.docify(fname);
-      }
-      ol.popGeneratorState();
+    // for HTML
+    ol.pushGeneratorState();
+    ol.disableAllBut(OutputGenerator::Html);
+    if (fd->generateSourceFile())
+    {
+      ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
+    }
+    else if (fd->isLinkable())
+    {
+      ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
+          fname);
+    }
+    else
+    {
+      ol.docify(fname);
+    }
+    ol.popGeneratorState();
 
-      ol.endItemListItem();
+    // for other output formats
+    ol.pushGeneratorState();
+    ol.disable(OutputGenerator::Html);
+    if (fd->isLinkable())
+    {
+      ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
+          fname);
+    }
+    else
+    {
+      ol.docify(fname);
     }
-    file=m_impl->files.next();
+    ol.popGeneratorState();
+
+    ol.endItemListItem();
+
+    fd=m_impl->files.next();
   }
   if (!first) ol.endItemList();
 
   ol.popGeneratorState();
 }
 
-
-void ClassDef::writeInheritanceGraph(OutputList &ol)
+int ClassDef::countInheritanceNodes()
 {
-  // count direct inheritance relations
   int count=0;
   BaseClassDef *ibcd;
   if (m_impl->inheritedBy)
@@ -1156,10 +1171,16 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
       ibcd=m_impl->inherits->next();
     }
   }
+  return count;
+}
+
+void ClassDef::writeInheritanceGraph(OutputList &ol)
+{
+  // count direct inheritance relations
+  int count=countInheritanceNodes();
 
-  
   bool renderDiagram = FALSE;
-  if (Config_getBool("HAVE_DOT") && 
+  if (Config_getBool("HAVE_DOT") &&
       (Config_getBool("CLASS_DIAGRAMS") || Config_getBool("CLASS_GRAPH")))
     // write class diagram using dot
   {
@@ -1175,7 +1196,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
       renderDiagram = TRUE;
     }
   }
-  else if (Config_getBool("CLASS_DIAGRAMS") && count>0) 
+  else if (Config_getBool("CLASS_DIAGRAMS") && count>0)
     // write class diagram using build-in generator
   {
     ClassDiagram diagram(this); // create a diagram of this class.
@@ -1185,7 +1206,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
     ol.enable(OutputGenerator::Man);
     ol.endClassDiagram(diagram,getOutputFileBase(),displayName());
     renderDiagram = TRUE;
-  } 
+  }
 
   if (renderDiagram) // if we already show the inheritance relations graphically,
                      // then hide the text version
@@ -1219,7 +1240,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
 
         if (cd->isLinkable())
         {
-          if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
+          if (!Config_getString("GENERATE_TAGFILE").isEmpty())
           {
             Doxygen::tagFile << "    <base";
             if (bcd->prot==Protected)
@@ -1234,7 +1255,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
             {
               Doxygen::tagFile << " virtualness=\"virtual\"";
             }
-            Doxygen::tagFile << ">" << convertToXML(cd->name()) 
+            Doxygen::tagFile << ">" << convertToXML(cd->name())
                              << "</base>" << endl;
           }
           ol.writeObjectLink(cd->getReference(),
@@ -1252,7 +1273,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
         err("invalid marker %d in inherits list!\n",entryIndex);
       }
       index=newIndex+matchLen;
-    } 
+    }
     ol.parseText(inheritLine.right(inheritLine.length()-index));
     ol.endParagraph();
   }
@@ -1285,12 +1306,12 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
         writeInheritanceSpecifier(ol,bcd);
       }
       index=newIndex+matchLen;
-    } 
+    }
     ol.parseText(inheritLine.right(inheritLine.length()-index));
     ol.endParagraph();
   }
 
-  if (renderDiagram) 
+  if (renderDiagram)
   {
     ol.enableAll();
   }
@@ -1313,33 +1334,40 @@ void ClassDef::writeCollaborationGraph(OutputList &ol)
   }
 }
 
+QCString ClassDef::includeStatement() const
+{
+  SrcLangExt lang = getLanguage();
+  bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
+  if (isIDLorJava)
+  {
+    return "import";
+  }
+  else if (isObjectiveC())
+  {
+    return "#import ";
+  }
+  else
+  {
+    return "#include ";
+  }
+}
+
 void ClassDef::writeIncludeFiles(OutputList &ol)
 {
   if (m_impl->incInfo /*&& Config_getBool("SHOW_INCLUDE_FILES")*/)
   {
-    QCString nm=m_impl->incInfo->includeName.isEmpty() ? 
+    QCString nm=m_impl->incInfo->includeName.isEmpty() ?
       (m_impl->incInfo->fileDef ?
-       m_impl->incInfo->fileDef->docName().data() : "" 
+       m_impl->incInfo->fileDef->docName().data() : ""
       ) :
       m_impl->incInfo->includeName.data();
     if (!nm.isEmpty())
     {
       ol.startParagraph();
       ol.startTypewriter();
+      ol.docify(includeStatement());
       SrcLangExt lang = getLanguage();
       bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
-      if (isIDLorJava)
-      {
-        ol.docify("import ");
-      }
-      else if (isObjectiveC())
-      {
-        ol.docify("#import ");
-      }
-      else
-      {
-        ol.docify("#include ");
-      }
       if (m_impl->incInfo->local || isIDLorJava)
         ol.docify("\"");
       else
@@ -1362,7 +1390,7 @@ void ClassDef::writeIncludeFiles(OutputList &ol)
         ol.docify("\"");
       else
         ol.docify(">");
-      if (isIDLorJava) 
+      if (isIDLorJava)
         ol.docify(";");
       ol.endTypewriter();
       ol.endParagraph();
@@ -1417,7 +1445,7 @@ void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
 void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
 {
   // nested classes
-  if (m_impl->innerClasses) 
+  if (m_impl->innerClasses)
   {
     m_impl->innerClasses->writeDeclaration(ol,0,title,TRUE);
   }
@@ -1425,7 +1453,7 @@ void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
 
 void ClassDef::writeInlineClasses(OutputList &ol)
 {
-  if (m_impl->innerClasses) 
+  if (m_impl->innerClasses)
   {
     m_impl->innerClasses->writeDocumentation(ol,this);
   }
@@ -1493,12 +1521,12 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
   LayoutDocEntry *lde;
   bool first=TRUE;
   SrcLangExt lang = getLanguage();
-  
+
   if (lang!=SrcLangExt_VHDL)
   {
     for (eli.toFirst();(lde=eli.current());++eli)
     {
-      if (lde->kind()==LayoutDocEntry::ClassNestedClasses && 
+      if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
           m_impl->innerClasses  &&
           m_impl->innerClasses->declVisible()
          )
@@ -1521,7 +1549,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
         MemberList * ml = getMemberList(lmd->type);
         if (ml && ml->declVisible())
         {
-          ol.writeSummaryLink(0,ml->listTypeAsString(ml->listType()),lmd->title(lang),first);
+          ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
           first=FALSE;
         }
       }
@@ -1546,7 +1574,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
 void ClassDef::writeTagFileMarker()
 {
   // write section to the tag file
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
+  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
   {
     Doxygen::tagFile << "  <compound kind=\"" << compoundTypeString();
     Doxygen::tagFile << "\"";
@@ -1587,7 +1615,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
   LayoutDocEntry *lde;
 
   // part 1: anchor and title
-  QCString s = compoundTypeString()+" "+name(); 
+  QCString s = compoundTypeString()+" "+name();
 
   // part 1a
   ol.pushGeneratorState();
@@ -1631,7 +1659,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
   {
     switch (lde->kind())
     {
-      case LayoutDocEntry::BriefDesc: 
+      case LayoutDocEntry::BriefDesc:
         {
           // since we already shown the brief description in the
           // declaration part of the container, so we use this to
@@ -1639,15 +1667,15 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
           writeDetailedDocumentationBody(ol);
         }
         break;
-      case LayoutDocEntry::ClassInheritanceGraph: 
-        writeInheritanceGraph(ol); 
-        break; 
-      case LayoutDocEntry::ClassCollaborationGraph: 
-        writeCollaborationGraph(ol); 
-        break; 
-      case LayoutDocEntry::MemberDeclStart: 
+      case LayoutDocEntry::ClassInheritanceGraph:
+        writeInheritanceGraph(ol);
+        break;
+      case LayoutDocEntry::ClassCollaborationGraph:
+        writeCollaborationGraph(ol);
+        break;
+      case LayoutDocEntry::MemberDeclStart:
         if (!isSimple) startMemberDeclarations(ol);
-        break; 
+        break;
       case LayoutDocEntry::MemberDecl:
         {
           LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
@@ -1657,13 +1685,13 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
       case LayoutDocEntry::MemberGroups:
         if (!isSimple) writeMemberGroups(ol,TRUE);
         break;
-      case LayoutDocEntry::MemberDeclEnd: 
+      case LayoutDocEntry::MemberDeclEnd:
         if (!isSimple) endMemberDeclarations(ol);
         break;
-      case LayoutDocEntry::MemberDefStart: 
+      case LayoutDocEntry::MemberDefStart:
         if (!isSimple) startMemberDocumentation(ol);
-        break; 
-      case LayoutDocEntry::MemberDef: 
+        break;
+      case LayoutDocEntry::MemberDef:
         {
           LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
           if (isSimple)
@@ -1675,8 +1703,8 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
             writeMemberDocumentation(ol,lmd->type,lmd->title(lang),TRUE);
           }
         }
-        break; 
-      case LayoutDocEntry::MemberDefEnd: 
+        break;
+      case LayoutDocEntry::MemberDefEnd:
         if (!isSimple) endMemberDocumentation(ol);
         break;
       default:
@@ -1748,8 +1776,8 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
   static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES");
   bool isLink = isLinkable();
   SrcLangExt lang = getLanguage();
-  if (isLink || 
-      (!hideUndocClasses && 
+  if (isLink ||
+      (!hideUndocClasses &&
        (!isLocal() || extractLocalClasses)
       )
      )
@@ -1767,7 +1795,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
       }
       else
       {
-        ol.parseText(lang==SrcLangExt_Fortran ? 
+        ol.parseText(lang==SrcLangExt_Fortran ?
             theTranslator->trDataTypes() :
             theTranslator->trCompounds());
       }
@@ -1778,7 +1806,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
     if (!Config_getString("GENERATE_TAGFILE").isEmpty() &&
         !isReference())  // skip classes found in tag files
     {
-      Doxygen::tagFile << "    <class kind=\"" << compoundTypeString() 
+      Doxygen::tagFile << "    <class kind=\"" << compoundTypeString()
         << "\">" << convertToXML(name()) << "</class>" << endl;
     }
     ol.startMemberDeclaration();
@@ -1792,7 +1820,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
       ol.writeString(" ");
       ol.insertMemberAlign();
     }
-    if (isLink) 
+    if (isLink)
     {
       ol.writeObjectLink(getReference(),
           getOutputFileBase(),
@@ -1800,7 +1828,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
           cname
           );
     }
-    else 
+    else
     {
       ol.startBold();
       ol.docify(cname);
@@ -1890,67 +1918,67 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
   {
     switch (lde->kind())
     {
-      case LayoutDocEntry::BriefDesc: 
+      case LayoutDocEntry::BriefDesc:
         writeBriefDescription(ol,exampleFlag);
-        break; 
-      case LayoutDocEntry::ClassIncludes: 
+        break;
+      case LayoutDocEntry::ClassIncludes:
         writeIncludeFiles(ol);
         break;
-      case LayoutDocEntry::ClassInheritanceGraph: 
-        writeInheritanceGraph(ol); 
-        break; 
-      case LayoutDocEntry::ClassCollaborationGraph: 
-        writeCollaborationGraph(ol); 
-        break; 
-      case LayoutDocEntry::ClassAllMembersLink: 
+      case LayoutDocEntry::ClassInheritanceGraph:
+        writeInheritanceGraph(ol);
+        break;
+      case LayoutDocEntry::ClassCollaborationGraph:
+        writeCollaborationGraph(ol);
+        break;
+      case LayoutDocEntry::ClassAllMembersLink:
         //writeAllMembersLink(ol); // this is now part of the summary links
         break;
-      case LayoutDocEntry::MemberDeclStart: 
+      case LayoutDocEntry::MemberDeclStart:
         startMemberDeclarations(ol);
-        break; 
-      case LayoutDocEntry::MemberGroups: 
+        break;
+      case LayoutDocEntry::MemberGroups:
         writeMemberGroups(ol);
         break;
-      case LayoutDocEntry::MemberDecl: 
+      case LayoutDocEntry::MemberDecl:
         {
           LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
           writeMemberDeclarations(ol,lmd->type,lmd->title(lang),lmd->subtitle(lang));
         }
-        break; 
-      case LayoutDocEntry::ClassNestedClasses: 
+        break;
+      case LayoutDocEntry::ClassNestedClasses:
         {
           LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
           writeNestedClasses(ol,ls->title(lang));
         }
         break;
-      case LayoutDocEntry::MemberDeclEnd: 
+      case LayoutDocEntry::MemberDeclEnd:
         endMemberDeclarations(ol);
         break;
-      case LayoutDocEntry::DetailedDesc: 
+      case LayoutDocEntry::DetailedDesc:
         {
           LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
           writeDetailedDescription(ol,pageType,exampleFlag,ls->title(lang));
         }
-        break; 
-      case LayoutDocEntry::MemberDefStart: 
+        break;
+      case LayoutDocEntry::MemberDefStart:
         startMemberDocumentation(ol);
-        break; 
+        break;
       case LayoutDocEntry::ClassInlineClasses:
         writeInlineClasses(ol);
         break;
-      case LayoutDocEntry::MemberDef: 
+      case LayoutDocEntry::MemberDef:
         {
           LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
           writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
         }
-        break; 
-      case LayoutDocEntry::MemberDefEnd: 
+        break;
+      case LayoutDocEntry::MemberDefEnd:
         endMemberDocumentation(ol);
         break;
-      case LayoutDocEntry::ClassUsedFiles: 
+      case LayoutDocEntry::ClassUsedFiles:
         showUsedFiles(ol);
         break;
-      case LayoutDocEntry::AuthorSection: 
+      case LayoutDocEntry::AuthorSection:
         writeAuthorSection(ol);
         break;
       case LayoutDocEntry::NamespaceNestedNamespaces:
@@ -1962,16 +1990,16 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
       case LayoutDocEntry::FileConstantGroups:
       case LayoutDocEntry::FileIncludes:
       case LayoutDocEntry::FileIncludeGraph:
-      case LayoutDocEntry::FileIncludedByGraph: 
+      case LayoutDocEntry::FileIncludedByGraph:
       case LayoutDocEntry::FileSourceLink:
       case LayoutDocEntry::FileInlineClasses:
-      case LayoutDocEntry::GroupClasses: 
-      case LayoutDocEntry::GroupInlineClasses: 
+      case LayoutDocEntry::GroupClasses:
+      case LayoutDocEntry::GroupInlineClasses:
       case LayoutDocEntry::GroupNamespaces:
-      case LayoutDocEntry::GroupDirs: 
-      case LayoutDocEntry::GroupNestedGroups: 
+      case LayoutDocEntry::GroupDirs:
+      case LayoutDocEntry::GroupNestedGroups:
       case LayoutDocEntry::GroupFiles:
-      case LayoutDocEntry::GroupGraph: 
+      case LayoutDocEntry::GroupGraph:
       case LayoutDocEntry::GroupPageDocs:
       case LayoutDocEntry::DirSubDirs:
       case LayoutDocEntry::DirFiles:
@@ -1982,7 +2010,7 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
     }
   }
 
-  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
+  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
   {
     writeDocAnchorsToTagFile();
     Doxygen::tagFile << "  </compound>" << endl;
@@ -1990,20 +2018,16 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
   ol.endContents();
 }
 
-// write all documentation for this class
-void ClassDef::writeDocumentation(OutputList &ol)
+QCString ClassDef::title() const
 {
-  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
-  //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
-  //static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
   QCString pageTitle;
   SrcLangExt lang = getLanguage();
-    
+
   if (lang==SrcLangExt_Fortran)
   {
     pageTitle = theTranslator->trCompoundReferenceFortran(displayName(),
               m_impl->compType,
-              m_impl->tempArgs != 0);  
+              m_impl->tempArgs != 0);
   }
   else if (lang==SrcLangExt_VHDL)
   {
@@ -2027,8 +2051,18 @@ void ClassDef::writeDocumentation(OutputList &ol)
               m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType,
               m_impl->tempArgs != 0);
   }
-  
-  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);  
+  return pageTitle;
+}
+
+// write all documentation for this class
+void ClassDef::writeDocumentation(OutputList &ol)
+{
+  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+  //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+  //static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+  QCString pageTitle = title();
+
+  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);
   if (!generateTreeView)
   {
     if (getOuterScope()!=Doxygen::globalScope)
@@ -2044,7 +2078,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
   addGroupListToTitle(ol,this);
   endTitle(ol,getOutputFileBase(),displayName());
   writeDocumentationContents(ol,pageTitle);
-    
+
   endFileWithNavPath(this,ol);
 
   if (Config_getBool("SEPARATE_MEMBER_PAGES"))
@@ -2061,7 +2095,7 @@ void ClassDef::writeMemberPages(OutputList &ol)
 
   ol.pushGeneratorState();
   ol.disableAllBut(OutputGenerator::Html);
-  
+
   QListIterator<MemberList> mli(m_impl->memberLists);
   MemberList *ml;
   for (mli.toFirst();(ml=mli.current());++mli)
@@ -2162,7 +2196,7 @@ void ClassDef::writeMemberList(OutputList &ol)
 
   QCString memListFile = getMemberListFileName();
   startFile(ol,memListFile,memListFile,theTranslator->trMemberList(),
-            HLI_ClassVisible,!generateTreeView,getOutputFileBase());  
+            HLI_ClassVisible,!generateTreeView,getOutputFileBase());
   if (!generateTreeView)
   {
     if (getOuterScope()!=Doxygen::globalScope)
@@ -2180,13 +2214,13 @@ void ClassDef::writeMemberList(OutputList &ol)
   ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),displayName());
   ol.parseText(theTranslator->trIncludingInheritedMembers());
   ol.endParagraph();
-  
+
   //ol.startItemList();
   ol.writeString("<table class=\"directory\">\n");
-  
+
   int idx=0;
   //MemberNameInfo *mni=m_impl->allMemberNameInfoList->first();
-  MemberNameInfoSDict::Iterator mnii(*m_impl->allMemberNameInfoSDict); 
+  MemberNameInfoSDict::Iterator mnii(*m_impl->allMemberNameInfoSDict);
   MemberNameInfo *mni;
   for (mnii.toFirst();(mni=mnii.current());++mnii)
   {
@@ -2197,14 +2231,14 @@ void ClassDef::writeMemberList(OutputList &ol)
       ClassDef  *cd=md->getClassDef();
       Protection prot = mi->prot;
       Specifier virt=md->virtualness();
-      
+
       //printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
       //    name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);
 
       if (cd && !md->name().isEmpty() && md->name()[0]!='@')
       {
         bool memberWritten=FALSE;
-        if (cd->isLinkable() && md->isLinkable()) 
+        if (cd->isLinkable() && md->isLinkable())
           // create a link to the documentation
         {
           QCString name=mi->ambiguityResolutionScope+md->name();
@@ -2240,7 +2274,7 @@ void ClassDef::writeMemberList(OutputList &ol)
                 md->anchor(),name);
 
             if ( md->isFunction() || md->isSignal() || md->isSlot() ||
-                (md->isFriend() && md->argsString())) 
+                (md->isFriend() && md->argsString()))
               ol.docify(md->argsString());
             else if (md->isEnumerate())
               ol.parseText(" "+theTranslator->trEnumName());
@@ -2255,9 +2289,10 @@ void ClassDef::writeMemberList(OutputList &ol)
           ol.writeString("</td>");
           memberWritten=TRUE;
         }
-        else if (!Config_getBool("HIDE_UNDOC_MEMBERS") && 
-                  (protectionLevelVisible(md->protection()) || md->isFriend()) 
-                ) // no documentation, 
+        else if (!cd->isArtificial() &&
+                 !Config_getBool("HIDE_UNDOC_MEMBERS") &&
+                  (protectionLevelVisible(md->protection()) || md->isFriend())
+                ) // no documentation,
                   // generate link to the class instead.
         {
           //ol.writeListItem();
@@ -2282,7 +2317,7 @@ void ClassDef::writeMemberList(OutputList &ol)
           ol.endBold();
           if (!md->isObjCMethod())
           {
-            if ( md->isFunction() || md->isSignal() || md->isSlot() ) 
+            if ( md->isFunction() || md->isSignal() || md->isSlot() )
               ol.docify(md->argsString());
             else if (md->isEnumerate())
               ol.parseText(" "+theTranslator->trEnumName());
@@ -2317,15 +2352,15 @@ void ClassDef::writeMemberList(OutputList &ol)
           ol.writeObjectLink(cd->getReference(),
                              cd->getOutputFileBase(),
                              cd->anchor(),
-                             md->category() ? 
-                                md->category()->displayName() : 
+                             md->category() ?
+                                md->category()->displayName() :
                                 cd->displayName());
           ol.writeString("</td>");
           ol.writeString("<td class=\"entry\">");
         }
         SrcLangExt lang = md->getLanguage();
         if (
-            (prot!=Public || (virt!=Normal && getLanguage()!=SrcLangExt_ObjC) || 
+            (prot!=Public || (virt!=Normal && getLanguage()!=SrcLangExt_ObjC) ||
              md->isFriend() || md->isRelated() || md->isExplicit() ||
              md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||
              md->isSignal() || md->isSlot() ||
@@ -2337,7 +2372,7 @@ void ClassDef::writeMemberList(OutputList &ol)
         {
           ol.writeString("<span class=\"mlabel\">");
           QStrList sl;
-          if (lang==SrcLangExt_VHDL) 
+          if (lang==SrcLangExt_VHDL)
           {
             sl.append(VhdlDocGen::trVhdlType(md->getMemberSpecifiers())); //append vhdl type
           }
@@ -2345,14 +2380,14 @@ void ClassDef::writeMemberList(OutputList &ol)
           else if (md->isRelated()) sl.append("related");
           else
           {
-            if (Config_getBool("INLINE_INFO") && md->isInline())        
+            if (Config_getBool("INLINE_INFO") && md->isInline())
                                        sl.append("inline");
             if (md->isExplicit())      sl.append("explicit");
             if (md->isMutable())       sl.append("mutable");
             if (prot==Protected)       sl.append("protected");
             else if (prot==Private)    sl.append("private");
             else if (prot==Package)    sl.append("package");
-            if (virt==Virtual && getLanguage()!=SrcLangExt_ObjC)             
+            if (virt==Virtual && getLanguage()!=SrcLangExt_ObjC)
                                        sl.append("virtual");
             else if (virt==Pure)       sl.append("pure virtual");
             if (md->isStatic())        sl.append("static");
@@ -2392,7 +2427,7 @@ void ClassDef::writeMemberList(OutputList &ol)
   //ol.endItemList();
 
   ol.writeString("</table>");
-  
+
   endFile(ol);
   ol.popGeneratorState();
 }
@@ -2420,12 +2455,12 @@ bool ClassDef::addExample(const char *anchor,const char *nameStr,
 }
 
 // returns TRUE if this class is used in an example
-bool ClassDef::hasExamples()
+bool ClassDef::hasExamples() const
 {
-  if (m_impl->exampleSDict==0) 
-    return FALSE;
-  else
-    return m_impl->exampleSDict->count()>0;
+  bool result=FALSE;
+  if (m_impl->exampleSDict)
+    result = m_impl->exampleSDict->count()>0;
+  return result;
 }
 
 
@@ -2433,7 +2468,7 @@ void ClassDef::setTemplateArguments(ArgumentList *al)
 {
   if (al==0) return;
   if (!m_impl->tempArgs) delete m_impl->tempArgs; // delete old list if needed
-  m_impl->tempArgs=new ArgumentList; 
+  m_impl->tempArgs=new ArgumentList;
   ArgumentListIterator ali(*al);
   Argument *a;
   for (;(a=ali.current());++ali)
@@ -2456,12 +2491,12 @@ void ClassDef::setTypeConstraints(ArgumentList *al)
 }
 
 /*! Returns \c TRUE iff this class or a class inheriting from this class
- *  is \e not defined in an external tag file. 
+ *  is \e not defined in an external tag file.
  */
 bool ClassDef::hasNonReferenceSuperClass()
 {
-  bool found=!isReference() && isLinkableInProject() && !isHidden(); 
-  if (found) 
+  bool found=!isReference() && isLinkableInProject() && !isHidden();
+  if (found)
   {
     return TRUE; // we're done if this class is not a reference
   }
@@ -2472,7 +2507,7 @@ bool ClassDef::hasNonReferenceSuperClass()
     {
       ClassDef *bcd=bcli.current()->classDef;
       // recurse into the super class branch
-      found = found || bcd->hasNonReferenceSuperClass(); 
+      found = found || bcd->hasNonReferenceSuperClass();
       if (!found)
       {
         // look for template instances that might have non-reference super classes
@@ -2492,29 +2527,20 @@ bool ClassDef::hasNonReferenceSuperClass()
   return found;
 }
 
-/*! called from MemberDef::writeDeclaration() to (recusively) write the 
+/*! called from MemberDef::writeDeclaration() to (recusively) write the
  *  definition of an anonymous struct, union or class.
  */
 void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
     ClassDef *inheritedFrom,const char *inheritId)
 {
-  //ol.insertMemberAlign();
   //printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
 
-  //if (inGroup && md && md->getClassDef()==this) return;
-
   ol.docify(compoundTypeString());
-  int ri=name().findRev("::");
-  if (ri==-1) ri=name().length();
-  QCString cn=name().right(name().length()-ri-2);
-  if (!cn.isEmpty() && cn.at(0)!='@' && md)
-  { 
-    if (cn.right(2)=="-p" /*|| cn.right(2)=="-g"*/)
-    {
-      cn = cn.left(cn.length()-2);
-    }
+  QCString cn = displayName(FALSE);
+  if (!cn.isEmpty())
+  {
     ol.docify(" ");
-    if (isLinkable())
+    if (md && isLinkable())
     {
       ol.writeObjectLink(0,0,md->anchor(),cn);
     }
@@ -2526,7 +2552,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
     }
   }
   ol.docify(" {");
-  ol.endMemberItem(); 
+  ol.endMemberItem();
 
   // write user defined member groups
   if (m_impl->memberGroupSDict)
@@ -2555,7 +2581,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
 
 /*! a link to this class is possible within this project */
 bool ClassDef::isLinkableInProject() const
-{ 
+{
   static bool extractLocal   = Config_getBool("EXTRACT_LOCAL_CLASSES");
   static bool extractStatic  = Config_getBool("EXTRACT_STATIC");
   static bool hideUndoc      = Config_getBool("HIDE_UNDOC_CLASSES");
@@ -2570,7 +2596,7 @@ bool ClassDef::isLinkableInProject() const
       name().find('@')==-1 &&                      /* not anonymous */
       protectionLevelVisible(m_impl->prot)      && /* private/internal */
       (!m_impl->isLocal      || extractLocal)   && /* local */
-      (hasDocumentation()    || !hideUndoc)     && /* documented */ 
+      (hasDocumentation()    || !hideUndoc)     && /* documented */
       (!m_impl->isStatic     || extractStatic)  && /* static */
       !isReference();                              /* not an external reference */
   }
@@ -2590,8 +2616,8 @@ bool ClassDef::isLinkable() const
 
 
 /*! the class is visible in a class diagram, or class hierarchy */
-bool ClassDef::isVisibleInHierarchy() 
-{ 
+bool ClassDef::isVisibleInHierarchy()
+{
   static bool allExternals     = Config_getBool("ALLEXTERNALS");
   static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
   static bool extractStatic    = Config_getBool("EXTRACT_STATIC");
@@ -2604,10 +2630,10 @@ bool ClassDef::isVisibleInHierarchy()
       /*!isArtificial() &&*/  // 1.8.2: allowed these to appear
       // and not privately inherited
       protectionLevelVisible(m_impl->prot) &&
-      // documented or shown anyway or documentation is external 
-      (hasDocumentation() || 
-       !hideUndocClasses || 
-       (m_impl->templateMaster && m_impl->templateMaster->hasDocumentation()) || 
+      // documented or shown anyway or documentation is external
+      (hasDocumentation() ||
+       !hideUndocClasses ||
+       (m_impl->templateMaster && m_impl->templateMaster->hasDocumentation()) ||
        isReference()
       ) &&
       // is not part of an unnamed namespace or shown anyway
@@ -2621,7 +2647,7 @@ bool ClassDef::hasDocumentation() const
 
 //----------------------------------------------------------------------
 // recursive function:
-// returns TRUE iff class definition `bcd' represents an (in)direct base 
+// returns TRUE iff class definition `bcd' represents an (in)direct base
 // class of class definition `cd'.
 
 bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
@@ -2643,9 +2669,9 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
       ClassDef *ccd=bcli.current()->classDef;
       if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
       //printf("isBaseClass() baseclass %s\n",ccd->name().data());
-      if (ccd==bcd) 
+      if (ccd==bcd)
         found=TRUE;
-      else 
+      else
         found=ccd->isBaseClass(bcd,followInstances,level+1);
     }
   }
@@ -2668,9 +2694,9 @@ bool ClassDef::isSubClass(ClassDef *cd,int level)
     for ( ; bcli.current() && !found ; ++bcli)
     {
       ClassDef *ccd=bcli.current()->classDef;
-      if (ccd==cd) 
+      if (ccd==cd)
         found=TRUE;
-      else 
+      else
         found=ccd->isSubClass(cd,level+1);
     }
   }
@@ -2686,8 +2712,8 @@ static bool isStandardFunc(MemberDef *md)
          md->isDestructor();        // destructor
 }
 
-/*! 
- * recusively merges the `all members' lists of a class base 
+/*!
+ * recusively merges the `all members' lists of a class base
  * with that of this class. Must only be called for classes without
  * subclasses!
  */
@@ -2711,7 +2737,7 @@ void ClassDef::mergeMembers()
     BaseClassDef *bcd;
     for ( ; (bcd=bcli.current()) ; ++bcli )
     {
-      ClassDef *bClass=bcd->classDef; 
+      ClassDef *bClass=bcd->classDef;
 
       // merge the members in the base class of this inheritance branch first
       bClass->mergeMembers();
@@ -2730,10 +2756,10 @@ void ClassDef::mergeMembers()
           if (dstMnd!=0 && (dstMni=dstMnd->find(srcMni->memberName())))
             // a member with that name is already in the class.
             // the member may hide or reimplement the one in the sub class
-            // or there may be another path to the base class that is already 
+            // or there may be another path to the base class that is already
             // visited via another branch in the class hierarchy.
           {
-            MemberNameInfoIterator srcMnii(*srcMni); 
+            MemberNameInfoIterator srcMnii(*srcMni);
             MemberInfo *srcMi;
             for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
             {
@@ -2741,7 +2767,7 @@ void ClassDef::mergeMembers()
               bool found=FALSE;
               bool ambigue=FALSE;
               bool hidden=FALSE;
-              MemberNameInfoIterator dstMnii(*dstMni); 
+              MemberNameInfoIterator dstMnii(*dstMni);
               MemberInfo *dstMi;
               ClassDef *srcCd = srcMd->getClassDef();
               for ( ; (dstMi=dstMnii.current()) && !found; ++dstMnii )
@@ -2751,7 +2777,7 @@ void ClassDef::mergeMembers()
                 {
                   ClassDef *dstCd = dstMd->getClassDef();
                   //printf("  Is %s a base class of %s?\n",srcCd->name().data(),dstCd->name().data());
-                  if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE)) 
+                  if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
                     // member is in the same or a base class
                   {
                     ArgumentList *srcAl = srcMd->argumentList();
@@ -2783,18 +2809,18 @@ void ClassDef::mergeMembers()
                 }
                 else // same members
                 {
-                  // do not add if base class is virtual or 
+                  // do not add if base class is virtual or
                   // if scope paths are equal or
                   // if base class is an interface (and thus implicitly virtual).
                   //printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt);
                   if ((srcMi->virt!=Normal && dstMi->virt!=Normal) ||
                       bClass->name()+sep+srcMi->scopePath == dstMi->scopePath ||
                       dstMd->getClassDef()->compoundType()==Interface
-                     ) 
+                     )
                   {
                     found=TRUE;
                   }
-                  else // member can be reached via multiple paths in the 
+                  else // member can be reached via multiple paths in the
                     // inheritance tree
                   {
                     //printf("$$ Existing member %s %s add scope %s\n",
@@ -2816,10 +2842,10 @@ void ClassDef::mergeMembers()
 
               // TODO: fix the case where a member is hidden by inheritance
               //       of a member with the same name but with another prototype,
-              //       while there is more than one path to the member in the 
+              //       while there is more than one path to the member in the
               //       base class due to multiple inheritance. In this case
-              //       it seems that the member is not reachable by prefixing a 
-              //       scope name either (according to my compiler). Currently, 
+              //       it seems that the member is not reachable by prefixing a
+              //       scope name either (according to my compiler). Currently,
               //       this case is shown anyway.
               if (!found && srcMd->protection()!=Private && !srcMd->isFriend())
               {
@@ -2874,10 +2900,10 @@ void ClassDef::mergeMembers()
           }
           else // base class has a member that is not in the sub class => copy
           {
-            // create a deep copy of the list (only the MemberInfo's will be 
+            // create a deep copy of the list (only the MemberInfo's will be
             // copied, not the actual MemberDef's)
             MemberNameInfo *newMni = 0;
-            newMni = new MemberNameInfo(srcMni->memberName()); 
+            newMni = new MemberNameInfo(srcMni->memberName());
 
             // copy the member(s) from the base to the sub class
             MemberNameInfoIterator mnii(*srcMni);
@@ -2984,7 +3010,7 @@ void ClassDef::mergeCategory(ClassDef *category)
   }
   // make methods private for categories defined in the .m file
   //printf("%s::mergeCategory makePrivate=%d\n",name().data(),makePrivate);
-    
+
   MemberNameInfoSDict *srcMnd  = category->memberNameInfoSDict();
   MemberNameInfoSDict *dstMnd  = m_impl->allMemberNameInfoSDict;
 
@@ -3003,7 +3029,7 @@ void ClassDef::mergeCategory(ClassDef *category)
         //if (dstMi)
         //{
         //  Protection prot = dstMi->prot;
-        //  if (makePrivate || isExtension) 
+        //  if (makePrivate || isExtension)
         //  {
         //    prot = Private;
         //    removeMemberFromLists(dstMi->memberDef);
@@ -3023,7 +3049,7 @@ void ClassDef::mergeCategory(ClassDef *category)
         //printf("New member %s\n",srcMni->memberName());
         // create a deep copy of the list
         MemberNameInfo *newMni = 0;
-        newMni = new MemberNameInfo(srcMni->memberName()); 
+        newMni = new MemberNameInfo(srcMni->memberName());
 
         // copy the member(s) from the category to this class
         MemberNameInfoIterator mnii(*srcMni);
@@ -3063,7 +3089,7 @@ void ClassDef::mergeCategory(ClassDef *category)
           newMd->setCategory(category);
           newMd->setCategoryRelation(mi->memberDef);
           mi->memberDef->setCategoryRelation(newMd);
-          if (makePrivate || isExtension) 
+          if (makePrivate || isExtension)
           {
             newMd->makeImplementationDetail();
           }
@@ -3086,9 +3112,9 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
   static bool umlLook = Config_getBool("UML_LOOK");
   if (prot==Private && !extractPrivate) return;
   //printf("%s::addUsedClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
-  if (m_impl->usesImplClassDict==0) 
+  if (m_impl->usesImplClassDict==0)
   {
-    m_impl->usesImplClassDict = new UsesClassDict(17); 
+    m_impl->usesImplClassDict = new UsesClassDict(17);
     m_impl->usesImplClassDict->setAutoDelete(TRUE);
   }
   UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
@@ -3120,9 +3146,9 @@ void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
   static bool umlLook = Config_getBool("UML_LOOK");
   if (prot==Private && !extractPrivate) return;
   //printf("%s::addUsedByClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
-  if (m_impl->usedByImplClassDict==0) 
+  if (m_impl->usedByImplClassDict==0)
   {
-    m_impl->usedByImplClassDict = new UsesClassDict(17); 
+    m_impl->usedByImplClassDict = new UsesClassDict(17);
     m_impl->usedByImplClassDict->setAutoDelete(TRUE);
   }
   UsesClassDef *ucd=m_impl->usedByImplClassDict->find(cd->name());
@@ -3149,8 +3175,8 @@ void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
 
 
 #if 0
-/*! Builds up a dictionary of all classes that are used by the state of this 
- *  class (the "implementation"). 
+/*! Builds up a dictionary of all classes that are used by the state of this
+ *  class (the "implementation").
  *  Must be called before mergeMembers() is called!
  */
 
@@ -3189,7 +3215,7 @@ void ClassDef::determineImplUsageRelation()
               if (arg->name==usedClassName) // type is a template argument
               {
                 found=TRUE;
-                if (m_impl->usesImplClassDict==0) m_impl->usesImplClassDict = new UsesClassDict(257); 
+                if (m_impl->usesImplClassDict==0) m_impl->usesImplClassDict = new UsesClassDict(257);
                 cd = new ClassDef(cd->getDefFileName(),cd->getDefLine(),
                     usedClassName,ClassDef::Class);
                 cd->setIsTemplateBaseClass(count);
@@ -3216,12 +3242,12 @@ void ClassDef::determineImplUsageRelation()
             if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec);
             if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try in-between scopes!
             //printf("Search for class %s result=%p\n",usedClassName.data(),cd);
-            if (cd) // class exists 
+            if (cd) // class exists
             {
               found=TRUE;
-              if (m_impl->usesImplClassDict==0) 
+              if (m_impl->usesImplClassDict==0)
               {
-                m_impl->usesImplClassDict = new UsesClassDict(257); 
+                m_impl->usesImplClassDict = new UsesClassDict(257);
                 m_impl->usesImplClassDict->setAutoDelete(TRUE);
               }
               UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
@@ -3251,7 +3277,7 @@ void ClassDef::determineImplUsageRelation()
     for (;(ucd=ucdi.current());++ucdi)
     {
       msg("  %s via ",ucd->classDef->name().data());
-      QDictIterator<void> dvi(*ucd->accessors); 
+      QDictIterator<void> dvi(*ucd->accessors);
       const char *s;
       for (;(s=dvi.currentKey());++dvi)
       {
@@ -3279,9 +3305,9 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
     if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try in-between scopes!
     if (cd && cd!=this && !isBaseClass(cd))
     {
-      if (m_impl->usesIntfClassDict==0) 
+      if (m_impl->usesIntfClassDict==0)
       {
-        m_impl->usesIntfClassDict = new UsesClassDict(257); 
+        m_impl->usesIntfClassDict = new UsesClassDict(257);
       }
       UsesClassDef *ucd=m_impl->usesIntfClassDict->find(cd->name());
       if (ucd==0)
@@ -3310,7 +3336,7 @@ void ClassDef::determineIntfUsageRelation()
     for (mnii.toFirst();(mi=mnii.current());++mnii)
     {
       MemberDef *md=mi->memberDef;
-      
+
       // compute the protection level for this member
       Protection protect=md->protection();
       if (mi->prot==Protected) // inherited protection
@@ -3318,8 +3344,8 @@ void ClassDef::determineIntfUsageRelation()
         if (protect==Public) protect=Protected;
         else if (protect==Protected) protect=Private;
       }
-      
-      if (!md->name().isEmpty() && md->name()[0]!='@' && 
+
+      if (!md->name().isEmpty() && md->name()[0]!='@' &&
           (mi->prot!=Private && protect!=Private)
          )
       {
@@ -3359,7 +3385,7 @@ QCString ClassDef::compoundTypeString() const
       case Category:  return "category";
       case Exception: return "exception";
       default:        return "unknown";
-    } 
+    }
   }
   else
   {
@@ -3379,8 +3405,8 @@ QCString ClassDef::compoundTypeString() const
   }
 }
 
-QCString ClassDef::getOutputFileBase() const 
-{ 
+QCString ClassDef::getOutputFileBase() const
+{
   if (!Doxygen::generatingXmlOutput)
   {
     static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
@@ -3421,36 +3447,36 @@ QCString ClassDef::getOutputFileBase() const
   else
   {
     // normal locally defined class
-    return convertNameToFile(m_impl->fileName); 
+    return convertNameToFile(m_impl->fileName);
   }
 }
 
-QCString ClassDef::getInstanceOutputFileBase() const 
-{ 
+QCString ClassDef::getInstanceOutputFileBase() const
+{
   if (isReference())
   {
     return m_impl->fileName;
   }
   else
   {
-    return convertNameToFile(m_impl->fileName); 
+    return convertNameToFile(m_impl->fileName);
   }
 }
 
-QCString ClassDef::getFileBase() const 
-{ 
+QCString ClassDef::getFileBase() const
+{
   if (m_impl->templateMaster)
   {
     return m_impl->templateMaster->getFileBase();
   }
   else
   {
-    return m_impl->fileName; 
+    return m_impl->fileName;
   }
 }
 
-QCString ClassDef::getSourceFileBase() const 
-{ 
+QCString ClassDef::getSourceFileBase() const
+{
   if (m_impl->templateMaster)
   {
     return m_impl->templateMaster->getSourceFileBase();
@@ -3552,7 +3578,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
     int startLine, int startColumn, const QCString &templSpec,bool &freshInstance)
 {
   freshInstance = FALSE;
-  if (m_impl->templateInstances==0) 
+  if (m_impl->templateInstances==0)
   {
     m_impl->templateInstances = new QDict<ClassDef>(17);
   }
@@ -3574,7 +3600,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
 
 ClassDef *ClassDef::getVariableInstance(const char *templSpec)
 {
-  if (m_impl->variableInstances==0) 
+  if (m_impl->variableInstances==0)
   {
     m_impl->variableInstances = new QDict<ClassDef>(17);
     m_impl->variableInstances->setAutoDelete(TRUE);
@@ -3730,7 +3756,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
 
   QCString clName = className();
   //bool isGeneric = getLanguage()==SrcLangExt_CSharp;
-  //if (isGeneric && clName.right(2)=="-g") 
+  //if (isGeneric && clName.right(2)=="-g")
   //{
   //  clName = clName.left(clName.length()-2);
   //}
@@ -3901,196 +3927,6 @@ void ClassDef::sortMemberLists()
   }
 }
 
-
-/** Computes for a given list type \a inListType, which are the
- *  the corresponding list type(s) in the base class that are to be
- *  added to this list.
- *
- *  So for public inheritance, the mapping is 1-1, so outListType1=inListType
- *  Private members are to be hidden completely.
- *
- *  For protected inheritance, both protected and public members of the
- *  base class should be joined in the protected member section.
- *
- *  For private inheritance, both protected and public members of the 
- *  base class should be joined in the private member section.
- */
-static void convertProtectionLevel(
-                   MemberListType inListType,
-                   Protection inProt,
-                   int *outListType1,
-                   int *outListType2
-                  )
-{
-  static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
-  // default representing 1-1 mapping
-  *outListType1=inListType;
-  *outListType2=-1;
-  if (inProt==Public)
-  {
-    switch (inListType) // in the private section of the derived class,
-                        // the private section of the base class should not
-                        // be visible
-    {
-      case MemberListType_priMethods:       
-      case MemberListType_priStaticMethods: 
-      case MemberListType_priSlots:         
-      case MemberListType_priAttribs:
-      case MemberListType_priStaticAttribs:
-      case MemberListType_priTypes:
-        *outListType1=-1;
-        *outListType2=-1;
-        break;
-      default:
-        break;
-    }
-  }
-  else if (inProt==Protected) // Protected inheritance
-  {
-    switch (inListType) // in the protected section of the derived class,
-                        // both the public and protected members are shown
-                        // as protected
-    {
-      case MemberListType_pubMethods:       
-      case MemberListType_pubStaticMethods: 
-      case MemberListType_pubSlots:         
-      case MemberListType_pubAttribs:       
-      case MemberListType_pubStaticAttribs: 
-      case MemberListType_pubTypes:         
-      case MemberListType_priMethods:       
-      case MemberListType_priStaticMethods: 
-      case MemberListType_priSlots:         
-      case MemberListType_priAttribs:
-      case MemberListType_priStaticAttribs:
-      case MemberListType_priTypes:
-        *outListType1=-1;
-        *outListType2=-1;
-        break;
-
-      case MemberListType_proMethods:       
-        *outListType2=MemberListType_pubMethods;
-        break;
-      case MemberListType_proStaticMethods: 
-        *outListType2=MemberListType_pubStaticMethods;
-        break;
-      case MemberListType_proSlots:         
-        *outListType2=MemberListType_pubSlots;
-        break;
-      case MemberListType_proAttribs:       
-        *outListType2=MemberListType_pubAttribs;
-        break;
-      case MemberListType_proStaticAttribs: 
-        *outListType2=MemberListType_pubStaticAttribs;
-        break;
-      case MemberListType_proTypes:         
-        *outListType2=MemberListType_pubTypes;
-        break;
-      default: 
-        break;
-    }
-  }
-  else if (inProt==Private)
-  {
-    switch (inListType) // in the private section of the derived class,
-                        // both the public and protected members are shown
-                        // as private
-    {
-      case MemberListType_pubMethods:       
-      case MemberListType_pubStaticMethods: 
-      case MemberListType_pubSlots:         
-      case MemberListType_pubAttribs:       
-      case MemberListType_pubStaticAttribs: 
-      case MemberListType_pubTypes:         
-      case MemberListType_proMethods:       
-      case MemberListType_proStaticMethods: 
-      case MemberListType_proSlots:         
-      case MemberListType_proAttribs:
-      case MemberListType_proStaticAttribs:
-      case MemberListType_proTypes:
-        *outListType1=-1;
-        *outListType2=-1;
-        break;
-
-      case MemberListType_priMethods:       
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubMethods;
-          *outListType2=MemberListType_proMethods;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      case MemberListType_priStaticMethods: 
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubStaticMethods;
-          *outListType2=MemberListType_proStaticMethods;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      case MemberListType_priSlots:         
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubSlots;
-          *outListType1=MemberListType_proSlots;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      case MemberListType_priAttribs:
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubAttribs;
-          *outListType2=MemberListType_proAttribs;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      case MemberListType_priStaticAttribs:
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubStaticAttribs;
-          *outListType2=MemberListType_proStaticAttribs;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      case MemberListType_priTypes:
-        if (extractPrivate)
-        {
-          *outListType1=MemberListType_pubTypes;
-          *outListType2=MemberListType_proTypes;
-        }
-        else
-        {
-          *outListType1=-1;
-          *outListType2=-1;
-        }
-        break;
-      default: 
-        break;
-    }
-  }
-  //printf("convertProtectionLevel(type=%d prot=%d): %d,%d\n",
-  //    inListType,inProt,*outListType1,*outListType2);
-}
-
 int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
                                       int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses)
 {
@@ -4100,7 +3936,7 @@ int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
   MemberList * ml2 = getMemberList((MemberListType)lt2);
   if (getLanguage()!=SrcLangExt_VHDL) // use specific declarations function
   {
-    if (ml) 
+    if (ml)
     {
       ml->countDecMembers();
       count+=ml->numDecMembers();
@@ -4129,7 +3965,7 @@ int ClassDef::countInheritedDecMembers(MemberListType lt,
                                        QPtrDict<void> *visitedClasses)
 {
   int inhCount = 0;
-  int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE)>0;
+  int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
   bool process = count>0;
   //printf("%s: countInheritedDecMembers: lt=%d process=%d count=%d invert=%d\n",
   //    name().data(),lt,process,count,invert);
@@ -4143,15 +3979,18 @@ int ClassDef::countInheritedDecMembers(MemberListType lt,
       {
         ClassDef *icd=ibcd->classDef;
         int lt1,lt2;
-        convertProtectionLevel(lt,ibcd->prot,&lt1,&lt2);
-        //printf("%s: convert %d->(%d,%d) prot=%d\n",
-        //    icd->name().data(),lt,lt1,lt2,ibcd->prot);
-        if (visitedClasses->find(icd)==0) 
+        if (icd->isLinkable())
         {
-          visitedClasses->insert(icd,icd); // guard for multiple virtual inheritance
-          if (lt1!=-1)
+          convertProtectionLevel(lt,ibcd->prot,&lt1,&lt2);
+          //printf("%s: convert %d->(%d,%d) prot=%d\n",
+          //    icd->name().data(),lt,lt1,lt2,ibcd->prot);
+          if (visitedClasses->find(icd)==0)
           {
-            inhCount+=icd->countMemberDeclarations((MemberListType)lt1,inheritedFrom,lt2,FALSE,TRUE,visitedClasses);
+            visitedClasses->insert(icd,icd); // guard for multiple virtual inheritance
+            if (lt1!=-1)
+            {
+              inhCount+=icd->countMemberDeclarations((MemberListType)lt1,inheritedFrom,lt2,FALSE,TRUE,visitedClasses);
+            }
           }
         }
       }
@@ -4172,7 +4011,7 @@ void ClassDef::getTitleForMemberListType(MemberListType type,
     if (lde->kind()==LayoutDocEntry::MemberDecl)
     {
       LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
-      if (lmd->type==type) 
+      if (lmd->type==type)
       {
         title = lmd->title(lang);
         subtitle = lmd->subtitle(lang);
@@ -4235,8 +4074,8 @@ int ClassDef::countMembersIncludingGrouped(MemberListType lt,
 {
   int count=0;
   MemberList *ml = getMemberList(lt);
-  if (ml) 
-  { 
+  if (ml)
+  {
     count=ml->countInheritableMembers(inheritedFrom);
   }
   //printf("%s:countMembersIncludingGrouped: count=%d\n",name().data(),count);
@@ -4246,7 +4085,7 @@ int ClassDef::countMembersIncludingGrouped(MemberListType lt,
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
-      bool hasOwnSection = !mg->allMembersInSameSection() || 
+      bool hasOwnSection = !mg->allMembersInSameSection() ||
                            !m_impl->subGrouping; // group is in its own section
       if ((additional && hasOwnSection) || (!additional && !hasOwnSection))
       {
@@ -4266,7 +4105,7 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
 {
   ol.pushGeneratorState();
   ol.disableAllBut(OutputGenerator::Html);
-  int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE)>0;
+  int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
   bool process = count>0;
   //printf("%s: writeInheritedMemberDec: lt=%d process=%d invert=%d always=%d\n",
   //    name().data(),lt,process,invert,showAlways);
@@ -4279,25 +4118,28 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
       for (it.toFirst();(ibcd=it.current());++it)
       {
         ClassDef *icd=ibcd->classDef;
-        int lt1,lt3;
-        convertProtectionLevel(lt,ibcd->prot,&lt1,&lt3);
-        if (lt2==-1 && lt3!=-1)
-        {
-          lt2=lt3;
-        }
-        //printf("%s:convert %d->(%d,%d) prot=%d\n",icd->name().data(),lt,lt1,lt2,ibcd->prot);
-        if (visitedClasses->find(icd)==0) 
+        if (icd->isLinkable())
         {
-          visitedClasses->insert(icd,icd); // guard for multiple virtual inheritance
-          if (lt1!=-1)
+          int lt1,lt3;
+          convertProtectionLevel(lt,ibcd->prot,&lt1,&lt3);
+          if (lt2==-1 && lt3!=-1)
           {
-            icd->writeMemberDeclarations(ol,(MemberListType)lt1,
-                title,QCString(),FALSE,inheritedFrom,lt2,FALSE /*invert*/,TRUE,visitedClasses);
+            lt2=lt3;
+          }
+          //printf("%s:convert %d->(%d,%d) prot=%d\n",icd->name().data(),lt,lt1,lt2,ibcd->prot);
+          if (visitedClasses->find(icd)==0)
+          {
+            visitedClasses->insert(icd,icd); // guard for multiple virtual inheritance
+            if (lt1!=-1)
+            {
+              icd->writeMemberDeclarations(ol,(MemberListType)lt1,
+                  title,QCString(),FALSE,inheritedFrom,lt2,FALSE,TRUE,visitedClasses);
+            }
+          }
+          else
+          {
+            //printf("%s: class already visited!\n",icd->name().data());
           }
-        }
-        else
-        {
-          //printf("%s: class already visited!\n",icd->name().data());
         }
       }
     }
@@ -4323,29 +4165,26 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
   {
     //printf("%s::writeMemberDeclarations(%s) ml=%p ml2=%p\n",name().data(),title.data(),ml,ml2);
     QCString tt = title, st = subTitle;
-    if (ml) 
+    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,definitionType(),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,definitionType(),FALSE,showInline,inheritedFrom,lt);
     }
     static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB");
     if (!inlineInheritedMembers) // show inherited members as separate lists
     {
-      if (lt!=-1)
-      {
-        QPtrDict<void> visited(17);
-        writeInheritedMemberDeclarations(ol,lt,lt2,title,
-            inheritedFrom ? inheritedFrom : this,
-            invert,showAlways,
-            visitedClasses==0 ? &visited: visitedClasses);
-      }
+      QPtrDict<void> visited(17);
+      writeInheritedMemberDeclarations(ol,lt,lt2,title,
+          inheritedFrom ? inheritedFrom : this,
+          invert,showAlways,
+          visitedClasses==0 ? &visited: visitedClasses);
     }
   }
 }
@@ -4388,91 +4227,91 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol,
 {
   //printf("%s: ClassDef::writePlainMemberDeclaration()\n",name().data());
   MemberList * ml = getMemberList(lt);
-  if (ml) 
+  if (ml)
   {
     ml->setInGroup(inGroup);
-    ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId); 
+    ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId);
   }
 }
 
-bool ClassDef::isLocal() const 
-{ 
-  return m_impl->isLocal; 
+bool ClassDef::isLocal() const
+{
+  return m_impl->isLocal;
 }
 
-ClassSDict *ClassDef::getClassSDict() 
-{ 
-  return m_impl->innerClasses; 
+ClassSDict *ClassDef::getClassSDict()
+{
+  return m_impl->innerClasses;
 }
 
-ClassDef::CompoundType ClassDef::compoundType() const 
-{ 
-  return m_impl->compType; 
-} 
+ClassDef::CompoundType ClassDef::compoundType() const
+{
+  return m_impl->compType;
+}
 
 BaseClassList *ClassDef::baseClasses() const
-{ 
-  return m_impl->inherits; 
+{
+  return m_impl->inherits;
 }
 
 BaseClassList *ClassDef::subClasses() const
-{ 
-  return m_impl->inheritedBy; 
+{
+  return m_impl->inheritedBy;
 }
 
 MemberNameInfoSDict *ClassDef::memberNameInfoSDict() const
-{ 
-  return m_impl->allMemberNameInfoSDict; 
+{
+  return m_impl->allMemberNameInfoSDict;
 }
 
-Protection ClassDef::protection() const 
-{ 
-  return m_impl->prot; 
+Protection ClassDef::protection() const
+{
+  return m_impl->prot;
 }
 
-ArgumentList *ClassDef::templateArguments() const 
-{ 
-  return m_impl->tempArgs; 
+ArgumentList *ClassDef::templateArguments() const
+{
+  return m_impl->tempArgs;
 }
 
 NamespaceDef *ClassDef::getNamespaceDef() const
-{ 
-  return m_impl->nspace; 
+{
+  return m_impl->nspace;
 }
 
-FileDef *ClassDef::getFileDef() const 
-{ 
-  return m_impl->fileDef; 
+FileDef *ClassDef::getFileDef() const
+{
+  return m_impl->fileDef;
 }
 
-QDict<ClassDef> *ClassDef::getTemplateInstances() const 
-{ 
-  return m_impl->templateInstances; 
+QDict<ClassDef> *ClassDef::getTemplateInstances() const
+{
+  return m_impl->templateInstances;
 }
 
-ClassDef *ClassDef::templateMaster() const 
-{ 
-  return m_impl->templateMaster; 
-} 
+ClassDef *ClassDef::templateMaster() const
+{
+  return m_impl->templateMaster;
+}
 
-bool ClassDef::isTemplate() const 
-{ 
-  return m_impl->tempArgs!=0; 
+bool ClassDef::isTemplate() const
+{
+  return m_impl->tempArgs!=0;
 }
 
-IncludeInfo *ClassDef::includeInfo() const 
-{ 
-  return m_impl->incInfo; 
+IncludeInfo *ClassDef::includeInfo() const
+{
+  return m_impl->incInfo;
 }
 
-UsesClassDict *ClassDef::usedImplementationClasses() const 
-{ 
-  return m_impl->usesImplClassDict; 
+UsesClassDict *ClassDef::usedImplementationClasses() const
+{
+  return m_impl->usesImplClassDict;
 }
 
-UsesClassDict *ClassDef::usedByImplementationClasses() const 
-{ 
-  return m_impl->usedByImplClassDict; 
+UsesClassDict *ClassDef::usedByImplementationClasses() const
+{
+  return m_impl->usedByImplClassDict;
 }
 
 UsesClassDict *ClassDef::usedInterfaceClasses() const
@@ -4485,9 +4324,9 @@ bool ClassDef::isTemplateArgument() const
   return m_impl->isTemplArg;
 }
 
-bool ClassDef::isAbstract() const 
-{ 
-  return m_impl->isAbstract || (m_impl->spec&Entry::Abstract); 
+bool ClassDef::isAbstract() const
+{
+  return m_impl->isAbstract || (m_impl->spec&Entry::Abstract);
 }
 
 bool ClassDef::isFinal() const
@@ -4505,69 +4344,69 @@ bool ClassDef::isPublished() const
   return m_impl->spec&Entry::Published;
 }
 
-bool ClassDef::isObjectiveC() const 
-{ 
-  return getLanguage()==SrcLangExt_ObjC; 
+bool ClassDef::isObjectiveC() const
+{
+  return getLanguage()==SrcLangExt_ObjC;
 }
 
-bool ClassDef::isCSharp() const 
-{ 
-  return getLanguage()==SrcLangExt_CSharp; 
+bool ClassDef::isCSharp() const
+{
+  return getLanguage()==SrcLangExt_CSharp;
 }
 
-ClassDef *ClassDef::categoryOf() const 
-{ 
-  return m_impl->categoryOf; 
+ClassDef *ClassDef::categoryOf() const
+{
+  return m_impl->categoryOf;
 }
 
-const QList<MemberList> &ClassDef::getMemberLists() const 
-{ 
-  return m_impl->memberLists; 
+const QList<MemberList> &ClassDef::getMemberLists() const
+{
+  return m_impl->memberLists;
 }
 
-MemberGroupSDict *ClassDef::getMemberGroupSDict() const 
-{ 
-  return m_impl->memberGroupSDict; 
+MemberGroupSDict *ClassDef::getMemberGroupSDict() const
+{
+  return m_impl->memberGroupSDict;
 }
 
-void ClassDef::setNamespace(NamespaceDef *nd) 
-{ 
-  m_impl->nspace = nd; 
+void ClassDef::setNamespace(NamespaceDef *nd)
+{
+  m_impl->nspace = nd;
 }
 
-void ClassDef::setFileDef(FileDef *fd) 
-{ 
-  m_impl->fileDef=fd; 
+void ClassDef::setFileDef(FileDef *fd)
+{
+  m_impl->fileDef=fd;
 }
 
-void ClassDef::setSubGrouping(bool enabled) 
-{ 
-  m_impl->subGrouping = enabled; 
+void ClassDef::setSubGrouping(bool enabled)
+{
+  m_impl->subGrouping = enabled;
 }
 
-void ClassDef::setProtection(Protection p) 
-{ 
-  m_impl->prot=p; 
+void ClassDef::setProtection(Protection p)
+{
+  m_impl->prot=p;
 }
 
-void ClassDef::setIsStatic(bool b) 
-{ 
-  m_impl->isStatic=b; 
+void ClassDef::setIsStatic(bool b)
+{
+  m_impl->isStatic=b;
 }
 
-void ClassDef::setCompoundType(CompoundType t) 
-{ 
-  m_impl->compType = t; 
-} 
+void ClassDef::setCompoundType(CompoundType t)
+{
+  m_impl->compType = t;
+}
 
-void ClassDef::setTemplateMaster(ClassDef *tm) 
-{ 
-  m_impl->templateMaster=tm; 
+void ClassDef::setTemplateMaster(ClassDef *tm)
+{
+  m_impl->templateMaster=tm;
 }
 
-void ClassDef::makeTemplateArgument(bool b) 
-{ 
-  m_impl->isTemplArg = b; 
+void ClassDef::makeTemplateArgument(bool b)
+{
+  m_impl->isTemplArg = b;
 }
 
 void ClassDef::setCategoryOf(ClassDef *cd)
@@ -4625,7 +4464,7 @@ QCString ClassDef::anchor() const
     else
     {
       // normal locally defined class
-      anc = convertNameToFile(m_impl->fileName); 
+      anc = convertNameToFile(m_impl->fileName);
     }
   }
   return anc;
@@ -4638,12 +4477,12 @@ bool ClassDef::isEmbeddedInOuterScope() const
 
   Definition *container = getOuterScope();
 
-  bool containerLinkable = 
-    container && 
+  bool containerLinkable =
+    container &&
        (
         (container==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || // global class in documented file
         container->isLinkableInProject() // class in documented scope
-       ); 
+       );
 
   // inline because of INLINE_GROUPED_CLASSES=YES ?
   bool b1 = (inlineGroupedClasses && partOfGroups()!=0); // a grouped class
@@ -4715,8 +4554,32 @@ bool ClassDef::isExtension() const
   QCString n = name();
   int si = n.find('(');
   int ei = n.find(')');
-  bool b = ei>si && n.mid(si+1,ei-si-1).stripWhiteSpace().isEmpty(); 
+  bool b = ei>si && n.mid(si+1,ei-si-1).stripWhiteSpace().isEmpty();
   return b;
 }
 
+const ClassSDict *ClassDef::innerClasses() const
+{
+  return m_impl->innerClasses;
+}
+
+const FileList &ClassDef::usedFiles() const
+{
+  return m_impl->files;
+}
+
+const ArgumentList *ClassDef::typeConstraints() const
+{
+  return m_impl->typeConstraints;
+}
+
+const ExampleSDict *ClassDef::exampleList() const
+{
+  return m_impl->exampleSDict;
+}
+
+bool ClassDef::subGrouping() const
+{
+  return m_impl->subGrouping;
+}
 
index 494b8f2..4e76117 100644 (file)
@@ -31,6 +31,7 @@ class ClassList;
 class ClassSDict;
 class OutputList;
 class FileDef;
+class FileList;
 class BaseClassList;
 class NamespaceDef;
 class MemberDef;
@@ -75,7 +76,6 @@ class ClassDef : public Definition
      *  \param startColumn column number where the definition of this compound
      *                   starts.
      *  \param name      the name of this compound (including scope)
-     *  \param symId     unique Id for this symbol
      *  \param ct        the kind of Compound
      *  \param ref       the tag file from which this compound is extracted
      *                   or 0 if the compound doesn't come from a tag file
@@ -125,6 +125,9 @@ class ClassDef : public Definition
     /** returns TRUE if this class has documentation */
     bool hasDocumentation() const;
 
+    /** returns TRUE if this class has a non-empty detailed description */
+    bool hasDetailedDescription() const;
+
     /** Returns the name as it is appears in the documentation */
     QCString displayName(bool includeScope=TRUE) const;
 
@@ -301,6 +304,19 @@ class ClassDef : public Definition
     bool isJavaEnum() const;
 
     bool isGeneric() const;
+    const ClassSDict *innerClasses() const;
+    QCString title() const;
+
+    QCString generatedFromFiles() const;
+    const FileList &usedFiles() const;
+
+    QCString includeStatement() const;
+
+    const ArgumentList *typeConstraints() const;
+    const ExampleSDict *exampleList() const;
+    bool hasExamples() const;
+    QCString getMemberListFileName() const;
+    bool subGrouping() const;
 
     //-----------------------------------------------------------------------------------
     // --- setters ----
@@ -310,7 +326,7 @@ class ClassDef : public Definition
     void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
     void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force); 
     void insertMember(MemberDef *);
-    void insertUsedFile(const char *);
+    void insertUsedFile(FileDef *);
     bool addExample(const char *anchor,const char *name, const char *file);
     void mergeCategory(ClassDef *category);
     void setNamespace(NamespaceDef *nd);
@@ -367,12 +383,12 @@ class ClassDef : public Definition
     void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
                               ClassDef *inheritedFrom,const QCString &inheritId);
     int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
+    int countInheritanceNodes();
     
     bool visited;
 
   protected:
     void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
-    bool hasExamples();
     bool hasNonReferenceSuperClass();
     void showUsedFiles(OutputList &ol);
 
@@ -380,7 +396,6 @@ class ClassDef : public Definition
     void writeTagFileMarker();
     void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
     void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
-    QCString getMemberListFileName() const;
     void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
     MemberList *createMemberList(MemberListType lt);
     void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title,ClassDef *inheritedFrom,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
index da5bf5a..f19c374 100644 (file)
@@ -1,12 +1,12 @@
 /******************************************************************************
  *
- * 
+ *
  *
  * 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 
- * 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.
  *
@@ -39,8 +39,8 @@ static int compItems(void *item1,void *item2)
   ClassDef *c2=(ClassDef *)item2;
   static bool b = Config_getBool("SORT_BY_SCOPE_NAME");
   //printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data());
-  if (b) 
-  { 
+  if (b)
+  {
      return qstricmp(c1->name(),
                     c2->name());
   }
@@ -76,13 +76,13 @@ bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
     ClassDef *cd=0;
     for (sdi.toFirst();(cd=sdi.current());++sdi)
     {
-      if (cd->name().find('@')==-1 && 
+      if (cd->name().find('@')==-1 &&
           (filter==0 || *filter==cd->compoundType())
          )
       {
         bool isLink = cd->isLinkable();
-        if (isLink || 
-             (!hideUndocClasses && 
+        if (isLink ||
+             (!hideUndocClasses &&
               (!cd->isLocal() || extractLocalClasses)
              )
            )
@@ -107,8 +107,8 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
     for (sdi.toFirst();(cd=sdi.current());++sdi)
     {
       //printf("  ClassSDict::writeDeclaration for %s\n",cd->name().data());
-      if (cd->name().find('@')==-1 && 
-          !cd->isExtension() && 
+      if (cd->name().find('@')==-1 &&
+          !cd->isExtension() &&
           (cd->protection()!=Private || extractPrivate) &&
           (filter==0 || *filter==cd->compoundType())
          )
@@ -119,7 +119,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
     if (found) ol.endMemberList();
   }
 }
-  
+
 void ClassSDict::writeDocumentation(OutputList &ol,Definition * container)
 {
   static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
@@ -140,7 +140,7 @@ void ClassSDict::writeDocumentation(OutputList &ol,Definition * container)
       //  cd->name().data(),cd->getOuterScope(),cd->isEmbeddedInOuterScope(),
       //  container);
 
-      if (cd->name().find('@')==-1 && 
+      if (cd->name().find('@')==-1 &&
           cd->isLinkableInProject() &&
           cd->isEmbeddedInOuterScope() &&
           (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group
index f148085..c728be3 100644 (file)
@@ -132,6 +132,9 @@ CommandMap cmdMap[] =
   { "docbookonly",   CMD_DBONLY },
   { "enddocbookonly",CMD_ENDDBONLY },
   { "endinternal",   CMD_ENDINTERNAL },
+  { "parblock",      CMD_PARBLOCK },
+  { "endparblock",   CMD_ENDPARBLOCK },
+  { "diafile",       CMD_DIAFILE },
   { 0,               0 },
 };
 
index 88028f1..0017c02 100644 (file)
@@ -121,7 +121,10 @@ enum CommandType
   CMD_VHDLFLOW     = 91,
   CMD_DBONLY       = 92,
   CMD_ENDDBONLY    = 93,
-  CMD_ENDINTERNAL  = 94
+  CMD_ENDINTERNAL  = 94,
+  CMD_PARBLOCK     = 95,
+  CMD_ENDPARBLOCK  = 96,
+  CMD_DIAFILE      = 97
 };
 
 enum HtmlTagType
index 490a847..8aadc0b 100644 (file)
@@ -29,7 +29,8 @@ class Definition;
 void parseCCode(CodeOutputInterface &,const char *,const QCString &, 
             SrcLangExt lang, bool isExample, const char *exName,FileDef *fd,
             int startLine,int endLine,bool inlineFragment,
-            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx);
+            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx,
+            bool collectXRefs);
 void resetCCodeParserState();
 void codeFreeScanner();
 
index 3aa9837..ba35f7d 100644 (file)
@@ -123,6 +123,7 @@ static bool          g_lexInit = FALSE;
 static QStack<int>   g_classScopeLengthStack;
 
 static Definition   *g_searchCtx;
+static bool          g_collectXRefs;
 
 // context for an Objective-C method call
 struct ObjCCallCtx
@@ -398,7 +399,7 @@ static CallContext g_theCallContext;
 static void pushScope(const char *s)
 {
   g_classScopeLengthStack.push(new int(g_classScope.length()));
-  if (g_classScope.isEmpty())
+  if (g_classScope.isEmpty() || leftScopeMatch(s,g_classScope))
   {
     g_classScope = s;
   }
@@ -885,7 +886,7 @@ static bool getLinkInScope(const QCString &c,  // scope
       //        g_currentDefinition,g_currentMemberDef,g_insideBody);
 
       if (g_currentDefinition && g_currentMemberDef &&
-         md!=g_currentMemberDef && g_insideBody)
+          md!=g_currentMemberDef && g_insideBody && g_collectXRefs)
       {
        addDocCrossReference(g_currentMemberDef,md);
       }
@@ -1018,7 +1019,8 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
       Definition *d = md->getOuterScope()==Doxygen::globalScope ?
                       md->getFileDef() : md->getOuterScope();
       if (md->getGroupDef()) d = md->getGroupDef();
-      if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
+      if (d && d->isLinkable() && md->isLinkable() && 
+          g_currentMemberDef && g_collectXRefs)
       {
         addDocCrossReference(g_currentMemberDef,md);
       }
@@ -1071,7 +1073,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
          }
          writeMultiLineCodeLink(ol,md,text);
           addToSearchIndex(clName);
-         if (g_currentMemberDef)
+         if (g_currentMemberDef && g_collectXRefs)
          {
            addDocCrossReference(g_currentMemberDef,md);
          }
@@ -1127,7 +1129,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
     {
       // add usage reference
       if (g_currentDefinition && g_currentMemberDef &&
-         /*xmd!=g_currentMemberDef &&*/ g_insideBody)
+         /*xmd!=g_currentMemberDef &&*/ g_insideBody && g_collectXRefs)
       {
        addDocCrossReference(g_currentMemberDef,xmd);
       }
@@ -1504,7 +1506,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
            if (ctx->method && ctx->method->isLinkable())
            {
               writeMultiLineCodeLink(*g_code,ctx->method,pName->data());
-             if (g_currentMemberDef)
+             if (g_currentMemberDef && g_collectXRefs)
              {
                addDocCrossReference(g_currentMemberDef,ctx->method);
              }
@@ -1583,7 +1585,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
            else if (ctx->objectVar && ctx->objectVar->isLinkable()) // object is class variable
            {
              writeMultiLineCodeLink(*g_code,ctx->objectVar,pObject->data());
-             if (g_currentMemberDef)
+             if (g_currentMemberDef && g_collectXRefs)
              {
                addDocCrossReference(g_currentMemberDef,ctx->objectVar);
              }
@@ -2600,7 +2602,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
                                            BEGIN( g_lastStringContext );
                                           }
                                         }
-<RawString>[^)]+                        { g_code->codify(yytext); }
+<RawString>[^)\n]+                      { g_code->codify(yytext); }
 <RawString>.                            { g_code->codify(yytext); }
 <RawString>\n                           { codifyLines(yytext); }
 <SkipVerbString>[^"\n]+                        {
@@ -3537,13 +3539,18 @@ void resetCCodeParserState()
 }
 
 void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, 
-                  SrcLangExt lang,bool exBlock, const char *exName,FileDef *fd,
-                 int startLine,int endLine,bool inlineFragment,
-                 MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx)
+                SrcLangExt lang,bool exBlock, const char *exName,FileDef *fd,
+               int startLine,int endLine,bool inlineFragment,
+               MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx,
+                bool collectXRefs)
 {
   //printf("***parseCode() exBlock=%d exName=%s fd=%p className=%s searchCtx=%s\n",
   //      exBlock,exName,fd,className,searchCtx?searchCtx->name().data():"<none>");
+
   if (s.isEmpty()) return;
+
+  printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
+
   TooltipManager::instance()->clearTooltips();
   if (g_codeClassSDict==0)
   {
@@ -3555,6 +3562,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
   g_currentFontClass = 0;
   g_needsTermination = FALSE;
   g_searchCtx = searchCtx;
+  g_collectXRefs = collectXRefs;
   g_inFunctionTryBlock = FALSE;
   if (endLine!=-1)
     g_inputLines  = endLine+1;
@@ -3633,6 +3641,8 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
     delete g_sourceFileDef;
     g_sourceFileDef=0;
   }
+
+  printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
   return;
 }
 
index 09230eb..d59ef51 100644 (file)
@@ -78,6 +78,7 @@ static int      g_blockCount;
 static bool     g_lastEscaped;
 static int      g_lastBlockContext;
 static bool     g_pythonDocString;
+static int      g_nestingCount;
 
 static SrcLangExt g_lang;
 static bool       isFixedForm; // For Fortran
@@ -240,9 +241,12 @@ void replaceComment(int offset);
 
 %%
 
-<Scan>[^"'!\/\n\\#\\-]*           { /* eat anything that is not " / or \n */ 
-                                     copyToOutput(yytext,(int)yyleng); 
-                                  }
+<Scan>[^"'!\/\n\\#-,]*              { /* eat anything that is not " / , or \n */ 
+                                       copyToOutput(yytext,(int)yyleng);
+                                    }
+<Scan>[,]                           { /* eat , so we have a nice separator in long initialization lines */ 
+                                       copyToOutput(yytext,(int)yyleng);
+                                    }
 <Scan>"\"\"\""!                     { /* start of python long comment */
                                      if (g_lang!=SrcLangExt_Python)
                                     {
@@ -251,7 +255,8 @@ void replaceComment(int offset);
                                     else
                                     {
                                        g_pythonDocString = TRUE;
-                                       copyToOutput(yytext,(int)yyleng); 
+                                       g_nestingCount=0;
+                                       copyToOutput(yytext,(int)yyleng);
                                       BEGIN(CComment);
                                     }
                                    }
@@ -263,6 +268,7 @@ void replaceComment(int offset);
                                     else
                                     {
                                        copyToOutput(yytext,(int)yyleng); 
+                                       g_nestingCount=0;
                                       BEGIN(CComment);
                                     }
                                   }
@@ -277,6 +283,7 @@ void replaceComment(int offset);
                                        if (isFixedForm && (g_col == 0))
                                        {
                                          copyToOutput(yytext,(int)yyleng); 
+                                         g_nestingCount=0;
                                         BEGIN(CComment);
                                       }
                                       else
@@ -365,8 +372,12 @@ void replaceComment(int offset);
                                     g_readLineCtx=YY_START;
                                     BEGIN(ReadLine);
                                   }
+<Scan>"/**/"                       { /* avoid matching next rule for empty C comment, see bug 711723 */
+                                     copyToOutput(yytext,(int)yyleng);
+                                   }
 <Scan>"/*"[*!]?                           { /* start of a C comment */
                                     g_specialComment=(int)yyleng==3;
+                                     g_nestingCount=0;
                                      copyToOutput(yytext,(int)yyleng); 
                                     BEGIN(CComment); 
                                    }
@@ -378,6 +389,7 @@ void replaceComment(int offset);
                                     else
                                     {
                                        copyToOutput(yytext,(int)yyleng); 
+                                       g_nestingCount=0;
                                       BEGIN(CComment);
                                     }
                                   }
@@ -389,6 +401,7 @@ void replaceComment(int offset);
                                     else
                                     {
                                        copyToOutput(yytext,(int)yyleng); 
+                                       g_nestingCount=0;
                                       BEGIN(CComment);
                                     }
                                   }
@@ -400,6 +413,7 @@ void replaceComment(int offset);
                                     else
                                     {
                                        copyToOutput(yytext,(int)yyleng); 
+                                       g_nestingCount=0;
                                       BEGIN(CComment);
                                     }
                                   }
@@ -564,7 +578,7 @@ void replaceComment(int offset);
                                      copyToOutput(yytext,(int)yyleng); 
                                    }
 
-<CComment>[^\\!@*\n{\"]*           { /* anything that is not a '*' or command */ 
+<CComment>[^\\!@*\n{\"\/]*           { /* anything that is not a '*' or command */ 
                                      copyToOutput(yytext,(int)yyleng); 
                                    }
 <CComment>"*"+[^*/\\@\n{\"]*       { /* stars without slashes */
@@ -590,6 +604,10 @@ void replaceComment(int offset);
                                       BEGIN(Scan);
                                     }
                                    }
+<CComment>"/"+"*"                  { /* nested C comment */
+                                     g_nestingCount++;
+                                     copyToOutput(yytext,(int)yyleng); 
+                                   }
 <CComment>"*"+"/"                  { /* end of C comment */
                                      if (g_lang==SrcLangExt_Python)
                                     {
@@ -597,8 +615,15 @@ void replaceComment(int offset);
                                     }
                                     else
                                     {
-                                      copyToOutput(yytext,(int)yyleng);
-                                      BEGIN(Scan);
+                                       if (g_nestingCount<=0)
+                                       {
+                                        copyToOutput(yytext,(int)yyleng);
+                                        BEGIN(Scan);
+                                       }
+                                       else
+                                       {
+                                         g_nestingCount--;
+                                       }
                                     }
                                    }
 <CComment>"\n"/[ \t]*[^#]         { /* end of Python comment */
@@ -927,6 +952,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
   g_condStack.clear();
   g_condStack.setAutoDelete(TRUE);
 
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
   isFixedForm = FALSE;
   if (g_lang==SrcLangExt_Fortran)
   {
@@ -935,6 +961,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
 
   if (g_lang==SrcLangExt_Markdown)
   {
+    g_nestingCount=0;
     BEGIN(CComment);
   }
   else
@@ -955,6 +982,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
     g_outBuf->at(g_outBuf->curPos())='\0';
     msg("-------------\n%s\n-------------\n",g_outBuf->data());
   }
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 
index 886c2dd..0d08e5c 100644 (file)
@@ -118,6 +118,8 @@ static bool handleExtends(const QCString &);
 static bool handleCopyDoc(const QCString &);
 static bool handleCopyBrief(const QCString &);
 static bool handleCopyDetails(const QCString &);
+static bool handleParBlock(const QCString &);
+static bool handleEndParBlock(const QCString &);
 
 typedef bool (*DocCmdFunc)(const QCString &name);
 
@@ -170,6 +172,8 @@ static DocCmdMap docCmdMap[] =
   { "relates",         &handleRelated,          TRUE  },
   { "relatedalso",     &handleRelatedAlso,      TRUE  },
   { "relatesalso",     &handleRelatedAlso,      TRUE  },
+  { "parblock",        &handleParBlock,         TRUE  },
+  { "endparblock",     &handleEndParBlock,      TRUE  },
   { "refitem",         &handleRefItem,          TRUE  },
   { "cite",            &handleCite,             FALSE },
   { "subpage",         &handleSubpage,          TRUE  },
@@ -178,7 +182,7 @@ static DocCmdMap docCmdMap[] =
   { "subsubsection",   &handleSection,          TRUE  },
   { "paragraph",       &handleSection,          TRUE  },
   { "anchor",          &handleAnchor,           TRUE  },
-  { "verbatim",        &handleFormatBlock,      TRUE },
+  { "verbatim",        &handleFormatBlock,      TRUE  },
   { "latexonly",       &handleFormatBlock,      FALSE },
   { "htmlonly",        &handleFormatBlock,      FALSE },
   { "xmlonly",         &handleFormatBlock,      FALSE },
@@ -421,6 +425,8 @@ static QCString         g_copyDocArg;
 static QCString         g_guardExpr;
 static int              g_roundCount;
 
+static bool             g_insideParBlock;
+
 //-----------------------------------------------------------------------------
 
 static QStack<Grouping> g_autoGroupStack;
@@ -437,6 +443,7 @@ static void initParser()
   g_sectionLabel.resize(0);
   g_sectionTitle.resize(0);
   g_memberGroupHeader.resize(0);
+  g_insideParBlock = FALSE;
 }
 
 //-----------------------------------------------------------------------------
@@ -1040,7 +1047,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                             int i=0;
                                             while (yytext[i]==' ' || yytext[i]=='\t') i++;
                                            g_spaceBeforeCmd = QCString(yytext).left(i);
-                                           if (cmdPtr->endsBrief)
+                                           if (cmdPtr->endsBrief && inContext!=OutputXRef) 
                                            { 
                                              briefEndsAtDot=FALSE;
                                              // this command forces the end of brief description
@@ -1192,7 +1199,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                          if (inContext==OutputXRef)
                                          {
                                            // see bug 613024, we need to put the newlines after ending the XRef section.
-                                           setOutput(OutputDoc);
+                                           if (!g_insideParBlock) setOutput(OutputDoc);
                                             int i;
                                             for (i=0;i<yyleng;)
                                             {
@@ -2389,6 +2396,31 @@ static bool handleXRefItem(const QCString &)
   return FALSE;
 }
 
+static bool handleParBlock(const QCString &)
+{
+  if (g_insideParBlock)
+  {
+    warn(yyFileName,yyLineNr,
+       "found \\parblock command while already in a parblock!");
+  }
+  addOutput("@parblock ");
+  g_insideParBlock = TRUE;
+  return FALSE;
+}
+
+static bool handleEndParBlock(const QCString &)
+{
+  if (!g_insideParBlock)
+  {
+    warn(yyFileName,yyLineNr,
+       "found \\endparblock command without matching \\parblock!");
+  }
+  addOutput("@endparblock");
+  setOutput(OutputDoc); // to end a parblock inside a xrefitem like context
+  g_insideParBlock = FALSE;
+  return FALSE;
+}
+
 static bool handleRelated(const QCString &)
 {
   BEGIN(RelatesParam1);
@@ -2786,6 +2818,7 @@ bool parseCommentBlock(/* in */     ParserInterface *parser,
   g_spaceBeforeCmd.resize(0);
   g_spaceBeforeIf.resize(0);
 
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName ? fileName.data(): NULL);
   if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
   {
     current->inbodyDocs+="\n\n";
@@ -2795,9 +2828,9 @@ bool parseCommentBlock(/* in */     ParserInterface *parser,
                "input=[\n%s]\n",fileName.data(),lineNr,comment.data()
               );
   
-  commentScanYYrestart( commentScanYYin );
+  commentscanYYrestart( commentscanYYin );
   BEGIN( Comment );
-  commentScanYYlex();
+  commentscanYYlex();
   setOutput( OutputDoc );
 
   if (YY_START==OverloadParam) // comment ended with \overload
@@ -2810,6 +2843,12 @@ bool parseCommentBlock(/* in */     ParserInterface *parser,
     warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
   }
 
+  if (g_insideParBlock)
+  {
+    warn(yyFileName,yyLineNr,
+       "Documentation block ended while inside a \\parblock. Missing \\endparblock");
+  }
+
   current->doc=stripLeadingAndTrailingEmptyLines(current->doc,current->docLine);
 
   if (current->section==Entry::FILEDOC_SEC && current->doc.isEmpty())
@@ -2856,6 +2895,7 @@ bool parseCommentBlock(/* in */     ParserInterface *parser,
   //printf("position=%d parseMore=%d newEntryNeeded=%d\n",
   //  position,parseMore,newEntryNeeded);
 
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName ? fileName.data(): NULL);
   return parseMore;
 }
 
@@ -3074,7 +3114,7 @@ static void handleGuard(const QCString &expr)
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
 //----------------------------------------------------------------------------
 extern "C" { // some bogus code to keep the compiler happy
-  void commentScanYYdummy() { yy_flex_realloc(0,0); } 
+  void commentscanYYdummy() { yy_flex_realloc(0,0); } 
 }
 #endif
 
index d623c5f..c1eb0ab 100644 (file)
       <xsd:element name="rtfonly" type="xsd:string" />
       <xsd:element name="latexonly" type="xsd:string" />
       <xsd:element name="dot" type="xsd:string" />
+      <xsd:element name="msc" type="xsd:string" />
       <xsd:element name="anchor" type="docAnchorType" />
       <xsd:element name="formula" type="docFormulaType" />
       <xsd:element name="ref" type="docRefTextType" />
       <xsd:element name="table" type="docTableType" />
       <xsd:element name="heading" type="docHeadingType" />
       <xsd:element name="image" type="docImageType" />
-      <xsd:element name="dotfile" type="docDotFileType" />
+      <xsd:element name="dotfile" type="docFileType" />
+      <xsd:element name="mscfile" type="docFileType" />
+      <xsd:element name="diafile" type="docFileType" />
       <xsd:element name="toclist" type="docTocListType" />
       <xsd:element name="language" type="docLanguageType" />
       <xsd:element name="parameterlist" type="docParamListType" />
       <xsd:element name="xrefsect" type="docXRefSectType" />
       <xsd:element name="copydoc" type="docCopyType" />
       <xsd:element name="blockquote" type="docBlockQuoteType" />
+      <xsd:element name="parblock" type="docParBlockType" />
     </xsd:choice>
   </xsd:group>
 
     <xsd:attribute name="height" type="xsd:string" /> 
   </xsd:complexType>
 
-  <xsd:complexType name="docDotFileType" mixed="true">
+  <xsd:complexType name="docFileType" mixed="true">
     <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
     <xsd:attribute name="name" type="xsd:string" /> 
   </xsd:complexType>
     </xsd:sequence>
   </xsd:complexType>
 
+  <xsd:complexType name="docParBlockType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
   <xsd:complexType name="docCharType">
     <xsd:attribute name="char" type="DoxCharRange"/> 
   </xsd:complexType>
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
deleted file mode 100644 (file)
index 8ec3633..0000000
+++ /dev/null
@@ -1,926 +0,0 @@
-"<?xml version='1.0' encoding='utf-8' ?>\n"
-"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
-"  <xsd:element name=\"doxygen\" type=\"DoxygenType\"/>\n"
-"\n"
-"  <!-- Complex types -->\n"
-"\n"
-"  <xsd:complexType name=\"DoxygenType\">\n"
-"    <xsd:sequence maxOccurs=\"unbounded\">\n"
-"      <xsd:element name=\"compounddef\" type=\"compounddefType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"version\" type=\"DoxVersionNumber\" use=\"required\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"compounddefType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"compoundname\" type=\"xsd:string\"/>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"basecompoundref\" type=\"compoundRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"derivedcompoundref\" type=\"compoundRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"includes\" type=\"incType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"includedby\" type=\"incType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"incdepgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"invincdepgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"innerdir\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"innerfile\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"innerclass\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"innernamespace\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"innerpage\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"innergroup\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"sectiondef\" type=\"sectiondefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"inheritancegraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"collaborationgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"programlisting\" type=\"listingType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"location\" type=\"locationType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"listofallmembers\" type=\"listofallmembersType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"kind\" type=\"DoxCompoundKind\" />\n"
-"    <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-"    <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"abstract\" type=\"DoxBool\" use=\"optional\"/>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"listofallmembersType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"member\" type=\"memberRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"memberRefType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"scope\" />\n"
-"      <xsd:element name=\"name\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-"    <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-"    <xsd:attribute name=\"ambiguityscope\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"compoundRefType\">\n"
-"    <xsd:simpleContent>\n"
-"      <xsd:extension base=\"xsd:string\">\n"
-"        <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"optional\" />\n"
-"        <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-"        <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-"      </xsd:extension>\n"
-"    </xsd:simpleContent>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"reimplementType\">\n"
-"    <xsd:simpleContent>\n"
-"      <xsd:extension base=\"xsd:string\">\n"
-"        <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"      </xsd:extension>\n"
-"    </xsd:simpleContent>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"incType\">\n"
-"    <xsd:simpleContent>\n"
-"      <xsd:extension base=\"xsd:string\">\n"
-"        <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"        <xsd:attribute name=\"local\" type=\"DoxBool\" />\n"
-"      </xsd:extension>\n"
-"    </xsd:simpleContent>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"refType\">\n"
-"    <xsd:simpleContent>\n"
-"      <xsd:extension base=\"xsd:string\">\n"
-"        <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"        <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" use=\"optional\"/>\n"
-"      </xsd:extension>\n"
-"    </xsd:simpleContent>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"refTextType\">\n"
-"    <xsd:simpleContent>\n"
-"      <xsd:extension base=\"xsd:string\">\n"
-"       <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"       <xsd:attribute name=\"kindref\" type=\"DoxRefKind\" />\n"
-"       <xsd:attribute name=\"external\" type=\"xsd:string\" use=\"optional\"/>\n"
-"       <xsd:attribute name=\"tooltip\" type=\"xsd:string\" use=\"optional\"/>\n"
-"      </xsd:extension>\n"
-"    </xsd:simpleContent>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"sectiondefType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"header\" type=\"xsd:string\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"description\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"memberdef\" type=\"memberdefType\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"kind\" type=\"DoxSectionKind\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"memberdefType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"definition\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"argsstring\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"name\" />\n"
-"      <xsd:element name=\"read\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"write\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"bitfield\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"reimplements\" type=\"reimplementType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"reimplementedby\" type=\"reimplementType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"param\" type=\"paramType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"enumvalue\" type=\"enumvalueType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"initializer\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"exceptions\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"inbodydescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"location\" type=\"locationType\" />\n"
-"      <xsd:element name=\"references\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"referencedby\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"kind\" type=\"DoxMemberKind\" />\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-"    <xsd:attribute name=\"static\" type=\"DoxBool\" />\n"
-"    <xsd:attribute name=\"const\" type=\"DoxBool\" />\n"
-"    <xsd:attribute name=\"explicit\" type=\"DoxBool\" />\n"
-"    <xsd:attribute name=\"inline\" type=\"DoxBool\" />\n"
-"    <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-"    <xsd:attribute name=\"volatile\" type=\"DoxBool\" />\n"
-"    <xsd:attribute name=\"mutable\" type=\"DoxBool\" />\n"
-"    <!-- Qt property -->\n"
-"    <xsd:attribute name=\"readable\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"writable\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- C++/CLI variable -->\n"
-"    <xsd:attribute name=\"initonly\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- C++/CLI and C# property -->\n"
-"    <xsd:attribute name=\"settable\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"gettable\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- C++/CLI function -->\n"
-"    <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"new\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- C++/CLI event -->\n"
-"    <xsd:attribute name=\"add\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"remove\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"raise\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- Objective-C 2.0 protocol method -->\n"
-"    <xsd:attribute name=\"optional\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <!-- Objective-C 2.0 property accessor -->\n"
-"    <xsd:attribute name=\"accessor\" type=\"DoxAccessor\" use=\"optional\"/>\n"
-"    <!-- UNO IDL -->\n"
-"    <xsd:attribute name=\"attribute\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"property\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"readonly\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"bound\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"removable\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"contrained\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"transient\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"maybevoid\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"maybedefault\" type=\"DoxBool\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"maybeambiguous\" type=\"DoxBool\" use=\"optional\"/>\n"
-"\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" minOccurs=\"0\"/>           \n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"enumvalueType\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"name\" />\n"
-"      <xsd:element name=\"initializer\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"templateparamlistType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"param\" type=\"paramType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"paramType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"declname\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"defname\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"array\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"defval\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"linkedTextType\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"    <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"graphType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"node\" type=\"nodeType\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"nodeType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"label\" />\n"
-"      <xsd:element name=\"link\" type=\"linkType\" minOccurs=\"0\" />\n"
-"      <xsd:element name=\"childnode\" type=\"childnodeType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"childnodeType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"edgelabel\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"relation\" type=\"DoxGraphRelation\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"linkType\">\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"external\" type=\"xsd:string\" use=\"optional\"/>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"listingType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"codeline\" type=\"codelineType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"codelineType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"highlight\" type=\"highlightType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"lineno\" type=\"xsd:integer\" />\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"refkind\" type=\"DoxRefKind\" />\n"
-"    <xsd:attribute name=\"external\" type=\"DoxBool\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"highlightType\" mixed=\"true\">\n"
-"    <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n"
-"      <xsd:element name=\"sp\" />\n"
-"      <xsd:element name=\"ref\" type=\"refTextType\" />\n"
-"    </xsd:choice>\n"
-"    <xsd:attribute name=\"class\" type=\"DoxHighlightClass\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"referenceType\" mixed=\"true\">\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"compoundref\" type=\"xsd:string\" use=\"optional\" />\n"
-"    <xsd:attribute name=\"startline\" type=\"xsd:integer\" />\n"
-"    <xsd:attribute name=\"endline\" type=\"xsd:integer\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"locationType\">\n"
-"    <xsd:attribute name=\"file\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"line\" type=\"xsd:integer\" />\n"
-"    <xsd:attribute name=\"column\" type=\"xsd:integer\" use=\"optional\"/>\n"
-"    <xsd:attribute name=\"bodyfile\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"bodystart\" type=\"xsd:integer\" />\n"
-"    <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docSect1Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" />          \n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalS1Type\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docSect2Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" />          \n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalS2Type\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docSect3Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" />          \n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect4\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalS3Type\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docSect4Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"xsd:string\" />          \n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalS4Type\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docInternalType\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\"  type=\"docParaType\"  minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docInternalS1Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\"  type=\"docParaType\"  minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docInternalS2Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\"  type=\"docParaType\"  minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docInternalS3Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\"  type=\"docParaType\"  minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect3\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docInternalS4Type\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\"  type=\"docParaType\"  minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-" \n"
-"  <xsd:group name=\"docTitleCmdGroup\">\n"
-"    <xsd:choice>\n"
-"      <xsd:element name=\"ulink\" type=\"docURLLink\" />\n"
-"      <xsd:element name=\"bold\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"emphasis\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"computeroutput\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"subscript\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"superscript\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"center\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"small\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"htmlonly\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"manonly\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"xmlonly\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"rtfonly\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"latexonly\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"dot\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"anchor\" type=\"docAnchorType\" />\n"
-"      <xsd:element name=\"formula\" type=\"docFormulaType\" />\n"
-"      <xsd:element name=\"ref\" type=\"docRefTextType\" />\n"
-"      <xsd:element name=\"copy\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"trademark\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"registered\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"lsquo\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rsquo\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"ldquo\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rdquo\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"ndash\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"mdash\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"umlaut\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"acute\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"grave\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"circ\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"slash\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"tilde\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"cedil\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"ring\" type=\"docCharType\" />\n"
-"      <xsd:element name=\"szlig\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"nonbreakablespace\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"aelig\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"AElig\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Gamma\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Delta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Theta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Lambda\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Xi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Pi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Sigma\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Upsilon\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Phi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Psi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Omega\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"alpha\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"beta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"gamma\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"delta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"epsilon\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"zeta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"eta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"theta\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"iota\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"kappa\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"lambda\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"mu\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"nu\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"xi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"pi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rho\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sigma\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"tau\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"upsilon\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"phi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"chi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"psi\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"omega\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sigmaf\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sect\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"deg\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"prime\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"Prime\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"infin\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"empty\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"plusmn\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"times\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"minus\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sdot\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"part\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"nabla\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"radic\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"perp\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sum\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"int\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"prod\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"sim\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"asymp\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"ne\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"equiv\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"prop\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"le\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"ge\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"larr\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rarr\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"isin\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"notin\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"lceil\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rceil\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"lfloor\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"rfloor\" type=\"docEmptyType\" />\n"
-"    </xsd:choice>\n"
-"  </xsd:group>\n"
-"\n"
-"  <xsd:complexType name=\"docTitleType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:group name=\"docCmdGroup\">\n"
-"    <xsd:choice>\n"
-"      <xsd:group ref=\"docTitleCmdGroup\"/>\n"
-"      <xsd:element name=\"linebreak\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"hruler\" type=\"docEmptyType\" />\n"
-"      <xsd:element name=\"preformatted\" type=\"docMarkupType\" />\n"
-"      <xsd:element name=\"programlisting\" type=\"listingType\" />\n"
-"      <xsd:element name=\"verbatim\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"indexentry\" type=\"docIndexEntryType\" />\n"
-"      <xsd:element name=\"orderedlist\" type=\"docListType\" />\n"
-"      <xsd:element name=\"itemizedlist\" type=\"docListType\" />\n"
-"      <xsd:element name=\"simplesect\" type=\"docSimpleSectType\" />\n"
-"      <xsd:element name=\"title\" type=\"docTitleType\" />\n"
-"      <xsd:element name=\"variablelist\" type=\"docVariableListType\" />\n"
-"      <xsd:element name=\"table\" type=\"docTableType\" />\n"
-"      <xsd:element name=\"heading\" type=\"docHeadingType\" />\n"
-"      <xsd:element name=\"image\" type=\"docImageType\" />\n"
-"      <xsd:element name=\"dotfile\" type=\"docDotFileType\" />\n"
-"      <xsd:element name=\"toclist\" type=\"docTocListType\" />\n"
-"      <xsd:element name=\"language\" type=\"docLanguageType\" />\n"
-"      <xsd:element name=\"parameterlist\" type=\"docParamListType\" />\n"
-"      <xsd:element name=\"xrefsect\" type=\"docXRefSectType\" />\n"
-"      <xsd:element name=\"copydoc\" type=\"docCopyType\" />\n"
-"      <xsd:element name=\"blockquote\" type=\"docBlockQuoteType\" />\n"
-"    </xsd:choice>\n"
-"  </xsd:group>\n"
-"\n"
-"  <xsd:complexType name=\"docParaType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docMarkupType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docURLLink\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"url\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docAnchorType\" mixed=\"true\">\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docFormulaType\" mixed=\"true\">\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docIndexEntryType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"primaryie\" type=\"xsd:string\" />\n"
-"      <xsd:element name=\"secondaryie\" type=\"xsd:string\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docListType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"listitem\" type=\"docListItemType\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docListItemType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docSimpleSectType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"title\" type=\"docTitleType\" minOccurs=\"0\" />\n"
-"      <xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n"
-"        <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n"
-"        <xsd:element name=\"simplesectsep\" type=\"docEmptyType\" minOccurs=\"0\"/>\n"
-"      </xsd:sequence>\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"kind\" type=\"DoxSimpleSectKind\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docVarListEntryType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"term\" type=\"docTitleType\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:group name=\"docVariableListGroup\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"varlistentry\" type=\"docVarListEntryType\" />\n"
-"      <xsd:element name=\"listitem\" type=\"docListItemType\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:group>\n"
-"\n"
-"  <xsd:complexType name=\"docVariableListType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:group ref=\"docVariableListGroup\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docRefTextType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-"    <xsd:attribute name=\"kindref\" type=\"DoxRefKind\" />\n"
-"    <xsd:attribute name=\"external\" type=\"xsd:string\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docTableType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"row\" type=\"docRowType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"caption\" type=\"docCaptionType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"rows\" type=\"xsd:integer\" />\n"
-"    <xsd:attribute name=\"cols\" type=\"xsd:integer\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docRowType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"entry\" type=\"docEntryType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docEntryType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"thead\" type=\"DoxBool\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docCaptionType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docHeadingType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"level\" type=\"xsd:integer\" /> <!-- todo: range 1-6 -->\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docImageType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"type\" type=\"DoxImageKind\" /> \n"
-"    <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n"
-"    <xsd:attribute name=\"width\" type=\"xsd:string\" /> \n"
-"    <xsd:attribute name=\"height\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docDotFileType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docTocItemType\" mixed=\"true\">\n"
-"    <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docTocListType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"tocitem\" type=\"docTocItemType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docLanguageType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"langid\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docParamListType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"parameteritem\" type=\"docParamListItem\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"kind\" type=\"DoxParamListKind\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docParamListItem\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"parameternamelist\" type=\"docParamNameList\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"parameterdescription\" type=\"descriptionType\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docParamNameList\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"parametertype\" type=\"docParamType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"parametername\" type=\"docParamName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docParamType\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"1\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docParamName\" mixed=\"true\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"1\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"direction\" type=\"DoxParamDir\" use=\"optional\" />\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docXRefSectType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"xreftitle\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"xrefdescription\" type=\"descriptionType\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"id\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docCopyType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"      <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"link\" type=\"xsd:string\" /> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docBlockQuoteType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-"    </xsd:sequence>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docCharType\">\n"
-"    <xsd:attribute name=\"char\" type=\"DoxCharRange\"/> \n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"docEmptyType\"/>\n"
-"\n"
-"  <!-- Simple types -->\n"
-"\n"
-"  <xsd:simpleType name=\"DoxBool\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"yes\" />\n"
-"      <xsd:enumeration value=\"no\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxGraphRelation\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"include\" />\n"
-"      <xsd:enumeration value=\"usage\" />\n"
-"      <xsd:enumeration value=\"template-instance\" />\n"
-"      <xsd:enumeration value=\"public-inheritance\" />\n"
-"      <xsd:enumeration value=\"protected-inheritance\" />\n"
-"      <xsd:enumeration value=\"private-inheritance\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxRefKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"compound\" />\n"
-"      <xsd:enumeration value=\"member\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxMemberKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"define\" />\n"
-"      <xsd:enumeration value=\"property\" />\n"
-"      <xsd:enumeration value=\"event\" />\n"
-"      <xsd:enumeration value=\"variable\" />\n"
-"      <xsd:enumeration value=\"typedef\" />\n"
-"      <xsd:enumeration value=\"enum\" />\n"
-"      <xsd:enumeration value=\"function\" />\n"
-"      <xsd:enumeration value=\"signal\" />\n"
-"      <xsd:enumeration value=\"prototype\" />\n"
-"      <xsd:enumeration value=\"friend\" />\n"
-"      <xsd:enumeration value=\"dcop\" />\n"
-"      <xsd:enumeration value=\"slot\" />\n"
-"      <xsd:enumeration value=\"interface\" />\n"
-"      <xsd:enumeration value=\"service\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxProtectionKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"public\" />\n"
-"      <xsd:enumeration value=\"protected\" />\n"
-"      <xsd:enumeration value=\"private\" />\n"
-"      <xsd:enumeration value=\"package\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxVirtualKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"non-virtual\" />\n"
-"      <xsd:enumeration value=\"virtual\" />\n"
-"      <xsd:enumeration value=\"pure-virtual\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxCompoundKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"class\" />\n"
-"      <xsd:enumeration value=\"struct\" />\n"
-"      <xsd:enumeration value=\"union\" />\n"
-"      <xsd:enumeration value=\"interface\" />\n"
-"      <xsd:enumeration value=\"protocol\" />\n"
-"      <xsd:enumeration value=\"category\" />\n"
-"      <xsd:enumeration value=\"exception\" />\n"
-"      <xsd:enumeration value=\"service\" />\n"
-"      <xsd:enumeration value=\"singleton\" />\n"
-"      <xsd:enumeration value=\"module\" />\n"
-"      <xsd:enumeration value=\"type\" />\n"
-"      <xsd:enumeration value=\"file\" />\n"
-"      <xsd:enumeration value=\"namespace\" />\n"
-"      <xsd:enumeration value=\"group\" />\n"
-"      <xsd:enumeration value=\"page\" />\n"
-"      <xsd:enumeration value=\"example\" />\n"
-"      <xsd:enumeration value=\"dir\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxSectionKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"user-defined\" />\n"
-"      <xsd:enumeration value=\"public-type\" />\n"
-"      <xsd:enumeration value=\"public-func\" />\n"
-"      <xsd:enumeration value=\"public-attrib\" />\n"
-"      <xsd:enumeration value=\"public-slot\" />\n"
-"      <xsd:enumeration value=\"signal\" />\n"
-"      <xsd:enumeration value=\"dcop-func\" />\n"
-"      <xsd:enumeration value=\"property\" />\n"
-"      <xsd:enumeration value=\"event\" />\n"
-"      <xsd:enumeration value=\"public-static-func\" />\n"
-"      <xsd:enumeration value=\"public-static-attrib\" />\n"
-"      <xsd:enumeration value=\"protected-type\" />\n"
-"      <xsd:enumeration value=\"protected-func\" />\n"
-"      <xsd:enumeration value=\"protected-attrib\" />\n"
-"      <xsd:enumeration value=\"protected-slot\" />\n"
-"      <xsd:enumeration value=\"protected-static-func\" />\n"
-"      <xsd:enumeration value=\"protected-static-attrib\" />\n"
-"      <xsd:enumeration value=\"package-type\" />\n"
-"      <xsd:enumeration value=\"package-func\" />\n"
-"      <xsd:enumeration value=\"package-attrib\" />\n"
-"      <xsd:enumeration value=\"package-static-func\" />\n"
-"      <xsd:enumeration value=\"package-static-attrib\" />\n"
-"      <xsd:enumeration value=\"private-type\" />\n"
-"      <xsd:enumeration value=\"private-func\" />\n"
-"      <xsd:enumeration value=\"private-attrib\" />\n"
-"      <xsd:enumeration value=\"private-slot\" />\n"
-"      <xsd:enumeration value=\"private-static-func\" />\n"
-"      <xsd:enumeration value=\"private-static-attrib\" />\n"
-"      <xsd:enumeration value=\"friend\" />\n"
-"      <xsd:enumeration value=\"related\" />\n"
-"      <xsd:enumeration value=\"define\" />\n"
-"      <xsd:enumeration value=\"prototype\" />\n"
-"      <xsd:enumeration value=\"typedef\" />\n"
-"      <xsd:enumeration value=\"enum\" />\n"
-"      <xsd:enumeration value=\"func\" />\n"
-"      <xsd:enumeration value=\"var\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxHighlightClass\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"comment\" />\n"
-"      <xsd:enumeration value=\"normal\" />\n"
-"      <xsd:enumeration value=\"preprocessor\" />\n"
-"      <xsd:enumeration value=\"keyword\" />\n"
-"      <xsd:enumeration value=\"keywordtype\" />\n"
-"      <xsd:enumeration value=\"keywordflow\" />\n"
-"      <xsd:enumeration value=\"stringliteral\" />\n"
-"      <xsd:enumeration value=\"charliteral\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxSimpleSectKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"see\" />\n"
-"      <xsd:enumeration value=\"return\" />\n"
-"      <xsd:enumeration value=\"author\" />\n"
-"      <xsd:enumeration value=\"authors\" />\n"
-"      <xsd:enumeration value=\"version\" />\n"
-"      <xsd:enumeration value=\"since\" />\n"
-"      <xsd:enumeration value=\"date\" />\n"
-"      <xsd:enumeration value=\"note\" />\n"
-"      <xsd:enumeration value=\"warning\" />\n"
-"      <xsd:enumeration value=\"pre\" />\n"
-"      <xsd:enumeration value=\"post\" />\n"
-"      <xsd:enumeration value=\"copyright\" />\n"
-"      <xsd:enumeration value=\"invariant\" />\n"
-"      <xsd:enumeration value=\"remark\" />\n"
-"      <xsd:enumeration value=\"attention\" />\n"
-"      <xsd:enumeration value=\"par\" />\n"
-"      <xsd:enumeration value=\"rcs\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxVersionNumber\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:pattern value=\"\\d+\\.\\d+.*\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxImageKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"html\" />\n"
-"      <xsd:enumeration value=\"latex\" />\n"
-"      <xsd:enumeration value=\"rtf\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxParamListKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"param\" />\n"
-"      <xsd:enumeration value=\"retval\" />\n"
-"      <xsd:enumeration value=\"exception\" />\n"
-"      <xsd:enumeration value=\"templateparam\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxCharRange\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:pattern value=\"[aeiouncAEIOUNC]\" />\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxParamDir\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"in\"/>\n"
-"      <xsd:enumeration value=\"out\"/>\n"
-"      <xsd:enumeration value=\"inout\"/>\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"DoxAccessor\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"retain\"/>\n"
-"      <xsd:enumeration value=\"copy\"/>\n"
-"      <xsd:enumeration value=\"assign\"/>\n"
-"      <xsd:enumeration value=\"weak\"/>\n"
-"      <xsd:enumeration value=\"strong\"/>\n"
-"      <xsd:enumeration value=\"unretained\"/>\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"</xsd:schema>\n"
-"\n"
index 7d72f52..3dcf8de 100644 (file)
@@ -22,6 +22,7 @@
 #include <qstrlist.h>
 #include <qdict.h>
 #include <qlist.h>
+#include <qregexp.h>
 #include "ftextstream.h"
 
 
@@ -518,7 +519,7 @@ class Config
     {
       QCString result=m_userComment;
       m_userComment.resize(0);
-      return result;
+      return result.replace(QRegExp("\r"),"");
     }
 
   protected:
index f3b0962..05df386 100644 (file)
@@ -33,6 +33,7 @@
 #include "version.h"
 #include "portable.h"
 #include "util.h"
+#include "message.h"
 
 #include "lang_cfg.h"
 #include "configoptions.h"
@@ -856,7 +857,7 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
   if (m_userComment)
   {
     t << "\n";
-    t << m_userComment;
+    t << takeUserComment();
   }
 }
 
@@ -1311,7 +1312,30 @@ void Config::check()
     mscgenPath="";
   }
 
-  
+  // check dia path
+  QCString &diaPath = Config_getString("DIA_PATH");
+  if (!diaPath.isEmpty())
+  {
+    QFileInfo dp(diaPath+"/dia"+portable_commandExtension());
+    if (!dp.exists() || !dp.isFile())
+    {
+      config_err("Warning: dia could not be found at %s\n",diaPath.data());
+      diaPath="";
+    }
+    else
+    {
+      diaPath=dp.dirPath(TRUE).utf8()+"/";
+#if defined(_WIN32) // convert slashes
+      uint i=0,l=diaPath.length();
+      for (i=0;i<l;i++) if (diaPath.at(i)=='/') diaPath.at(i)='\\';
+#endif
+    }
+  }
+  else // make sure the string is empty but not null!
+  {
+    diaPath="";
+  }
+
   // check input
   QStrList &inputSources=Config_getList("INPUT");
   if (inputSources.count()==0)
@@ -1663,8 +1687,12 @@ bool Config::parseString(const char *fn,const char *str)
 
 bool Config::parse(const char *fn)
 {
+  int retval;
   encoding = "UTF-8";
-  return parseString(fn,configFileToString(fn)); 
+  printlex(yy_flex_debug, TRUE, __FILE__, fn);
+  retval =  parseString(fn,configFileToString(fn)); 
+  printlex(yy_flex_debug, FALSE, __FILE__, fn);
+  return retval;
 }
 
 extern "C" { // some bogus code to keep the compiler happy
index d7ace9f..eff8cff 100644 (file)
@@ -289,6 +289,7 @@ Go to the <a href="commands.html">next</a> section or return to the
       </docs>
       <value name='Afrikaans'/>
       <value name='Arabic'/>
+      <value name='Armenian'/>
       <value name='Brazilian'/>
       <value name='Catalan'/>
       <value name='Chinese'/>
@@ -297,28 +298,31 @@ Go to the <a href="commands.html">next</a> section or return to the
       <value name='Czech'/>
       <value name='Danish'/>
       <value name='Dutch'/>
-      <value name='English'/>
+      <value name='English' desc='(United States)'/>
       <value name='Esperanto'/>
-      <value name='Farsi'/>
+      <value name='Farsi' desc='(Persian)'/>
       <value name='Finnish'/>
       <value name='French'/>
       <value name='German'/>
       <value name='Greek'/>
       <value name='Hungarian'/>
+      <value name='Indonesian'/>
       <value name='Italian'/>
       <value name='Japanese'/>
-      <value name='Japanese-en'/>
+      <value name='Japanese-en' desc='(Japanese with English messages)'/>
       <value name='Korean'/>
-      <value name='Korean-en'/>
+      <value name='Korean-en' desc='(Korean with English messages)'/>
       <value name='Latvian'/>
-      <value name='Norwegian'/>
+      <value name='Lithuanian'/>
       <value name='Macedonian'/>
-      <value name='Persian'/>
+      <value name='Norwegian'/>
+      <value name='Persian' desc='(Farsi)'/>
       <value name='Polish'/>
       <value name='Portuguese'/>
       <value name='Romanian'/>
       <value name='Russian'/>
       <value name='Serbian'/>
+      <value name='Serbian-Cyrillic'/>
       <value name='Slovak'/>
       <value name='Slovene'/>
       <value name='Spanish'/>
@@ -878,6 +882,15 @@ Go to the <a href="commands.html">next</a> section or return to the
 ]]>
       </docs>
     </option>
+    <option type='bool' id='SHOW_GROUPED_MEMB_INC' defval='0'>
+      <docs>
+<![CDATA[
+ If the SHOW_GROUPED_MEMB_INC tag is set to \c YES then Doxygen 
+ will add for each grouped member an include statement to the documentation,
+ telling the reader which file to include in order to use the member.
+]]>
+      </docs>
+    </option>
     <option type='bool' id='FORCE_LOCAL_INCLUDES' defval='0'>
       <docs>
 <![CDATA[
@@ -911,7 +924,8 @@ Go to the <a href="commands.html">next</a> section or return to the
  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
- declaration order.
+ declaration order. Note that this will also influence the order of the
+ classes in the class list.
 ]]>
       </docs>
     </option>
@@ -3011,6 +3025,16 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
 ]]>
       </docs>
     </option>
+    <option type='string' id='DIA_PATH' format='dir' defval=''>
+      <docs>
+<![CDATA[
+You can include diagrams made with dia in doxygen documentation. Doxygen will then run 
+dia to produce the diagram and insert it in the documentation. The DIA_PATH tag allows 
+you to specify the directory where the dia binary resides. If left empty dia is assumed 
+to be found in the default search path.
+]]>
+      </docs>
+    </option>
     <option type='bool' id='HIDE_UNDOC_RELATIONS' defval='1'>
       <docs>
 <![CDATA[
@@ -3245,6 +3269,15 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs.
 ]]>
       </docs>
     </option>
+    <option type='list' id='DIAFILE_DIRS' format='dir'>
+      <docs>
+<![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).
+]]>
+      </docs>
+    </option>
     <option type='int' id='DOT_GRAPH_MAX_NODES' minval='0' maxval='10000' defval='50' depends='HAVE_DOT'>
       <docs>
 <![CDATA[
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
deleted file mode 100644 (file)
index 7f7d454..0000000
+++ /dev/null
@@ -1,3076 +0,0 @@
-/* WARNING: This file is generated!
- * Do not edit this file, but edit config.xml instead and run
- * python configgen.py -cpp config.xml to regenerate this file!
- */
-
-#include "configoptions.h"
-#include "config.h"
-#include "portable.h"
-#include "settings.h"
-
-void addConfigOptions(Config *cfg)
-{
-  ConfigString *cs;
-  ConfigEnum   *ce;
-  ConfigList   *cl;
-  ConfigInt    *ci;
-  ConfigBool   *cb;
-
-  cfg->setHeader(
-              "This file describes the settings to be used by the documentation system\n"
-              "doxygen (www.doxygen.org) for a project.\n"
-              "\n"
-              "All text after a double hash (##) is considered a comment and is placed in\n"
-              "front of the TAG it is preceding.\n"
-              "\n"
-              "All text after a single hash (#) is considered a comment and will be ignored.\n"
-              "The format is:\n"
-              "TAG = value [value, ...]\n"
-              "For lists, items can also be appended using:\n"
-              "TAG += value [value, ...]\n"
-              "Values that contain spaces should be placed between quotes (\\\" \\\")."
-             );
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Project","Project related configuration options");
-  //---------------------------------------------------------------------------
-
-  //----
-  cs = cfg->addString(
-              "DOXYFILE_ENCODING",
-              "This tag specifies the encoding used for all characters in the config file\n"
-              "that follow. The default is UTF-8 which is also the encoding used for all text\n"
-              "before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n"
-              "built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n"
-              "for the list of possible encodings.\n"
-              "The default value is: UTF-8."
-             );
-  cs->setDefaultValue("UTF-8");
-  //----
-  cs = cfg->addString(
-              "PROJECT_NAME",
-              "The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n"
-              "double-quotes, unless you are using Doxywizard) that should identify the\n"
-              "project for which the documentation is generated. This name is used in the\n"
-              "title of most generated pages and in a few other places.\n"
-              "The default value is: My Project."
-             );
-  cs->setDefaultValue("My Project");
-  //----
-  cs = cfg->addString(
-              "PROJECT_NUMBER",
-              "The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n"
-              "could be handy for archiving the generated documentation or if some version\n"
-              "control system is used."
-             );
-  //----
-  cs = cfg->addString(
-              "PROJECT_BRIEF",
-              "Using the PROJECT_BRIEF tag one can provide an optional one line description\n"
-              "for a project that appears at the top of each page and should give viewer a\n"
-              "quick idea about the purpose of the project. Keep the description short."
-             );
-  //----
-  cs = cfg->addString(
-              "PROJECT_LOGO",
-              "With the PROJECT_LOGO tag one can specify an logo or icon that is included in\n"
-              "the documentation. The maximum height of the logo should not exceed 55 pixels\n"
-              "and the maximum width should not exceed 200 pixels. Doxygen will copy the logo\n"
-              "to the output directory."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //----
-  cs = cfg->addString(
-              "OUTPUT_DIRECTORY",
-              "The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n"
-              "into which the generated documentation will be written. If a relative path is\n"
-              "entered, it will be relative to the location where doxygen was started. If\n"
-              "left blank the current directory will be used."
-             );
-  cs->setWidgetType(ConfigString::Dir);
-  //----
-  cb = cfg->addBool(
-             "CREATE_SUBDIRS",
-              "If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-\n"
-              "directories (in 2 levels) under the output directory of each output format and\n"
-              "will distribute the generated files over these directories. Enabling this\n"
-              "option can be useful when feeding doxygen a huge amount of source files, where\n"
-              "putting all generated files in the same directory would otherwise causes\n"
-              "performance problems for the file system.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  ce = cfg->addEnum(
-              "OUTPUT_LANGUAGE",
-              "The OUTPUT_LANGUAGE tag is used to specify the language in which all\n"
-              "documentation generated by doxygen is written. Doxygen will use this\n"
-              "information to generate all constant output in the proper language.\n"
-              "Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-\n"
-              "Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi,\n"
-              "Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en,\n"
-              "Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish,\n"
-              "Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,\n"
-              "Turkish, Ukrainian and Vietnamese.\n"
-              "The default value is: English.",
-              "English"
-             );
-  ce->addValue("Afrikaans");
-  ce->addValue("Arabic");
-  ce->addValue("Brazilian");
-  ce->addValue("Catalan");
-  ce->addValue("Chinese");
-  ce->addValue("Chinese-Traditional");
-  ce->addValue("Croatian");
-  ce->addValue("Czech");
-  ce->addValue("Danish");
-  ce->addValue("Dutch");
-  ce->addValue("English");
-  ce->addValue("Esperanto");
-  ce->addValue("Farsi");
-  ce->addValue("Finnish");
-  ce->addValue("French");
-  ce->addValue("German");
-  ce->addValue("Greek");
-  ce->addValue("Hungarian");
-  ce->addValue("Italian");
-  ce->addValue("Japanese");
-  ce->addValue("Japanese-en");
-  ce->addValue("Korean");
-  ce->addValue("Korean-en");
-  ce->addValue("Latvian");
-  ce->addValue("Norwegian");
-  ce->addValue("Macedonian");
-  ce->addValue("Persian");
-  ce->addValue("Polish");
-  ce->addValue("Portuguese");
-  ce->addValue("Romanian");
-  ce->addValue("Russian");
-  ce->addValue("Serbian");
-  ce->addValue("Slovak");
-  ce->addValue("Slovene");
-  ce->addValue("Spanish");
-  ce->addValue("Swedish");
-  ce->addValue("Turkish");
-  ce->addValue("Ukrainian");
-  ce->addValue("Vietnamese");
-  //----
-  cb = cfg->addBool(
-             "BRIEF_MEMBER_DESC",
-              "If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member\n"
-              "descriptions after the members that are listed in the file and class\n"
-              "documentation (similar to Javadoc). Set to NO to disable this.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "REPEAT_BRIEF",
-              "If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief\n"
-              "description of a member or function before the detailed description\n"
-              "\n"
-              "Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n"
-              "brief descriptions will be completely suppressed.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cl = cfg->addList(
-              "ABBREVIATE_BRIEF",
-              "This tag implements a quasi-intelligent brief description abbreviator that is\n"
-              "used to form the text in various listings. Each string in this list, if found\n"
-              "as the leading text of the brief description, will be stripped from the text\n"
-              "and the result, after processing the whole list, is used as the annotated\n"
-              "text. Otherwise, the brief description is used as-is. If left blank, the\n"
-              "following values are used ($name is automatically replaced with the name of\n"
-              "the entity):The $name class, The $name widget, The $name file, is, provides,\n"
-              "specifies, contains, represents, a, an and the."
-             );
-  cl->addValue("The $name class");
-  cl->addValue("The $name widget");
-  cl->addValue("The $name file");
-  cl->addValue("is");
-  cl->addValue("provides");
-  cl->addValue("specifies");
-  cl->addValue("contains");
-  cl->addValue("represents");
-  cl->addValue("a");
-  cl->addValue("an");
-  cl->addValue("the");
-  //----
-  cb = cfg->addBool(
-             "ALWAYS_DETAILED_SEC",
-              "If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n"
-              "doxygen will generate a detailed section even if there is only a brief\n"
-              "description.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INLINE_INHERITED_MEMB",
-              "If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n"
-              "inherited members of a class in the documentation of that class as if those\n"
-              "members were ordinary class members. Constructors, destructors and assignment\n"
-              "operators of the base classes will not be shown.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "FULL_PATH_NAMES",
-              "If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path\n"
-              "before files name in the file list and in the header files. If set to NO the\n"
-              "shortest path that makes the file name unique will be used\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cl = cfg->addList(
-              "STRIP_FROM_PATH",
-              "The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n"
-              "Stripping is only done if one of the specified strings matches the left-hand\n"
-              "part of the path. The tag can be used to show relative paths in the file list.\n"
-              "If left blank the directory from which doxygen is run is used as the path to\n"
-              "strip.\n"
-              "\n"
-              "Note that you can specify absolute paths here, but also relative paths, which\n"
-              "will be relative from the directory where doxygen is started.\n"
-              "This tag requires that the tag FULL_PATH_NAMES is set to YES."
-             );
-  cl->addValue("");
-  cl->addDependency("FULL_PATH_NAMES");
-  //----
-  cl = cfg->addList(
-              "STRIP_FROM_INC_PATH",
-              "The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n"
-              "path mentioned in the documentation of a class, which tells the reader which\n"
-              "header file to include in order to use a class. If left blank only the name of\n"
-              "the header file containing the class definition is used. Otherwise one should\n"
-              "specify the list of include paths that are normally passed to the compiler\n"
-              "using the -I flag."
-             );
-  //----
-  cb = cfg->addBool(
-             "SHORT_NAMES",
-              "If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n"
-              "less readable) file names. This can be useful is your file systems doesn't\n"
-              "support long names like on DOS, Mac, or CD-ROM.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "JAVADOC_AUTOBRIEF",
-              "If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n"
-              "first line (until the first dot) of a Javadoc-style comment as the brief\n"
-              "description. If set to NO, the Javadoc-style will behave just like regular Qt-\n"
-              "style comments (thus requiring an explicit @brief command for a brief\n"
-              "description.)\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "QT_AUTOBRIEF",
-              "If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n"
-              "line (until the first dot) of a Qt-style comment as the brief description. If\n"
-              "set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n"
-              "requiring an explicit \\brief command for a brief description.)\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "MULTILINE_CPP_IS_BRIEF",
-              "The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n"
-              "multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n"
-              "a brief description. This used to be the default behavior. The new default is\n"
-              "to treat a multi-line C++ comment block as a detailed description. Set this\n"
-              "tag to YES if you prefer the old behavior instead.\n"
-              "\n"
-              "Note that setting this tag to YES also means that rational rose comments are\n"
-              "not recognized any more.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INHERIT_DOCS",
-              "If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n"
-              "documentation from any documented member that it re-implements.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SEPARATE_MEMBER_PAGES",
-              "If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a\n"
-              "new page for each member. If set to NO, the documentation of a member will be\n"
-              "part of the file/class/namespace that contains it.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  ci = cfg->addInt(
-              "TAB_SIZE",
-              "The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n"
-              "uses this value to replace tabs by spaces in code fragments.\n"
-              "Minimum value: 1, maximum value: 16, default value: 4.",
-              1,16,4
-             );
-  //----
-  cl = cfg->addList(
-              "ALIASES",
-              "This tag can be used to specify a number of aliases that act as commands in\n"
-              "the documentation. An alias has the form:\n"
-              "name=value\n"
-              "For example adding\n"
-              "\"sideeffect=@par Side Effects:\\n\"\n"
-              "will allow you to put the command \\sideeffect (or @sideeffect) in the\n"
-              "documentation, which will result in a user-defined paragraph with heading\n"
-              "\"Side Effects:\". You can put \\n's in the value part of an alias to insert\n"
-              "newlines."
-             );
-  //----
-  cl = cfg->addList(
-              "TCL_SUBST",
-              "This tag can be used to specify a number of word-keyword mappings (TCL only).\n"
-              "A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n"
-              "will allow you to use the command class in the itcl::class meaning."
-             );
-  //----
-  cb = cfg->addBool(
-             "OPTIMIZE_OUTPUT_FOR_C",
-              "Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n"
-              "only. Doxygen will then generate output that is more tailored for C. For\n"
-              "instance, some of the names that are used will be different. The list of all\n"
-              "members will be omitted, etc.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "OPTIMIZE_OUTPUT_JAVA",
-              "Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n"
-              "Python sources only. Doxygen will then generate output that is more tailored\n"
-              "for that language. For instance, namespaces will be presented as packages,\n"
-              "qualified scopes will look different, etc.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "OPTIMIZE_FOR_FORTRAN",
-              "Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n"
-              "sources. Doxygen will then generate output that is tailored for Fortran.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "OPTIMIZE_OUTPUT_VHDL",
-              "Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n"
-              "sources. Doxygen will then generate output that is tailored for VHDL.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cl = cfg->addList(
-              "EXTENSION_MAPPING",
-              "Doxygen selects the parser to use depending on the extension of the files it\n"
-              "parses. With this tag you can assign which parser to use for a given\n"
-              "extension. Doxygen has a built-in mapping, but you can override or extend it\n"
-              "using this tag. The format is ext=language, where ext is a file extension, and\n"
-              "language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n"
-              "C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make\n"
-              "doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n"
-              "(default is Fortran), use: inc=Fortran f=C.\n"
-              "\n"
-              "Note For files without extension you can use no_extension as a placeholder.\n"
-              "\n"
-              "Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n"
-              "the files are not read by doxygen."
-             );
-  //----
-  cb = cfg->addBool(
-             "MARKDOWN_SUPPORT",
-              "If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n"
-              "according to the Markdown format, which allows for more readable\n"
-              "documentation. See http://daringfireball.net/projects/markdown/ for details.\n"
-              "The output of markdown processing is further processed by doxygen, so you can\n"
-              "mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n"
-              "case of backward compatibilities issues.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "AUTOLINK_SUPPORT",
-              "When enabled doxygen tries to link words that correspond to documented\n"
-              "classes, or namespaces to their corresponding documentation. Such a link can\n"
-              "be prevented in individual cases by by putting a % sign in front of the word\n"
-              "or globally by setting AUTOLINK_SUPPORT to NO.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "BUILTIN_STL_SUPPORT",
-              "If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n"
-              "to include (a tag file for) the STL sources as input, then you should set this\n"
-              "tag to YES in order to let doxygen match functions declarations and\n"
-              "definitions whose arguments contain STL classes (e.g. func(std::string);\n"
-              "versus func(std::string) {}). This also make the inheritance and collaboration\n"
-              "diagrams that involve STL classes more complete and accurate.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "CPP_CLI_SUPPORT",
-              "If you use Microsoft's C++/CLI language, you should set this option to YES to\n"
-              "enable parsing support.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SIP_SUPPORT",
-              "Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n"
-              "http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n"
-              "will parse them like normal C++ but will assume all classes use public instead\n"
-              "of private inheritance when no explicit protection keyword is present.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "IDL_PROPERTY_SUPPORT",
-              "For Microsoft's IDL there are propget and propput attributes to indicate\n"
-              "getter and setter methods for a property. Setting this option to YES will make\n"
-              "doxygen to replace the get and set methods by a property in the documentation.\n"
-              "This will only work if the methods are indeed getting or setting a simple\n"
-              "type. If this is not the case, or you want to show the methods anyway, you\n"
-              "should set this option to NO.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "DISTRIBUTE_GROUP_DOC",
-              "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n"
-              "tag is set to YES, then doxygen will reuse the documentation of the first\n"
-              "member in the group (if any) for the other members of the group. By default\n"
-              "all members of a group must be documented explicitly.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SUBGROUPING",
-              "Set the SUBGROUPING tag to YES to allow class member groups of the same type\n"
-              "(for instance a group of public functions) to be put as a subgroup of that\n"
-              "type (e.g. under the Public Functions section). Set it to NO to prevent\n"
-              "subgrouping. Alternatively, this can be done per class using the\n"
-              "\\nosubgrouping command.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "INLINE_GROUPED_CLASSES",
-              "When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n"
-              "are shown inside the group in which they are included (e.g. using \\ingroup)\n"
-              "instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n"
-              "and RTF).\n"
-              "\n"
-              "Note that this feature does not work in combination with\n"
-              "SEPARATE_MEMBER_PAGES.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INLINE_SIMPLE_STRUCTS",
-              "When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n"
-              "with only public data fields or simple typedef fields will be shown inline in\n"
-              "the documentation of the scope in which they are defined (i.e. file,\n"
-              "namespace, or group documentation), provided this scope is documented. If set\n"
-              "to NO, structs, classes, and unions are shown on a separate page (for HTML and\n"
-              "Man pages) or section (for LaTeX and RTF).\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "TYPEDEF_HIDES_STRUCT",
-              "When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n"
-              "enum is documented as struct, union, or enum with the name of the typedef. So\n"
-              "typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n"
-              "with name TypeT. When disabled the typedef will appear as a member of a file,\n"
-              "namespace, or class. And the struct will be named TypeS. This can typically be\n"
-              "useful for C code in case the coding convention dictates that all compound\n"
-              "types are typedef'ed and only the typedef is referenced, never the tag name.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  ci = cfg->addInt(
-              "LOOKUP_CACHE_SIZE",
-              "The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n"
-              "cache is used to resolve symbols given their name and scope. Since this can be\n"
-              "an expensive process and often the same symbol appears multiple times in the\n"
-              "code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n"
-              "doxygen will become slower. If the cache is too large, memory is wasted. The\n"
-              "cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n"
-              "is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n"
-              "symbols. At the end of a run doxygen will report the cache usage and suggest\n"
-              "the optimal cache size from a speed point of view.\n"
-              "Minimum value: 0, maximum value: 9, default value: 0.",
-              0,9,0
-             );
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Build","Build related configuration options");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_ALL",
-              "If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\n"
-              "documentation are documented, even if no documentation was available. Private\n"
-              "class members and static file members will be hidden unless the\n"
-              "EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n"
-              "Note: This will also disable the warnings about undocumented members that are\n"
-              "normally produced when WARNINGS is set to YES.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_PRIVATE",
-              "If the EXTRACT_PRIVATE tag is set to YES all private members of a class will\n"
-              "be included in the documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_PACKAGE",
-              "If the EXTRACT_PACKAGE tag is set to YES all members with package or internal\n"
-              "scope will be included in the documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_STATIC",
-              "If the EXTRACT_STATIC tag is set to YES all static members of a file will be\n"
-              "included in the documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_LOCAL_CLASSES",
-              "If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined\n"
-              "locally in source files will be included in the documentation. If set to NO\n"
-              "only classes defined in header files are included. Does not have any effect\n"
-              "for Java sources.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_LOCAL_METHODS",
-              "This flag is only useful for Objective-C code. When set to YES local methods,\n"
-              "which are defined in the implementation section but not in the interface are\n"
-              "included in the documentation. If set to NO only methods in the interface are\n"
-              "included.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTRACT_ANON_NSPACES",
-              "If this flag is set to YES, the members of anonymous namespaces will be\n"
-              "extracted and appear in the documentation as a namespace called\n"
-              "'anonymous_namespace{file}', where file will be replaced with the base name of\n"
-              "the file that contains the anonymous namespace. By default anonymous namespace\n"
-              "are hidden.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "HIDE_UNDOC_MEMBERS",
-              "If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n"
-              "undocumented members inside documented classes or files. If set to NO these\n"
-              "members will be included in the various overviews, but no documentation\n"
-              "section is generated. This option has no effect if EXTRACT_ALL is enabled.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "HIDE_UNDOC_CLASSES",
-              "If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n"
-              "undocumented classes that are normally visible in the class hierarchy. If set\n"
-              "to NO these classes will be included in the various overviews. This option has\n"
-              "no effect if EXTRACT_ALL is enabled.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "HIDE_FRIEND_COMPOUNDS",
-              "If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n"
-              "(class|struct|union) declarations. If set to NO these declarations will be\n"
-              "included in the documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "HIDE_IN_BODY_DOCS",
-              "If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n"
-              "documentation blocks found inside the body of a function. If set to NO these\n"
-              "blocks will be appended to the function's detailed documentation block.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INTERNAL_DOCS",
-              "The INTERNAL_DOCS tag determines if documentation that is typed after a\n"
-              "\\internal command is included. If the tag is set to NO then the documentation\n"
-              "will be excluded. Set it to YES to include the internal documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "CASE_SENSE_NAMES",
-              "If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n"
-              "names in lower-case letters. If set to YES upper-case letters are also\n"
-              "allowed. This is useful if you have classes or files whose names only differ\n"
-              "in case and if your file system supports case sensitive file names. Windows\n"
-              "and Mac users are advised to set this option to NO.\n"
-              "The default value is: system dependent.",
-              portable_fileSystemIsCaseSensitive()
-             );
-  //----
-  cb = cfg->addBool(
-             "HIDE_SCOPE_NAMES",
-              "If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n"
-              "their full class and namespace scopes in the documentation. If set to YES the\n"
-              "scope will be hidden.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SHOW_INCLUDE_FILES",
-              "If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n"
-              "the files that are included by a file in the documentation of that file.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "FORCE_LOCAL_INCLUDES",
-              "If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n"
-              "files with double quotes in the documentation rather than with sharp brackets.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INLINE_INFO",
-              "If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n"
-              "documentation for inline members.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SORT_MEMBER_DOCS",
-              "If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n"
-              "(detailed) documentation of file and class members alphabetically by member\n"
-              "name. If set to NO the members will appear in declaration order.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SORT_BRIEF_DOCS",
-              "If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n"
-              "descriptions of file, namespace and class members alphabetically by member\n"
-              "name. If set to NO the members will appear in declaration order.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SORT_MEMBERS_CTORS_1ST",
-              "If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n"
-              "(brief and detailed) documentation of class members so that constructors and\n"
-              "destructors are listed first. If set to NO the constructors will appear in the\n"
-              "respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n"
-              "Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n"
-              "member documentation.\n"
-              "Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n"
-              "detailed member documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SORT_GROUP_NAMES",
-              "If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n"
-              "of group names into alphabetical order. If set to NO the group names will\n"
-              "appear in their defined order.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "SORT_BY_SCOPE_NAME",
-              "If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n"
-              "fully-qualified names, including namespaces. If set to NO, the class list will\n"
-              "be sorted only by class name, not including the namespace part.\n"
-              "Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n"
-              "Note: This option applies only to the class list, not to the alphabetical\n"
-              "list.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "STRICT_PROTO_MATCHING",
-              "If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n"
-              "type resolution of all parameters of a function it will reject a match between\n"
-              "the prototype and the implementation of a member function even if there is\n"
-              "only one candidate or it is obvious which candidate to choose by doing a\n"
-              "simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n"
-              "accept a match between prototype and implementation in such cases.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "GENERATE_TODOLIST",
-              "The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the\n"
-              "todo list. This list is created by putting \\todo commands in the\n"
-              "documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "GENERATE_TESTLIST",
-              "The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the\n"
-              "test list. This list is created by putting \\test commands in the\n"
-              "documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "GENERATE_BUGLIST",
-              "The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug\n"
-              "list. This list is created by putting \\bug commands in the documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "GENERATE_DEPRECATEDLIST",
-              "The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)\n"
-              "the deprecated list. This list is created by putting \\deprecated commands in\n"
-              "the documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cl = cfg->addList(
-              "ENABLED_SECTIONS",
-              "The ENABLED_SECTIONS tag can be used to enable conditional documentation\n"
-              "sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n"
-              "... \\endcond blocks."
-             );
-  //----
-  ci = cfg->addInt(
-              "MAX_INITIALIZER_LINES",
-              "The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n"
-              "initial value of a variable or macro / define can have for it to appear in the\n"
-              "documentation. If the initializer consists of more lines than specified here\n"
-              "it will be hidden. Use a value of 0 to hide initializers completely. The\n"
-              "appearance of the value of individual variables and macros / defines can be\n"
-              "controlled using \\showinitializer or \\hideinitializer command in the\n"
-              "documentation regardless of this setting.\n"
-              "Minimum value: 0, maximum value: 10000, default value: 30.",
-              0,10000,30
-             );
-  //----
-  cb = cfg->addBool(
-             "SHOW_USED_FILES",
-              "Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n"
-              "the bottom of the documentation of classes and structs. If set to YES the list\n"
-              "will mention the files that were used to generate the documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SHOW_FILES",
-              "Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n"
-              "will remove the Files entry from the Quick Index and from the Folder Tree View\n"
-              "(if specified).\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SHOW_NAMESPACES",
-              "Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n"
-              "page. This will remove the Namespaces entry from the Quick Index and from the\n"
-              "Folder Tree View (if specified).\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cs = cfg->addString(
-              "FILE_VERSION_FILTER",
-              "The FILE_VERSION_FILTER tag can be used to specify a program or script that\n"
-              "doxygen should invoke to get the current version for each file (typically from\n"
-              "the version control system). Doxygen will invoke the program by executing (via\n"
-              "popen()) the command command input-file, where command is the value of the\n"
-              "FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n"
-              "by doxygen. Whatever the program writes to standard output is used as the file\n"
-              "version. For an example see the documentation."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //----
-  cs = cfg->addString(
-              "LAYOUT_FILE",
-              "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n"
-              "by doxygen. The layout file controls the global structure of the generated\n"
-              "output files in an output format independent way. To create the layout file\n"
-              "that represents doxygen's defaults, run doxygen with the -l option. You can\n"
-              "optionally specify a file name after the option, if omitted DoxygenLayout.xml\n"
-              "will be used as the name of the layout file.\n"
-              "\n"
-              "Note that if you run doxygen from a directory containing a file called\n"
-              "DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n"
-              "tag is left empty."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //----
-  cl = cfg->addList(
-              "CITE_BIB_FILES",
-              "The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n"
-              "the reference definitions. This must be a list of .bib files. The .bib\n"
-              "extension is automatically appended if omitted. This requires the bibtex tool\n"
-              "to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n"
-              "For LaTeX the style of the bibliography can be controlled using\n"
-              "LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n"
-              "search path. Do not use file names with spaces, bibtex cannot handle them. See\n"
-              "also \\cite for info how to create references."
-             );
-  cl->setWidgetType(ConfigList::File);
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Messages","Configuration options related to warning and progress messages");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "QUIET",
-              "The QUIET tag can be used to turn on/off the messages that are generated to\n"
-              "standard output by doxygen. If QUIET is set to YES this implies that the\n"
-              "messages are off.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "WARNINGS",
-              "The WARNINGS tag can be used to turn on/off the warning messages that are\n"
-              "generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES\n"
-              "this implies that the warnings are on.\n"
-              "\n"
-              "Tip: Turn warnings on while writing the documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "WARN_IF_UNDOCUMENTED",
-              "If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate\n"
-              "warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n"
-              "will automatically be disabled.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "WARN_IF_DOC_ERROR",
-              "If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n"
-              "potential errors in the documentation, such as not documenting some parameters\n"
-              "in a documented function, or documenting parameters that don't exist or using\n"
-              "markup commands wrongly.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "WARN_NO_PARAMDOC",
-              "This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n"
-              "are documented, but have no documentation for their parameters or return\n"
-              "value. If set to NO doxygen will only warn about wrong or incomplete parameter\n"
-              "documentation, but not about the absence of documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cs = cfg->addString(
-              "WARN_FORMAT",
-              "The WARN_FORMAT tag determines the format of the warning messages that doxygen\n"
-              "can produce. The string should contain the $file, $line, and $text tags, which\n"
-              "will be replaced by the file and line number from which the warning originated\n"
-              "and the warning text. Optionally the format may contain $version, which will\n"
-              "be replaced by the version of the file (if it could be obtained via\n"
-              "FILE_VERSION_FILTER)\n"
-              "The default value is: $file:$line: $text."
-             );
-  cs->setDefaultValue("$file:$line: $text");
-  //----
-  cs = cfg->addString(
-              "WARN_LOGFILE",
-              "The WARN_LOGFILE tag can be used to specify a file to which warning and error\n"
-              "messages should be written. If left blank the output is written to standard\n"
-              "error (stderr)."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Input","Configuration options related to the input files");
-  //---------------------------------------------------------------------------
-
-  //----
-  cl = cfg->addList(
-              "INPUT",
-              "The INPUT tag is used to specify the files and/or directories that contain\n"
-              "documented source files. You may enter file names like myfile.cpp or\n"
-              "directories like /usr/src/myproject. Separate the files or directories with\n"
-              "spaces.\n"
-              "Note: If this tag is empty the current directory is searched."
-             );
-  cl->addValue("");
-  cl->setWidgetType(ConfigList::FileAndDir);
-  //----
-  cs = cfg->addString(
-              "INPUT_ENCODING",
-              "This tag can be used to specify the character encoding of the source files\n"
-              "that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n"
-              "libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n"
-              "documentation (see: http://www.gnu.org/software/libiconv) for the list of\n"
-              "possible encodings.\n"
-              "The default value is: UTF-8."
-             );
-  cs->setDefaultValue("UTF-8");
-  //----
-  cl = cfg->addList(
-              "FILE_PATTERNS",
-              "If the value of the INPUT tag contains directories, you can use the\n"
-              "FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n"
-              "*.h) to filter out the source-files in the directories. If left blank the\n"
-              "following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,\n"
-              "*.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,\n"
-              "*.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,\n"
-              "*.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,\n"
-              "*.qsf, *.as and *.js."
-             );
-  cl->addValue("*.c");
-  cl->addValue("*.cc");
-  cl->addValue("*.cxx");
-  cl->addValue("*.cpp");
-  cl->addValue("*.c++");
-  cl->addValue("*.java");
-  cl->addValue("*.ii");
-  cl->addValue("*.ixx");
-  cl->addValue("*.ipp");
-  cl->addValue("*.i++");
-  cl->addValue("*.inl");
-  cl->addValue("*.idl");
-  cl->addValue("*.ddl");
-  cl->addValue("*.odl");
-  cl->addValue("*.h");
-  cl->addValue("*.hh");
-  cl->addValue("*.hxx");
-  cl->addValue("*.hpp");
-  cl->addValue("*.h++");
-  cl->addValue("*.cs");
-  cl->addValue("*.d");
-  cl->addValue("*.php");
-  cl->addValue("*.php4");
-  cl->addValue("*.php5");
-  cl->addValue("*.phtml");
-  cl->addValue("*.inc");
-  cl->addValue("*.m");
-  cl->addValue("*.markdown");
-  cl->addValue("*.md");
-  cl->addValue("*.mm");
-  cl->addValue("*.dox");
-  cl->addValue("*.py");
-  cl->addValue("*.f90");
-  cl->addValue("*.f");
-  cl->addValue("*.for");
-  cl->addValue("*.tcl");
-  cl->addValue("*.vhd");
-  cl->addValue("*.vhdl");
-  cl->addValue("*.ucf");
-  cl->addValue("*.qsf");
-  cl->addValue("*.as");
-  cl->addValue("*.js");
-  //----
-  cb = cfg->addBool(
-             "RECURSIVE",
-              "The RECURSIVE tag can be used to specify whether or not subdirectories should\n"
-              "be searched for input files as well.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cl = cfg->addList(
-              "EXCLUDE",
-              "The EXCLUDE tag can be used to specify files and/or directories that should be\n"
-              "excluded from the INPUT source files. This way you can easily exclude a\n"
-              "subdirectory from a directory tree whose root is specified with the INPUT tag.\n"
-              "\n"
-              "Note that relative paths are relative to the directory from which doxygen is\n"
-              "run."
-             );
-  cl->setWidgetType(ConfigList::FileAndDir);
-  //----
-  cb = cfg->addBool(
-             "EXCLUDE_SYMLINKS",
-              "The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n"
-              "directories that are symbolic links (a Unix file system feature) are excluded\n"
-              "from the input.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cl = cfg->addList(
-              "EXCLUDE_PATTERNS",
-              "If the value of the INPUT tag contains directories, you can use the\n"
-              "EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n"
-              "certain files from those directories.\n"
-              "\n"
-              "Note that the wildcards are matched against the file with absolute path, so to\n"
-              "exclude all test directories for example use the pattern */test/*"
-             );
-  //----
-  cl = cfg->addList(
-              "EXCLUDE_SYMBOLS",
-              "The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n"
-              "(namespaces, classes, functions, etc.) that should be excluded from the\n"
-              "output. The symbol name can be a fully qualified name, a word, or if the\n"
-              "wildcard * is used, a substring. Examples: ANamespace, AClass,\n"
-              "AClass::ANamespace, ANamespace::*Test\n"
-              "\n"
-              "Note that the wildcards are matched against the file with absolute path, so to\n"
-              "exclude all test directories use the pattern */test/*"
-             );
-  //----
-  cl = cfg->addList(
-              "EXAMPLE_PATH",
-              "The EXAMPLE_PATH tag can be used to specify one or more files or directories\n"
-              "that contain example code fragments that are included (see the \\include\n"
-              "command)."
-             );
-  cl->setWidgetType(ConfigList::FileAndDir);
-  //----
-  cl = cfg->addList(
-              "EXAMPLE_PATTERNS",
-              "If the value of the EXAMPLE_PATH tag contains directories, you can use the\n"
-              "EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n"
-              "*.h) to filter out the source-files in the directories. If left blank all\n"
-              "files are included."
-             );
-  cl->addValue("*");
-  //----
-  cb = cfg->addBool(
-             "EXAMPLE_RECURSIVE",
-              "If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n"
-              "searched for input files to be used with the \\include or \\dontinclude commands\n"
-              "irrespective of the value of the RECURSIVE tag.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cl = cfg->addList(
-              "IMAGE_PATH",
-              "The IMAGE_PATH tag can be used to specify one or more files or directories\n"
-              "that contain images that are to be included in the documentation (see the\n"
-              "\\image command)."
-             );
-  cl->setWidgetType(ConfigList::FileAndDir);
-  //----
-  cs = cfg->addString(
-              "INPUT_FILTER",
-              "The INPUT_FILTER tag can be used to specify a program that doxygen should\n"
-              "invoke to filter for each input file. Doxygen will invoke the filter program\n"
-              "by executing (via popen()) the command:\n"
-              "\n"
-              "<filter> <input-file>\n"
-              "\n"
-              "where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n"
-              "name of an input file. Doxygen will then use the output that the filter\n"
-              "program writes to standard output. If FILTER_PATTERNS is specified, this tag\n"
-              "will be ignored.\n"
-              "\n"
-              "Note that the filter must not add or remove lines; it is applied before the\n"
-              "code is scanned, but not when the output code is generated. If lines are added\n"
-              "or removed, the anchors will not be placed correctly."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //----
-  cl = cfg->addList(
-              "FILTER_PATTERNS",
-              "The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n"
-              "basis. Doxygen will compare the file name with each pattern and apply the\n"
-              "filter if there is a match. The filters are a list of the form: pattern=filter\n"
-              "(like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n"
-              "filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n"
-              "patterns match the file name, INPUT_FILTER is applied."
-             );
-  //----
-  cb = cfg->addBool(
-             "FILTER_SOURCE_FILES",
-              "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n"
-              "INPUT_FILTER ) will also be used to filter the input files that are used for\n"
-              "producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cl = cfg->addList(
-              "FILTER_SOURCE_PATTERNS",
-              "The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n"
-              "pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n"
-              "it is also possible to disable source filtering for a specific pattern using\n"
-              "*.ext= (so without naming a filter).\n"
-              "This tag requires that the tag FILTER_SOURCE_FILES is set to YES."
-             );
-  cl->addDependency("FILTER_SOURCE_FILES");
-  //----
-  cs = cfg->addString(
-              "USE_MDFILE_AS_MAINPAGE",
-              "If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n"
-              "is part of the input, its contents will be placed on the main page\n"
-              "(index.html). This can be useful if you have a project on for instance GitHub\n"
-              "and want to reuse the introduction page also for the doxygen output."
-             );
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Source_Browser","Configuration options related to source browsing");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "SOURCE_BROWSER",
-              "If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n"
-              "generated. Documented entities will be cross-referenced with these sources.\n"
-              "\n"
-              "Note: To get rid of all source code in the generated output, make sure that\n"
-              "also VERBATIM_HEADERS is set to NO.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "INLINE_SOURCES",
-              "Setting the INLINE_SOURCES tag to YES will include the body of functions,\n"
-              "classes and enums directly into the documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "STRIP_CODE_COMMENTS",
-              "Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n"
-              "special comment blocks from generated source code fragments. Normal C, C++ and\n"
-              "Fortran comments will always remain visible.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "REFERENCED_BY_RELATION",
-              "If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n"
-              "function all documented functions referencing it will be listed.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "REFERENCES_RELATION",
-              "If the REFERENCES_RELATION tag is set to YES then for each documented function\n"
-              "all documented entities called/used by that function will be listed.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "REFERENCES_LINK_SOURCE",
-              "If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n"
-              "to YES, then the hyperlinks from functions in REFERENCES_RELATION and\n"
-              "REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n"
-              "link to the documentation.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "SOURCE_TOOLTIPS",
-              "If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n"
-              "source code will show a tooltip with additional information such as prototype,\n"
-              "brief description and links to the definition and documentation. Since this\n"
-              "will make the HTML file larger and loading of large files a bit slower, you\n"
-              "can opt to disable this feature.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag SOURCE_BROWSER is set to YES.",
-              TRUE
-             );
-  cb->addDependency("SOURCE_BROWSER");
-  //----
-  cb = cfg->addBool(
-             "USE_HTAGS",
-              "If the USE_HTAGS tag is set to YES then the references to source code will\n"
-              "point to the HTML generated by the htags(1) tool instead of doxygen built-in\n"
-              "source browser. The htags tool is part of GNU's global source tagging system\n"
-              "(see http://www.gnu.org/software/global/global.html). You will need version\n"
-              "4.8.6 or higher.\n"
-              "\n"
-              "To use it do the following:\n"
-              "- Install the latest version of global\n"
-              "- Enable SOURCE_BROWSER and USE_HTAGS in the config file\n"
-              "- Make sure the INPUT points to the root of the source tree\n"
-              "- Run doxygen as normal\n"
-              "\n"
-              "Doxygen will invoke htags (and that will in turn invoke gtags), so these\n"
-              "tools must be available from the command line (i.e. in the search path).\n"
-              "\n"
-              "The result: instead of the source browser generated by doxygen, the links to\n"
-              "source code will now point to the output of htags.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SOURCE_BROWSER is set to YES.",
-              FALSE
-             );
-  cb->addDependency("SOURCE_BROWSER");
-  //----
-  cb = cfg->addBool(
-             "VERBATIM_HEADERS",
-              "If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n"
-              "verbatim copy of the header file for each class for which an include is\n"
-              "specified. Set to NO to disable this.\n"
-              "See also: Section \\class.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-#if USE_LIBCLANG
-  //----
-  cb = cfg->addBool(
-             "CLANG_ASSISTED_PARSING",
-              "If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the\n"
-              "clang parser (see: http://clang.llvm.org/) for more acurate parsing at the\n"
-              "cost of reduced performance. This can be particularly helpful with template\n"
-              "rich C++ code for which doxygen's built-in parser lacks the necessary type\n"
-              "information.\n"
-              "Note: The availability of this option depends on whether or not doxygen was\n"
-              "compiled with the --with-libclang option.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-#else
-  cfg->addDisabled("CLANG_ASSISTED_PARSING");
-#endif
-#if USE_LIBCLANG
-  //----
-  cl = cfg->addList(
-              "CLANG_OPTIONS",
-              "If clang assisted parsing is enabled you can provide the compiler with command\n"
-              "line options that you would normally use when invoking the compiler. Note that\n"
-              "the include paths will already be set by doxygen for the files and directories\n"
-              "specified with INPUT and INCLUDE_PATH.\n"
-              "This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES."
-             );
-  cl->addDependency("CLANG_ASSISTED_PARSING");
-#else
-  cfg->addDisabled("CLANG_OPTIONS");
-#endif
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Index","Configuration options related to the alphabetical class index");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "ALPHABETICAL_INDEX",
-              "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n"
-              "compounds will be generated. Enable this if the project contains a lot of\n"
-              "classes, structs, unions or interfaces.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  ci = cfg->addInt(
-              "COLS_IN_ALPHA_INDEX",
-              "The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n"
-              "which the alphabetical index list will be split.\n"
-              "Minimum value: 1, maximum value: 20, default value: 5.\n"
-              "This tag requires that the tag ALPHABETICAL_INDEX is set to YES.",
-              1,20,5
-             );
-  ci->addDependency("ALPHABETICAL_INDEX");
-  //----
-  cl = cfg->addList(
-              "IGNORE_PREFIX",
-              "In case all classes in a project start with a common prefix, all classes will\n"
-              "be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n"
-              "can be used to specify a prefix (or a list of prefixes) that should be ignored\n"
-              "while generating the index headers.\n"
-              "This tag requires that the tag ALPHABETICAL_INDEX is set to YES."
-             );
-  cl->addDependency("ALPHABETICAL_INDEX");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("HTML","Configuration options related to the HTML output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_HTML",
-              "If the GENERATE_HTML tag is set to YES doxygen will generate HTML output\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cs = cfg->addString(
-              "HTML_OUTPUT",
-              "The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: html.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setDefaultValue("html");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "HTML_FILE_EXTENSION",
-              "The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n"
-              "generated HTML page (for example: .htm, .php, .asp).\n"
-              "The default value is: .html.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setDefaultValue(".html");
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "HTML_HEADER",
-              "The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n"
-              "each generated HTML page. If the tag is left blank doxygen will generate a\n"
-              "standard header.\n"
-              "\n"
-              "To get valid HTML the header file that includes any scripts and style sheets\n"
-              "that doxygen needs, which is dependent on the configuration options used (e.g.\n"
-              "the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n"
-              "default header using\n"
-              "doxygen -w html new_header.html new_footer.html new_stylesheet.css\n"
-              "YourConfigFile\n"
-              "and then modify the file new_header.html. See also section \"Doxygen usage\"\n"
-              "for information on how to generate the default header that doxygen normally\n"
-              "uses.\n"
-              "Note: The header is subject to change so you typically have to regenerate the\n"
-              "default header when upgrading to a newer version of doxygen. For a description\n"
-              "of the possible markers and block names see the documentation.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "HTML_FOOTER",
-              "The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n"
-              "generated HTML page. If the tag is left blank doxygen will generate a standard\n"
-              "footer. See HTML_HEADER for more information on how to generate a default\n"
-              "footer and what special commands can be used inside the footer. See also\n"
-              "section \"Doxygen usage\" for information on how to generate the default footer\n"
-              "that doxygen normally uses.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "HTML_STYLESHEET",
-              "The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n"
-              "sheet that is used by each HTML page. It can be used to fine-tune the look of\n"
-              "the HTML output. If left blank doxygen will generate a default style sheet.\n"
-              "See also section \"Doxygen usage\" for information on how to generate the style\n"
-              "sheet that doxygen normally uses.\n"
-              "Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n"
-              "it is more robust and this tag (HTML_STYLESHEET) will in the future become\n"
-              "obsolete.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "HTML_EXTRA_STYLESHEET",
-              "The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-\n"
-              "defined cascading style sheet that is included after the standard style sheets\n"
-              "created by doxygen. Using this option one can overrule certain style aspects.\n"
-              "This is preferred over using HTML_STYLESHEET since it does not replace the\n"
-              "standard style sheet and is therefor more robust against future updates.\n"
-              "Doxygen will copy the style sheet file to the output directory. For an example\n"
-              "see the documentation.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTML");
-  //----
-  cl = cfg->addList(
-              "HTML_EXTRA_FILES",
-              "The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n"
-              "other source files which should be copied to the HTML output directory. Note\n"
-              "that these files will be copied to the base HTML output directory. Use the\n"
-              "$relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n"
-              "files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n"
-              "files will be copied as-is; there are no commands or markers available.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES."
-             );
-  cl->addDependency("GENERATE_HTML");
-  cl->setWidgetType(ConfigList::File);
-  //----
-  ci = cfg->addInt(
-              "HTML_COLORSTYLE_HUE",
-              "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n"
-              "will adjust the colors in the stylesheet and background images according to\n"
-              "this color. Hue is specified as an angle on a colorwheel, see\n"
-              "http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n"
-              "0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n"
-              "purple, and 360 is red again.\n"
-              "Minimum value: 0, maximum value: 359, default value: 220.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              0,359,220
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "HTML_COLORSTYLE_SAT",
-              "The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n"
-              "in the HTML output. For a value of 0 the output will use grayscales only. A\n"
-              "value of 255 will produce the most vivid colors.\n"
-              "Minimum value: 0, maximum value: 255, default value: 100.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              0,255,100
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "HTML_COLORSTYLE_GAMMA",
-              "The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n"
-              "luminance component of the colors in the HTML output. Values below 100\n"
-              "gradually make the output lighter, whereas values above 100 make the output\n"
-              "darker. The value divided by 100 is the actual gamma applied, so 80 represents\n"
-              "a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n"
-              "change the gamma.\n"
-              "Minimum value: 40, maximum value: 240, default value: 80.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              40,240,80
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "HTML_TIMESTAMP",
-              "If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n"
-              "page will contain the date and time when the page was generated. Setting this\n"
-              "to NO can help when comparing the output of multiple runs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "HTML_DYNAMIC_SECTIONS",
-              "If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n"
-              "documentation will contain sections that can be hidden and shown after the\n"
-              "page has loaded.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "HTML_INDEX_NUM_ENTRIES",
-              "With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n"
-              "shown in the various tree structured indices initially; the user can expand\n"
-              "and collapse entries dynamically later on. Doxygen will expand the tree to\n"
-              "such a level that at most the specified number of entries are visible (unless\n"
-              "a fully collapsed tree already exceeds this amount). So setting the number of\n"
-              "entries 1 will produce a full collapsed tree by default. 0 is a special value\n"
-              "representing an infinite number of entries and will result in a full expanded\n"
-              "tree by default.\n"
-              "Minimum value: 0, maximum value: 9999, default value: 100.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              0,9999,100
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_DOCSET",
-              "If the GENERATE_DOCSET tag is set to YES, additional index files will be\n"
-              "generated that can be used as input for Apple's Xcode 3 integrated development\n"
-              "environment (see: http://developer.apple.com/tools/xcode/), introduced with\n"
-              "OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n"
-              "Makefile in the HTML output directory. Running make will produce the docset in\n"
-              "that directory and running make install will install the docset in\n"
-              "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n"
-              "startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n"
-              "for more information.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "DOCSET_FEEDNAME",
-              "This tag determines the name of the docset feed. A documentation feed provides\n"
-              "an umbrella under which multiple documentation sets from a single provider\n"
-              "(such as a company or product suite) can be grouped.\n"
-              "The default value is: Doxygen generated docs.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-             );
-  cs->setDefaultValue("Doxygen generated docs");
-  cs->addDependency("GENERATE_DOCSET");
-  //----
-  cs = cfg->addString(
-              "DOCSET_BUNDLE_ID",
-              "This tag specifies a string that should uniquely identify the documentation\n"
-              "set bundle. This should be a reverse domain-name style string, e.g.\n"
-              "com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-             );
-  cs->setDefaultValue("org.doxygen.Project");
-  cs->addDependency("GENERATE_DOCSET");
-  //----
-  cs = cfg->addString(
-              "DOCSET_PUBLISHER_ID",
-              "The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n"
-              "the documentation publisher. This should be a reverse domain-name style\n"
-              "string, e.g. com.mycompany.MyDocSet.documentation.\n"
-              "The default value is: org.doxygen.Publisher.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-             );
-  cs->setDefaultValue("org.doxygen.Publisher");
-  cs->addDependency("GENERATE_DOCSET");
-  //----
-  cs = cfg->addString(
-              "DOCSET_PUBLISHER_NAME",
-              "The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n"
-              "The default value is: Publisher.\n"
-              "This tag requires that the tag GENERATE_DOCSET is set to YES."
-             );
-  cs->setDefaultValue("Publisher");
-  cs->addDependency("GENERATE_DOCSET");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_HTMLHELP",
-              "If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n"
-              "additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n"
-              "index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n"
-              "(see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n"
-              "Windows.\n"
-              "\n"
-              "The HTML Help Workshop contains a compiler that can convert all HTML output\n"
-              "generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n"
-              "files are now used as the Windows 98 help format, and will replace the old\n"
-              "Windows help format (.hlp) on all Windows platforms in the future. Compressed\n"
-              "HTML files also contain an index, a table of contents, and you can search for\n"
-              "words in the documentation. The HTML workshop also contains a viewer for\n"
-              "compressed HTML files.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "CHM_FILE",
-              "The CHM_FILE tag can be used to specify the file name of the resulting .chm\n"
-              "file. You can add a path in front of the file if the result should not be\n"
-              "written to the html output directory.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTMLHELP");
-  //----
-  cs = cfg->addString(
-              "HHC_LOCATION",
-              "The HHC_LOCATION tag can be used to specify the location (absolute path\n"
-              "including file name) of the HTML help compiler ( hhc.exe). If non-empty\n"
-              "doxygen will try to run the HTML help compiler on the generated index.hhp.\n"
-              "The file has to be specified with full path.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_HTMLHELP");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_CHI",
-              "The GENERATE_CHI flag controls if a separate .chi index file is generated (\n"
-              "YES) or that it should be included in the master .chm file ( NO).\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTMLHELP");
-  //----
-  cs = cfg->addString(
-              "CHM_INDEX_ENCODING",
-              "The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)\n"
-              "and project file content.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES."
-             );
-  cs->addDependency("GENERATE_HTMLHELP");
-  //----
-  cb = cfg->addBool(
-             "BINARY_TOC",
-              "The BINARY_TOC flag controls whether a binary table of contents is generated (\n"
-              "YES) or a normal table of contents ( NO) in the .chm file.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTMLHELP");
-  //----
-  cb = cfg->addBool(
-             "TOC_EXPAND",
-              "The TOC_EXPAND flag can be set to YES to add extra items for group members to\n"
-              "the table of contents of the HTML help documentation and to the tree view.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTMLHELP is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTMLHELP");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_QHP",
-              "If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n"
-              "QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n"
-              "can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n"
-              "(.qch) of the generated HTML documentation.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "QCH_FILE",
-              "If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n"
-              "the file name of the resulting .qch file. The path specified is relative to\n"
-              "the HTML output folder.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHP_NAMESPACE",
-              "The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n"
-              "Project output. For more information please see Qt Help Project / Namespace\n"
-              "(see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->setDefaultValue("org.doxygen.Project");
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHP_VIRTUAL_FOLDER",
-              "The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n"
-              "Help Project output. For more information please see Qt Help Project / Virtual\n"
-              "Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n"
-              "folders).\n"
-              "The default value is: doc.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->setDefaultValue("doc");
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHP_CUST_FILTER_NAME",
-              "If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n"
-              "filter to add. For more information please see Qt Help Project / Custom\n"
-              "Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n"
-              "filters).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHP_CUST_FILTER_ATTRS",
-              "The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n"
-              "custom filter to add. For more information please see Qt Help Project / Custom\n"
-              "Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n"
-              "filters).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHP_SECT_FILTER_ATTRS",
-              "The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n"
-              "project's filter section matches. Qt Help Project / Filter Attributes (see:\n"
-              "http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cs = cfg->addString(
-              "QHG_LOCATION",
-              "The QHG_LOCATION tag can be used to specify the location of Qt's\n"
-              "qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n"
-              "generated .qhp file.\n"
-              "This tag requires that the tag GENERATE_QHP is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_QHP");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_ECLIPSEHELP",
-              "If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n"
-              "generated, together with the HTML files, they form an Eclipse help plugin. To\n"
-              "install this plugin and make it available under the help contents menu in\n"
-              "Eclipse, the contents of the directory containing the HTML and XML files needs\n"
-              "to be copied into the plugins directory of eclipse. The name of the directory\n"
-              "within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n"
-              "After copying Eclipse needs to be restarted before the help appears.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cs = cfg->addString(
-              "ECLIPSE_DOC_ID",
-              "A unique identifier for the Eclipse help plugin. When installing the plugin\n"
-              "the directory name containing the HTML and XML files should also have this\n"
-              "name. Each documentation set should have its own identifier.\n"
-              "The default value is: org.doxygen.Project.\n"
-              "This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES."
-             );
-  cs->setDefaultValue("org.doxygen.Project");
-  cs->addDependency("GENERATE_ECLIPSEHELP");
-  //----
-  cb = cfg->addBool(
-             "DISABLE_INDEX",
-              "If you want full control over the layout of the generated HTML pages it might\n"
-              "be necessary to disable the index and replace it with your own. The\n"
-              "DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n"
-              "of each HTML page. A value of NO enables the index and the value YES disables\n"
-              "it. Since the tabs in the index contain the same information as the navigation\n"
-              "tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_TREEVIEW",
-              "The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n"
-              "structure should be generated to display hierarchical information. If the tag\n"
-              "value is set to YES, a side panel will be generated containing a tree-like\n"
-              "index structure (just like the one that is generated for HTML Help). For this\n"
-              "to work a browser that supports JavaScript, DHTML, CSS and frames is required\n"
-              "(i.e. any modern browser). Windows users are probably better off using the\n"
-              "HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can\n"
-              "further fine-tune the look of the index. As an example, the default style\n"
-              "sheet generated by doxygen has an example that shows how to put an image at\n"
-              "the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n"
-              "the same information as the tab index, you could consider setting\n"
-              "DISABLE_INDEX to YES when enabling this option.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "ENUM_VALUES_PER_LINE",
-              "The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n"
-              "doxygen will group on one line in the generated HTML documentation.\n"
-              "\n"
-              "Note that a value of 0 will completely suppress the enum values from appearing\n"
-              "in the overview section.\n"
-              "Minimum value: 0, maximum value: 20, default value: 4.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              0,20,4
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "TREEVIEW_WIDTH",
-              "If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n"
-              "to set the initial width (in pixels) of the frame in which the tree is shown.\n"
-              "Minimum value: 0, maximum value: 1500, default value: 250.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              0,1500,250
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "EXT_LINKS_IN_WINDOW",
-              "When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to\n"
-              "external symbols imported via tag files in a separate window.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  ci = cfg->addInt(
-              "FORMULA_FONTSIZE",
-              "Use this tag to change the font size of LaTeX formulas included as images in\n"
-              "the HTML documentation. When you change the font size after a successful\n"
-              "doxygen run you need to manually remove any form_*.png images from the HTML\n"
-              "output directory to force them to be regenerated.\n"
-              "Minimum value: 8, maximum value: 50, default value: 10.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              8,50,10
-             );
-  ci->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "FORMULA_TRANSPARENT",
-              "Use the FORMULA_TRANPARENT tag to determine whether or not the images\n"
-              "generated for formulas are transparent PNGs. Transparent PNGs are not\n"
-              "supported properly for IE 6.0, but are supported on all modern browsers.\n"
-              "\n"
-              "Note that when changing this option you need to delete any form_*.png files in\n"
-              "the HTML output directory before the changes have effect.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "USE_MATHJAX",
-              "Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n"
-              "http://www.mathjax.org) which uses client side Javascript for the rendering\n"
-              "instead of using prerendered bitmaps. Use this if you do not have LaTeX\n"
-              "installed or if you want to formulas look prettier in the HTML output. When\n"
-              "enabled you may also need to install MathJax separately and configure the path\n"
-              "to it using the MATHJAX_RELPATH option.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  ce = cfg->addEnum(
-              "MATHJAX_FORMAT",
-              "When MathJax is enabled you can set the default output format to be used for\n"
-              "the MathJax output. See the MathJax site (see:\n"
-              "http://docs.mathjax.org/en/latest/output.html) for more details.\n"
-              "Possible values are: HTML-CSS (which is slower, but has the best\n"
-              "compatibility), NativeMML (i.e. MathML) and SVG.\n"
-              "The default value is: HTML-CSS.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES.",
-              "HTML-CSS"
-             );
-  ce->addValue("HTML-CSS");
-  ce->addValue("NativeMML");
-  ce->addValue("SVG");
-  ce->addDependency("USE_MATHJAX");
-  //----
-  cs = cfg->addString(
-              "MATHJAX_RELPATH",
-              "When MathJax is enabled you need to specify the location relative to the HTML\n"
-              "output directory using the MATHJAX_RELPATH option. The destination directory\n"
-              "should contain the MathJax.js script. For instance, if the mathjax directory\n"
-              "is located at the same level as the HTML output directory, then\n"
-              "MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n"
-              "Content Delivery Network so you can quickly see the result without installing\n"
-              "MathJax. However, it is strongly recommended to install a local copy of\n"
-              "MathJax from http://www.mathjax.org before deployment.\n"
-              "The default value is: http://cdn.mathjax.org/mathjax/latest.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-             );
-  cs->setDefaultValue("http://cdn.mathjax.org/mathjax/latest");
-  cs->addDependency("USE_MATHJAX");
-  //----
-  cl = cfg->addList(
-              "MATHJAX_EXTENSIONS",
-              "The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n"
-              "extension names that should be enabled during MathJax rendering. For example\n"
-              "MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-             );
-  cl->addDependency("USE_MATHJAX");
-  //----
-  cs = cfg->addString(
-              "MATHJAX_CODEFILE",
-              "The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n"
-              "of code that will be used on startup of the MathJax code. See the MathJax site\n"
-              "(see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n"
-              "example see the documentation.\n"
-              "This tag requires that the tag USE_MATHJAX is set to YES."
-             );
-  cs->addDependency("USE_MATHJAX");
-  //----
-  cb = cfg->addBool(
-             "SEARCHENGINE",
-              "When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n"
-              "the HTML output. The underlying search engine uses javascript and DHTML and\n"
-              "should work on any modern browser. Note that when using HTML help\n"
-              "(GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n"
-              "there is already a search function so this one should typically be disabled.\n"
-              "For large projects the javascript based search engine can be slow, then\n"
-              "enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n"
-              "search using the keyboard; to jump to the search box use <access key> + S\n"
-              "(what the <access key> is depends on the OS and browser, but it is typically\n"
-              "<CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n"
-              "key> to jump into the search results window, the results can be navigated\n"
-              "using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n"
-              "the search. The filter options can be selected when the cursor is inside the\n"
-              "search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n"
-              "to select a filter and <Enter> or <escape> to activate or cancel the filter\n"
-              "option.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_HTML is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_HTML");
-  //----
-  cb = cfg->addBool(
-             "SERVER_BASED_SEARCH",
-              "When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n"
-              "implemented using a web server instead of a web client using Javascript. There\n"
-              "are two flavours of web server based searching depending on the\n"
-              "EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for\n"
-              "searching and an index file used by the script. When EXTERNAL_SEARCH is\n"
-              "enabled the indexing and searching needs to be provided by external tools. See\n"
-              "the section \"External Indexing and Searching\" for details.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES.",
-              FALSE
-             );
-  cb->addDependency("SEARCHENGINE");
-  //----
-  cb = cfg->addBool(
-             "EXTERNAL_SEARCH",
-              "When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n"
-              "script for searching. Instead the search results are written to an XML file\n"
-              "which needs to be processed by an external indexer. Doxygen will invoke an\n"
-              "external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n"
-              "search results.\n"
-              "\n"
-              "Doxygen ships with an example indexer ( doxyindexer) and search engine\n"
-              "(doxysearch.cgi) which are based on the open source search engine library\n"
-              "Xapian (see: http://xapian.org/).\n"
-              "\n"
-              "See the section \"External Indexing and Searching\" for details.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES.",
-              FALSE
-             );
-  cb->addDependency("SEARCHENGINE");
-  //----
-  cs = cfg->addString(
-              "SEARCHENGINE_URL",
-              "The SEARCHENGINE_URL should point to a search engine hosted by a web server\n"
-              "which will return the search results when EXTERNAL_SEARCH is enabled.\n"
-              "\n"
-              "Doxygen ships with an example indexer ( doxyindexer) and search engine\n"
-              "(doxysearch.cgi) which are based on the open source search engine library\n"
-              "Xapian (see: http://xapian.org/). See the section \"External Indexing and\n"
-              "Searching\" for details.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-             );
-  cs->addDependency("SEARCHENGINE");
-  //----
-  cs = cfg->addString(
-              "SEARCHDATA_FILE",
-              "When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n"
-              "search data is written to a file for indexing by an external tool. With the\n"
-              "SEARCHDATA_FILE tag the name of this file can be specified.\n"
-              "The default file is: searchdata.xml.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-             );
-  cs->setDefaultValue("searchdata.xml");
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("SEARCHENGINE");
-  //----
-  cs = cfg->addString(
-              "EXTERNAL_SEARCH_ID",
-              "When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n"
-              "EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n"
-              "useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n"
-              "projects and redirect the results back to the right project.\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-             );
-  cs->addDependency("SEARCHENGINE");
-  //----
-  cl = cfg->addList(
-              "EXTRA_SEARCH_MAPPINGS",
-              "The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n"
-              "projects other than the one defined by this configuration file, but that are\n"
-              "all added to the same external search index. Each project needs to have a\n"
-              "unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n"
-              "to a relative location where the documentation can be found. The format is:\n"
-              "EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n"
-              "This tag requires that the tag SEARCHENGINE is set to YES."
-             );
-  cl->addDependency("SEARCHENGINE");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("LaTeX","Configuration options related to the LaTeX output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_LATEX",
-              "If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cs = cfg->addString(
-              "LATEX_OUTPUT",
-              "The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: latex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setDefaultValue("latex");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_LATEX");
-  //----
-  cs = cfg->addString(
-              "LATEX_CMD_NAME",
-              "The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n"
-              "invoked.\n"
-              "\n"
-              "Note that when enabling USE_PDFLATEX this option is only used for generating\n"
-              "bitmaps for formulas in the HTML output, but not in the Makefile that is\n"
-              "written to the output directory.\n"
-              "The default file is: latex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setDefaultValue("latex");
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_LATEX");
-  //----
-  cs = cfg->addString(
-              "MAKEINDEX_CMD_NAME",
-              "The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n"
-              "index for LaTeX.\n"
-              "The default file is: makeindex.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setDefaultValue("makeindex");
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_LATEX");
-  //----
-  cb = cfg->addBool(
-             "COMPACT_LATEX",
-              "If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX\n"
-              "documents. This may be useful for small projects and may help to save some\n"
-              "trees in general.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  ce = cfg->addEnum(
-              "PAPER_TYPE",
-              "The PAPER_TYPE tag can be used to set the paper type that is used by the\n"
-              "printer.\n"
-              "Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n"
-              "14 inches) and executive (7.25 x 10.5 inches).\n"
-              "The default value is: a4.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              "a4"
-             );
-  ce->addValue("a4");
-  ce->addValue("letter");
-  ce->addValue("legal");
-  ce->addValue("executive");
-  ce->addDependency("GENERATE_LATEX");
-  //----
-  cl = cfg->addList(
-              "EXTRA_PACKAGES",
-              "The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n"
-              "that should be included in the LaTeX output. To get the times font for\n"
-              "instance you can specify\n"
-              "EXTRA_PACKAGES=times\n"
-              "If left blank no extra packages will be included.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cl->addDependency("GENERATE_LATEX");
-  //----
-  cs = cfg->addString(
-              "LATEX_HEADER",
-              "The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n"
-              "generated LaTeX document. The header should contain everything until the first\n"
-              "chapter. If it is left blank doxygen will generate a standard header. See\n"
-              "section \"Doxygen usage\" for information on how to let doxygen write the\n"
-              "default header to a separate file.\n"
-              "\n"
-              "Note: Only use a user-defined header if you know what you are doing! The\n"
-              "following commands have a special meaning inside the header: $title,\n"
-              "$datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will\n"
-              "replace them by respectively the title of the page, the current date and time,\n"
-              "only the current date, the version number of doxygen, the project name (see\n"
-              "PROJECT_NAME), or the project number (see PROJECT_NUMBER).\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_LATEX");
-  //----
-  cs = cfg->addString(
-              "LATEX_FOOTER",
-              "The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n"
-              "generated LaTeX document. The footer should contain everything after the last\n"
-              "chapter. If it is left blank doxygen will generate a standard footer.\n"
-              "\n"
-              "Note: Only use a user-defined footer if you know what you are doing!\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_LATEX");
-  //----
-  cl = cfg->addList(
-              "LATEX_EXTRA_FILES",
-              "The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n"
-              "other source files which should be copied to the LATEX_OUTPUT output\n"
-              "directory. Note that the files will be copied as-is; there are no commands or\n"
-              "markers available.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cl->addDependency("GENERATE_LATEX");
-  cl->setWidgetType(ConfigList::File);
-  //----
-  cb = cfg->addBool(
-             "PDF_HYPERLINKS",
-              "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n"
-              "prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n"
-              "contain links (just like the HTML output) instead of page references. This\n"
-              "makes the output suitable for online browsing using a PDF viewer.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  cb = cfg->addBool(
-             "USE_PDFLATEX",
-              "If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n"
-              "the PDF file directly from the LaTeX files. Set this option to YES to get a\n"
-              "higher quality PDF documentation.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  cb = cfg->addBool(
-             "LATEX_BATCHMODE",
-              "If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n"
-              "command to the generated LaTeX files. This will instruct LaTeX to keep running\n"
-              "if errors occur, instead of asking the user for help. This option is also used\n"
-              "when generating formulas in HTML.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  cb = cfg->addBool(
-             "LATEX_HIDE_INDICES",
-              "If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n"
-              "index chapters (such as File Index, Compound Index, etc.) in the output.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  cb = cfg->addBool(
-             "LATEX_SOURCE_CODE",
-              "If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n"
-              "code with syntax highlighting in the LaTeX output.\n"
-              "\n"
-              "Note that which sources are shown also depends on other settings such as\n"
-              "SOURCE_BROWSER.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_LATEX");
-  //----
-  cs = cfg->addString(
-              "LATEX_BIB_STYLE",
-              "The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n"
-              "bibliography, e.g. plainnat, or ieeetr. See\n"
-              "http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n"
-              "The default value is: plain.\n"
-              "This tag requires that the tag GENERATE_LATEX is set to YES."
-             );
-  cs->setDefaultValue("plain");
-  cs->addDependency("GENERATE_LATEX");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("RTF","Configuration options related to the RTF output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_RTF",
-              "If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The\n"
-              "RTF output is optimized for Word 97 and may not look too pretty with other RTF\n"
-              "readers/editors.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cs = cfg->addString(
-              "RTF_OUTPUT",
-              "The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: rtf.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-             );
-  cs->setDefaultValue("rtf");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_RTF");
-  //----
-  cb = cfg->addBool(
-             "COMPACT_RTF",
-              "If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF\n"
-              "documents. This may be useful for small projects and may help to save some\n"
-              "trees in general.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_RTF");
-  //----
-  cb = cfg->addBool(
-             "RTF_HYPERLINKS",
-              "If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n"
-              "contain hyperlink fields. The RTF file will contain links (just like the HTML\n"
-              "output) instead of page references. This makes the output suitable for online\n"
-              "browsing using Word or some other Word compatible readers that support those\n"
-              "fields.\n"
-              "\n"
-              "Note: WordPad (write) and others do not support links.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_RTF");
-  //----
-  cs = cfg->addString(
-              "RTF_STYLESHEET_FILE",
-              "Load stylesheet definitions from file. Syntax is similar to doxygen's config\n"
-              "file, i.e. a series of assignments. You only have to provide replacements,\n"
-              "missing definitions are set to their default value.\n"
-              "\n"
-              "See also section \"Doxygen usage\" for information on how to generate the\n"
-              "default style sheet that doxygen normally uses.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_RTF");
-  //----
-  cs = cfg->addString(
-              "RTF_EXTENSIONS_FILE",
-              "Set optional variables used in the generation of an RTF document. Syntax is\n"
-              "similar to doxygen's config file. A template extensions file can be generated\n"
-              "using doxygen -e rtf extensionFile.\n"
-              "This tag requires that the tag GENERATE_RTF is set to YES."
-             );
-  cs->setWidgetType(ConfigString::File);
-  cs->addDependency("GENERATE_RTF");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Man","Configuration options related to the man page output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_MAN",
-              "If the GENERATE_MAN tag is set to YES doxygen will generate man pages for\n"
-              "classes and files.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cs = cfg->addString(
-              "MAN_OUTPUT",
-              "The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it. A directory man3 will be created inside the directory specified by\n"
-              "MAN_OUTPUT.\n"
-              "The default directory is: man.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES."
-             );
-  cs->setDefaultValue("man");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_MAN");
-  //----
-  cs = cfg->addString(
-              "MAN_EXTENSION",
-              "The MAN_EXTENSION tag determines the extension that is added to the generated\n"
-              "man pages. In case the manual section does not start with a number, the number\n"
-              "3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n"
-              "optional.\n"
-              "The default value is: .3.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES."
-             );
-  cs->setDefaultValue(".3");
-  cs->addDependency("GENERATE_MAN");
-  //----
-  cb = cfg->addBool(
-             "MAN_LINKS",
-              "If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n"
-              "will generate one additional man file for each entity documented in the real\n"
-              "man page(s). These additional files only source the real man page, but without\n"
-              "them the man command would be unable to find the correct page.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_MAN is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_MAN");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("XML","Configuration options related to the XML output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_XML",
-              "If the GENERATE_XML tag is set to YES doxygen will generate an XML file that\n"
-              "captures the structure of the code including all documentation.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cs = cfg->addString(
-              "XML_OUTPUT",
-              "The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n"
-              "relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n"
-              "it.\n"
-              "The default directory is: xml.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-             );
-  cs->setDefaultValue("xml");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_XML");
-  //----
-  cs = cfg->addString(
-              "XML_SCHEMA",
-              "The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a\n"
-              "validating XML parser to check the syntax of the XML files.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-             );
-  cs->addDependency("GENERATE_XML");
-  //----
-  cs = cfg->addString(
-              "XML_DTD",
-              "The XML_DTD tag can be used to specify a XML DTD, which can be used by a\n"
-              "validating XML parser to check the syntax of the XML files.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES."
-             );
-  cs->addDependency("GENERATE_XML");
-  //----
-  cb = cfg->addBool(
-             "XML_PROGRAMLISTING",
-              "If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program\n"
-              "listings (including syntax highlighting and cross-referencing information) to\n"
-              "the XML output. Note that enabling this will significantly increase the size\n"
-              "of the XML output.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_XML is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_XML");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Docbook","Configuration options related to the DOCBOOK output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_DOCBOOK",
-              "If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files\n"
-              "that can be used to generate PDF.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cs = cfg->addString(
-              "DOCBOOK_OUTPUT",
-              "The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n"
-              "If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n"
-              "front of it.\n"
-              "The default directory is: docbook.\n"
-              "This tag requires that the tag GENERATE_DOCBOOK is set to YES."
-             );
-  cs->setDefaultValue("docbook");
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("GENERATE_DOCBOOK");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("AutoGen","Configuration options for the AutoGen Definitions output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_AUTOGEN_DEF",
-              "If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen\n"
-              "Definitions (see http://autogen.sf.net) file that captures the structure of\n"
-              "the code including all documentation. Note that this feature is still\n"
-              "experimental and incomplete at the moment.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //---------------------------------------------------------------------------
-  cfg->addInfo("PerlMod","Configuration options related to the Perl module output");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "GENERATE_PERLMOD",
-              "If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module\n"
-              "file that captures the structure of the code including all documentation.\n"
-              "\n"
-              "Note that this feature is still experimental and incomplete at the moment.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "PERLMOD_LATEX",
-              "If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary\n"
-              "Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n"
-              "output from the Perl module output.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES.",
-              FALSE
-             );
-  cb->addDependency("GENERATE_PERLMOD");
-  //----
-  cb = cfg->addBool(
-             "PERLMOD_PRETTY",
-              "If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely\n"
-              "formatted so it can be parsed by a human reader. This is useful if you want to\n"
-              "understand what is going on. On the other hand, if this tag is set to NO the\n"
-              "size of the Perl module output will be much smaller and Perl will parse it\n"
-              "just the same.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES.",
-              TRUE
-             );
-  cb->addDependency("GENERATE_PERLMOD");
-  //----
-  cs = cfg->addString(
-              "PERLMOD_MAKEVAR_PREFIX",
-              "The names of the make variables in the generated doxyrules.make file are\n"
-              "prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n"
-              "so different doxyrules.make files included by the same Makefile don't\n"
-              "overwrite each other's variables.\n"
-              "This tag requires that the tag GENERATE_PERLMOD is set to YES."
-             );
-  cs->addDependency("GENERATE_PERLMOD");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Preprocessor","Configuration options related to the preprocessor");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "ENABLE_PREPROCESSING",
-              "If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all\n"
-              "C-preprocessor directives found in the sources and include files.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "MACRO_EXPANSION",
-              "If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names\n"
-              "in the source code. If set to NO only conditional compilation will be\n"
-              "performed. Macro expansion can be done in a controlled way by setting\n"
-              "EXPAND_ONLY_PREDEF to YES.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES.",
-              FALSE
-             );
-  cb->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cb = cfg->addBool(
-             "EXPAND_ONLY_PREDEF",
-              "If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n"
-              "the macro expansion is limited to the macros specified with the PREDEFINED and\n"
-              "EXPAND_AS_DEFINED tags.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES.",
-              FALSE
-             );
-  cb->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cb = cfg->addBool(
-             "SEARCH_INCLUDES",
-              "If the SEARCH_INCLUDES tag is set to YES the includes files in the\n"
-              "INCLUDE_PATH will be searched if a #include is found.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES.",
-              TRUE
-             );
-  cb->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cl = cfg->addList(
-              "INCLUDE_PATH",
-              "The INCLUDE_PATH tag can be used to specify one or more directories that\n"
-              "contain include files that are not input files but should be processed by the\n"
-              "preprocessor.\n"
-              "This tag requires that the tag SEARCH_INCLUDES is set to YES."
-             );
-  cl->addDependency("SEARCH_INCLUDES");
-  cl->setWidgetType(ConfigList::Dir);
-  //----
-  cl = cfg->addList(
-              "INCLUDE_FILE_PATTERNS",
-              "You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n"
-              "patterns (like *.h and *.hpp) to filter out the header-files in the\n"
-              "directories. If left blank, the patterns specified with FILE_PATTERNS will be\n"
-              "used.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-             );
-  cl->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cl = cfg->addList(
-              "PREDEFINED",
-              "The PREDEFINED tag can be used to specify one or more macro names that are\n"
-              "defined before the preprocessor is started (similar to the -D option of e.g.\n"
-              "gcc). The argument of the tag is a list of macros of the form: name or\n"
-              "name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n"
-              "is assumed. To prevent a macro definition from being undefined via #undef or\n"
-              "recursively expanded use the := operator instead of the = operator.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-             );
-  cl->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cl = cfg->addList(
-              "EXPAND_AS_DEFINED",
-              "If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n"
-              "tag can be used to specify a list of macro names that should be expanded. The\n"
-              "macro definition that is found in the sources will be used. Use the PREDEFINED\n"
-              "tag if you want to use a different macro definition that overrules the\n"
-              "definition found in the source code.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES."
-             );
-  cl->addDependency("ENABLE_PREPROCESSING");
-  //----
-  cb = cfg->addBool(
-             "SKIP_FUNCTION_MACROS",
-              "If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n"
-              "remove all refrences to function-like macros that are alone on a line, have an\n"
-              "all uppercase name, and do not end with a semicolon. Such function macros are\n"
-              "typically used for boiler-plate code, and will confuse the parser if not\n"
-              "removed.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag ENABLE_PREPROCESSING is set to YES.",
-              TRUE
-             );
-  cb->addDependency("ENABLE_PREPROCESSING");
-  //---------------------------------------------------------------------------
-  cfg->addInfo("External","Configuration options related to external references");
-  //---------------------------------------------------------------------------
-
-  //----
-  cl = cfg->addList(
-              "TAGFILES",
-              "The TAGFILES tag can be used to specify one or more tag files. For each tag\n"
-              "file the location of the external documentation should be added. The format of\n"
-              "a tag file without this location is as follows:\n"
-              "TAGFILES = file1 file2 ...\n"
-              "Adding location for the tag files is done as follows:\n"
-              "TAGFILES = file1=loc1 \"file2 = loc2\" ...\n"
-              "where loc1 and loc2 can be relative or absolute paths or URLs. See the\n"
-              "section \"Linking to external documentation\" for more information about the use\n"
-              "of tag files.\n"
-              "Note: Each tag file must have an unique name (where the name does NOT include\n"
-              "the path). If a tag file is not located in the directory in which doxygen is\n"
-              "run, you must also specify the path to the tagfile here."
-             );
-  cl->setWidgetType(ConfigList::File);
-  //----
-  cs = cfg->addString(
-              "GENERATE_TAGFILE",
-              "When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n"
-              "tag file that is based on the input files it reads. See section \"Linking to\n"
-              "external documentation\" for more information about the usage of tag files."
-             );
-  cs->setWidgetType(ConfigString::File);
-  //----
-  cb = cfg->addBool(
-             "ALLEXTERNALS",
-              "If the ALLEXTERNALS tag is set to YES all external class will be listed in the\n"
-              "class index. If set to NO only the inherited external classes will be listed.\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTERNAL_GROUPS",
-              "If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in\n"
-              "the modules index. If set to NO, only the current project's groups will be\n"
-              "listed.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "EXTERNAL_PAGES",
-              "If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in\n"
-              "the related pages index. If set to NO, only the current project's pages will\n"
-              "be listed.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cs = cfg->addString(
-              "PERL_PATH",
-              "The PERL_PATH should be the absolute path and name of the perl script\n"
-              "interpreter (i.e. the result of 'which perl').\n"
-              "The default file (with absolute path) is: /usr/bin/perl."
-             );
-  cs->setDefaultValue("/usr/bin/perl");
-  cs->setWidgetType(ConfigString::File);
-  //---------------------------------------------------------------------------
-  cfg->addInfo("Dot","Configuration options related to the dot tool");
-  //---------------------------------------------------------------------------
-
-  //----
-  cb = cfg->addBool(
-             "CLASS_DIAGRAMS",
-              "If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram\n"
-              "(in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n"
-              "NO turns the diagrams off. Note that this option also works with HAVE_DOT\n"
-              "disabled, but it is recommended to install and use dot, since it yields more\n"
-              "powerful graphs.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cs = cfg->addString(
-              "MSCGEN_PATH",
-              "You can define message sequence charts within doxygen comments using the \\msc\n"
-              "command. Doxygen will then run the mscgen tool (see:\n"
-              "http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n"
-              "documentation. The MSCGEN_PATH tag allows you to specify the directory where\n"
-              "the mscgen tool resides. If left empty the tool is assumed to be found in the\n"
-              "default search path."
-             );
-  cs->setWidgetType(ConfigString::Dir);
-  //----
-  cb = cfg->addBool(
-             "HIDE_UNDOC_RELATIONS",
-              "If set to YES, the inheritance and collaboration graphs will hide inheritance\n"
-              "and usage relations if the target is undocumented or is not a class.\n"
-              "The default value is: YES.",
-              TRUE
-             );
-  //----
-  cb = cfg->addBool(
-             "HAVE_DOT",
-              "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n"
-              "available from the path. This tool is part of Graphviz (see:\n"
-              "http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n"
-              "Bell Labs. The other options in this section have no effect if this option is\n"
-              "set to NO\n"
-              "The default value is: NO.",
-              FALSE
-             );
-  //----
-  ci = cfg->addInt(
-              "DOT_NUM_THREADS",
-              "The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n"
-              "to run in parallel. When set to 0 doxygen will base this on the number of\n"
-              "processors available in the system. You can set it explicitly to a value\n"
-              "larger than 0 to get control over the balance between CPU load and processing\n"
-              "speed.\n"
-              "Minimum value: 0, maximum value: 32, default value: 0.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              0,32,0
-             );
-  ci->addDependency("HAVE_DOT");
-  //----
-  cs = cfg->addString(
-              "DOT_FONTNAME",
-              "When you want a differently looking font n the dot files that doxygen\n"
-              "generates you can specify the font name using DOT_FONTNAME. You need to make\n"
-              "sure dot is able to find the font, which can be done by putting it in a\n"
-              "standard location or by setting the DOTFONTPATH environment variable or by\n"
-              "setting DOT_FONTPATH to the directory containing the font.\n"
-              "The default value is: Helvetica.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-             );
-  cs->setDefaultValue("Helvetica");
-  cs->addDependency("HAVE_DOT");
-  //----
-  ci = cfg->addInt(
-              "DOT_FONTSIZE",
-              "The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n"
-              "dot graphs.\n"
-              "Minimum value: 4, maximum value: 24, default value: 10.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              4,24,10
-             );
-  ci->addDependency("HAVE_DOT");
-  //----
-  cs = cfg->addString(
-              "DOT_FONTPATH",
-              "By default doxygen will tell dot to use the default font as specified with\n"
-              "DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n"
-              "the path where dot can find it using this tag.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-             );
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "CLASS_GRAPH",
-              "If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n"
-              "each documented class showing the direct and indirect inheritance relations.\n"
-              "Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "COLLABORATION_GRAPH",
-              "If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n"
-              "graph for each documented class showing the direct and indirect implementation\n"
-              "dependencies (inheritance, containment, and class references variables) of the\n"
-              "class with other documented classes.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "GROUP_GRAPHS",
-              "If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n"
-              "groups, showing the direct groups dependencies.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "UML_LOOK",
-              "If the UML_LOOK tag is set to YES doxygen will generate inheritance and\n"
-              "collaboration diagrams in a style similar to the OMG's Unified Modeling\n"
-              "Language.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  ci = cfg->addInt(
-              "UML_LIMIT_NUM_FIELDS",
-              "If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n"
-              "class node. If there are many fields or methods and many nodes the graph may\n"
-              "become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n"
-              "number of items for each type to make the size more manageable. Set this to 0\n"
-              "for no limit. Note that the threshold may be exceeded by 50% before the limit\n"
-              "is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n"
-              "but if the number exceeds 15, the total amount of fields shown is limited to\n"
-              "10.\n"
-              "Minimum value: 0, maximum value: 100, default value: 10.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              0,100,10
-             );
-  ci->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "TEMPLATE_RELATIONS",
-              "If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n"
-              "collaboration graphs will show the relations between templates and their\n"
-              "instances.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "INCLUDE_GRAPH",
-              "If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n"
-              "YES then doxygen will generate a graph for each documented file showing the\n"
-              "direct and indirect include dependencies of the file with other documented\n"
-              "files.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "INCLUDED_BY_GRAPH",
-              "If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n"
-              "set to YES then doxygen will generate a graph for each documented file showing\n"
-              "the direct and indirect include dependencies of the file with other documented\n"
-              "files.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "CALL_GRAPH",
-              "If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n"
-              "dependency graph for every global function or class method.\n"
-              "\n"
-              "Note that enabling this option will significantly increase the time of a run.\n"
-              "So in most cases it will be better to enable call graphs for selected\n"
-              "functions only using the \\callgraph command.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "CALLER_GRAPH",
-              "If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n"
-              "dependency graph for every global function or class method.\n"
-              "\n"
-              "Note that enabling this option will significantly increase the time of a run.\n"
-              "So in most cases it will be better to enable caller graphs for selected\n"
-              "functions only using the \\callergraph command.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "GRAPHICAL_HIERARCHY",
-              "If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n"
-              "hierarchy of all classes instead of a textual one.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "DIRECTORY_GRAPH",
-              "If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n"
-              "dependencies a directory has on other directories in a graphical way. The\n"
-              "dependency relations are determined by the #include relations between the\n"
-              "files in the directories.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  ce = cfg->addEnum(
-              "DOT_IMAGE_FORMAT",
-              "The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n"
-              "generated by dot.\n"
-              "Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n"
-              "to make the SVG files visible in IE 9+ (other browsers do not have this\n"
-              "requirement).\n"
-              "Possible values are: png, jpg, gif and svg.\n"
-              "The default value is: png.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              "png"
-             );
-  ce->addValue("png");
-  ce->addValue("jpg");
-  ce->addValue("gif");
-  ce->addValue("svg");
-  ce->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "INTERACTIVE_SVG",
-              "If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n"
-              "enable generation of interactive SVG images that allow zooming and panning.\n"
-              "\n"
-              "Note that this requires a modern browser other than Internet Explorer. Tested\n"
-              "and working are Firefox, Chrome, Safari, and Opera.\n"
-              "Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n"
-              "the SVG files visible. Older versions of IE do not have SVG support.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cs = cfg->addString(
-              "DOT_PATH",
-              "The DOT_PATH tag can be used to specify the path where the dot tool can be\n"
-              "found. If left blank, it is assumed the dot tool can be found in the path.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-             );
-  cs->setWidgetType(ConfigString::Dir);
-  cs->addDependency("HAVE_DOT");
-  //----
-  cl = cfg->addList(
-              "DOTFILE_DIRS",
-              "The DOTFILE_DIRS tag can be used to specify one or more directories that\n"
-              "contain dot files that are included in the documentation (see the \\dotfile\n"
-              "command).\n"
-              "This tag requires that the tag HAVE_DOT is set to YES."
-             );
-  cl->addDependency("HAVE_DOT");
-  cl->setWidgetType(ConfigList::Dir);
-  //----
-  cl = cfg->addList(
-              "MSCFILE_DIRS",
-              "The MSCFILE_DIRS tag can be used to specify one or more directories that\n"
-              "contain msc files that are included in the documentation (see the \\mscfile\n"
-              "command)."
-             );
-  cl->setWidgetType(ConfigList::Dir);
-  //----
-  ci = cfg->addInt(
-              "DOT_GRAPH_MAX_NODES",
-              "The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n"
-              "that will be shown in the graph. If the number of nodes in a graph becomes\n"
-              "larger than this value, doxygen will truncate the graph, which is visualized\n"
-              "by representing a node as a red box. Note that doxygen if the number of direct\n"
-              "children of the root node in a graph is already larger than\n"
-              "DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n"
-              "the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n"
-              "Minimum value: 0, maximum value: 10000, default value: 50.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              0,10000,50
-             );
-  ci->addDependency("HAVE_DOT");
-  //----
-  ci = cfg->addInt(
-              "MAX_DOT_GRAPH_DEPTH",
-              "The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n"
-              "generated by dot. A depth value of 3 means that only nodes reachable from the\n"
-              "root by following a path via at most 3 edges will be shown. Nodes that lay\n"
-              "further from the root node will be omitted. Note that setting this option to 1\n"
-              "or 2 may greatly reduce the computation time needed for large code bases. Also\n"
-              "note that the size of a graph can be further restricted by\n"
-              "DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n"
-              "Minimum value: 0, maximum value: 1000, default value: 0.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              0,1000,0
-             );
-  ci->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "DOT_TRANSPARENT",
-              "Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n"
-              "background. This is disabled by default, because dot on Windows does not seem\n"
-              "to support this out of the box.\n"
-              "\n"
-              "Warning: Depending on the platform used, enabling this option may lead to\n"
-              "badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n"
-              "read).\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "DOT_MULTI_TARGETS",
-              "Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\n"
-              "files in one run (i.e. multiple -o and -T options on the command line). This\n"
-              "makes dot run faster, but since only newer versions of dot (>1.8.10) support\n"
-              "this, this feature is disabled by default.\n"
-              "The default value is: NO.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              FALSE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "GENERATE_LEGEND",
-              "If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n"
-              "explaining the meaning of the various boxes and arrows in the dot generated\n"
-              "graphs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cb = cfg->addBool(
-             "DOT_CLEANUP",
-              "If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot\n"
-              "files that are used to generate the various graphs.\n"
-              "The default value is: YES.\n"
-              "This tag requires that the tag HAVE_DOT is set to YES.",
-              TRUE
-             );
-  cb->addDependency("HAVE_DOT");
-  //----
-  cfg->addObsolete("USE_WINDOWS_ENCODING");
-  //----
-  cfg->addObsolete("DETAILS_AT_TOP");
-  //----
-  cfg->addObsolete("QTHELP_FILE");
-  //----
-  cfg->addObsolete("QTHELP_CONFIG");
-  //----
-  cfg->addObsolete("DOXYGEN2QTHELP_LOC");
-  //----
-  cfg->addObsolete("MAX_DOT_GRAPH_WIDTH");
-  //----
-  cfg->addObsolete("MAX_DOT_GRAPH_HEIGHT");
-  //----
-  cfg->addObsolete("CGI_NAME");
-  //----
-  cfg->addObsolete("CGI_URL");
-  //----
-  cfg->addObsolete("DOC_URL");
-  //----
-  cfg->addObsolete("DOC_ABSPATH");
-  //----
-  cfg->addObsolete("BIN_ABSPATH");
-  //----
-  cfg->addObsolete("EXT_DOC_PATHS");
-  //----
-  cfg->addObsolete("USE_INLINE_TREES");
-  //----
-  cfg->addObsolete("SHOW_DIRECTORIES");
-  //----
-  cfg->addObsolete("HTML_ALIGN_MEMBERS");
-  //----
-  cfg->addObsolete("SYMBOL_CACHE_SIZE");
-}
index 60e4722..1828b0b 100644 (file)
@@ -22,9 +22,9 @@
 #include "cppvalue.h"
 #include <qcstring.h>
 
-extern bool parseCppExpression(const char *fileName,int line,const QCString &s);
-extern int cppExpYYparse();
-extern int cppExpYYdebug;
+extern bool parseconstexp(const char *fileName,int line,const QCString &s);
+extern int constexpYYparse();
+extern int constexpYYdebug;
 extern QCString g_strToken;
 extern CPPValue g_resultValue;
 extern QCString g_constExpFileName;
index f72e99d..b333c72 100644 (file)
@@ -21,6 +21,7 @@
 #include "constexp.h"  
 #include "cppvalue.h"
 #include "ce_parse.h" // generated header file
+#include "message.h"
 
 #define YY_NEVER_INTERACTIVE 1
 #define YY_NO_INPUT 1
@@ -103,19 +104,21 @@ CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
 
 %%
 
-bool parseCppExpression(const char *fileName,int lineNr,const QCString &s)
+bool parseconstexp(const char *fileName,int lineNr,const QCString &s)
 {
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
   //printf("Expression: `%s'\n",s.data());
   g_constExpFileName = fileName;
   g_constExpLineNr = lineNr;
   g_inputString = s;
   g_inputPosition = 0;
-  cppExpYYrestart( cppExpYYin );
-  cppExpYYparse();
+  constexpYYrestart( constexpYYin );
+  constexpYYparse();
   //printf("Result: %ld\n",(long)g_resultValue);
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
   return (long)g_resultValue!=0;
 }
 
 extern "C" {
-  int cppExpYYwrap() { return 1; }
+  int constexpYYwrap() { return 1; }
 }
index f47e7c0..421e26e 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 
-int cppExpYYerror(const char *s)
+int constexpYYerror(const char *s)
 {
   warn(g_constExpFileName,g_constExpLineNr,
        "preprocessing issue while doing constant expression evaluation: %s",s);
   return 0;
 }
 
-int cppExpYYlex();
+int constexpYYlex();
 
 %}
 
diff --git a/src/context.cpp b/src/context.cpp
new file mode 100644 (file)
index 0000000..e573dde
--- /dev/null
@@ -0,0 +1,5765 @@
+#include "context.h"
+#include "config.h"
+#include "index.h"
+#include "classlist.h"
+#include "doxygen.h"
+#include "namespacedef.h"
+#include "filedef.h"
+#include "pagedef.h"
+#include "groupdef.h"
+#include "util.h"
+#include "version.h"
+#include "language.h"
+#include "message.h"
+#include "vhdldocgen.h"
+#include "filename.h"
+#include "dirdef.h"
+#include "docparser.h"
+#include "htmlgen.h"
+#include "htmldocvisitor.h"
+#include "dot.h"
+#include "diagram.h"
+#include "example.h"
+#include "membername.h"
+#include "parserintf.h"
+#include "portable.h"
+
+// TODO: pass the current file to Dot*::writeGraph, so the user can put dot graphs in other
+//       files as well
+
+struct ContextGlobals
+{
+  enum OutputFormat
+  {
+    Html,
+    LateX,
+    Rtf,
+    ManPage,
+    DocBook,
+    Xml,
+    TagFile
+  };
+  int          dynSectionId;
+  QCString     outputDir;
+  OutputFormat outputFormat;
+} g_globals;
+
+/** @brief Scoped smart pointer */
+template<class T> class ScopedPtr
+{
+  private:
+    T *m_ptr;
+    ScopedPtr(const ScopedPtr &);
+    ScopedPtr &operator=(const ScopedPtr &);
+    void operator==(const ScopedPtr &) const;
+    void operator!=(const ScopedPtr &) const;
+
+  public:
+    typedef T Type;
+    explicit ScopedPtr(T *p=0) : m_ptr(p) {}
+    ~ScopedPtr() { delete m_ptr; };
+    T &operator*() const { return *m_ptr; }
+    T *operator->() const { return m_ptr; }
+    T *get() const { return m_ptr; }
+    operator bool() const { return m_ptr!=0; }
+    void reset(T *p=0) { if (p!=m_ptr) { delete m_ptr; m_ptr = p; } }
+};
+
+/** @brief Template List iterator support */
+template<class T>
+class GenericConstIterator : public TemplateListIntf::ConstIterator
+{
+  public:
+    GenericConstIterator(const QList<T> &list)
+      : m_it(list) { }
+    virtual ~GenericConstIterator() {}
+    void toFirst()
+    {
+      m_it.toFirst();
+    }
+    void toLast()
+    {
+      m_it.toLast();
+    }
+    void toNext()
+    {
+      if (m_it.current()) ++m_it;
+    }
+    void toPrev()
+    {
+      if (m_it.current()) --m_it;
+    }
+    bool current(TemplateVariant &v) const
+    {
+      if (m_it.current())
+      {
+        v = m_it.current();
+        return TRUE;
+      }
+      else
+      {
+        v = TemplateVariant();
+        return FALSE;
+      }
+    }
+  private:
+    QListIterator<T> m_it;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief standard template list implementation */
+template<class T>
+class GenericNodeListContext : public TemplateListIntf
+{
+  public:
+    GenericNodeListContext()
+    {
+      m_children.setAutoDelete(TRUE);
+    }
+
+    // TemplateListIntf methods
+    int count() const
+    {
+      return (int)m_children.count();
+    }
+    TemplateVariant at(int index) const
+    {
+      TemplateVariant result;
+      if (index>=0 && index<count())
+      {
+        result = m_children.at(index);
+      }
+      return result;
+    }
+    TemplateListIntf::ConstIterator *createIterator() const
+    {
+      return new GenericConstIterator<T>(m_children);
+    }
+
+    void append(T *ctn)
+    {
+      m_children.append(ctn);
+    }
+    bool isEmpty() const
+    {
+      return m_children.isEmpty();
+    }
+  private:
+    mutable QList<T> m_children;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Helper class to map a property name to a handler member function */
+class PropertyMapper
+{
+  private:
+    struct PropertyFuncIntf
+    {
+      virtual ~PropertyFuncIntf() {}
+      virtual TemplateVariant operator()() const = 0;
+    };
+    template<typename T>
+    struct PropertyFunc : public PropertyFuncIntf
+    {
+      typedef TemplateVariant (T::*Handler)() const;
+      PropertyFunc(const T *o,Handler h) : obj(o), handler(h) {}
+      TemplateVariant operator()() const
+      {
+        return (obj->*handler)();
+      }
+      const T *obj;
+      Handler handler;
+    };
+
+  public:
+    PropertyMapper() { m_map.setAutoDelete(TRUE); }
+
+    /** Add a property to the map
+     *  @param[in] name   The name of the property to add.
+     *  @param[in] obj    The object handling access to the property.
+     *  @param[in] handle The method to call when the property is accessed.
+     */
+    template<typename T>
+    void addProperty(const char *name,const T* obj,
+                     typename PropertyFunc<T>::Handler handle)
+    {
+      if (m_map.find(name))
+      {
+        err("Error: adding property '%s' more than once",name);
+      }
+      else
+      {
+        m_map.insert(name,new PropertyFunc<T>(obj,handle));
+      }
+    }
+
+    /** Gets the value of a property.
+     *  @param[in] name The name of the property.
+     *  @returns A variant representing the properties value or an
+     *  invalid variant if it was not found.
+     */
+    TemplateVariant get(const char *name) const
+    {
+      //printf("PropertyMapper::get(%s)\n",name);
+      TemplateVariant result;
+      PropertyFuncIntf *func = m_map.find(name);
+      if (func)
+      {
+        result = (*func)();
+      }
+      return result;
+    }
+
+  private:
+    QDict<PropertyFuncIntf> m_map;
+};
+
+
+//------------------------------------------------------------------------
+
+//%% struct Config : configuration options
+//%% {
+class ConfigContext::Private
+{
+  public:
+    Private() { cachedLists.setAutoDelete(TRUE); }
+    TemplateVariant fetchList(const QCString &name,const QStrList *list)
+    {
+      TemplateList *tlist = cachedLists.find(name);
+      if (tlist==0)
+      {
+        tlist = new TemplateList;
+        cachedLists.insert(name,tlist);
+        QStrListIterator li(*list);
+        char *s;
+        for (li.toFirst();(s=li.current());++li)
+        {
+          tlist->append(s);
+        }
+      }
+      return tlist;
+    }
+  private:
+    QDict<TemplateList> cachedLists;
+};
+//%% }
+
+ConfigContext::ConfigContext()
+{
+  p = new Private;
+}
+
+ConfigContext::~ConfigContext()
+{
+  delete p;
+}
+
+TemplateVariant ConfigContext::get(const char *name) const
+{
+  TemplateVariant result;
+  if (name)
+  {
+    ConfigOption *option = Config::instance()->get(name);
+    if (option)
+    {
+      switch (option->kind())
+      {
+        case ConfigOption::O_Bool:
+          return TemplateVariant(*((ConfigBool*)option)->valueRef());
+        case ConfigOption::O_Int:
+          return TemplateVariant(*((ConfigInt*)option)->valueRef());
+        case ConfigOption::O_Enum:
+          return TemplateVariant(*((ConfigEnum*)option)->valueRef());
+        case ConfigOption::O_String:
+          return TemplateVariant(*((ConfigString*)option)->valueRef());
+        case ConfigOption::O_List:
+          return p->fetchList(name,((ConfigList*)option)->valueRef());
+          break;
+        default:
+          break;
+      }
+    }
+  }
+  return result;
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Doxygen: global information
+//%% {
+class DoxygenContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant version() const
+    {
+      return versionString;
+    }
+    TemplateVariant date() const
+    {
+      return TemplateVariant(dateToString(TRUE));
+    }
+    Private()
+    {
+      //%% string version
+      addProperty("version",this,&Private::version); //makeProperty(this,&Private::version));
+      //%% string date
+      addProperty("date",   this,&Private::date);
+    }
+};
+//%% }
+
+DoxygenContext::DoxygenContext()
+{
+  p = new Private;
+}
+
+DoxygenContext::~DoxygenContext()
+{
+  delete p;
+}
+
+TemplateVariant DoxygenContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Translator: translation methods
+//%% {
+class TranslateContext::Private : public PropertyMapper
+{
+  public:
+
+    TemplateVariant handleGeneratedAt(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==2)
+      {
+        return theTranslator->trGeneratedAt(args[0].toString(),args[1].toString());
+      }
+      else
+      {
+        err("tr.generateAt should take two arguments, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleInheritanceDiagramFor(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trClassDiagram(args[0].toString());
+      }
+      else
+      {
+        err("tr.inheritanceDiagramFor should take one argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleCollaborationDiagramFor(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trCollaborationDiagram(args[0].toString());
+      }
+      else
+      {
+        err("tr.collaborationDiagramFor should take one argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleInheritsList(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trInheritsList(args[0].toInt());
+      }
+      else
+      {
+        err("tr.inheritsList should take one integer argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleInheritedByList(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trInheritedByList(args[0].toInt());
+      }
+      else
+      {
+        err("tr.inheritedByList should take one integer argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleWriteList(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trWriteList(args[0].toInt());
+      }
+      else
+      {
+        err("tr.*List should take one integer argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleImplementedBy(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trImplementedInList(args[0].toInt());
+      }
+      else
+      {
+        err("tr.implementedBy should take one integer argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleReimplementedBy(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trReimplementedInList(args[0].toInt());
+      }
+      else
+      {
+        err("tr.reimplementedBy should take one integer argument, got %d!\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleSourceRefs(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trReferences()+" "+theTranslator->trWriteList(args[0].toInt())+".";
+      }
+      else
+      {
+        err("tr.sourceRefs should take one integer argument, got %d\n",args.count());
+      }
+      return TemplateVariant();
+    }
+    TemplateVariant handleSourceRefBys(const QValueList<TemplateVariant> &args) const
+    {
+      if (args.count()==1)
+      {
+        return theTranslator->trReferencedBy()+" "+theTranslator->trWriteList(args[0].toInt())+".";
+      }
+      else
+      {
+        err("tr.sourceRefBys should take one integer argument, got %d\n",args.count());
+      }
+      return TemplateVariant();
+    }
+
+
+
+    TemplateVariant generatedBy() const
+    {
+      return theTranslator->trGeneratedBy();
+    }
+    TemplateVariant generatedAt() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleGeneratedAt>(this);
+    }
+    TemplateVariant inheritanceDiagramFor() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleInheritanceDiagramFor>(this);
+    }
+    TemplateVariant collaborationDiagramFor() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleCollaborationDiagramFor>(this);
+    }
+    TemplateVariant search() const
+    {
+      return theTranslator->trSearch();
+    }
+    TemplateVariant mainPage() const
+    {
+      return theTranslator->trMainPage();
+    }
+    TemplateVariant classes() const
+    {
+      return theTranslator->trClasses();
+    }
+    TemplateVariant classList() const
+    {
+      return theTranslator->trCompoundList();
+    }
+    TemplateVariant classIndex() const
+    {
+      return theTranslator->trCompoundIndex();
+    }
+    TemplateVariant classHierarchy() const
+    {
+      return theTranslator->trClassHierarchy();
+    }
+    TemplateVariant classMembers() const
+    {
+      return theTranslator->trCompoundMembers();
+    }
+    TemplateVariant modules() const
+    {
+      return theTranslator->trModules();
+    }
+    TemplateVariant namespaces() const
+    {
+      if (m_javaOpt || m_vhdlOpt)
+      {
+        return theTranslator->trPackages();
+      }
+      else if (m_fortranOpt)
+      {
+        return theTranslator->trModules();
+      }
+      else
+      {
+        return theTranslator->trNamespaces();
+      }
+    }
+    TemplateVariant files() const
+    {
+      return theTranslator->trFile(TRUE,FALSE);
+    }
+    TemplateVariant pages() const
+    {
+      return theTranslator->trRelatedPages();
+    }
+    TemplateVariant examples() const
+    {
+      return theTranslator->trExamples();
+    }
+    TemplateVariant namespaceList() const
+    {
+      if (m_javaOpt || m_vhdlOpt)
+      {
+        return theTranslator->trPackages();
+      }
+      else if (m_fortranOpt)
+      {
+        return theTranslator->trModulesList();
+      }
+      else
+      {
+        return theTranslator->trNamespaceList();
+      }
+    }
+    TemplateVariant namespaceMembers() const
+    {
+      if (m_javaOpt || m_vhdlOpt)
+      {
+        return theTranslator->trPackageMembers();
+      }
+      else if (m_fortranOpt)
+      {
+        return theTranslator->trModulesMembers();
+      }
+      else
+      {
+        return theTranslator->trNamespaceMembers();
+      }
+    }
+    TemplateVariant fileList() const
+    {
+      return theTranslator->trFileList();
+    }
+    TemplateVariant fileMembers() const
+    {
+      return theTranslator->trFileMembers();
+    }
+    TemplateVariant relatedPagesDesc() const
+    {
+      return theTranslator->trRelatedPagesDescription();
+    }
+    TemplateVariant more() const
+    {
+      return theTranslator->trMore();
+    }
+    TemplateVariant detailedDesc() const
+    {
+      return theTranslator->trDetailedDescription();
+    }
+    TemplateVariant inheritsList() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleInheritsList>(this);
+    }
+    TemplateVariant inheritedByList() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleInheritedByList>(this);
+    }
+    TemplateVariant definedAtLineInSourceFile() const
+    {
+      return theTranslator->trDefinedAtLineInSourceFile();
+    }
+    TemplateVariant typeConstraints() const
+    {
+      return theTranslator->trTypeConstraints();
+    }
+    TemplateVariant exampleList() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleWriteList>(this);
+    }
+    TemplateVariant listOfAllMembers() const
+    {
+      return theTranslator->trListOfAllMembers();
+    }
+    TemplateVariant memberList() const
+    {
+      return theTranslator->trMemberList();
+    }
+    TemplateVariant theListOfAllMembers() const
+    {
+      return theTranslator->trThisIsTheListOfAllMembers();
+    }
+    TemplateVariant incInheritedMembers() const
+    {
+      return theTranslator->trIncludingInheritedMembers();
+    }
+    TemplateVariant defineValue() const
+    {
+      return theTranslator->trDefineValue();
+    }
+    TemplateVariant initialValue() const
+    {
+      return theTranslator->trInitialValue();
+    }
+    TemplateVariant enumerationValues() const
+    {
+      return theTranslator->trEnumerationValues();
+    }
+    TemplateVariant implements() const
+    {
+      return theTranslator->trImplementedFromList(1);
+    }
+    TemplateVariant reimplements() const
+    {
+      return theTranslator->trReimplementedFromList(1);
+    }
+    TemplateVariant implementedBy() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleImplementedBy>(this);
+    }
+    TemplateVariant reimplementedBy() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleReimplementedBy>(this);
+    }
+    TemplateVariant sourceRefs() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleSourceRefs>(this);
+    }
+    TemplateVariant sourceRefBys() const
+    {
+      return TemplateVariant::Delegate::fromMethod<Private,&Private::handleSourceRefBys>(this);
+    }
+    TemplateVariant callGraph() const
+    {
+      return theTranslator->trCallGraph();
+    }
+    TemplateVariant callerGraph() const
+    {
+      return theTranslator->trCallerGraph();
+    }
+    TemplateVariant inheritedFrom() const
+    {
+      return theTranslator->trInheritedFrom("@0","@1");
+    }
+    TemplateVariant additionalInheritedMembers() const
+    {
+      return theTranslator->trAdditionalInheritedMembers();
+    }
+    Private()
+    {
+      //%% string generatedBy
+      addProperty("generatedby",       this,&Private::generatedBy);
+      //%% string generatedAt
+      addProperty("generatedAt",       this,&Private::generatedAt);
+      //%% string search
+      addProperty("search",            this,&Private::search);
+      //%% string mainPage
+      addProperty("mainPage",          this,&Private::mainPage);
+      //%% string classes
+      addProperty("classes",           this,&Private::classes);
+      //%% string classList
+      addProperty("classList",         this,&Private::classList);
+      //%% string classIndex
+      addProperty("classIndex",        this,&Private::classIndex);
+      //%% string classHierarchy
+      addProperty("classHierarchy",    this,&Private::classHierarchy);
+      //%% string classMembers
+      addProperty("classMembers",      this,&Private::classMembers);
+      //%% string modules
+      addProperty("modules",           this,&Private::modules);
+      //%% string namespaces
+      addProperty("namespaces",        this,&Private::namespaces);
+      //%% string files
+      addProperty("files",             this,&Private::files);
+      //%% string pages
+      addProperty("pages",             this,&Private::pages);
+      //%% string examples
+      addProperty("examples",          this,&Private::examples);
+      //%% string namespaceList
+      addProperty("namespaceList",     this,&Private::namespaceList);
+      //%% string namespaceMembers
+      addProperty("namespaceMembers",  this,&Private::namespaceMembers);
+      //%% srting fileList
+      addProperty("fileList",          this,&Private::fileList);
+      //%% string fileMembers
+      addProperty("fileMembers",       this,&Private::fileMembers);
+      //%% string relatedPagesDescripiton
+      addProperty("relatedPagesDesc",  this,&Private::relatedPagesDesc);
+      //%% string more
+      addProperty("more",              this,&Private::more);
+      //%% string detailedDescription
+      addProperty("detailedDesc",      this,&Private::detailedDesc);
+      //%% string inheritanceDiagramFor
+      addProperty("inheritanceDiagramFor", this,&Private::inheritanceDiagramFor);
+      //%% string collaborationDiagramFor
+      addProperty("collaborationDiagramFor", this,&Private::collaborationDiagramFor);
+      //%% markerstring inheritsList
+      addProperty("inheritsList",      this,&Private::inheritsList);
+      //%% markerstring inheritedByList
+      addProperty("inheritedByList",   this,&Private::inheritedByList);
+      //%% markerstring definedAtLineInSourceFile
+      addProperty("definedAtLineInSourceFile", this,&Private::definedAtLineInSourceFile);
+      //%% string typeConstraints
+      addProperty("typeConstraints",   this,&Private::typeConstraints);
+      //%% string exampleList
+      addProperty("exampleList",       this,&Private::exampleList);
+      //%% string listOfAllMembers
+      addProperty("listOfAllMembers",  this,&Private::listOfAllMembers);
+      //%% string memberList
+      addProperty("memberList",        this,&Private::memberList);
+      //%% string theListOfAllMembers
+      addProperty("theListOfAllMembers",this,&Private::theListOfAllMembers);
+      //%% string incInheritedMembers
+      addProperty("incInheritedMembers",this,&Private::incInheritedMembers);
+      //%% string defineValue
+      addProperty("defineValue",        this,&Private::defineValue);
+      //%% string initialValue
+      addProperty("initialValue",       this,&Private::initialValue);
+      //%% string enumerationValues
+      addProperty("enumerationValues",  this,&Private::enumerationValues);
+      //%% markerstring implements
+      addProperty("implements",         this,&Private::implements);
+      //%% markerstring reimplements
+      addProperty("reimplements",       this,&Private::reimplements);
+      //%% markerstring implementedBy
+      addProperty("implementedBy",      this,&Private::implementedBy);
+      //%% markerstring reimplementedBy
+      addProperty("reimplementedBy",    this,&Private::reimplementedBy);
+      //%% markerstring sourceRefs
+      addProperty("sourceRefs",         this,&Private::sourceRefs);
+      //%% markerstring sourceRefBys
+      addProperty("sourceRefBys",       this,&Private::sourceRefBys);
+      //%% string callGraph
+      addProperty("callGraph",          this,&Private::callGraph);
+      //%% string callerGraph
+      addProperty("callerGraph",        this,&Private::callerGraph);
+      //%% markerstring inheritedFrom
+      addProperty("inheritedFrom",      this,&Private::inheritedFrom);
+      //%% string addtionalInheritedMembers
+      addProperty("additionalInheritedMembers",this,&Private::additionalInheritedMembers);
+
+      m_javaOpt    = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+      m_fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+      m_vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+    }
+  private:
+    bool m_javaOpt;
+    bool m_fortranOpt;
+    bool m_vhdlOpt;
+};
+//%% }
+
+TranslateContext::TranslateContext()
+{
+  p = new Private;
+}
+
+TranslateContext::~TranslateContext()
+{
+  delete p;
+}
+
+TemplateVariant TranslateContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+static TemplateVariant parseDoc(Definition *def,const QCString &file,int line,
+                                const QCString &relPath,const QCString &docStr,bool isBrief)
+{
+  TemplateVariant result;
+  DocRoot *root = validatingParseDoc(file,line,def,0,docStr,TRUE,FALSE,0,isBrief,FALSE);
+  QGString docs;
+  {
+    FTextStream ts(&docs);
+    // TODO: support other generators
+    HtmlCodeGenerator codeGen(ts,relPath);
+    HtmlDocVisitor visitor(ts,codeGen,def);
+    root->accept(&visitor);
+  }
+  bool isEmpty = root->isEmpty();
+  if (isEmpty)
+    result = "";
+  else
+    result = TemplateVariant(docs,TRUE);
+  delete root;
+  return result;
+}
+
+static TemplateVariant parseCode(MemberDef *md,const QCString &scopeName,const QCString &relPath,
+                                 const QCString &code,int startLine=-1,int endLine=-1,bool showLineNumbers=FALSE)
+{
+  ParserInterface *pIntf = Doxygen::parserManager->getParser(md->getDefFileExtension());
+  pIntf->resetCodeParserState();
+  QGString s;
+  FTextStream t(&s);
+  HtmlCodeGenerator codeGen(t,relPath);
+  pIntf->parseCode(codeGen,scopeName,code,md->getLanguage(),FALSE,0,md->getBodyDef(),
+                   startLine,endLine,TRUE,md,showLineNumbers,md);
+  return TemplateVariant(s.data(),TRUE);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Symbol: shared info for all symbols
+//%% {
+template<typename T>
+class DefinitionContext : public PropertyMapper
+{
+  public:
+    DefinitionContext(Definition *d) : m_def(d)
+    {
+      //%% string name: the name of the symbol
+      addProperty("name",this,&DefinitionContext::name);
+      //%% string bareName: the bare name of the symbol with scope info
+      addProperty("bareName",this,&DefinitionContext::bareName);
+      //%% string relPath: the relative path to the root of the output (CREATE_SUBDIRS)
+      addProperty("relPath",this,&DefinitionContext::relPath);
+      //%% string fileName: the file name of the output file associated with the symbol (without extension)
+      addProperty("fileName",this,&DefinitionContext::fileName);
+      //%% string anchor: anchor within the page
+      addProperty("anchor",this,&DefinitionContext::anchor);
+      //%% string details: the detailed documentation for this symbol
+      addProperty("details",this,&DefinitionContext::details);
+      //%% string brief: the brief description for this symbol
+      addProperty("brief",this,&DefinitionContext::brief);
+      //%% string inbodyDocs: the documentation found in the body
+      addProperty("inbodyDocs",this,&DefinitionContext::inbodyDocs);
+      //%% string sourceFileName: the file name of the source file (without extension)
+      addProperty("sourceFileName",this,&DefinitionContext::sourceFileName);
+      //%% bool isLinkable: can the symbol be linked to?
+      addProperty("isLinkable",this,&DefinitionContext::isLinkable);
+      //%% bool isLinkableInProject: can the symbol be linked within this project?
+      addProperty("isLinkableInProject",this,&DefinitionContext::isLinkableInProject);
+      //%% int dynSectionId: identifier that can be used for collapsable sections
+      addProperty("dynSectionId",this,&DefinitionContext::dynSectionId);
+      //%% string language: the programming language in which the symbol is written
+      addProperty("language",this,&DefinitionContext::language);
+      //%% string sourceDef: A link to the source definition
+      addProperty("sourceDef",this,&DefinitionContext::sourceDef);
+      //%% list[Definition] navigationPath: Breadcrumb navigation path to this item
+      addProperty("navigationPath",this,&DefinitionContext::navigationPath);
+
+      if (m_def && !m_def->getSourceFileBase().isEmpty())
+      {
+        m_sourceDef.append(&m_lineLink);
+        m_sourceDef.append(&m_fileLink);
+        m_lineLink.set("text",m_def->getStartBodyLine());
+        m_lineLink.set("isLinkable",TRUE);
+        m_lineLink.set("fileName",m_def->getSourceFileBase());
+        m_lineLink.set("anchor",m_def->getSourceAnchor());
+        if (m_def->definitionType()==Definition::TypeFile)
+        {
+          m_fileLink.set("text",m_def->name());
+        }
+        else if (m_def->getBodyDef())
+        {
+          m_fileLink.set("text",m_def->getBodyDef()->name());
+        }
+        else
+        {
+          m_fileLink.set("text",name());
+        }
+        m_fileLink.set("isLinkable",TRUE);
+        m_fileLink.set("fileName",m_def->getSourceFileBase());
+        m_fileLink.set("anchor",QCString());
+      }
+    }
+    TemplateVariant fileName() const
+    {
+      return m_def->getOutputFileBase();
+    }
+    TemplateVariant anchor() const
+    {
+      return m_def->anchor();
+    }
+    TemplateVariant sourceFileName() const
+    {
+      return m_def->getSourceFileBase();
+    }
+    TemplateVariant isLinkable() const
+    {
+      return m_def->isLinkable();
+    }
+    TemplateVariant isLinkableInProject() const
+    {
+      return m_def->isLinkableInProject();
+    }
+    TemplateVariant name() const
+    {
+      return m_def->displayName(TRUE);
+    }
+    TemplateVariant bareName() const
+    {
+      return m_def->displayName(FALSE);
+    }
+    QCString relPathAsString() const
+    {
+      static bool createSubdirs = Config_getBool("CREATE_SUBDIRS");
+      return createSubdirs ? QCString("../../") : QCString("");
+    }
+    TemplateVariant relPath() const
+    {
+      return relPathAsString();
+    }
+    TemplateVariant details() const
+    {
+      if (!m_cache.details)
+      {
+        m_cache.details.reset(new TemplateVariant(parseDoc(m_def,m_def->docFile(),m_def->docLine(),
+                                            relPathAsString(),m_def->documentation(),FALSE)));
+      }
+      return *m_cache.details;
+    }
+    TemplateVariant brief() const
+    {
+      if (!m_cache.brief)
+      {
+        if (m_def->hasBriefDescription())
+        {
+          m_cache.brief.reset(new TemplateVariant(parseDoc(m_def,m_def->briefFile(),m_def->briefLine(),
+                             relPathAsString(),m_def->briefDescription(),TRUE)));
+        }
+        else
+        {
+          m_cache.brief.reset(new TemplateVariant(""));
+        }
+      }
+      return *m_cache.brief;
+    }
+    TemplateVariant inbodyDocs() const
+    {
+      if (!m_cache.inbodyDocs)
+      {
+        if (!m_def->inbodyDocumentation().isEmpty())
+        {
+          m_cache.inbodyDocs.reset(new TemplateVariant(parseDoc(m_def,m_def->inbodyFile(),m_def->inbodyLine(),
+                                           relPathAsString(),m_def->inbodyDocumentation(),FALSE)));
+        }
+        else
+        {
+          m_cache.inbodyDocs.reset(new TemplateVariant(""));
+        }
+      }
+      return *m_cache.inbodyDocs;
+    }
+    TemplateVariant dynSectionId() const
+    {
+      return g_globals.dynSectionId;
+    }
+    TemplateVariant language() const
+    {
+      SrcLangExt lang = m_def->getLanguage();
+      QCString result = "unknown";
+      switch (lang)
+      {
+        case SrcLangExt_Unknown:  break;
+        case SrcLangExt_IDL:      result="idl";      break;
+        case SrcLangExt_Java:     result="java";     break;
+        case SrcLangExt_CSharp:   result="csharp";   break;
+        case SrcLangExt_D:        result="d";        break;
+        case SrcLangExt_PHP:      result="php";      break;
+        case SrcLangExt_ObjC:     result="objc";     break;
+        case SrcLangExt_Cpp:      result="cpp";      break;
+        case SrcLangExt_JS:       result="js";       break;
+        case SrcLangExt_Python:   result="python";   break;
+        case SrcLangExt_Fortran:  result="fortran";  break;
+        case SrcLangExt_VHDL:     result="vhdl";     break;
+        case SrcLangExt_XML:      result="xml";      break;
+        case SrcLangExt_Tcl:      result="tcl";      break;
+        case SrcLangExt_Markdown: result="markdown"; break;
+      }
+      return result;
+    }
+    TemplateVariant sourceDef() const
+    {
+      if (m_sourceDef.count()==2)
+      {
+        return &m_sourceDef;
+      }
+      else
+      {
+        return FALSE;
+      }
+    }
+    void fillPath(Definition *def,TemplateList *list) const
+    {
+      Definition *outerScope = def->getOuterScope();
+      Definition::DefType type = def->definitionType();
+      if (outerScope && outerScope!=Doxygen::globalScope)
+      {
+        fillPath(outerScope,list);
+      }
+      else if (type==Definition::TypeFile && ((const FileDef*)def)->getDirDef())
+      {
+        fillPath(((const FileDef*)def)->getDirDef(),list);
+      }
+      NavPathElemContext *elem = new NavPathElemContext(def);
+      list->append(elem);
+      m_cache.navPathElems.append(elem);
+    }
+    TemplateVariant navigationPath() const
+    {
+      if (!m_cache.navPath)
+      {
+        TemplateList *list = new TemplateList;
+        fillPath(m_def,list);
+        m_cache.navPath.reset(list);
+      }
+      return m_cache.navPath.get();
+    }
+
+  private:
+    Definition      *m_def;
+    struct Cachable
+    {
+      Cachable() { navPathElems.setAutoDelete(TRUE); }
+      ScopedPtr<TemplateVariant> details;
+      ScopedPtr<TemplateVariant> brief;
+      ScopedPtr<TemplateVariant> inbodyDocs;
+      ScopedPtr<TemplateList>    navPath;
+      QList<NavPathElemContext>  navPathElems;
+    };
+    mutable Cachable m_cache;
+    TemplateList m_sourceDef;
+    TemplateStruct m_fileLink;
+    TemplateStruct m_lineLink;
+};
+//%% }
+
+//------------------------------------------------------------------------
+
+//%% struct IncludeInfo: include file information
+//%% {
+class IncludeInfoContext::Private : public PropertyMapper
+{
+  public:
+    Private(IncludeInfo *info,SrcLangExt lang) :
+      m_info(info),
+      m_fileContext(info && info->fileDef ? info->fileDef : 0),
+      m_lang(lang)
+    {
+      if (m_info)
+      {
+        addProperty("file",this,&Private::file);
+        addProperty("name",this,&Private::name);
+        addProperty("isImport",this,&Private::isImport);
+        addProperty("isLocal",this,&Private::isLocal);
+      }
+    }
+    TemplateVariant isLocal() const
+    {
+      bool isIDLorJava = m_lang==SrcLangExt_IDL || m_lang==SrcLangExt_Java;
+      return m_info->local || isIDLorJava;
+    }
+    TemplateVariant isImport() const
+    {
+      return m_info->imported;
+    }
+    TemplateVariant file() const
+    {
+      if (m_info->fileDef)
+      {
+        return &m_fileContext;
+      }
+      else
+      {
+        return FALSE;
+      }
+    }
+    TemplateVariant name() const
+    {
+      return m_info->includeName;
+    }
+  private:
+    IncludeInfo *m_info;
+    FileContext m_fileContext;
+    SrcLangExt m_lang;
+};
+
+IncludeInfoContext::IncludeInfoContext(IncludeInfo *info,SrcLangExt lang)
+{
+  p = new Private(info,lang);
+}
+
+IncludeInfoContext::~IncludeInfoContext()
+{
+  delete p;
+}
+
+TemplateVariant IncludeInfoContext::get(const char *n) const
+{
+  return p->get(n);
+}
+//%% }
+
+//------------------------------------------------------------------------
+
+//%% struct Class(Symbol): class information
+//%% {
+class ClassContext::Private : public DefinitionContext<ClassContext::Private>
+{
+  public:
+    Private(ClassDef *cd) : DefinitionContext<ClassContext::Private>(cd) ,
+       m_classDef(cd), m_usedFiles(cd),
+       m_includeInfo(cd ? cd->includeInfo() : 0, cd ? cd->getLanguage() : SrcLangExt_Unknown)
+    {
+      addProperty("title",                     this,&Private::title);
+      addProperty("highlight",                 this,&Private::highlight);
+      addProperty("subhighlight",              this,&Private::subHighlight);
+      addProperty("hasDetails",                this,&Private::hasDetails);
+      addProperty("generatedFromFiles",        this,&Private::generatedFromFiles);
+      addProperty("usedFiles",                 this,&Private::usedFiles);
+      addProperty("hasInheritanceDiagram",     this,&Private::hasInheritanceDiagram);
+      addProperty("inheritanceDiagram",        this,&Private::inheritanceDiagram);
+      addProperty("hasCollaborationDiagram",   this,&Private::hasCollaborationDiagram);
+      addProperty("collaborationDiagram",      this,&Private::collaborationDiagram);
+      addProperty("includeInfo",               this,&Private::includeInfo);
+      addProperty("includeStatement",          this,&Private::includeStatement);
+      addProperty("inherits",                  this,&Private::inherits);
+      addProperty("inheritedBy",               this,&Private::inheritedBy);
+      addProperty("unoIDLServices",            this,&Private::unoIDLServices);
+      addProperty("unoIDLInterfaces",          this,&Private::unoIDLInterfaces);
+      addProperty("signals",                   this,&Private::signals);
+      addProperty("publicTypes",               this,&Private::publicTypes);
+      addProperty("publicMethods",             this,&Private::publicMethods);
+      addProperty("publicStaticMethods",       this,&Private::publicStaticMethods);
+      addProperty("publicAttributes",          this,&Private::publicAttributes);
+      addProperty("publicStaticAttributes",    this,&Private::publicStaticAttributes);
+      addProperty("publicSlots",               this,&Private::publicSlots);
+      addProperty("protectedTypes",            this,&Private::protectedTypes);
+      addProperty("protectedMethods",          this,&Private::protectedMethods);
+      addProperty("protectedStaticMethods",    this,&Private::protectedStaticMethods);
+      addProperty("protectedAttributes",       this,&Private::protectedAttributes);
+      addProperty("protectedStaticAttributes", this,&Private::protectedStaticAttributes);
+      addProperty("protectedSlots",            this,&Private::protectedSlots);
+      addProperty("privateTypes",              this,&Private::privateTypes);
+      addProperty("privateMethods",            this,&Private::privateMethods);
+      addProperty("privateStaticMethods",      this,&Private::privateStaticMethods);
+      addProperty("privateAttributes",         this,&Private::privateAttributes);
+      addProperty("privateStaticAttributes",   this,&Private::privateStaticAttributes);
+      addProperty("privateSlots",              this,&Private::privateSlots);
+      addProperty("packageTypes",              this,&Private::packageTypes);
+      addProperty("packageMethods",            this,&Private::packageMethods);
+      addProperty("packageStaticMethods",      this,&Private::packageStaticMethods);
+      addProperty("packageAttributes",         this,&Private::packageAttributes);
+      addProperty("packageStaticAttributes",   this,&Private::packageStaticAttributes);
+      addProperty("properties",                this,&Private::properties);
+      addProperty("events",                    this,&Private::events);
+      addProperty("friends",                   this,&Private::friends);
+      addProperty("related",                   this,&Private::related);
+      addProperty("detailedTypedefs",          this,&Private::detailedTypedefs);
+      addProperty("detailedEnums",             this,&Private::detailedEnums);
+      addProperty("detailedServices",          this,&Private::detailedServices);
+      addProperty("detailedInterfaces",        this,&Private::detailedInterfaces);
+      addProperty("detailedConstructors",      this,&Private::detailedConstructors);
+      addProperty("detailedMethods",           this,&Private::detailedMethods);
+      addProperty("detailedRelated",           this,&Private::detailedRelated);
+      addProperty("detailedVariables",         this,&Private::detailedVariables);
+      addProperty("detailedProperties",        this,&Private::detailedProperties);
+      addProperty("detailedEvents",            this,&Private::detailedEvents);
+      addProperty("nestedClasses",             this,&Private::nestedClasses);
+      addProperty("compoundType",              this,&Private::compoundType);
+      addProperty("templateDecls",             this,&Private::templateDecls);
+      addProperty("typeConstraints",           this,&Private::typeConstraints);
+      addProperty("examples",                  this,&Private::examples);
+      addProperty("members",                   this,&Private::members);
+      addProperty("allMembersList",            this,&Private::allMembersList);
+      addProperty("allMembersFileName",        this,&Private::allMembersFileName);
+      addProperty("memberGroups",              this,&Private::memberGroups);
+      addProperty("additionalInheritedMembers",this,&Private::additionalInheritedMembers);
+    }
+    TemplateVariant title() const
+    {
+      return TemplateVariant(m_classDef->title());
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("classes");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+    TemplateVariant hasDetails() const
+    {
+      return m_classDef->hasDetailedDescription();
+    }
+    TemplateVariant generatedFromFiles() const
+    {
+      return m_classDef->generatedFromFiles();
+    }
+    TemplateVariant usedFiles() const
+    {
+      return TemplateVariant(&m_usedFiles);
+    }
+    DotClassGraph *getClassGraph() const
+    {
+      if (!m_cache.classGraph)
+      {
+        m_cache.classGraph.reset(new DotClassGraph(m_classDef,DotNode::Inheritance));
+      }
+      return m_cache.classGraph.get();
+    }
+    int numInheritanceNodes() const
+    {
+      if (m_cache.inheritanceNodes==-1)
+      {
+        m_cache.inheritanceNodes=m_classDef->countInheritanceNodes();
+      }
+      return m_cache.inheritanceNodes>0;
+    }
+    TemplateVariant hasInheritanceDiagram() const
+    {
+      bool result=FALSE;
+      static bool haveDot       = Config_getBool("HAVE_DOT");
+      static bool classDiagrams = Config_getBool("CLASS_DIAGRAMS");
+      static bool classGraph    = Config_getBool("CLASS_GRAPH");
+      if (haveDot && (classDiagrams || classGraph))
+      {
+        DotClassGraph *cg = getClassGraph();
+        result = !cg->isTrivial() && !cg->isTooBig();
+      }
+      else if (classDiagrams)
+      {
+        result = numInheritanceNodes()>0;
+      }
+      return result;
+    }
+    TemplateVariant inheritanceDiagram() const
+    {
+      QGString result;
+      static bool haveDot       = Config_getBool("HAVE_DOT");
+      static bool classDiagrams = Config_getBool("CLASS_DIAGRAMS");
+      static bool classGraph    = Config_getBool("CLASS_GRAPH");
+      if (haveDot && (classDiagrams || classGraph))
+      {
+        DotClassGraph *cg = getClassGraph();
+        FTextStream t(&result);
+        cg->writeGraph(t,BITMAP,
+                       g_globals.outputDir,
+                       g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+                       relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
+                      );
+      }
+      else if (classDiagrams)
+      {
+        ClassDiagram d(m_classDef);
+        FTextStream t(&result);
+        QCString name = convertToHtml(m_classDef->displayName());
+        t << "<div class=\"center\">" << endl;
+        t << "<img src=\"";
+        t << relPathAsString() << m_classDef->getOutputFileBase();
+        t << ".png\" usemap=\"#" << name << "_map\" alt=\"\"/>" << endl;
+        t << "<map id=\"" << name << "_map\" name=\"" << name << "_map\">" << endl;
+        d.writeImage(t,g_globals.outputDir,
+                     relPathAsString(),
+                     m_classDef->getOutputFileBase());
+        t << "</div>";
+      }
+      g_globals.dynSectionId++;
+      return TemplateVariant(result.data(),TRUE);
+    }
+    DotClassGraph *getCollaborationGraph() const
+    {
+      if (!m_cache.collaborationGraph)
+      {
+        m_cache.collaborationGraph.reset(new DotClassGraph(m_classDef,DotNode::Collaboration));
+      }
+      return m_cache.collaborationGraph.get();
+    }
+    TemplateVariant hasCollaborationDiagram() const
+    {
+      static bool haveDot = Config_getBool("HAVE_DOT");
+      return haveDot && !getCollaborationGraph()->isTrivial();
+    }
+    TemplateVariant collaborationDiagram() const
+    {
+      static bool haveDot = Config_getBool("HAVE_DOT");
+      QGString result;
+      if (haveDot)
+      {
+        DotClassGraph *cg = getCollaborationGraph();
+        FTextStream t(&result);
+        cg->writeGraph(t,BITMAP,
+            g_globals.outputDir,
+            g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+            relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
+            );
+      }
+      g_globals.dynSectionId++;
+      return TemplateVariant(result.data(),TRUE);
+    }
+
+    TemplateVariant includeInfo() const
+    {
+      if (m_classDef->includeInfo())
+      {
+        return TemplateVariant(&m_includeInfo);
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant includeStatement() const
+    {
+      return m_classDef->includeStatement();
+    }
+    TemplateVariant inherits() const
+    {
+      if (!m_cache.inheritsList)
+      {
+        m_cache.inheritsList.reset(new InheritanceListContext(m_classDef->baseClasses(),TRUE));
+      }
+      return m_cache.inheritsList.get();
+    }
+    TemplateVariant inheritedBy() const
+    {
+      if (!m_cache.inheritedByList)
+      {
+        m_cache.inheritedByList.reset(new InheritanceListContext(m_classDef->subClasses(),FALSE));
+      }
+      return m_cache.inheritedByList.get();
+    }
+    TemplateVariant getMemberList(ScopedPtr<MemberListInfoContext> &list,
+                                  MemberListType type,const char *title,bool detailed=FALSE) const
+    {
+      if (!list)
+      {
+        MemberList *ml = m_classDef->getMemberList(type);
+        if (ml)
+        {
+          list.reset(new MemberListInfoContext(m_classDef,relPathAsString(),ml,title,detailed));
+        }
+      }
+      if (list)
+      {
+        return list.get();
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant unoIDLServices() const
+    {
+      return getMemberList(m_cache.unoIDLServices,MemberListType_services,theTranslator->trServices());
+    }
+    TemplateVariant unoIDLInterfaces() const
+    {
+      return getMemberList(m_cache.unoIDLInterfaces,MemberListType_interfaces,theTranslator->trInterfaces());
+    }
+    TemplateVariant signals() const
+    {
+      return getMemberList(m_cache.signals,MemberListType_signals,theTranslator->trSignals());
+    }
+    TemplateVariant publicTypes() const
+    {
+      return getMemberList(m_cache.publicTypes,MemberListType_pubTypes,theTranslator->trPublicTypes());
+    }
+    TemplateVariant publicMethods() const
+    {
+      return getMemberList(m_cache.publicMethods,MemberListType_pubMethods,
+          m_classDef->getLanguage()==SrcLangExt_ObjC ? theTranslator->trInstanceMethods()
+                                                     : theTranslator->trPublicMembers());
+    }
+    TemplateVariant publicStaticMethods() const
+    {
+      return getMemberList(m_cache.publicStaticMethods,MemberListType_pubStaticMethods,
+          m_classDef->getLanguage()==SrcLangExt_ObjC ? theTranslator->trClassMethods()
+                                                     : theTranslator->trStaticPublicMembers());
+    }
+    TemplateVariant publicAttributes() const
+    {
+      return getMemberList(m_cache.publicAttributes,MemberListType_pubAttribs,theTranslator->trPublicAttribs());
+    }
+    TemplateVariant publicStaticAttributes() const
+    {
+      return getMemberList(m_cache.publicStaticAttributes,MemberListType_pubStaticAttribs,theTranslator->trStaticPublicAttribs());
+    }
+    TemplateVariant publicSlots() const
+    {
+      return getMemberList(m_cache.publicSlots,MemberListType_pubSlots,theTranslator->trPublicSlots());
+    }
+    TemplateVariant protectedTypes() const
+    {
+      return getMemberList(m_cache.protectedTypes,MemberListType_proTypes,theTranslator->trProtectedTypes());
+    }
+    TemplateVariant protectedMethods() const
+    {
+      return getMemberList(m_cache.protectedMethods,MemberListType_proMethods,theTranslator->trProtectedMembers());
+    }
+    TemplateVariant protectedStaticMethods() const
+    {
+      return getMemberList(m_cache.protectedStaticMethods,MemberListType_proStaticMethods,theTranslator->trStaticProtectedMembers());
+    }
+    TemplateVariant protectedAttributes() const
+    {
+      return getMemberList(m_cache.protectedAttributes,MemberListType_proAttribs,theTranslator->trProtectedAttribs());
+    }
+    TemplateVariant protectedStaticAttributes() const
+    {
+      return getMemberList(m_cache.protectedStaticAttributes,MemberListType_proStaticAttribs,theTranslator->trStaticProtectedAttribs());
+    }
+    TemplateVariant protectedSlots() const
+    {
+      return getMemberList(m_cache.protectedSlots,MemberListType_proSlots,theTranslator->trProtectedSlots());
+    }
+    TemplateVariant privateTypes() const
+    {
+      return getMemberList(m_cache.privateTypes,MemberListType_priTypes,theTranslator->trPrivateTypes());
+    }
+    TemplateVariant privateSlots() const
+    {
+      return getMemberList(m_cache.privateSlots,MemberListType_priSlots,theTranslator->trPrivateSlots());
+    }
+    TemplateVariant privateMethods() const
+    {
+      return getMemberList(m_cache.privateMethods,MemberListType_priMethods,theTranslator->trPrivateMembers());
+    }
+    TemplateVariant privateStaticMethods() const
+    {
+      return getMemberList(m_cache.privateStaticMethods,MemberListType_priStaticMethods,theTranslator->trStaticPrivateMembers());
+    }
+    TemplateVariant privateAttributes() const
+    {
+      return getMemberList(m_cache.privateAttributes,MemberListType_priAttribs,theTranslator->trPrivateAttribs());
+    }
+    TemplateVariant privateStaticAttributes() const
+    {
+      return getMemberList(m_cache.privateStaticAttributes,MemberListType_priStaticAttribs,theTranslator->trStaticPrivateAttribs());
+    }
+    TemplateVariant packageTypes() const
+    {
+      return getMemberList(m_cache.packageTypes,MemberListType_pacTypes,theTranslator->trPackageTypes());
+    }
+    TemplateVariant packageMethods() const
+    {
+      return getMemberList(m_cache.packageMethods,MemberListType_pacMethods,theTranslator->trPackageMembers());
+    }
+    TemplateVariant packageStaticMethods() const
+    {
+      return getMemberList(m_cache.packageStaticMethods,MemberListType_pacStaticMethods,theTranslator->trStaticPackageMembers());
+    }
+    TemplateVariant packageAttributes() const
+    {
+      return getMemberList(m_cache.packageAttributes,MemberListType_pacAttribs,theTranslator->trPackageAttribs());
+    }
+    TemplateVariant packageStaticAttributes() const
+    {
+      return getMemberList(m_cache.packageStaticAttributes,MemberListType_pacStaticAttribs,theTranslator->trStaticPackageAttribs());
+    }
+    TemplateVariant properties() const
+    {
+      return getMemberList(m_cache.properties,MemberListType_properties,theTranslator->trProperties());
+    }
+    TemplateVariant events() const
+    {
+      return getMemberList(m_cache.events,MemberListType_events,theTranslator->trEvents());
+    }
+    TemplateVariant friends() const
+    {
+      return getMemberList(m_cache.friends,MemberListType_friends,theTranslator->trFriends());
+    }
+    TemplateVariant related() const
+    {
+      return getMemberList(m_cache.related,MemberListType_related,theTranslator->trRelatedFunctions());
+    }
+    TemplateVariant detailedTypedefs() const
+    {
+      return getMemberList(m_cache.detailedTypedefs,MemberListType_typedefMembers,theTranslator->trMemberTypedefDocumentation(),TRUE);
+    }
+    TemplateVariant detailedEnums() const
+    {
+      return getMemberList(m_cache.detailedEnums,MemberListType_enumMembers,theTranslator->trMemberEnumerationDocumentation(),TRUE);
+    }
+    TemplateVariant detailedServices() const
+    {
+      return getMemberList(m_cache.detailedServices,MemberListType_serviceMembers,theTranslator->trServices(),TRUE);
+    }
+    TemplateVariant detailedInterfaces() const
+    {
+      return getMemberList(m_cache.detailedInterfaces,MemberListType_interfaceMembers,theTranslator->trInterfaces(),TRUE);
+    }
+    TemplateVariant detailedConstructors() const
+    {
+      return getMemberList(m_cache.detailedConstructors,MemberListType_constructors,theTranslator->trConstructorDocumentation(),TRUE);
+    }
+    TemplateVariant detailedMethods() const
+    {
+      return getMemberList(m_cache.detailedMethods,MemberListType_functionMembers,theTranslator->trMemberFunctionDocumentation(),TRUE);
+    }
+    TemplateVariant detailedRelated() const
+    {
+      return getMemberList(m_cache.detailedRelated,MemberListType_relatedMembers,theTranslator->trRelatedFunctionDocumentation(),TRUE);
+    }
+    TemplateVariant detailedVariables() const
+    {
+      return getMemberList(m_cache.detailedVariables,MemberListType_variableMembers,theTranslator->trMemberDataDocumentation(),TRUE);
+    }
+    TemplateVariant detailedProperties() const
+    {
+      return getMemberList(m_cache.detailedProperties,MemberListType_propertyMembers,theTranslator->trPropertyDocumentation(),TRUE);
+    }
+    TemplateVariant detailedEvents() const
+    {
+      return getMemberList(m_cache.detailedEvents,MemberListType_eventMembers,theTranslator->trEventDocumentation(),TRUE);
+    }
+    TemplateVariant nestedClasses() const
+    {
+      static bool extractPrivate      = Config_getBool("EXTRACT_PRIVATE");
+      static bool hideUndocClasses    = Config_getBool("HIDE_UNDOC_CLASSES");
+      static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES");
+      if (!m_cache.nestedClasses)
+      {
+        NestedClassListContext *classList = new NestedClassListContext;
+        if (m_classDef->getClassSDict())
+        {
+          ClassSDict::Iterator sdi(*m_classDef->getClassSDict());
+          ClassDef *cd;
+          for (sdi.toFirst();(cd=sdi.current());++sdi)
+          {
+            bool linkable = cd->isLinkable();
+            if (cd->name().find('@')==-1 && !cd->isExtension() &&
+                (cd->protection()!=::Private || extractPrivate) &&
+                (linkable ||
+                 (!hideUndocClasses && (!cd->isLocal() || extractLocalClasses)))
+               )
+            {
+              classList->append(cd);
+            }
+          }
+        }
+        m_cache.nestedClasses.reset(classList);
+      }
+      return m_cache.nestedClasses.get();
+    }
+    TemplateVariant compoundType() const
+    {
+      return m_classDef->compoundTypeString();
+    }
+    void addTemplateDecls(Definition *d,TemplateList *tl) const
+    {
+      if (d->definitionType()==Definition::TypeClass)
+      {
+        Definition *parent = d->getOuterScope();
+        if (parent)
+        {
+          addTemplateDecls(parent,tl);
+        }
+        ClassDef *cd=(ClassDef *)d;
+        if (cd->templateArguments())
+        {
+          ArgumentListContext *al = new ArgumentListContext(cd->templateArguments(),cd,relPathAsString());
+          // since a TemplateVariant does take ownership of the object, we add it
+          // a separate list just to be able to delete it and avoid a memory leak
+          m_cache.templateArgList.append(al);
+          tl->append(al);
+        }
+      }
+    }
+    void addExamples(TemplateList *list) const
+    {
+      if (m_classDef->hasExamples())
+      {
+        ExampleSDict::Iterator it(*m_classDef->exampleList());
+        Example *ex;
+        for (it.toFirst();(ex=it.current());++it)
+        {
+          TemplateStruct *s = new TemplateStruct;
+          m_cache.exampleList.append(s);
+          s->set("text",ex->name);
+          s->set("isLinkable",TRUE);
+          s->set("anchor",ex->anchor);
+          s->set("fileName",ex->file);
+          list->append(s);
+        }
+      }
+    }
+    TemplateVariant templateDecls() const
+    {
+      if (!m_cache.templateDecls)
+      {
+        TemplateList *tl = new TemplateList;
+        addTemplateDecls(m_classDef,tl);
+        m_cache.templateDecls.reset(tl);
+      }
+      return m_cache.templateDecls.get();
+    }
+    TemplateVariant typeConstraints() const
+    {
+      if (!m_cache.typeConstraints && m_classDef->typeConstraints())
+      {
+        m_cache.typeConstraints.reset(new ArgumentListContext(m_classDef->typeConstraints(),m_classDef,relPathAsString()));
+      }
+      else
+      {
+        m_cache.typeConstraints.reset(new ArgumentListContext);
+      }
+      return m_cache.typeConstraints.get();
+    }
+    TemplateVariant examples() const
+    {
+      if (!m_cache.examples)
+      {
+        TemplateList *exampleList = new TemplateList;
+        addExamples(exampleList);
+        m_cache.examples.reset(exampleList);
+      }
+      return m_cache.examples.get();
+    }
+    void addMembers(ClassDef *cd,MemberListType lt) const
+    {
+      MemberList *ml = cd->getMemberList(lt);
+      if (ml)
+      {
+        MemberListIterator li(*ml);
+        const MemberDef *md;
+        for (li.toFirst();(md=li.current());++li)
+        {
+          if (md->isBriefSectionVisible())
+          {
+            m_cache.allMembers.append(md);
+          }
+        }
+      }
+    }
+    TemplateVariant members() const
+    {
+      if (!m_cache.members)
+      {
+        addMembers(m_classDef,MemberListType_pubTypes);
+        addMembers(m_classDef,MemberListType_services);
+        addMembers(m_classDef,MemberListType_interfaces);
+        addMembers(m_classDef,MemberListType_pubSlots);
+        addMembers(m_classDef,MemberListType_signals);
+        addMembers(m_classDef,MemberListType_pubMethods);
+        addMembers(m_classDef,MemberListType_pubStaticMethods);
+        addMembers(m_classDef,MemberListType_pubAttribs);
+        addMembers(m_classDef,MemberListType_pubStaticAttribs);
+        addMembers(m_classDef,MemberListType_proTypes);
+        addMembers(m_classDef,MemberListType_proSlots);
+        addMembers(m_classDef,MemberListType_proMethods);
+        addMembers(m_classDef,MemberListType_proStaticMethods);
+        addMembers(m_classDef,MemberListType_proAttribs);
+        addMembers(m_classDef,MemberListType_proStaticAttribs);
+        addMembers(m_classDef,MemberListType_pacTypes);
+        addMembers(m_classDef,MemberListType_pacMethods);
+        addMembers(m_classDef,MemberListType_pacStaticMethods);
+        addMembers(m_classDef,MemberListType_pacAttribs);
+        addMembers(m_classDef,MemberListType_pacStaticAttribs);
+        addMembers(m_classDef,MemberListType_properties);
+        addMembers(m_classDef,MemberListType_events);
+        addMembers(m_classDef,MemberListType_priTypes);
+        addMembers(m_classDef,MemberListType_priSlots);
+        addMembers(m_classDef,MemberListType_priMethods);
+        addMembers(m_classDef,MemberListType_priStaticMethods);
+        addMembers(m_classDef,MemberListType_priAttribs);
+        addMembers(m_classDef,MemberListType_priStaticAttribs);
+        addMembers(m_classDef,MemberListType_related);
+        m_cache.members.reset(new MemberListContext(&m_cache.allMembers));
+      }
+      return m_cache.members.get();
+    }
+    TemplateVariant allMembersList() const
+    {
+      if (!m_cache.allMembersList && m_classDef->memberNameInfoSDict())
+      {
+        AllMembersListContext *ml = new AllMembersListContext(m_classDef->memberNameInfoSDict());
+        m_cache.allMembersList.reset(ml);
+      }
+      else
+      {
+        m_cache.allMembersList.reset(new AllMembersListContext);
+      }
+      return m_cache.allMembersList.get();
+    }
+    TemplateVariant allMembersFileName() const
+    {
+      return m_classDef->getMemberListFileName();
+    }
+    TemplateVariant memberGroups() const
+    {
+      if (!m_cache.memberGroups)
+      {
+        if (m_classDef->getMemberGroupSDict())
+        {
+          m_cache.memberGroups.reset(new MemberGroupListContext(m_classDef,relPathAsString(),m_classDef->getMemberGroupSDict(),m_classDef->subGrouping()));
+        }
+        else
+        {
+          m_cache.memberGroups.reset(new MemberGroupListContext);
+        }
+      }
+      return m_cache.memberGroups.get();
+    }
+    TemplateVariant additionalInheritedMembers() const
+    {
+      if (!m_cache.additionalInheritedMembers)
+      {
+        InheritedMemberInfoListContext *ctx = new InheritedMemberInfoListContext;
+        ctx->addMemberList(m_classDef,MemberListType_pubTypes,theTranslator->trPublicTypes());
+        ctx->addMemberList(m_classDef,MemberListType_services,theTranslator->trServices());
+        ctx->addMemberList(m_classDef,MemberListType_interfaces,theTranslator->trInterfaces());
+        ctx->addMemberList(m_classDef,MemberListType_pubSlots,theTranslator->trPublicSlots());
+        ctx->addMemberList(m_classDef,MemberListType_signals,theTranslator->trSignals());
+        ctx->addMemberList(m_classDef,MemberListType_pubMethods,
+          m_classDef->getLanguage()==SrcLangExt_ObjC ? theTranslator->trInstanceMethods()
+                                                     : theTranslator->trPublicMembers());
+        ctx->addMemberList(m_classDef,MemberListType_pubStaticMethods,
+          m_classDef->getLanguage()==SrcLangExt_ObjC ? theTranslator->trClassMethods()
+                                                     : theTranslator->trStaticPublicMembers());
+        ctx->addMemberList(m_classDef,MemberListType_pubAttribs,theTranslator->trPublicAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_pubStaticAttribs,theTranslator->trStaticPublicAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_proTypes,theTranslator->trProtectedTypes());
+        ctx->addMemberList(m_classDef,MemberListType_proSlots,theTranslator->trProtectedSlots());
+        ctx->addMemberList(m_classDef,MemberListType_proMethods,theTranslator->trProtectedMembers());
+        ctx->addMemberList(m_classDef,MemberListType_proStaticMethods,theTranslator->trStaticProtectedMembers());
+        ctx->addMemberList(m_classDef,MemberListType_proAttribs,theTranslator->trProtectedAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_proStaticAttribs,theTranslator->trStaticProtectedAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_pacTypes,theTranslator->trPackageTypes());
+        ctx->addMemberList(m_classDef,MemberListType_pacMethods,theTranslator->trPackageMembers());
+        ctx->addMemberList(m_classDef,MemberListType_pacStaticMethods,theTranslator->trStaticPackageMembers());
+        ctx->addMemberList(m_classDef,MemberListType_pacAttribs,theTranslator->trPackageAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_pacStaticAttribs,theTranslator->trStaticPackageAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_properties,theTranslator->trProperties());
+        ctx->addMemberList(m_classDef,MemberListType_events,theTranslator->trEvents());
+        ctx->addMemberList(m_classDef,MemberListType_priTypes,theTranslator->trPrivateTypes());
+        ctx->addMemberList(m_classDef,MemberListType_priSlots,theTranslator->trPrivateSlots());
+        ctx->addMemberList(m_classDef,MemberListType_priMethods,theTranslator->trPrivateMembers());
+        ctx->addMemberList(m_classDef,MemberListType_priStaticMethods,theTranslator->trStaticPrivateMembers());
+        ctx->addMemberList(m_classDef,MemberListType_priAttribs,theTranslator->trPrivateAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_priStaticAttribs,theTranslator->trStaticPrivateAttribs());
+        ctx->addMemberList(m_classDef,MemberListType_related,theTranslator->trRelatedFunctions());
+        m_cache.additionalInheritedMembers.reset(ctx);
+      }
+      return m_cache.additionalInheritedMembers.get();
+    }
+
+  private:
+    ClassDef *m_classDef;
+    UsedFilesContext m_usedFiles;
+    IncludeInfoContext m_includeInfo;
+    struct Cachable
+    {
+      Cachable() : inheritanceNodes(-1)
+      {
+        templateArgList.setAutoDelete(TRUE);
+        exampleList.setAutoDelete(TRUE);
+        allMembers.setAutoDelete(TRUE);
+      }
+      ScopedPtr<InheritanceListContext> inheritsList;
+      ScopedPtr<InheritanceListContext> inheritedByList;
+      ScopedPtr<DotClassGraph>          classGraph;
+      ScopedPtr<DotClassGraph>          collaborationGraph;
+      ScopedPtr<NestedClassListContext> nestedClasses;
+      ScopedPtr<MemberListInfoContext> publicTypes;
+      ScopedPtr<MemberListInfoContext> publicMethods;
+      ScopedPtr<MemberListInfoContext> publicStaticMethods;
+      ScopedPtr<MemberListInfoContext> publicAttributes;
+      ScopedPtr<MemberListInfoContext> publicStaticAttributes;
+      ScopedPtr<MemberListInfoContext> publicSlots;
+      ScopedPtr<MemberListInfoContext> protectedTypes;
+      ScopedPtr<MemberListInfoContext> protectedMethods;
+      ScopedPtr<MemberListInfoContext> protectedStaticMethods;
+      ScopedPtr<MemberListInfoContext> protectedAttributes;
+      ScopedPtr<MemberListInfoContext> protectedStaticAttributes;
+      ScopedPtr<MemberListInfoContext> protectedSlots;
+      ScopedPtr<MemberListInfoContext> privateTypes;
+      ScopedPtr<MemberListInfoContext> privateMethods;
+      ScopedPtr<MemberListInfoContext> privateStaticMethods;
+      ScopedPtr<MemberListInfoContext> privateAttributes;
+      ScopedPtr<MemberListInfoContext> privateStaticAttributes;
+      ScopedPtr<MemberListInfoContext> privateSlots;
+      ScopedPtr<MemberListInfoContext> packageTypes;
+      ScopedPtr<MemberListInfoContext> packageMethods;
+      ScopedPtr<MemberListInfoContext> packageStaticMethods;
+      ScopedPtr<MemberListInfoContext> packageAttributes;
+      ScopedPtr<MemberListInfoContext> packageStaticAttributes;
+      ScopedPtr<MemberListInfoContext> unoIDLServices;
+      ScopedPtr<MemberListInfoContext> unoIDLInterfaces;
+      ScopedPtr<MemberListInfoContext> signals;
+      ScopedPtr<MemberListInfoContext> properties;
+      ScopedPtr<MemberListInfoContext> events;
+      ScopedPtr<MemberListInfoContext> friends;
+      ScopedPtr<MemberListInfoContext> related;
+      ScopedPtr<MemberListInfoContext> detailedTypedefs;
+      ScopedPtr<MemberListInfoContext> detailedEnums;
+      ScopedPtr<MemberListInfoContext> detailedServices;
+      ScopedPtr<MemberListInfoContext> detailedInterfaces;
+      ScopedPtr<MemberListInfoContext> detailedConstructors;
+      ScopedPtr<MemberListInfoContext> detailedMethods;
+      ScopedPtr<MemberListInfoContext> detailedRelated;
+      ScopedPtr<MemberListInfoContext> detailedVariables;
+      ScopedPtr<MemberListInfoContext> detailedProperties;
+      ScopedPtr<MemberListInfoContext> detailedEvents;
+      ScopedPtr<MemberGroupListContext> memberGroups;
+      ScopedPtr<AllMembersListContext> allMembersList;
+      ScopedPtr<ArgumentListContext>   typeConstraints;
+      ScopedPtr<TemplateList>          examples;
+      ScopedPtr<TemplateList>          templateDecls;
+      ScopedPtr<InheritedMemberInfoListContext> additionalInheritedMembers;
+      ScopedPtr<MemberListContext>     members;
+      QList<ArgumentListContext>       templateArgList;
+      int                              inheritanceNodes;
+      QList<TemplateStruct>            exampleList;
+      MemberList                       allMembers;
+    };
+    mutable Cachable m_cache;
+};
+//%% }
+
+ClassContext::ClassContext(ClassDef *cd)
+{
+  //printf("ClassContext::ClassContext(%s)\n",cd?cd->name().data():"<none>");
+  p = new Private(cd);
+}
+
+ClassContext::~ClassContext()
+{
+  delete p;
+}
+
+TemplateVariant ClassContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Namespace(Symbol): namespace information
+//%% {
+class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Private>
+{
+  public:
+    Private(NamespaceDef *nd) : DefinitionContext<NamespaceContext::Private>(nd) , m_namespaceDef(nd)
+    {
+      addProperty("title",this,&Private::title);
+      addProperty("highlight",this,&Private::highlight);
+      addProperty("subhighlight",this,&Private::subHighlight);
+    }
+    TemplateVariant title() const
+    {
+      return TemplateVariant(m_namespaceDef->title());
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("namespaces");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+  private:
+    NamespaceDef *m_namespaceDef;
+};
+//%% }
+
+NamespaceContext::NamespaceContext(NamespaceDef *nd)
+{
+  p = new Private(nd);
+}
+
+NamespaceContext::~NamespaceContext()
+{
+  delete p;
+}
+
+TemplateVariant NamespaceContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct File(Symbol): file information
+//%% {
+class FileContext::Private : public DefinitionContext<FileContext::Private>
+{
+  public:
+    Private(FileDef *fd) : DefinitionContext<FileContext::Private>(fd) , m_fileDef(fd)
+    {
+      addProperty("title",this,&Private::title);
+      addProperty("highlight",this,&Private::highlight);
+      addProperty("subhighlight",this,&Private::subHighlight);
+      addProperty("versionInfo",this,&Private::versionInfo);
+    }
+    TemplateVariant title() const
+    {
+      return m_fileDef->title();
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("files");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+    TemplateVariant versionInfo() const
+    {
+      return m_fileDef->getVersion();
+    }
+  private:
+    FileDef *m_fileDef;
+};
+//%% }
+
+FileContext::FileContext(FileDef *fd)
+{
+  p = new Private(fd);
+}
+
+FileContext::~FileContext()
+{
+  delete p;
+}
+
+TemplateVariant FileContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Dir(Symbol): directory information
+//%% {
+class DirContext::Private : public DefinitionContext<DirContext::Private>
+{
+  public:
+    Private(DirDef *dd) : DefinitionContext<DirContext::Private>(dd) , m_dirDef(dd)
+    {
+      addProperty("title",this,&Private::title);
+      addProperty("highlight",this,&Private::highlight);
+      addProperty("subhighlight",this,&Private::subHighlight);
+      addProperty("dirName",this,&Private::dirName);
+    }
+    TemplateVariant title() const
+    {
+      return TemplateVariant(m_dirDef->shortTitle());
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("files");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+    TemplateVariant dirName() const
+    {
+      return TemplateVariant(m_dirDef->shortName());
+    }
+  private:
+    DirDef *m_dirDef;
+};
+//%% }
+
+DirContext::DirContext(DirDef *fd)
+{
+  p = new Private(fd);
+}
+
+DirContext::~DirContext()
+{
+  delete p;
+}
+
+TemplateVariant DirContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct Page(Symbol): page information
+//%% {
+class PageContext::Private : public DefinitionContext<PageContext::Private>
+{
+  public:
+    Private(PageDef *pd) : DefinitionContext<PageContext::Private>(pd) , m_pageDef(pd)
+    {
+      addProperty("title",this,&Private::title);
+      addProperty("highlight",this,&Private::highlight);
+      addProperty("subhighlight",this,&Private::subHighlight);
+    }
+    TemplateVariant title() const
+    {
+      return TemplateVariant(m_pageDef->title());
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("pages");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+  private:
+    PageDef *m_pageDef;
+};
+//%% }
+
+PageContext::PageContext(PageDef *pd)
+{
+  p = new Private(pd);
+}
+
+PageContext::~PageContext()
+{
+  delete p;
+}
+
+TemplateVariant PageContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+class TextGeneratorHtml : public TextGeneratorIntf
+{
+  public:
+    TextGeneratorHtml(FTextStream &ts,const QCString &relPath)
+       : m_ts(ts), m_relPath(relPath) {}
+    void writeString(const char *s,bool keepSpaces) const
+    {
+      if (s==0) return;
+      //printf("TextGeneratorOlImpl::writeString('%s',%d)\n",s,keepSpaces);
+      if (keepSpaces)
+      {
+        const char *p=s;
+        char c;
+        while ((c=*p++))
+        {
+          switch(c)
+          {
+            case '<':  m_ts << "&lt;"; break;
+            case '>':  m_ts << "&gt;"; break;
+            case '\'': m_ts << "&#39;"; break;
+            case '"':  m_ts << "&quot;"; break;
+            case '&':  m_ts << "&amp;"; break;
+            case ' ':  m_ts << "&#160;"; break;
+          }
+        }
+      }
+      else
+      {
+        m_ts << convertToHtml(s);
+      }
+    }
+
+    void writeBreak(int indent) const
+    {
+      m_ts << "<br/>";
+      for (int i=0;i<indent;i++)
+      {
+        m_ts << "&#160;";
+      }
+    }
+
+    void writeLink(const char *ref,const char *f,
+                   const char *anchor,const char *name
+                  ) const
+    {
+      if (ref)
+      {
+        m_ts << "<a class=\"elRef\" ";
+        m_ts << externalLinkTarget() << externalRef(m_relPath,ref,FALSE);
+      }
+      else
+      {
+        m_ts << "<a class=\"el\" ";
+      }
+      m_ts << "href=\"";
+      m_ts << externalRef(m_relPath,ref,TRUE);
+      if (f) m_ts << f << Doxygen::htmlFileExtension;
+      if (anchor) m_ts << "#" << anchor;
+      m_ts << "\">";
+      m_ts << convertToHtml(name);
+      m_ts << "</a>";
+    }
+
+  private:
+    FTextStream &m_ts;
+    QCString m_relPath;
+};
+
+class TextGeneratorFactory
+{
+  public:
+    static TextGeneratorFactory *instance()
+    {
+      static TextGeneratorFactory *instance = 0;
+      if (instance==0) instance = new TextGeneratorFactory;
+      return instance;
+    }
+    TextGeneratorIntf *create(FTextStream &ts,const QCString &relPath)
+    {
+      switch (g_globals.outputFormat)
+      {
+        case ContextGlobals::Html:
+          return new TextGeneratorHtml(ts,relPath);
+          break;
+        default:
+          break;
+      }
+      return 0;
+    }
+  private:
+    TextGeneratorFactory() {}
+    virtual ~TextGeneratorFactory() {}
+};
+
+TemplateVariant createLinkedText(Definition *def,const QCString &relPath,const QCString &text)
+{
+  QGString s;
+  FTextStream ts(&s);
+  TextGeneratorIntf *tg = TextGeneratorFactory::instance()->create(ts,relPath);
+  if (tg)
+  {
+    linkifyText(*tg,def->getOuterScope(),def->getBodyDef(),def,text);
+    return TemplateVariant(s.data(),TRUE);
+  }
+  else
+  {
+    return text;
+  }
+}
+
+//%% struct Member(Symbol): member information
+//%% {
+class MemberContext::Private : public DefinitionContext<MemberContext::Private>
+{
+  public:
+    Private(MemberDef *md) : DefinitionContext<MemberContext::Private>(md) , m_memberDef(md)
+    {
+      addProperty("declType",            this,&Private::declType);
+      addProperty("declArgs",            this,&Private::declArgs);
+      addProperty("isStatic",            this,&Private::isStatic);
+      addProperty("isObjCMethod",        this,&Private::isObjCMethod);
+      addProperty("isObjCProperty",      this,&Private::isObjCProperty);
+      addProperty("isDefine",            this,&Private::isDefine);
+      addProperty("isImplementation",    this,&Private::isImplementation);
+      addProperty("isEvent",             this,&Private::isEvent);
+      addProperty("isProperty",          this,&Private::isProperty);
+      addProperty("isEnumeration",       this,&Private::isEnumeration);
+      addProperty("isEnumValue",         this,&Private::isEnumValue);
+      addProperty("isAnonymous",         this,&Private::isAnonymous);
+      addProperty("anonymousType",       this,&Private::anonymousType);
+      addProperty("anonymousMember",     this,&Private::anonymousMember);
+      addProperty("isRelated",           this,&Private::isRelated);
+      addProperty("hasDetails",          this,&Private::hasDetails);
+      addProperty("exception",           this,&Private::exception);
+      addProperty("bitfields",           this,&Private::bitfields);
+      addProperty("initializer",         this,&Private::initializer);
+      addProperty("initializerAsCode",   this,&Private::initializerAsCode);
+      addProperty("hasOneLineInitializer",   this,&Private::hasOneLineInitializer);
+      addProperty("hasMultiLineInitializer", this,&Private::hasMultiLineInitializer);
+      addProperty("templateArgs",        this,&Private::templateArgs);
+      addProperty("templateAlias",       this,&Private::templateAlias);
+      addProperty("propertyAttrs",       this,&Private::propertyAttrs);
+      addProperty("eventAttrs",          this,&Private::eventAttrs);
+      addProperty("class",               this,&Private::getClass);
+      addProperty("definition",          this,&Private::definition);
+      addProperty("parameters",          this,&Private::parameters);
+      addProperty("hasParameterList",    this,&Private::hasParameterList);
+      addProperty("hasConstQualifier",   this,&Private::hasConstQualifier);
+      addProperty("hasVolatileQualifier",this,&Private::hasVolatileQualifier);
+      addProperty("trailingReturnType",  this,&Private::trailingReturnType);
+      addProperty("extraTypeChars",      this,&Private::extraTypeChars);
+      addProperty("templateDecls",       this,&Private::templateDecls);
+      addProperty("labels",              this,&Private::labels);
+      addProperty("enumBaseType",        this,&Private::enumBaseType);
+      addProperty("enumValues",          this,&Private::enumValues);
+      addProperty("paramDocs",           this,&Private::paramDocs);
+      addProperty("reimplements",        this,&Private::reimplements);
+      addProperty("implements",          this,&Private::implements);
+      addProperty("reimplementedBy",     this,&Private::reimplementedBy);
+      addProperty("implementedBy",       this,&Private::implementedBy);
+      addProperty("examples",            this,&Private::examples);
+      addProperty("typeConstraints",     this,&Private::typeConstraints);
+      addProperty("functionQualifier",   this,&Private::functionQualifier);
+      addProperty("sourceRefs",          this,&Private::sourceRefs);
+      addProperty("sourceRefBys",        this,&Private::sourceRefBys);
+      addProperty("hasSources",          this,&Private::hasSources);
+      addProperty("sourceCode",          this,&Private::sourceCode);
+      addProperty("hasCallGraph",        this,&Private::hasCallGraph);
+      addProperty("callGraph",           this,&Private::callGraph);
+      addProperty("hasCallerGraph",      this,&Private::hasCallerGraph);
+      addProperty("callerGraph",         this,&Private::callerGraph);
+
+      if (md && md->isProperty())
+      {
+        if (md->isGettable()) m_propertyAttrs.append("get");
+        if (md->isSettable()) m_propertyAttrs.append("set");
+      }
+      if (md && md->isEvent())
+      {
+        if (md->isAddable())   m_eventAttrs.append("add");
+        if (md->isRemovable()) m_eventAttrs.append("remove");
+        if (md->isRaisable())  m_eventAttrs.append("raise");
+      }
+    }
+    TemplateVariant declType() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->getDeclType());
+    }
+    TemplateVariant declArgs() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->argsString());
+    }
+    TemplateVariant exception() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->excpString());
+    }
+    TemplateVariant bitfields() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->bitfieldString());
+    }
+    TemplateVariant isStatic() const
+    {
+      return m_memberDef->isStatic();
+    }
+    TemplateVariant isObjCMethod() const
+    {
+      return m_memberDef->isObjCMethod();
+    }
+    TemplateVariant isObjCProperty() const
+    {
+      return m_memberDef->isObjCProperty();
+    }
+    TemplateVariant isImplementation() const
+    {
+      return m_memberDef->isImplementation();
+    }
+    TemplateVariant isEvent() const
+    {
+      return m_memberDef->isEvent();
+    }
+    TemplateVariant isProperty() const
+    {
+      return m_memberDef->isProperty();
+    }
+    TemplateVariant isEnumValue() const
+    {
+      return m_memberDef->isEnumValue();
+    }
+    TemplateVariant isEnumeration() const
+    {
+      return m_memberDef->isEnumerate();
+    }
+    TemplateVariant hasDetails() const
+    {
+      return m_memberDef->isDetailedSectionLinkable();
+    }
+    TemplateVariant initializer() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),m_memberDef->initializer());
+    }
+    TemplateVariant initializerAsCode() const
+    {
+      if (!m_cache.initializerParsed)
+      {
+        QCString scopeName;
+        if (m_memberDef->getClassDef())
+        {
+          scopeName = m_memberDef->getClassDef()->name();
+        }
+        else if (m_memberDef->getNamespaceDef())
+        {
+          scopeName = m_memberDef->getNamespaceDef()->name();
+        }
+        m_cache.initializer = parseCode(m_memberDef,scopeName,relPathAsString(),
+                                        m_memberDef->initializer());
+        m_cache.initializerParsed = TRUE;
+      }
+      return m_cache.initializer;
+    }
+    TemplateVariant isDefine() const
+    {
+      return m_memberDef->isDefine();
+    }
+    TemplateVariant isAnonymous() const
+    {
+      QCString name = m_memberDef->name();
+      return !name.isEmpty() && name.at(0)=='@';
+    }
+    TemplateVariant anonymousType() const
+    {
+      if (!m_cache.anonymousType)
+      {
+        ClassDef *cd = m_memberDef->getClassDefOfAnonymousType();
+        if (cd)
+        {
+          m_cache.anonymousType.reset(new ClassContext(cd));
+        }
+      }
+      if (m_cache.anonymousType)
+      {
+        return m_cache.anonymousType.get();
+      }
+      else
+      {
+        return FALSE;
+      }
+    }
+    TemplateVariant anonymousMember() const
+    {
+      if (!m_cache.anonymousMember)
+      {
+        MemberDef *md = m_memberDef->fromAnonymousMember();
+        if (md)
+        {
+          m_cache.anonymousMember.reset(new MemberContext(md));
+        }
+      }
+      if (m_cache.anonymousMember)
+      {
+        return m_cache.anonymousMember.get();
+      }
+      else
+      {
+        return FALSE;
+      }
+    }
+    TemplateVariant isRelated() const
+    {
+      return m_memberDef->isRelated();
+    }
+    TemplateVariant enumBaseType() const
+    {
+      return m_memberDef->enumBaseType();
+    }
+    TemplateVariant hasOneLineInitializer() const
+    {
+      return m_memberDef->hasOneLineInitializer();
+    }
+    TemplateVariant hasMultiLineInitializer() const
+    {
+      return m_memberDef->hasMultiLineInitializer();
+    }
+    TemplateVariant enumValues() const
+    {
+      if (!m_cache.enumValues)
+      {
+        MemberList *ml = m_memberDef->enumFieldList();
+        if (ml)
+        {
+          m_cache.enumValues.reset(new MemberListContext(ml));
+        }
+        else
+        {
+          m_cache.enumValues.reset(new MemberListContext);
+        }
+      }
+      return m_cache.enumValues.get();
+    }
+    TemplateVariant templateArgs() const
+    {
+      if (!m_cache.templateArgs && m_memberDef->templateArguments())
+      {
+        m_cache.templateArgs.reset(new ArgumentListContext(m_memberDef->templateArguments(),m_memberDef,relPathAsString()));
+      }
+      if (m_cache.templateArgs)
+      {
+        return m_cache.templateArgs.get();
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant templateAlias() const
+    {
+      if (m_memberDef->isAlias())
+      {
+        return createLinkedText(m_memberDef,relPathAsString(),
+                                QCString(" = ")+m_memberDef->typeString());
+      }
+      return "";
+    }
+    TemplateVariant propertyAttrs() const
+    {
+      return &m_propertyAttrs;
+    }
+    TemplateVariant eventAttrs() const
+    {
+      return &m_eventAttrs;
+    }
+    TemplateVariant getClass() const
+    {
+      if (!m_cache.classDef && m_memberDef->getClassDef())
+      {
+        m_cache.classDef.reset(new ClassContext(m_memberDef->getClassDef()));
+      }
+      if (m_cache.classDef)
+      {
+        return m_cache.classDef.get();
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant definition() const
+    {
+      return createLinkedText(m_memberDef,relPathAsString(),
+                              m_memberDef->displayDefinition());
+    }
+    ArgumentList *getDefArgList() const
+    {
+      return (m_memberDef->isDocsForDefinition()) ?
+              m_memberDef->argumentList() : m_memberDef->declArgumentList();
+    }
+    TemplateVariant parameters() const
+    {
+      if (!m_cache.arguments)
+      {
+        ArgumentList *defArgList = getDefArgList();
+        if (defArgList && !m_memberDef->isProperty())
+        {
+          m_cache.arguments.reset(new ArgumentListContext(defArgList,m_memberDef,relPathAsString()));
+        }
+        else
+        {
+          m_cache.arguments.reset(new ArgumentListContext);
+        }
+      }
+      return m_cache.arguments.get();
+    }
+    TemplateVariant hasParameterList() const
+    {
+      return getDefArgList()!=0;
+    }
+    TemplateVariant hasConstQualifier() const
+    {
+      ArgumentList *al = getDefArgList();
+      return al ? al->constSpecifier : FALSE;
+    }
+    TemplateVariant hasVolatileQualifier() const
+    {
+      ArgumentList *al = getDefArgList();
+      return al ? al->volatileSpecifier : FALSE;
+    }
+    TemplateVariant trailingReturnType() const
+    {
+      ArgumentList *al = getDefArgList();
+      if (al && !al->trailingReturnType.isEmpty())
+      {
+        return createLinkedText(m_memberDef,relPathAsString(),
+                                al->trailingReturnType);
+      }
+      else
+      {
+        return "";
+      }
+    }
+    TemplateVariant extraTypeChars() const
+    {
+      return m_memberDef->extraTypeChars();
+    }
+    void addTemplateDecls(TemplateList *tl) const
+    {
+      ClassDef *cd=m_memberDef->getClassDef();
+      if (m_memberDef->definitionTemplateParameterLists())
+      {
+        QListIterator<ArgumentList> ali(*m_memberDef->definitionTemplateParameterLists());
+        ArgumentList *tal;
+        for (ali.toFirst();(tal=ali.current());++ali)
+        {
+          if (tal->count()>0)
+          {
+            ArgumentListContext *al = new ArgumentListContext(tal,m_memberDef,relPathAsString());
+            m_cache.templateArgList.append(al);
+            tl->append(al);
+          }
+        }
+      }
+      else
+      {
+        if (cd && !m_memberDef->isRelated() && !m_memberDef->isTemplateSpecialization())
+        {
+          QList<ArgumentList> tempParamLists;
+          cd->getTemplateParameterLists(tempParamLists);
+          //printf("#tempParamLists=%d\n",tempParamLists.count());
+          QListIterator<ArgumentList> ali(tempParamLists);
+          ArgumentList *tal;
+          for (ali.toFirst();(tal=ali.current());++ali)
+          {
+            if (tal->count()>0)
+            {
+              ArgumentListContext *al = new ArgumentListContext(tal,m_memberDef,relPathAsString());
+              m_cache.templateArgList.append(al);
+              tl->append(al);
+            }
+          }
+        }
+        if (m_memberDef->templateArguments()) // function template prefix
+        {
+          ArgumentListContext *al = new ArgumentListContext(
+              m_memberDef->templateArguments(),m_memberDef,relPathAsString());
+          m_cache.templateArgList.append(al);
+          tl->append(al);
+        }
+      }
+    }
+    TemplateVariant templateDecls() const
+    {
+      if (!m_cache.templateDecls)
+      {
+        TemplateList *tl = new TemplateList;
+        addTemplateDecls(tl);
+        m_cache.templateDecls.reset(tl);
+      }
+      return m_cache.templateDecls.get();
+    }
+    TemplateVariant labels() const
+    {
+      if (!m_cache.labels)
+      {
+        QStrList sl;
+        m_memberDef->getLabels(sl,m_memberDef->getOuterScope());
+        TemplateList *tl = new TemplateList;
+        if (sl.count()>0)
+        {
+          QStrListIterator it(sl);
+          for (;it.current();++it)
+          {
+            tl->append(*it);
+          }
+        }
+        m_cache.labels.reset(tl);
+      }
+      return m_cache.labels.get();
+    }
+    TemplateVariant paramDocs() const
+    {
+      if (!m_cache.paramDocs)
+      {
+        if (m_memberDef->argumentList() && m_memberDef->argumentList()->hasDocumentation())
+        {
+          QCString paramDocs;
+          ArgumentListIterator ali(*m_memberDef->argumentList());
+          Argument *a;
+          // convert the parameter documentation into a list of @param commands
+          for (ali.toFirst();(a=ali.current());++ali)
+          {
+            if (a->hasDocumentation())
+            {
+              QCString direction = extractDirection(a->docs);
+              paramDocs+="@param"+direction+" "+a->name+" "+a->docs;
+            }
+          }
+          m_cache.paramDocs.reset(new TemplateVariant(parseDoc(m_memberDef,
+                                           m_memberDef->docFile(),m_memberDef->docLine(),
+                                           relPathAsString(),paramDocs,FALSE)));
+        }
+        else
+        {
+          m_cache.paramDocs.reset(new TemplateVariant(""));
+        }
+      }
+      return *m_cache.paramDocs;
+    }
+    TemplateVariant implements() const
+    {
+      if (!m_cache.implements)
+      {
+        MemberDef *md = m_memberDef->reimplements();
+        m_cache.implements.reset(new TemplateList);
+        if (md)
+        {
+          ClassDef *cd = md->getClassDef();
+          if (cd && (md->virtualness()==Pure || cd->compoundType()==ClassDef::Interface))
+          {
+            MemberContext *mc = new MemberContext(md);
+            m_cache.implementsMember.reset(mc);
+            m_cache.implements->append(mc);
+          }
+        }
+      }
+      return m_cache.implements.get();
+    }
+    TemplateVariant reimplements() const
+    {
+      if (!m_cache.reimplements)
+      {
+        MemberDef *md = m_memberDef->reimplements();
+        m_cache.reimplements.reset(new TemplateList);
+        if (md)
+        {
+          ClassDef *cd = md->getClassDef();
+          if (cd && md->virtualness()!=Pure && cd->compoundType()!=ClassDef::Interface)
+          {
+            MemberContext *mc = new MemberContext(md);
+            m_cache.reimplementsMember.reset(mc);
+            m_cache.reimplements->append(mc);
+          }
+        }
+      }
+      return m_cache.reimplements.get();
+    }
+    TemplateVariant implementedBy() const
+    {
+      if (!m_cache.implementedBy)
+      {
+        MemberList *ml = m_memberDef->reimplementedBy();
+        m_cache.implementedBy.reset(new TemplateList);
+        if (ml)
+        {
+          MemberListIterator mli(*ml);
+          MemberDef *md=0;
+          for (mli.toFirst();(md=mli.current());++mli)
+          {
+            ClassDef *cd = md->getClassDef();
+            if (cd && (md->virtualness()==Pure || cd->compoundType()==ClassDef::Interface))
+            {
+              MemberContext *mc = new MemberContext(md);
+              m_cache.implementedByMembers.append(mc);
+              m_cache.implementedBy->append(mc);
+            }
+          }
+        }
+      }
+      return m_cache.implementedBy.get();
+    }
+    TemplateVariant reimplementedBy() const
+    {
+      if (!m_cache.reimplementedBy)
+      {
+        m_cache.reimplementedBy.reset(new TemplateList);
+        MemberList *ml = m_memberDef->reimplementedBy();
+        if (ml)
+        {
+          MemberListIterator mli(*ml);
+          MemberDef *md=0;
+          for (mli.toFirst();(md=mli.current());++mli)
+          {
+            ClassDef *cd = md->getClassDef();
+            if (cd && md->virtualness()!=Pure && cd->compoundType()!=ClassDef::Interface)
+            {
+              MemberContext *mc = new MemberContext(md);
+              m_cache.reimplementedByMembers.append(mc);
+              m_cache.reimplementedBy->append(mc);
+            }
+          }
+        }
+      }
+      return m_cache.reimplementedBy.get();
+    }
+    void addExamples(TemplateList *list) const
+    {
+      if (m_memberDef->hasExamples())
+      {
+        ExampleSDict::Iterator it(*m_memberDef->getExamples());
+        Example *ex;
+        for (it.toFirst();(ex=it.current());++it)
+        {
+          TemplateStruct *s = new TemplateStruct;
+          m_cache.exampleList.append(s);
+          s->set("text",ex->name);
+          s->set("isLinkable",TRUE);
+          s->set("anchor",ex->anchor);
+          s->set("fileName",ex->file);
+          list->append(s);
+        }
+      }
+    }
+    TemplateVariant examples() const
+    {
+      if (!m_cache.examples)
+      {
+        TemplateList *exampleList = new TemplateList;
+        addExamples(exampleList);
+        m_cache.examples.reset(exampleList);
+      }
+      return m_cache.examples.get();
+    }
+    TemplateVariant typeConstraints() const
+    {
+      if (!m_cache.typeConstraints && m_memberDef->typeConstraints())
+      {
+        m_cache.typeConstraints.reset(new ArgumentListContext(m_memberDef->typeConstraints(),m_memberDef,relPathAsString()));
+      }
+      else
+      {
+        m_cache.typeConstraints.reset(new ArgumentListContext);
+      }
+      return m_cache.typeConstraints.get();
+    }
+    TemplateVariant functionQualifier() const
+    {
+      if (!m_memberDef->isObjCMethod() &&
+          (m_memberDef->isFunction()  || m_memberDef->isSlot() || 
+           m_memberDef->isPrototype() || m_memberDef->isSignal()
+          )
+         ) 
+      {
+        return "()";
+      }
+      else
+      {
+        return "";
+      }
+    }
+    TemplateVariant sourceRefs() const
+    {
+      if (!m_cache.sourceRefs)
+      {
+        m_cache.sourceRefs.reset(new MemberListContext(m_memberDef->getReferencesMembers(),TRUE));
+      }
+      return m_cache.sourceRefs.get();
+    }
+    TemplateVariant sourceRefBys() const
+    {
+      if (!m_cache.sourceRefBys)
+      {
+        m_cache.sourceRefBys.reset(new MemberListContext(m_memberDef->getReferencedByMembers(),TRUE));
+      }
+      return m_cache.sourceRefBys.get();
+    }
+    TemplateVariant hasSources() const
+    {
+      return TemplateVariant(m_memberDef->hasSources());
+    }
+    TemplateVariant sourceCode() const
+    {
+      if (!m_cache.sourceCodeParsed)
+      {
+        QCString codeFragment;
+        FileDef *fd   = m_memberDef->getBodyDef();
+        int startLine = m_memberDef->getStartBodyLine();
+        int endLine   = m_memberDef->getEndBodyLine();
+        if (fd && readCodeFragment(fd->absFilePath(),
+              startLine,endLine,codeFragment)
+           )
+        {
+          QCString scopeName;
+          if (m_memberDef->getClassDef())
+          {
+            scopeName = m_memberDef->getClassDef()->name();
+          }
+          else if (m_memberDef->getNamespaceDef())
+          {
+            scopeName = m_memberDef->getNamespaceDef()->name();
+          }
+          m_cache.sourceCode = parseCode(m_memberDef,scopeName,relPathAsString(),codeFragment,startLine,endLine,TRUE);
+          m_cache.sourceCodeParsed = TRUE;
+        }
+      }
+      return m_cache.sourceCode;
+    }
+    DotCallGraph *getCallGraph() const
+    {
+      if (!m_cache.callGraph)
+      {
+        m_cache.callGraph.reset(new DotCallGraph(m_memberDef,FALSE));
+      }
+      return m_cache.callGraph.get();
+    }
+    TemplateVariant hasCallGraph() const
+    {
+      static bool haveDot = Config_getBool("HAVE_DOT");
+      static bool callGraph = Config_getBool("CALL_GRAPH");
+      if ((callGraph || m_memberDef->hasCallGraph()) && haveDot &&
+          (m_memberDef->isFunction() || m_memberDef->isSlot() || m_memberDef->isSignal()))
+      {
+        DotCallGraph *cg = getCallGraph();
+        return !cg->isTooBig() && !cg->isTrivial();
+      }
+      return TemplateVariant(FALSE);
+    }
+    TemplateVariant callGraph() const
+    {
+      if (hasCallGraph().toBool())
+      {
+        DotCallGraph *cg = getCallGraph();
+        QGString result;
+        FTextStream t(&result);
+        cg->writeGraph(t,BITMAP,
+            g_globals.outputDir,
+            g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+            relPathAsString(),TRUE,g_globals.dynSectionId
+            );
+        g_globals.dynSectionId++;
+        return TemplateVariant(result.data(),TRUE);
+      }
+      else
+      {
+        return TemplateVariant("");
+      }
+    }
+    DotCallGraph *getCallerGraph() const
+    {
+      if (!m_cache.callerGraph)
+      {
+        m_cache.callerGraph.reset(new DotCallGraph(m_memberDef,TRUE));
+      }
+      return m_cache.callerGraph.get();
+    }
+    TemplateVariant hasCallerGraph() const
+    {
+      static bool haveDot = Config_getBool("HAVE_DOT");
+      static bool callerGraph = Config_getBool("CALLER_GRAPH");
+      if ((callerGraph || m_memberDef->hasCallerGraph()) && haveDot &&
+          (m_memberDef->isFunction() || m_memberDef->isSlot() || m_memberDef->isSignal()))
+      {
+        DotCallGraph *cg = getCallerGraph();
+        return !cg->isTooBig() && !cg->isTrivial();
+      }
+      return TemplateVariant(FALSE);
+    }
+    TemplateVariant callerGraph() const
+    {
+      if (hasCallerGraph().toBool())
+      {
+        DotCallGraph *cg = getCallerGraph();
+        QGString result;
+        FTextStream t(&result);
+        cg->writeGraph(t,BITMAP,
+            g_globals.outputDir,
+            g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+            relPathAsString(),TRUE,g_globals.dynSectionId
+            );
+        g_globals.dynSectionId++;
+        return TemplateVariant(result.data(),TRUE);
+      }
+      else
+      {
+        return TemplateVariant("");
+      }
+    }
+  private:
+    MemberDef *m_memberDef;
+    struct Cachable
+    {
+      Cachable() : initializerParsed(FALSE), sourceCodeParsed(FALSE)
+      {
+        implementedByMembers.setAutoDelete(TRUE);
+        reimplementedByMembers.setAutoDelete(TRUE);
+        templateArgList.setAutoDelete(TRUE);
+        exampleList.setAutoDelete(TRUE);
+      }
+      ScopedPtr<ArgumentListContext> templateArgs;
+      ScopedPtr<ArgumentListContext> arguments;
+      ScopedPtr<MemberListContext>   enumValues;
+      ScopedPtr<ClassContext>        classDef;
+      ScopedPtr<ClassContext>        anonymousType;
+      ScopedPtr<TemplateList>        templateDecls;
+      ScopedPtr<TemplateVariant>     paramDocs;
+      ScopedPtr<TemplateList>        implements;
+      ScopedPtr<MemberContext>       implementsMember;
+      ScopedPtr<TemplateList>        reimplements;
+      ScopedPtr<MemberContext>       reimplementsMember;
+      ScopedPtr<TemplateList>        implementedBy;
+      ScopedPtr<MemberListContext>   sourceRefs;
+      ScopedPtr<MemberListContext>   sourceRefBys;
+      ScopedPtr<DotCallGraph>        callGraph;
+      ScopedPtr<DotCallGraph>        callerGraph;
+      ScopedPtr<MemberContext>       anonymousMember;
+      QList<MemberContext>           implementedByMembers;
+      ScopedPtr<TemplateList>        reimplementedBy;
+      QList<MemberContext>           reimplementedByMembers;
+      QList<ArgumentListContext>     templateArgList;
+      ScopedPtr<TemplateList>        labels;
+      TemplateVariant                initializer;
+      bool                           initializerParsed;
+      TemplateVariant                sourceCode;
+      bool                           sourceCodeParsed;
+      ScopedPtr<TemplateList>        examples;
+      QList<TemplateStruct>          exampleList;
+      ScopedPtr<ArgumentListContext> typeConstraints;
+    };
+    mutable Cachable m_cache;
+    TemplateList m_propertyAttrs;
+    TemplateList m_eventAttrs;
+};
+//%% }
+
+MemberContext::MemberContext(MemberDef *md)
+{
+  p = new Private(md);
+}
+
+MemberContext::~MemberContext()
+{
+  delete p;
+}
+
+TemplateVariant MemberContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct Module(Symbol): group information
+//%% {
+class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
+{
+  public:
+    Private(GroupDef *gd) : DefinitionContext<ModuleContext::Private>(gd) , m_groupDef(gd)
+    {
+      addProperty("title",this,&Private::title);
+      addProperty("highlight",this,&Private::highlight);
+      addProperty("subhighlight",this,&Private::subHighlight);
+    }
+    TemplateVariant title() const
+    {
+      return TemplateVariant(m_groupDef->groupTitle());
+    }
+    TemplateVariant highlight() const
+    {
+      return TemplateVariant("modules");
+    }
+    TemplateVariant subHighlight() const
+    {
+      return TemplateVariant("");
+    }
+  private:
+    GroupDef *m_groupDef;
+};
+//%% }
+
+ModuleContext::ModuleContext(GroupDef *gd)
+{
+  p = new Private(gd);
+}
+
+ModuleContext::~ModuleContext()
+{
+  delete p;
+}
+
+TemplateVariant ModuleContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% list NestedClassList[Class] : list of nested classes
+class NestedClassListContext::Private : public GenericNodeListContext<ClassContext>
+{
+};
+
+NestedClassListContext::NestedClassListContext()
+{
+  p = new Private;
+}
+
+NestedClassListContext::~NestedClassListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int NestedClassListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant NestedClassListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *NestedClassListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void NestedClassListContext::append(ClassDef *cd)
+{
+  if (cd)
+  {
+    p->append(new ClassContext(cd));
+  }
+}
+
+//------------------------------------------------------------------------
+
+//%% list ClassList[Class] : list of classes
+class ClassListContext::Private : public GenericNodeListContext<ClassContext>
+{
+  public:
+    void addClasses(const ClassSDict &classSDict)
+    {
+      ClassSDict::Iterator cli(classSDict);
+      ClassDef *cd;
+      for (cli.toFirst() ; (cd=cli.current()) ; ++cli )
+      {
+        if (cd->getLanguage()==SrcLangExt_VHDL &&
+            ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS ||
+             (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
+           ) // no architecture
+        {
+          continue;
+        }
+        if (cd->isLinkableInProject() && cd->templateMaster()==0)
+        {
+          append(new ClassContext(cd));
+        }
+      }
+    }
+};
+
+ClassListContext::ClassListContext()
+{
+  p = new Private;
+  p->addClasses(*Doxygen::classSDict);
+  p->addClasses(*Doxygen::hiddenClasses);
+}
+
+ClassListContext::~ClassListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int ClassListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant ClassListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *ClassListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct ClassInheritanceNode: node in inheritance tree
+//%% {
+class ClassInheritanceNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(ClassDef *cd) : m_classContext(cd)
+    {
+      //%% 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);
+    }
+    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());
+        }
+
+        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
+    {
+      return TemplateVariant(&m_classContext);
+    }
+  private:
+    GenericNodeListContext<ClassInheritanceNodeContext> m_children;
+    ClassContext m_classContext;
+};
+//%% }
+
+ClassInheritanceNodeContext::ClassInheritanceNodeContext(ClassDef *cd)
+{
+  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);
+}
+
+//------------------------------------------------------------------------
+
+//%% list ClassInheritance[ClassInheritanceNode]: list of classes
+class ClassInheritanceContext::Private : public
+    GenericNodeListContext<ClassInheritanceNodeContext>
+{
+  public:
+    void addClasses(const ClassSDict &classSDict)
+    {
+      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
+            ClassInheritanceNodeContext *tnc = new ClassInheritanceNodeContext(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;
+            }
+          }
+        }
+      }
+    }
+};
+
+ClassInheritanceContext::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();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct ClassHierarchy: inheritance tree
+//%% {
+class ClassHierarchyContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_classTree);
+    }
+    TemplateVariant fileName() const
+    {
+      return "hierarchy";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "classes";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "classhierarchy";
+    }
+    TemplateVariant title() const
+    {
+      static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+      if (vhdlOpt)
+      {
+        return VhdlDocGen::trDesignUnitHierarchy();
+      }
+      else
+      {
+        return theTranslator->trClassHierarchy();
+      }
+    }
+    Private()
+    {
+      //%% 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);
+    }
+  private:
+    ClassInheritanceContext m_classTree;
+};
+//%% }
+
+ClassHierarchyContext::ClassHierarchyContext()
+{
+  p = new Private;
+}
+
+ClassHierarchyContext::~ClassHierarchyContext()
+{
+  delete p;
+}
+
+TemplateVariant ClassHierarchyContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct NestingNode: node is a nesting relation tree
+//%% {
+class NestingNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(Definition *d,bool addCls) : m_def(d),
+       m_classContext(m_def->definitionType()==Definition::TypeClass?(ClassDef*)d:0),
+       m_namespaceContext(m_def->definitionType()==Definition::TypeNamespace?(NamespaceDef*)d:0)
+    {
+      //%% bool is_leaf_node: true if this node does not have any children
+      addProperty("is_leaf_node",this,&Private::isLeafNode);
+      //%% Nesting children: list of nested classes/namespaces
+      addProperty("children",this,&Private::children);
+      //%% [optional] Class class: class info (if this node represents a class)
+      addProperty("class",this,&Private::getClass);
+      //%% [optional] Namespace namespace: namespace info (if this node represents a namespace)
+      addProperty("namespace",this,&Private::getNamespace);
+      addNamespaces(addCls);
+      addClasses();
+    }
+    TemplateVariant isLeafNode() const
+    {
+      return m_children.count()==0;
+    }
+    TemplateVariant children() const
+    {
+      return TemplateVariant(&m_children);
+    }
+    TemplateVariant getClass() const
+    {
+      if (m_def->definitionType()==Definition::TypeClass)
+      {
+        return TemplateVariant(&m_classContext);
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant getNamespace() const
+    {
+      if (m_def->definitionType()==Definition::TypeNamespace)
+      {
+        return TemplateVariant(&m_namespaceContext);
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    void addClasses()
+    {
+      ClassDef *cd = m_def->definitionType()==Definition::TypeClass ? (ClassDef*)m_def : 0;
+      if (cd && cd->getClassSDict())
+      {
+        m_children.addClasses(*cd->getClassSDict(),FALSE);
+      }
+    }
+    void addNamespaces(bool addClasses)
+    {
+      NamespaceDef *nd = m_def->definitionType()==Definition::TypeNamespace ? (NamespaceDef*)m_def : 0;
+      if (nd && nd->getNamespaceSDict())
+      {
+        m_children.addNamespaces(*nd->getNamespaceSDict(),FALSE,addClasses);
+      }
+      if (addClasses && nd && nd->getClassSDict())
+      {
+        m_children.addClasses(*nd->getClassSDict(),FALSE);
+      }
+    }
+    Definition *m_def;
+  private:
+    NestingContext m_children;
+    ClassContext m_classContext;
+    NamespaceContext m_namespaceContext;
+};
+//%% }
+
+NestingNodeContext::NestingNodeContext(Definition *d,bool addClass)
+{
+  p = new Private(d,addClass);
+}
+
+NestingNodeContext::~NestingNodeContext()
+{
+  delete p;
+}
+
+TemplateVariant NestingNodeContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% list Nesting[NestingNode]: namespace and class nesting relations
+class NestingContext::Private : public GenericNodeListContext<NestingNodeContext>
+{
+  public:
+    void addNamespaces(const NamespaceSDict &nsDict,bool rootOnly,bool addClasses)
+    {
+      NamespaceSDict::Iterator nli(nsDict);
+      NamespaceDef *nd;
+      for (nli.toFirst();(nd=nli.current());++nli)
+      {
+        if (nd->localName().find('@')==-1 &&
+            (!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
+        {
+          bool hasChildren = namespaceHasVisibleChild(nd,addClasses);
+          bool isLinkable  = nd->isLinkableInProject();
+          if (isLinkable || hasChildren)
+          {
+            NestingNodeContext *nnc = new NestingNodeContext(nd,addClasses);
+            append(nnc);
+          }
+        }
+      }
+    }
+    void addClasses(const ClassSDict &clDict,bool rootOnly)
+    {
+      ClassSDict::Iterator cli(clDict);
+      ClassDef *cd;
+      for (;(cd=cli.current());++cli)
+      {
+        if (cd->getLanguage()==SrcLangExt_VHDL)
+        {
+          if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS ||
+              (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS
+             )// no architecture
+          {
+            continue;
+          }
+        }
+        if (!rootOnly ||
+            cd->getOuterScope()==0 ||
+            cd->getOuterScope()==Doxygen::globalScope
+           )
+        {
+          if (classVisibleInIndex(cd) && cd->templateMaster()==0)
+          {
+            NestingNodeContext *nnc = new NestingNodeContext(cd,TRUE);
+            append(nnc);
+          }
+        }
+      }
+    }
+};
+
+NestingContext::NestingContext()
+{
+  p = new Private;
+}
+
+NestingContext::~NestingContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int NestingContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant NestingContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *NestingContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void NestingContext::addClasses(const ClassSDict &clDict,bool rootOnly)
+{
+  p->addClasses(clDict,rootOnly);
+}
+
+void NestingContext::addNamespaces(const NamespaceSDict &nsDict,bool rootOnly,bool addClasses)
+{
+  p->addNamespaces(nsDict,rootOnly,addClasses);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct ClassTree: Class nesting relations
+//%% {
+class ClassTreeContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_classTree);
+    }
+    TemplateVariant fileName() const
+    {
+      return "annotated";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "classes";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "classlist";
+    }
+    TemplateVariant title() const
+    {
+      static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+      static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+      if (fortranOpt)
+      {
+        return theTranslator->trCompoundListFortran();
+      }
+      else if (vhdlOpt)
+      {
+        return VhdlDocGen::trDesignUnitList();
+      }
+      else
+      {
+        return theTranslator->trClasses();
+      }
+    }
+    Private()
+    {
+      if (Doxygen::namespaceSDict)
+      {
+        m_classTree.addNamespaces(*Doxygen::namespaceSDict,TRUE,TRUE);
+      }
+      if (Doxygen::classSDict)
+      {
+        m_classTree.addClasses(*Doxygen::classSDict,TRUE);
+      }
+      //%% Nesting 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);
+    }
+  private:
+    NestingContext m_classTree;
+};
+//%% }
+
+ClassTreeContext::ClassTreeContext()
+{
+  p = new Private;
+}
+
+ClassTreeContext::~ClassTreeContext()
+{
+  delete p;
+}
+
+TemplateVariant ClassTreeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list NamespaceList[Namespace] : list of namespaces
+class NamespaceListContext::Private : public GenericNodeListContext<NamespaceContext>
+{
+  public:
+    void addNamespaces(const NamespaceSDict &nsDict)
+    {
+      NamespaceSDict::Iterator nli(nsDict);
+      NamespaceDef *nd;
+      for (nli.toFirst();(nd=nli.current());++nli)
+      {
+        if (nd->isLinkableInProject())
+        {
+          append(new NamespaceContext(nd));
+        }
+      }
+    }
+};
+
+NamespaceListContext::NamespaceListContext()
+{
+  p = new Private;
+  p->addNamespaces(*Doxygen::namespaceSDict);
+}
+
+NamespaceListContext::~NamespaceListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int NamespaceListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant NamespaceListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *NamespaceListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct NamespaceTree: tree of nested namespace
+//%% {
+class NamespaceTreeContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_namespaceTree);
+    }
+    TemplateVariant fileName() const
+    {
+      return "namespaces";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "namespaces";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "namespacelist";
+    }
+    TemplateVariant title() const
+    {
+      static bool javaOpt    = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+      static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+      static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+      if (javaOpt || vhdlOpt)
+      {
+        return theTranslator->trPackages();
+      }
+      else if (fortranOpt)
+      {
+        return theTranslator->trModulesList();
+      }
+      else
+      {
+        return theTranslator->trNamespaceList();
+      }
+    }
+    Private()
+    {
+      if (Doxygen::namespaceSDict)
+      {
+        m_namespaceTree.addNamespaces(*Doxygen::namespaceSDict,TRUE,FALSE);
+      }
+      //%% Nesting 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);
+    }
+  private:
+    NestingContext m_namespaceTree;
+};
+//%% }
+
+NamespaceTreeContext::NamespaceTreeContext()
+{
+  p = new Private;
+}
+
+NamespaceTreeContext::~NamespaceTreeContext()
+{
+  delete p;
+}
+
+TemplateVariant NamespaceTreeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list FileList[File] : list of files
+class FileListContext::Private : public GenericNodeListContext<FileContext>
+{
+  public:
+    void addFiles(const FileNameList &fnList)
+    {
+      // TODO: if FULL_PATH_NAMES is enabled, the ordering should be dir+file
+      FileNameListIterator fnli(fnList);
+      FileName *fn;
+      for (fnli.toFirst();(fn=fnli.current());++fnli)
+      {
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (fni.toFirst();(fd=fni.current());++fni)
+        {
+          bool doc = fd->isLinkableInProject();
+          bool src = fd->generateSourceFile();
+          bool nameOk = !fd->isDocumentationFile();
+          if (nameOk && (doc || src) && !fd->isReference())
+          {
+            append(new FileContext(fd));
+          }
+        }
+      }
+    }
+};
+
+FileListContext::FileListContext()
+{
+  p = new Private;
+  if (Doxygen::inputNameList) p->addFiles(*Doxygen::inputNameList);
+}
+
+FileListContext::~FileListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int FileListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant FileListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *FileListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% list UsedFiles[File] : list of files
+class UsedFilesContext::Private : public GenericNodeListContext<FileContext>
+{
+  public:
+    void addFile(FileDef *fd)
+    {
+      append(new FileContext(fd));
+    }
+};
+
+UsedFilesContext::UsedFilesContext(ClassDef *cd)
+{
+  p = new Private;
+  if (cd)
+  {
+    QListIterator<FileDef> li(cd->usedFiles());
+    FileDef *fd;
+    for (li.toFirst();(fd=li.current());++li)
+    {
+      p->addFile(fd);
+    }
+  }
+}
+
+UsedFilesContext::~UsedFilesContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int UsedFilesContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant UsedFilesContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *UsedFilesContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void UsedFilesContext::addFile(FileDef *fd)
+{
+  p->addFile(fd);
+}
+
+//------------------------------------------------------------------------
+
+
+//%% struct DirFileNode: node is a directory hierarchy
+//%% {
+class DirFileNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(Definition *d) : m_def(d),
+       m_dirContext (m_def->definitionType()==Definition::TypeDir  ? (DirDef*)d  : 0),
+       m_fileContext(m_def->definitionType()==Definition::TypeFile ? (FileDef*)d : 0)
+    {
+      //%% bool is_leaf_node: true if this node does not have any children
+      addProperty("is_leaf_node",this,&Private::isLeafNode);
+      //%% DirFile children: list of nested classes/namespaces
+      addProperty("children",this,&Private::children);
+      //%% [optional] Dir dir: directory info (if this node represents a directory)
+      addProperty("dir",this,&Private::getDir);
+      //%% [optional] File file: file info (if this node represents a file)
+      addProperty("file",this,&Private::getFile);
+      addDirFiles();
+    }
+    TemplateVariant isLeafNode() const
+    {
+      return m_children.count()==0;
+    }
+    TemplateVariant children() const
+    {
+      return TemplateVariant(&m_children);
+    }
+    TemplateVariant getDir() const
+    {
+      if (m_def->definitionType()==Definition::TypeDir)
+      {
+        return TemplateVariant(&m_dirContext);
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    TemplateVariant getFile() const
+    {
+      if (m_def->definitionType()==Definition::TypeFile)
+      {
+        return TemplateVariant(&m_fileContext);
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+    void addDirFiles()
+    {
+      DirDef *dd = m_def->definitionType()==Definition::TypeDir ? (DirDef*)m_def : 0;
+      if (dd)
+      {
+        m_children.addDirs(dd->subDirs());
+        if (dd && dd->getFiles())
+        {
+          m_children.addFiles(*dd->getFiles());
+        }
+      }
+    }
+  private:
+    Definition *m_def;
+    DirFileContext m_children;
+    DirContext m_dirContext;
+    FileContext m_fileContext;
+};
+//%% }
+
+DirFileNodeContext::DirFileNodeContext(Definition *d)
+{
+  p = new Private(d);
+}
+
+DirFileNodeContext::~DirFileNodeContext()
+{
+  delete p;
+}
+
+TemplateVariant DirFileNodeContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% list DirFile[DirFileNode]: list of directories and/or files
+class DirFileContext::Private : public GenericNodeListContext<DirFileNodeContext>
+{
+  public:
+    void addDirs(const DirSDict &dirDict)
+    {
+      SDict<DirDef>::Iterator dli(dirDict);
+      DirDef *dd;
+      for (dli.toFirst();(dd=dli.current());++dli)
+      {
+        if (dd->getOuterScope()==Doxygen::globalScope)
+        {
+          append(new DirFileNodeContext(dd));
+        }
+      }
+    }
+    void addDirs(const DirList &dirList)
+    {
+      QListIterator<DirDef> li(dirList);
+      DirDef *dd;
+      for (li.toFirst();(dd=li.current());++li)
+      {
+        append(new DirFileNodeContext(dd));
+      }
+    }
+    void addFiles(const FileNameList &fnList)
+    {
+      FileNameListIterator fnli(fnList);
+      FileName *fn;
+      for (fnli.toFirst();(fn=fnli.current());++fnli)
+      {
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (;(fd=fni.current());++fni)
+        {
+          if (fd->getDirDef()==0) // top level file
+          {
+            append(new DirFileNodeContext(fd));
+          }
+        }
+      }
+    }
+    void addFiles(const FileList &fList)
+    {
+      QListIterator<FileDef> li(fList);
+      FileDef *fd;
+      for (li.toFirst();(fd=li.current());++li)
+      {
+        append(new DirFileNodeContext(fd));
+      }
+    }
+};
+
+DirFileContext::DirFileContext()
+{
+  p = new Private;
+}
+
+DirFileContext::~DirFileContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int DirFileContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant DirFileContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *DirFileContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void DirFileContext::addDirs(const DirSDict &dirs)
+{
+  p->addDirs(dirs);
+}
+
+void DirFileContext::addDirs(const DirList &dirs)
+{
+  p->addDirs(dirs);
+}
+
+void DirFileContext::addFiles(const FileNameList &files)
+{
+  p->addFiles(files);
+}
+
+void DirFileContext::addFiles(const FileList &files)
+{
+  p->addFiles(files);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct FileTree: tree of directories and files
+//%% {
+class FileTreeContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_dirFileTree);
+    }
+    TemplateVariant fileName() const
+    {
+      return "files";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "files";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "filelist";
+    }
+    TemplateVariant title() const
+    {
+      return theTranslator->trFileList();
+    }
+    Private()
+    {
+      // Add dirs tree
+      if (Doxygen::directories)
+      {
+        m_dirFileTree.addDirs(*Doxygen::directories);
+      }
+      if (Doxygen::inputNameList)
+      {
+        m_dirFileTree.addFiles(*Doxygen::inputNameList);
+      }
+      //%% DirFile 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);
+    }
+  private:
+    DirFileContext m_dirFileTree;
+};
+//%% }
+
+FileTreeContext::FileTreeContext()
+{
+  p = new Private;
+}
+
+FileTreeContext::~FileTreeContext()
+{
+  delete p;
+}
+
+TemplateVariant FileTreeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct PageNode: node is a directory hierarchy
+//%% {
+class PageNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(PageDef *pd) : m_pageDef(pd), m_pageContext(pd)
+    {
+      //%% bool is_leaf_node: true if this node does not have any children
+      addProperty("is_leaf_node",this,&Private::isLeafNode);
+      //%% PageList children: list of nested classes/namespaces
+      addProperty("children",this,&Private::children);
+      //%% Page page: page info
+      addProperty("page",this,&Private::getPage);
+      addPages();
+    }
+    TemplateVariant isLeafNode() const
+    {
+      return m_children.count()==0;
+    }
+    TemplateVariant children() const
+    {
+      return TemplateVariant(&m_children);
+    }
+    TemplateVariant getPage() const
+    {
+      return TemplateVariant(&m_pageContext);
+    }
+    void addPages()
+    {
+      if (m_pageDef->getSubPages())
+      {
+        m_children.addPages(*m_pageDef->getSubPages(),FALSE);
+      }
+    }
+  private:
+    PageDef *m_pageDef;
+    PageNodeListContext m_children;
+    PageContext m_pageContext;
+};
+//%% }
+
+PageNodeContext::PageNodeContext(PageDef *pd)
+{
+  p = new Private(pd);
+}
+
+PageNodeContext::~PageNodeContext()
+{
+  delete p;
+}
+
+TemplateVariant PageNodeContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% list PageList[PageNode]: list of directories and/or files
+class PageNodeListContext::Private : public GenericNodeListContext<PageNodeContext>
+{
+  public:
+    void addPages(const PageSDict &pages,bool rootOnly)
+    {
+      SDict<PageDef>::Iterator pli(pages);
+      PageDef *pd;
+      for (pli.toFirst();(pd=pli.current());++pli)
+      {
+        if (!rootOnly ||
+            pd->getOuterScope()==0 ||
+            pd->getOuterScope()->definitionType()!=Definition::TypePage)
+        {
+          append(new PageNodeContext(pd));
+        }
+      }
+    }
+};
+
+PageNodeListContext::PageNodeListContext()
+{
+  p = new Private;
+}
+
+PageNodeListContext::~PageNodeListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int PageNodeListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant PageNodeListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *PageNodeListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void PageNodeListContext::addPages(const PageSDict &pages,bool rootOnly)
+{
+  p->addPages(pages,rootOnly);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct PageTree: tree of related pages
+//%% {
+class PageTreeContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_pageList);
+    }
+    TemplateVariant fileName() const
+    {
+      return "pages";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "pages";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "";
+    }
+    TemplateVariant title() const
+    {
+      return theTranslator->trRelatedPages();
+    }
+    Private()
+    {
+      // Add pages
+      if (Doxygen::pageSDict)
+      {
+        m_pageList.addPages(*Doxygen::pageSDict,TRUE);
+      }
+
+      //%% PageNodeList 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);
+    }
+  private:
+    PageNodeListContext m_pageList;
+};
+//%% }
+
+PageTreeContext::PageTreeContext()
+{
+  p = new Private;
+}
+
+PageTreeContext::~PageTreeContext()
+{
+  delete p;
+}
+
+TemplateVariant PageTreeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct PageList: list of related pages
+//%% {
+class PageListContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant items() const
+    {
+      return TemplateVariant(&m_pageList);
+    }
+    TemplateVariant fileName() const
+    {
+      return "pages";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "pages";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "";
+    }
+    TemplateVariant title() const
+    {
+      return theTranslator->trRelatedPages();
+    }
+    Private()
+    {
+      // Add pages
+      PageSDict::Iterator pdi(*Doxygen::pageSDict);
+      PageDef *pd=0;
+      for (pdi.toFirst();(pd=pdi.current());++pdi)
+      {
+        if (!pd->getGroupDef() && !pd->isReference())
+        {
+          m_pageList.append(new PageContext(pd));
+        }
+      }
+
+      //%% list[Page] items:
+      addProperty("items",this,&Private::items);
+      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);
+    }
+  private:
+    GenericNodeListContext<PageContext> m_pageList;
+};
+//%% }
+
+PageListContext::PageListContext()
+{
+  p = new Private;
+}
+
+PageListContext::~PageListContext()
+{
+  delete p;
+}
+
+TemplateVariant PageListContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct ModuleNode: node is a directory hierarchy
+//%% {
+class ModuleNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(GroupDef *gd) : m_groupDef(gd), m_moduleContext(gd)
+    {
+      //%% bool is_leaf_node: true if this node does not have any children
+      addProperty("is_leaf_node",this,&Private::isLeafNode);
+      //%% ModuleList children: list of submodules
+      addProperty("children",this,&Private::children);
+      //%% Module module: module info
+      addProperty("module",this,&Private::getModule);
+      addModules();
+    }
+    TemplateVariant isLeafNode() const
+    {
+      return m_children.count()==0;
+    }
+    TemplateVariant children() const
+    {
+      return TemplateVariant(&m_children);
+    }
+    TemplateVariant getModule() const
+    {
+      return TemplateVariant(&m_moduleContext);
+    }
+    void addModules()
+    {
+      if (m_groupDef->getSubGroups())
+      {
+        m_children.addModules(*m_groupDef->getSubGroups());
+      }
+    }
+  private:
+    GroupDef *m_groupDef;
+    ModuleListContext m_children;
+    ModuleContext m_moduleContext;
+};
+//%% }
+
+ModuleNodeContext::ModuleNodeContext(GroupDef *gd)
+{
+  p = new Private(gd);
+}
+
+ModuleNodeContext::~ModuleNodeContext()
+{
+  delete p;
+}
+
+TemplateVariant ModuleNodeContext::get(const char *n) const
+{
+  return p->get(n);
+}
+
+//------------------------------------------------------------------------
+
+//%% list ModuleList[ModuleNode]: list of directories and/or files
+class ModuleListContext::Private : public GenericNodeListContext<ModuleNodeContext>
+{
+  public:
+    void addModules(const GroupSDict &modules)
+    {
+      static bool externalGroups = Config_getBool("EXTERNAL_GROUPS");
+      GroupSDict::Iterator gli(modules);
+      GroupDef *gd;
+      for (gli.toFirst();(gd=gli.current());++gli)
+      {
+        if (!gd->isASubGroup() && gd->isVisible() && (!gd->isReference() || externalGroups))
+        {
+          append(new ModuleNodeContext(gd));
+        }
+      }
+    }
+    void addModules(const GroupList &list)
+    {
+      QListIterator<GroupDef> gli(list);
+      GroupDef *gd;
+      for (gli.toFirst();(gd=gli.current());++gli)
+      {
+        append(new ModuleNodeContext(gd));
+      }
+    }
+};
+
+ModuleListContext::ModuleListContext()
+{
+  p = new Private;
+}
+
+ModuleListContext::~ModuleListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int ModuleListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant ModuleListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *ModuleListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+void ModuleListContext::addModules(const GroupSDict &modules)
+{
+  p->addModules(modules);
+}
+
+void ModuleListContext::addModules(const GroupList &modules)
+{
+  p->addModules(modules);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct ModuleTree: tree of modules
+//%% {
+class ModuleTreeContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant tree() const
+    {
+      return TemplateVariant(&m_moduleList);
+    }
+    TemplateVariant fileName() const
+    {
+      return "modules";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "modules";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "";
+    }
+    TemplateVariant title() const
+    {
+      return theTranslator->trModules();
+    }
+    Private()
+    {
+      // Add modules
+      if (Doxygen::groupSDict)
+      {
+        m_moduleList.addModules(*Doxygen::groupSDict);
+      }
+
+      //%% ModuleList 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);
+    }
+  private:
+    ModuleListContext m_moduleList;
+};
+//%% }
+
+ModuleTreeContext::ModuleTreeContext()
+{
+  p = new Private;
+}
+
+ModuleTreeContext::~ModuleTreeContext()
+{
+  delete p;
+}
+
+TemplateVariant ModuleTreeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct NavPathElem: list of examples page
+//%% {
+class NavPathElemContext::Private : public PropertyMapper
+{
+  public:
+    Private(Definition *def) : m_def(def)
+    {
+      addProperty("isLinkable",this,&Private::isLinkable);
+      addProperty("fileName",this,&Private::fileName);
+      addProperty("anchor",this,&Private::anchor);
+      addProperty("text",this,&Private::text);
+    }
+    TemplateVariant isLinkable() const
+    {
+      return m_def->isLinkable();
+    }
+    TemplateVariant anchor() const
+    {
+      return m_def->anchor();
+    }
+    TemplateVariant fileName() const
+    {
+      return m_def->getOutputFileBase();
+    }
+    TemplateVariant text() const
+    {
+      Definition::DefType type = m_def->definitionType();
+      QCString text = m_def->localName();
+      if (type==Definition::TypeGroup)
+      {
+        text = ((const GroupDef*)m_def)->groupTitle();
+      }
+      else if (type==Definition::TypePage && !(((const PageDef*)this)->title().isEmpty()))
+      {
+        text = ((const PageDef*)m_def)->title();
+      }
+      else if (type==Definition::TypeClass)
+      {
+        if (text.right(2)=="-p")
+        {
+          text = text.left(text.length()-2);
+        }
+      }
+      return text;
+    }
+  private:
+    Definition *m_def;
+};
+//%% }
+
+NavPathElemContext::NavPathElemContext(Definition *def)
+{
+  p = new Private(def);
+}
+
+NavPathElemContext::~NavPathElemContext()
+{
+  delete p;
+}
+
+TemplateVariant NavPathElemContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct ExampleList: list of examples page
+//%% {
+class ExampleListContext::Private : public PropertyMapper
+{
+  public:
+    TemplateVariant items() const
+    {
+      return TemplateVariant(&m_pageList);
+    }
+    TemplateVariant fileName() const
+    {
+      return "examples";
+    }
+    TemplateVariant relPath() const
+    {
+      return "";
+    }
+    TemplateVariant highlight() const
+    {
+      return "examples";
+    }
+    TemplateVariant subhighlight() const
+    {
+      return "";
+    }
+    TemplateVariant title() const
+    {
+      return theTranslator->trExamples();
+    }
+    Private()
+    {
+      // Add pages
+      if (Doxygen::exampleSDict)
+      {
+        m_pageList.addPages(*Doxygen::exampleSDict,FALSE);
+      }
+
+      //%% PageNodeList items:
+      addProperty("items",this,&Private::items);
+      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);
+    }
+  private:
+    PageNodeListContext m_pageList;
+};
+//%% }
+
+ExampleListContext::ExampleListContext()
+{
+  p = new Private;
+}
+
+ExampleListContext::~ExampleListContext()
+{
+  delete p;
+}
+
+TemplateVariant ExampleListContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct InheritanceNode: a class in the inheritance list
+//%% {
+class InheritanceNodeContext::Private : public PropertyMapper
+{
+  public:
+    Private(ClassDef *cd,const QCString &name) : m_classContext(cd), m_name(name)
+    {
+      addProperty("class",this,&Private::getClass);
+      addProperty("name",this,&Private::name);
+    }
+    TemplateVariant getClass() const
+    {
+      return &m_classContext;
+    }
+    TemplateVariant name() const
+    {
+      return m_name;
+    }
+  private:
+    ClassContext m_classContext;
+    QCString m_name;
+};
+//%% }
+
+InheritanceNodeContext::InheritanceNodeContext(ClassDef *cd,const QCString &name)
+{
+  p = new Private(cd,name);
+}
+
+InheritanceNodeContext::~InheritanceNodeContext()
+{
+  delete p;
+}
+
+TemplateVariant InheritanceNodeContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list InheritanceList[InheritanceNode] : list of inherited classes
+class InheritanceListContext::Private : public GenericNodeListContext<InheritanceNodeContext>
+{
+  public:
+    void addClass(ClassDef *cd,const QCString &name)
+    {
+      append(new InheritanceNodeContext(cd,name));
+    }
+};
+
+InheritanceListContext::InheritanceListContext(const BaseClassList *list, bool baseClasses)
+{
+  p = new Private;
+  if (list)
+  {
+    BaseClassListIterator li(*list);
+    BaseClassDef *bcd;
+    for (li.toFirst();(bcd=li.current());++li)
+    {
+      ClassDef *cd=bcd->classDef;
+      QCString name;
+      if (baseClasses)
+      {
+        name = insertTemplateSpecifierInScope(
+                     cd->displayName(),bcd->templSpecifiers);
+      }
+      else
+      {
+        name = cd->displayName();
+      }
+      //printf("InheritanceListContext: adding %s baseClass=%d\n",name.data(),baseClasses);
+      p->addClass(cd,name);
+    }
+  }
+}
+
+InheritanceListContext::~InheritanceListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int InheritanceListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant InheritanceListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *InheritanceListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% list MemberList[Member] : list of inherited classes
+class MemberListContext::Private : public GenericNodeListContext<MemberContext>
+{
+  public:
+    void addMember(MemberDef *md)
+    {
+      append(new MemberContext(md));
+    }
+};
+
+MemberListContext::MemberListContext()
+{
+  p = new Private;
+}
+
+MemberListContext::MemberListContext(const MemberList *list)
+{
+  p = new Private;
+  if (list)
+  {
+    bool details = list->listType()&MemberListType_detailedLists;
+    MemberListIterator mli(*list);
+    MemberDef *md;
+    for (mli.toFirst();(md=mli.current());++mli)
+    {
+      if ((md->isBriefSectionVisible() && !details) ||
+          (md->isDetailedSectionLinkable() && details)
+         )
+      {
+        p->addMember(md);
+      }
+    }
+  }
+}
+
+MemberListContext::MemberListContext(MemberSDict *list,bool doSort)
+{
+  p = new Private;
+  if (list)
+  {
+    if (doSort)
+    {
+      list->sort();
+    }
+    MemberSDict::Iterator it(*list);
+    MemberDef *md;
+    for (it.toFirst();(md=it.current());++it)
+    {
+      p->addMember(md);
+    }
+  }
+}
+
+MemberListContext::~MemberListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int MemberListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant MemberListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *MemberListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct MemberInfo: member information
+//%% {
+class MemberInfoContext::Private : public PropertyMapper
+{
+  public:
+    Private(const MemberInfo *mi) : m_memberInfo(mi)
+    {
+      //%% string protection
+      addProperty("protection",this,&Private::protection);
+      //%% string virtualness
+      addProperty("virtualness",this,&Private::virtualness);
+      //%% string ambiguityScope
+      addProperty("ambiguityScope",this,&Private::ambiguityScope);
+      //%% Member member
+      addProperty("member",this,&Private::member);
+    }
+    TemplateVariant protection() const
+    {
+      switch (m_memberInfo->prot)
+      {
+        case ::Public:    return "public";
+        case ::Protected: return "protected";
+        case ::Private:   return "private";
+        case ::Package:   return "package";
+      }
+      return "";
+    }
+    TemplateVariant virtualness() const
+    {
+      switch (m_memberInfo->virt)
+      {
+        case ::Normal:   return "normal";
+        case ::Virtual:  return "virtual";
+        case ::Pure:     return "pure";
+      }
+      return "";
+    }
+    TemplateVariant ambiguityScope() const
+    {
+      return m_memberInfo->ambiguityResolutionScope;
+    }
+    TemplateVariant member() const
+    {
+      if (!m_member && m_memberInfo->memberDef)
+      {
+        m_member.reset(new MemberContext(m_memberInfo->memberDef));
+      }
+      if (m_member)
+      {
+        return m_member.get();
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+  private:
+    const MemberInfo *m_memberInfo;
+    mutable ScopedPtr<MemberContext> m_member;
+};
+//%% }
+
+MemberInfoContext::MemberInfoContext(const MemberInfo *mi)
+{
+  p = new Private(mi);
+}
+
+MemberInfoContext::~MemberInfoContext()
+{
+  delete p;
+}
+
+TemplateVariant MemberInfoContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+
+//------------------------------------------------------------------------
+
+//%% list AllMembersList[MemberList] : list of inherited classes
+class AllMembersListContext::Private : public GenericNodeListContext<MemberInfoContext>
+{
+  public:
+    Private(const MemberNameInfoSDict *ml)
+    {
+      if (ml)
+      {
+        static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
+        MemberNameInfoSDict::Iterator mnii(*ml);
+        MemberNameInfo *mni;
+        for (mnii.toFirst();(mni=mnii.current());++mnii)
+        {
+          MemberNameInfoIterator mnii2(*mni);
+          MemberInfo *mi;
+          for (mnii2.toFirst();(mi=mnii2.current());++mnii2)
+          {
+            MemberDef *md=mi->memberDef;
+            ClassDef  *cd=md->getClassDef();
+            if (cd && !md->name().isEmpty() && md->name()[0]!='@')
+            {
+              if ((cd->isLinkable() && md->isLinkable()) ||
+                  (!cd->isArtificial() && !hideUndocMembers &&
+                   (protectionLevelVisible(md->protection()) || md->isFriend())
+                  )
+                 )
+              {
+                append(new MemberInfoContext(mi));
+              }
+            }
+          }
+        }
+      }
+    }
+};
+
+AllMembersListContext::AllMembersListContext()
+{
+  p = new Private(0);
+}
+
+AllMembersListContext::AllMembersListContext(const MemberNameInfoSDict *ml)
+{
+  p = new Private(ml);
+}
+
+AllMembersListContext::~AllMembersListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int AllMembersListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant AllMembersListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *AllMembersListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct MemberGroupInfo: member group information
+//%% {
+class MemberGroupInfoContext::Private : public PropertyMapper
+{
+  public:
+    Private(Definition *def,const QCString &relPath,const MemberGroup *mg) :
+      m_def(def),
+      m_relPath(relPath),
+      m_memberListContext(mg->members()),
+      m_memberGroups(def,relPath,0), m_memberGroup(mg)
+    {
+      addProperty("members",      this,&Private::members);
+      addProperty("title",        this,&Private::groupTitle);
+      addProperty("subtitle",     this,&Private::groupSubtitle);
+      addProperty("anchor",       this,&Private::groupAnchor);
+      addProperty("memberGroups", this,&Private::memberGroups);
+      addProperty("docs",         this,&Private::docs);
+      addProperty("inherited",    this,&Private::inherited);
+    }
+    TemplateVariant members() const
+    {
+      return &m_memberListContext;
+    }
+    TemplateVariant groupTitle() const
+    {
+      return m_memberGroup->header();
+    }
+    TemplateVariant groupSubtitle() const
+    {
+      return "";
+    }
+    TemplateVariant groupAnchor() const
+    {
+      return m_memberGroup->anchor();
+    }
+    TemplateVariant memberGroups() const
+    {
+      return &m_memberGroups;
+    }
+    TemplateVariant docs() const
+    {
+      if (!m_docs)
+      {
+        QCString docs = m_memberGroup->documentation();
+        if (!docs.isEmpty())
+        {
+          m_docs.reset(new TemplateVariant(
+                           parseDoc(m_def,"[@name docs]",-1, // TODO store file & line
+                                    m_relPath,
+                                    m_memberGroup->documentation()+"\n",FALSE)));
+        }
+        else
+        {
+          m_docs.reset(new TemplateVariant(""));
+        }
+      }
+      return *m_docs;
+    }
+    TemplateVariant inherited() const
+    {
+      return FALSE;
+    }
+  private:
+    Definition *m_def;
+    QCString m_relPath;
+    MemberListContext m_memberListContext;
+    MemberGroupListContext m_memberGroups;
+    const MemberGroup *m_memberGroup;
+    mutable ScopedPtr<TemplateVariant> m_docs;
+};
+//%% }
+
+MemberGroupInfoContext::MemberGroupInfoContext(Definition *def,
+       const QCString &relPath,const MemberGroup *mg)
+{
+  p = new Private(def,relPath,mg);
+}
+
+MemberGroupInfoContext::~MemberGroupInfoContext()
+{
+  delete p;
+}
+
+TemplateVariant MemberGroupInfoContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list MemberGroupList[MemberGroupInfo] : list of member groups
+class MemberGroupListContext::Private : public GenericNodeListContext<MemberGroupInfoContext>
+{
+  public:
+    void addMemberGroup(Definition *def,const QCString &relPath,const MemberGroup *mg)
+    {
+      append(new MemberGroupInfoContext(def,relPath,mg));
+    }
+};
+
+MemberGroupListContext::MemberGroupListContext()
+{
+  p = new Private;
+}
+
+MemberGroupListContext::MemberGroupListContext(Definition *def,const QCString &relPath,const MemberGroupList *list)
+{
+  p = new Private;
+  if (list)
+  {
+    MemberGroupListIterator mgli(*list);
+    MemberGroup *mg;
+    for (;(mg=mgli.current());++mgli)
+    {
+      p->addMemberGroup(def,relPath,mg);
+    }
+  }
+}
+
+MemberGroupListContext::MemberGroupListContext(Definition *def,const QCString &relPath,const MemberGroupSDict *dict,bool subGrouping)
+{
+  p = new Private;
+  if (dict)
+  {
+    MemberGroupSDict::Iterator di(*dict);
+    const MemberGroup *mg;
+    for (di.toFirst();(mg=di.current());++di)
+    {
+      if (!mg->allMembersInSameSection() || !subGrouping)
+      {
+        p->addMemberGroup(def,relPath,mg);
+      }
+    }
+  }
+}
+
+MemberGroupListContext::~MemberGroupListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int MemberGroupListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant MemberGroupListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *MemberGroupListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+
+//------------------------------------------------------------------------
+
+//%% struct MemberListInfo: member list information
+//%% {
+class MemberListInfoContext::Private : public PropertyMapper
+{
+  public:
+    Private(Definition *def,const QCString &relPath,const MemberList *ml,const QCString &title,const QCString &subtitle) :
+      m_def(def),
+      m_memberListContext(ml),
+      m_memberGroups(def,relPath,ml ? ml->getMemberGroupList() : 0),
+      m_memberList(ml),
+      m_title(title),
+      m_subtitle(subtitle)
+    {
+      addProperty("members",      this,&Private::members);
+      addProperty("title",        this,&Private::title);
+      addProperty("subtitle",     this,&Private::subtitle);
+      addProperty("anchor",       this,&Private::anchor);
+      addProperty("memberGroups", this,&Private::memberGroups);
+      addProperty("inherited",    this,&Private::inherited);
+    }
+    TemplateVariant members() const
+    {
+      return &m_memberListContext;
+    }
+    TemplateVariant title() const
+    {
+      return m_title;
+    }
+    TemplateVariant subtitle() const
+    {
+      return m_subtitle;
+    }
+    TemplateVariant anchor() const
+    {
+      return MemberList::listTypeAsString(m_memberList->listType());
+    }
+    TemplateVariant memberGroups() const
+    {
+      return &m_memberGroups;
+    }
+    TemplateVariant inherited() const
+    {
+      if (!m_inherited && (m_memberList->listType()&MemberListType_detailedLists)==0 &&
+          m_def->definitionType()==Definition::TypeClass)
+      {
+        InheritedMemberInfoListContext *ctx = new InheritedMemberInfoListContext;
+        ctx->addMemberList((ClassDef*)m_def,m_memberList->listType(),m_title,FALSE);
+        m_inherited.reset(ctx);
+      }
+      if (m_inherited)
+      {
+        return m_inherited.get();
+      }
+      else
+      {
+        return TemplateVariant(FALSE);
+      }
+    }
+  private:
+    Definition *m_def;
+    MemberListContext m_memberListContext;
+    MemberGroupListContext m_memberGroups;
+    const MemberList *m_memberList;
+    QCString m_title;
+    QCString m_subtitle;
+    mutable ScopedPtr<InheritedMemberInfoListContext> m_inherited;
+};
+//%% }
+
+MemberListInfoContext::MemberListInfoContext(
+           Definition *def,const QCString &relPath,const MemberList *ml,
+           const QCString &title,const QCString &subtitle)
+{
+  p = new Private(def,relPath,ml,title,subtitle);
+}
+
+MemberListInfoContext::~MemberListInfoContext()
+{
+  delete p;
+}
+
+TemplateVariant MemberListInfoContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% struct InheritedMemberInfo: inherited member information
+//%% {
+class InheritedMemberInfoContext::Private : public PropertyMapper
+{
+  public:
+    Private(ClassDef *cd,MemberList *ml,const QCString &title)
+      : m_class(cd), m_memberList(ml), m_title(title)
+    {
+      addProperty("class",         this,&Private::getClass);
+      addProperty("title",         this,&Private::title);
+      addProperty("members",       this,&Private::members);
+      addProperty("id",            this,&Private::id);
+      addProperty("inheritedFrom", this,&Private::inheritedFrom);
+    }
+    ~Private()
+    {
+      delete m_memberList;
+    }
+    TemplateVariant getClass() const
+    {
+      if (!m_classCtx)
+      {
+        m_classCtx.reset(new ClassContext(m_class));
+      }
+      return m_classCtx.get();
+    }
+    TemplateVariant title() const
+    {
+      return m_title;
+    }
+    TemplateVariant members() const
+    {
+      if (!m_memberListCtx)
+      {
+        m_memberListCtx.reset(new MemberListContext(m_memberList));
+      }
+      return m_memberListCtx.get();
+    }
+    TemplateVariant id() const
+    {
+      return substitute(MemberList::listTypeAsString(m_memberList->listType()),"-","_")+"_"+
+                        stripPath(m_class->getOutputFileBase());
+    }
+    TemplateVariant inheritedFrom() const
+    {
+      if (m_inheritedFrom.count()==0)
+      {
+        m_inheritedFrom.append(title());
+        m_inheritedFrom.append(getClass());
+      }
+      return &m_inheritedFrom;
+    }
+
+  private:
+    ClassDef *  m_class;
+    MemberList *m_memberList;
+    QCString    m_title;
+    mutable ScopedPtr<ClassContext> m_classCtx;
+    mutable ScopedPtr<MemberListContext> m_memberListCtx;
+    mutable TemplateList m_inheritedFrom;
+};
+//%% }
+
+InheritedMemberInfoContext::InheritedMemberInfoContext(ClassDef *cd,MemberList *ml,
+                                                       const QCString &title)
+{
+  p = new Private(cd,ml,title);
+}
+
+InheritedMemberInfoContext::~InheritedMemberInfoContext()
+{
+  delete p;
+}
+
+TemplateVariant InheritedMemberInfoContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list InheritedMemberList[InheritedMemberInfo] : list of inherited classes
+class InheritedMemberInfoListContext::Private : public GenericNodeListContext<InheritedMemberInfoContext>
+{
+  public:
+    void addMemberList(ClassDef *inheritedFrom,MemberList *ml,MemberList *combinedList)
+    {
+      if (ml)
+      {
+        MemberListIterator li(*ml);
+        MemberDef *md;
+        for (li.toFirst();(md=li.current());++li)
+        {
+          if (md->isBriefSectionVisible() && !md->isReimplementedBy(inheritedFrom))
+          {
+            combinedList->append(md);
+          }
+        }
+      }
+    }
+    void addMemberListIncludingGrouped(ClassDef *inheritedFrom,MemberList *ml,MemberList *combinedList)
+    {
+      if (ml)
+      {
+        addMemberList(inheritedFrom,ml,combinedList);
+        if (ml->getMemberGroupList())
+        {
+          MemberGroupListIterator mgli(*ml->getMemberGroupList());
+          MemberGroup *mg;
+          for (mgli.toFirst();(mg=mgli.current());++mgli)
+          {
+            addMemberList(inheritedFrom,mg->members(),combinedList);
+          }
+        }
+      }
+    }
+    void addMemberGroupsOfClass(ClassDef *inheritedFrom,
+                                ClassDef *cd,MemberListType lt,MemberList *combinedList)
+    {
+      if (cd->getMemberGroupSDict())
+      {
+        MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
+        MemberGroup *mg;
+        for (;(mg=mgli.current());++mgli)
+        {
+          if (mg->members() && (!mg->allMembersInSameSection() || !cd->subGrouping())) // group is in its own section
+          {
+            MemberListIterator li(*mg->members());
+            MemberDef *md;
+            for (li.toFirst();(md=li.current());++li)
+            {
+              if (lt==md->getSectionList(mg->parent())->listType() &&
+                  !md->isReimplementedBy(inheritedFrom) &&
+                  md->isBriefSectionVisible())
+              {
+                combinedList->append(md);
+              }
+            }
+          }
+        }
+      }
+    }
+    void addInheritedMembers(ClassDef *inheritedFrom,ClassDef *cd,MemberListType lt,
+                             MemberListType lt1,int lt2,const QCString &title,bool additionalList)
+    {
+      int count = cd->countMembersIncludingGrouped(lt1,inheritedFrom,additionalList);
+      if (lt2!=-1) count += cd->countMembersIncludingGrouped((MemberListType)lt2,inheritedFrom,additionalList);
+      if (count>0)
+      {
+        MemberList *ml  = cd->getMemberList(lt1);
+        MemberList *ml2 = lt2!=-1 ? cd->getMemberList((MemberListType)lt2) : 0;
+        MemberList *combinedList = new MemberList(lt);
+        addMemberListIncludingGrouped(inheritedFrom,ml,combinedList);
+        addMemberListIncludingGrouped(inheritedFrom,ml2,combinedList);
+        addMemberGroupsOfClass(inheritedFrom,cd,lt,combinedList);
+        if (lt2!=-1) addMemberGroupsOfClass(inheritedFrom,cd,(MemberListType)lt2,combinedList);
+        append(new InheritedMemberInfoContext(cd,combinedList,title));
+      }
+    }
+    void findInheritedMembers(ClassDef *inheritedFrom,ClassDef *cd,MemberListType lt,
+                              int lt2, const QCString &title,bool additionalList,
+                              QPtrDict<void> *visitedClasses)
+    {
+      if (cd->baseClasses())
+      {
+        BaseClassListIterator it(*cd->baseClasses());
+        BaseClassDef *ibcd;
+        for (it.toFirst();(ibcd=it.current());++it)
+        {
+          ClassDef *icd=ibcd->classDef;
+          if (icd->isLinkable())
+          {
+            int lt1,lt3;
+            convertProtectionLevel(lt,ibcd->prot,&lt1,&lt3);
+            if (lt2==-1 && lt3!=-1)
+            {
+              lt2=lt3;
+            }
+            if (visitedClasses->find(icd)==0)
+            {
+              visitedClasses->insert(icd,icd); // guard for multiple virtual inheritance
+              if (lt1!=-1)
+              {
+                // add member info for members of cd with list type lt
+                addInheritedMembers(inheritedFrom,icd,lt,(MemberListType)lt1,lt2,title,additionalList);
+                // recurse down the inheritance tree
+                findInheritedMembers(inheritedFrom,icd,(MemberListType)lt1,lt2,title,additionalList,visitedClasses);
+              }
+            }
+          }
+        }
+      }
+    }
+};
+
+InheritedMemberInfoListContext::InheritedMemberInfoListContext()
+{
+  p = new Private;
+}
+
+void InheritedMemberInfoListContext::addMemberList(
+    ClassDef *cd,MemberListType lt,const QCString &title,bool additionalList)
+{
+  QPtrDict<void> visited(17);
+  bool memberInSection = cd->countMembersIncludingGrouped(lt,cd,FALSE);
+  bool show = (additionalList && !memberInSection) || // inherited member to show in the additional inherited members list
+              (!additionalList && memberInSection);   // inherited member to show in a member list of the class
+  //printf("%s:%s show=%d\n",cd->name().data(),MemberList::listTypeAsString(lt).data(),show);
+  if (show)
+  {
+    p->findInheritedMembers(cd,cd,lt,-1,title,additionalList,&visited);
+  }
+}
+
+InheritedMemberInfoListContext::~InheritedMemberInfoListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int InheritedMemberInfoListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant InheritedMemberInfoListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *InheritedMemberInfoListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+//%% struct Argument: parameter information
+//%% {
+class ArgumentContext::Private : public PropertyMapper
+{
+  public:
+    Private(const Argument *arg,Definition *def,const QCString &relPath) :
+      m_argument(arg), m_def(def), m_relPath(relPath)
+    {
+      addProperty("type",     this,&Private::type);
+      addProperty("name",     this,&Private::name);
+      addProperty("defVal",   this,&Private::defVal);
+      addProperty("docs",     this,&Private::docs);
+      addProperty("attrib",   this,&Private::attrib);
+      addProperty("array",    this,&Private::array);
+      addProperty("namePart", this,&Private::namePart);
+    }
+    TemplateVariant type() const
+    {
+      return createLinkedText(m_def,m_relPath,m_argument->type);
+    }
+    TemplateVariant attrib() const
+    {
+      return m_argument->attrib;
+    }
+    TemplateVariant name() const
+    {
+      return m_argument->name;
+    }
+    TemplateVariant defVal() const
+    {
+      return createLinkedText(m_def,m_relPath,m_argument->defval);
+    }
+    TemplateVariant array() const
+    {
+      return m_argument->array;
+    }
+    TemplateVariant docs() const
+    {
+      if (!m_cache.docs && m_def)
+      {
+        if (!m_argument->docs.isEmpty())
+        {
+          m_cache.docs.reset(new TemplateVariant(
+                             parseDoc(m_def,m_def->docFile(),m_def->docLine(),
+                             m_relPath,m_argument->docs,TRUE)));
+        }
+        else
+        {
+          m_cache.docs.reset(new TemplateVariant(""));
+        }
+      }
+      return *m_cache.docs;
+    }
+    TemplateVariant namePart() const
+    {
+      QCString result = m_argument->attrib;
+      int l = result.length();
+      if (l>2 && result.at(0)=='[' && result.at(l-1)==']')
+      {
+        result = result.mid(1,l-2);
+        if (result!=",") result+=":"; // for normal keywords add colon
+      }
+      return result;
+    }
+  private:
+    const Argument *m_argument;
+    Definition *m_def;
+    QCString m_relPath;
+    struct Cachable
+    {
+      ScopedPtr<TemplateVariant> docs;
+    };
+    mutable Cachable m_cache;
+};
+//%% }
+
+ArgumentContext::ArgumentContext(const Argument *al,Definition *def,const QCString &relPath)
+{
+  p = new Private(al,def,relPath);
+}
+
+ArgumentContext::~ArgumentContext()
+{
+  delete p;
+}
+
+TemplateVariant ArgumentContext::get(const char *name) const
+{
+  return p->get(name);
+}
+
+//------------------------------------------------------------------------
+
+//%% list ArgumentList[Argument] : list of inherited classes
+class ArgumentListContext::Private : public GenericNodeListContext<ArgumentContext>
+{
+  public:
+    void addArgument(const Argument *arg,Definition *def,const QCString &relPath)
+    {
+      append(new ArgumentContext(arg,def,relPath));
+    }
+};
+
+ArgumentListContext::ArgumentListContext()
+{
+  p = new Private;
+}
+
+ArgumentListContext::ArgumentListContext(const ArgumentList *list,
+                        Definition *def,const QCString &relPath)
+{
+  p = new Private;
+  if (list)
+  {
+    ArgumentListIterator ali(*list);
+    const Argument *arg;
+    for (ali.toFirst();(arg=ali.current());++ali)
+    {
+      p->addArgument(arg,def,relPath);
+    }
+  }
+}
+
+ArgumentListContext::~ArgumentListContext()
+{
+  delete p;
+}
+
+// TemplateListIntf
+int ArgumentListContext::count() const
+{
+  return p->count();
+}
+
+TemplateVariant ArgumentListContext::at(int index) const
+{
+  return p->at(index);
+}
+
+TemplateListIntf::ConstIterator *ArgumentListContext::createIterator() const
+{
+  return p->createIterator();
+}
+
+//------------------------------------------------------------------------
+
+class HtmlEscaper : public TemplateEscapeIntf
+{
+  public:
+    QCString escape(const QCString &s)
+    {
+      return convertToHtml(s,TRUE);
+    }
+};
+
+//------------------------------------------------------------------------
+
+class HtmlSpaceless : public TemplateSpacelessIntf
+{
+  public:
+    HtmlSpaceless() : m_insideTag(FALSE), m_insideString('\0'), m_removeSpaces(TRUE) {}
+    QCString remove(const QCString &s)
+    {
+      QGString result;
+      const char *p = s.data();
+      char c;
+      while ((c=*p++))
+      {
+        switch(c)
+        {
+          case '<': // start of a tag
+            if (!m_insideString) m_insideTag=TRUE,m_removeSpaces=FALSE;
+            result+=c;
+            break;
+          case '>': // end of a tag
+            if (!m_insideString) m_insideTag=FALSE,m_removeSpaces=TRUE;
+            result+=c;
+            break;
+          case '\\': // escaped character in a string
+            result+=c;
+            if (m_insideString && *p) result+=*p++;
+            break;
+          case '"': case '\'':
+            if (m_insideTag)
+            {
+              if (m_insideString==c) // end of string
+              {
+                m_insideString='\0';
+              }
+              else // start of string
+              {
+                m_insideString=c;
+              }
+            }
+            result+=c;
+            break;
+          case ' ': case '\t': case '\n': // whitespace
+            if (!m_insideTag) // outside tags strip consecutive whitespace
+            {
+              m_removeSpaces=TRUE;
+            }
+            else
+            {
+              result+=' ';
+            }
+            break;
+          default:
+            //if (m_removeSpaces) result+=' ';
+            result+=c;
+            m_removeSpaces=FALSE;
+            break;
+        }
+      }
+      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);
+      return result.data();
+    }
+  private:
+    bool m_insideTag;
+    char m_insideString;
+    bool m_removeSpaces;
+};
+
+//------------------------------------------------------------------------
+
+void generateOutputViaTemplate()
+{
+  TemplateEngine e;
+  TemplateContext *ctx = e.createContext();
+  if (ctx)
+  {
+    DoxygenContext        doxygen;
+    ConfigContext         config;
+    TranslateContext      tr;
+    ClassListContext      classList;
+    ClassTreeContext      classTree;
+    ClassHierarchyContext classHierarchy;
+    NamespaceListContext  namespaceList;
+    NamespaceTreeContext  namespaceTree;
+    FileListContext       fileList;
+    FileTreeContext       fileTree;
+    PageTreeContext       pageTree;
+    PageListContext       pageList;
+    ModuleTreeContext     moduleTree;
+    ExampleListContext    exampleList;
+
+    //%% Doxygen doxygen:
+    ctx->set("doxygen",&doxygen);
+    //%% Translator tr:
+    ctx->set("tr",&tr);
+    //%% Config config:
+    ctx->set("config",&config);
+    //%% ClassList classList:
+    ctx->set("classList",&classList); // not used for standard HTML
+    //%% ClassTree classTree:
+    ctx->set("classTree",&classTree);
+    // classIndex
+    //%% ClassHierarchy classHierarchy:
+    ctx->set("classHierarchy",&classHierarchy);
+    //%% NamespaceList namespaceList:
+    ctx->set("namespaceList",&namespaceList);
+    //%% NamespaceTree namespaceTree:
+    ctx->set("namespaceTree",&namespaceTree);
+    //%% FileList fileList:
+    ctx->set("fileList",&fileList);
+    //%% FileTree fileTree:
+    ctx->set("fileTree",&fileTree);
+    //%% PageList pageList
+    ctx->set("pageList",&pageList);
+    //%% PageTree pageTree
+    ctx->set("pageTree",&pageTree);
+    //%% ModuleTree moduleTree
+    ctx->set("moduleTree",&moduleTree);
+    //%% ExampleList exampleList
+    ctx->set("exampleList",&exampleList);
+
+    // render HTML output
+    Template *tpl = e.loadByName("htmllayout.tpl");
+    if (tpl)
+    {
+      g_globals.outputFormat = ContextGlobals::Html;
+      g_globals.dynSectionId    = 0;
+      g_globals.outputDir    = Config_getString("HTML_OUTPUT");
+      HtmlEscaper esc;
+      ctx->setEscapeIntf(&esc);
+      HtmlSpaceless spl;
+      ctx->setSpacelessIntf(&spl);
+      ctx->setOutputDirectory(g_globals.outputDir);
+      FTextStream ts;
+      tpl->render(ts,ctx);
+    }
+
+    // TODO: render other outputs
+  }
+}
+
diff --git a/src/context.h b/src/context.h
new file mode 100644 (file)
index 0000000..f027749
--- /dev/null
@@ -0,0 +1,852 @@
+#ifndef CONTEXT_H
+#define CONTEXT_H
+
+#include "types.h"
+#include "template.h"
+
+class Definition;
+class ClassDef;
+class ClassSDict;
+class BaseClassList;
+class PageDef;
+class GroupDef;
+class NamespaceDef;
+class BaseClassList;
+class NamespaceSDict;
+class FileDef;
+class FileList;
+class FileNameList;
+class DirSDict;
+class DirList;
+class DirDef;
+class PageSDict;
+class GroupSDict;
+class GroupDef;
+class GroupList;
+struct IncludeInfo;
+class MemberList;
+class MemberSDict;
+class MemberDef;
+struct Argument;
+class ArgumentList;
+class MemberNameInfoSDict;
+struct MemberInfo;
+class MemberGroup;
+class MemberGroupSDict;
+class MemberGroupList;
+
+//----------------------------------------------------
+
+class ConfigContext : public TemplateStructIntf
+{
+  public:
+    ConfigContext();
+   ~ConfigContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class DoxygenContext : public TemplateStructIntf
+{
+  public:
+    DoxygenContext();
+   ~DoxygenContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class TranslateContext : public TemplateStructIntf
+{
+  public:
+    TranslateContext();
+   ~TranslateContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class UsedFilesContext : public TemplateListIntf
+{
+  public:
+    UsedFilesContext(ClassDef *cd);
+   ~UsedFilesContext();
+
+    // TemplateListIntf
+    virtual int count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void addFile(FileDef *fd);
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class IncludeInfoContext : public TemplateStructIntf
+{
+  public:
+    IncludeInfoContext(IncludeInfo *,SrcLangExt lang);
+   ~IncludeInfoContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassContext : public TemplateStructIntf
+{
+  public:
+    ClassContext(ClassDef *);
+   ~ClassContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NamespaceContext : public TemplateStructIntf
+{
+  public:
+    NamespaceContext(NamespaceDef *);
+   ~NamespaceContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class FileContext : public TemplateStructIntf
+{
+  public:
+    FileContext(FileDef *);
+   ~FileContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+//----------------------------------------------------
+
+class DirContext : public TemplateStructIntf
+{
+  public:
+    DirContext(DirDef *);
+   ~DirContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+
+//----------------------------------------------------
+
+class PageContext : public TemplateStructIntf
+{
+  public:
+    PageContext(PageDef *);
+   ~PageContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class MemberContext : public TemplateStructIntf
+{
+  public:
+    MemberContext(MemberDef *);
+   ~MemberContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+
+//----------------------------------------------------
+
+class ModuleContext : public TemplateStructIntf
+{
+  public:
+    ModuleContext(GroupDef *);
+   ~ModuleContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NestedClassListContext : public TemplateListIntf
+{
+  public:
+    NestedClassListContext();
+   ~NestedClassListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void append(ClassDef *cd);
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassListContext : public TemplateListIntf
+{
+  public:
+    ClassListContext();
+   ~ClassListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassInheritanceNodeContext : public TemplateStructIntf
+{
+  public:
+    ClassInheritanceNodeContext(ClassDef *);
+   ~ClassInheritanceNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+    void addChildren(const BaseClassList *bcl,bool hideSuper);
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassInheritanceContext : public TemplateListIntf
+{
+  public:
+    ClassInheritanceContext();
+   ~ClassInheritanceContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassHierarchyContext : public TemplateStructIntf
+{
+  public:
+    ClassHierarchyContext();
+   ~ClassHierarchyContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NestingNodeContext : public TemplateStructIntf
+{
+  public:
+    NestingNodeContext(Definition *,bool addClasses);
+   ~NestingNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NestingContext : public TemplateListIntf
+{
+  public:
+    NestingContext();
+   ~NestingContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void addNamespaces(const NamespaceSDict &nsDict,bool rootOnly,bool addClasses);
+    void addClasses(const ClassSDict &clDict,bool rootOnly);
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ClassTreeContext : public TemplateStructIntf
+{
+  public:
+    ClassTreeContext();
+   ~ClassTreeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NamespaceListContext : public TemplateListIntf
+{
+  public:
+    NamespaceListContext();
+   ~NamespaceListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NamespaceTreeContext : public TemplateStructIntf
+{
+  public:
+    NamespaceTreeContext();
+   ~NamespaceTreeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class DirFileNodeContext : public TemplateStructIntf
+{
+  public:
+    DirFileNodeContext(Definition *);
+   ~DirFileNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class DirFileContext : public TemplateListIntf
+{
+  public:
+    DirFileContext();
+   ~DirFileContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void addDirs(const DirSDict &);
+    void addDirs(const DirList &);
+    void addFiles(const FileNameList &);
+    void addFiles(const FileList &);
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class FileListContext : public TemplateListIntf
+{
+  public:
+    FileListContext();
+   ~FileListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class FileTreeContext : public TemplateStructIntf
+{
+  public:
+    FileTreeContext();
+   ~FileTreeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class PageNodeContext : public TemplateStructIntf
+{
+  public:
+    PageNodeContext(PageDef *);
+   ~PageNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class PageNodeListContext : public TemplateListIntf
+{
+  public:
+    PageNodeListContext();
+   ~PageNodeListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void addPages(const PageSDict &,bool rootOnly);
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class PageListContext : public TemplateStructIntf
+{
+  public:
+    PageListContext();
+   ~PageListContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class PageTreeContext : public TemplateStructIntf
+{
+  public:
+    PageTreeContext();
+   ~PageTreeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ModuleNodeContext : public TemplateStructIntf
+{
+  public:
+    ModuleNodeContext(GroupDef *);
+   ~ModuleNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ModuleListContext : public TemplateListIntf
+{
+  public:
+    ModuleListContext();
+   ~ModuleListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+    void addModules(const GroupSDict &);
+    void addModules(const GroupList &);
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ModuleTreeContext : public TemplateStructIntf
+{
+  public:
+    ModuleTreeContext();
+   ~ModuleTreeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ExampleListContext : public TemplateStructIntf
+{
+  public:
+    ExampleListContext();
+   ~ExampleListContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class NavPathElemContext : public TemplateStructIntf
+{
+  public:
+    NavPathElemContext(Definition *def);
+   ~NavPathElemContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+
+//----------------------------------------------------
+
+class InheritanceNodeContext : public TemplateStructIntf
+{
+  public:
+    InheritanceNodeContext(ClassDef *cd,const QCString &name);
+   ~InheritanceNodeContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class InheritanceListContext : public TemplateListIntf
+{
+  public:
+    InheritanceListContext(const BaseClassList *list,bool baseClasses);
+   ~InheritanceListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class MemberListContext : public TemplateListIntf
+{
+  public:
+    MemberListContext();
+    MemberListContext(const MemberList *ml);
+    MemberListContext(MemberSDict *ml,bool doSort);
+   ~MemberListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class MemberGroupInfoContext : public TemplateStructIntf
+{
+  public:
+    MemberGroupInfoContext(Definition *def,const QCString &relPath,const MemberGroup *mg);
+   ~MemberGroupInfoContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class MemberGroupListContext : public TemplateListIntf
+{
+  public:
+    MemberGroupListContext();
+    MemberGroupListContext(Definition *def,const QCString &relPath,const MemberGroupList *list);
+    MemberGroupListContext(Definition *def,const QCString &relPath,const MemberGroupSDict *mgDict,bool subGrouping);
+   ~MemberGroupListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+
+//----------------------------------------------------
+
+class MemberListInfoContext : public TemplateStructIntf
+{
+  public:
+    MemberListInfoContext(Definition *def,const QCString &relPath,
+                          const MemberList *ml,const QCString &title,
+                          const QCString &subtitle=QCString());
+   ~MemberListInfoContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class MemberInfoContext : public TemplateStructIntf
+{
+  public:
+    MemberInfoContext(const MemberInfo *mi);
+   ~MemberInfoContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class InheritedMemberInfoContext : public TemplateStructIntf
+{
+  public:
+    InheritedMemberInfoContext(ClassDef *cd,MemberList *ml,const QCString &title);
+   ~InheritedMemberInfoContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class InheritedMemberInfoListContext : public TemplateListIntf
+{
+  public:
+    InheritedMemberInfoListContext();
+    void addMemberList(ClassDef *cd,MemberListType lt,const QCString &title,bool additionalList=TRUE);
+   ~InheritedMemberInfoListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class AllMembersListContext : public TemplateListIntf
+{
+  public:
+    AllMembersListContext();
+    AllMembersListContext(const MemberNameInfoSDict *ml);
+   ~AllMembersListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ArgumentContext : public TemplateStructIntf
+{
+  public:
+    ArgumentContext(const Argument *arg,Definition *def,const QCString &relPath);
+   ~ArgumentContext();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+class ArgumentListContext : public TemplateListIntf
+{
+  public:
+    ArgumentListContext();
+    ArgumentListContext(const ArgumentList *al,Definition *def,const QCString &relPath);
+   ~ArgumentListContext();
+
+    // TemplateListIntf
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//----------------------------------------------------
+
+void generateOutputViaTemplate();
+
+#endif
index 12168dd..8b8df0d 100644 (file)
@@ -870,7 +870,8 @@ void DBusXMLScanner::parseCode(CodeOutputInterface & /* codeOutIntf */,
                                bool /* inlineFragment */,
                                MemberDef * /* memberDef */,
                                bool /*showLineNumbers*/,
-                               Definition * /* searchCtx */)
+                               Definition * /* searchCtx */,
+                               bool /*collectXRefs*/ )
 { }
 
 void DBusXMLScanner::resetCodeParserState()
index 64ba1a7..e1504e9 100644 (file)
@@ -51,7 +51,8 @@ public:
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
 
     void resetCodeParserState();
index c962214..a5000ff 100644 (file)
@@ -21,6 +21,7 @@
 #include <qdict.h>
 
 #include "debug.h"
+#include "message.h"
 
 //------------------------------------------------------------------------
 
@@ -46,6 +47,7 @@ static LabelMap s_labels[] =
   { "extcmd",       Debug::ExtCmd       },
   { "markdown",     Debug::Markdown     },
   { "filteroutput", Debug::FilterOutput },
+  { "lex",          Debug::Lex },
   { 0,             (Debug::DebugMask)0  }
 };
 
@@ -97,9 +99,11 @@ static int labelToEnumValue(const char *l)
   if (event) return *event; else return 0;
 }
 
-void Debug::setFlag(const char *lab)
+int Debug::setFlag(const char *lab)
 {
+  int retVal = labelToEnumValue(lab);
   curMask = (DebugMask)(curMask | labelToEnumValue(lab));   
+  return retVal;
 }
 
 void Debug::clearFlag(const char *lab)
@@ -117,3 +121,14 @@ bool Debug::isFlagSet(DebugMask mask)
   return (curMask & mask)!=0;
 }
 
+void Debug::printFlags(void)
+{
+  int i;
+  for (i = 0; i < (int)(sizeof(s_labels)/sizeof(*s_labels)); i++)
+  {
+     if (s_labels[i].name)
+     {
+        msg("\t%s\n",s_labels[i].name);
+     }
+  }
+}
index bcac588..e1affab 100644 (file)
@@ -36,12 +36,14 @@ class Debug
                      Time         = 0x00000200,
                      ExtCmd       = 0x00000400,
                      Markdown     = 0x00000800,
-                     FilterOutput = 0x00001000
+                     FilterOutput = 0x00001000,
+                     Lex          = 0x00002000
                    };
     static void print(DebugMask mask,int prio,const char *fmt,...);
-    static void setFlag(const char *label);
+    static int  setFlag(const char *label);
     static void clearFlag(const char *label);
     static bool isFlagSet(DebugMask mask);
+    static void printFlags(void);
     static void setPriority(int p);
     
   private:
index 3e4ad4a..58ecb05 100644 (file)
@@ -231,6 +231,7 @@ ID  "$"?([a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*)|(@[0-9]+)
 void parseFuncDecl(const QCString &decl,bool objC,QCString &cl,QCString &t,
                    QCString &n,QCString &a,QCString &ftl,QCString &exc)
 {
+  printlex(yy_flex_debug, TRUE, __FILE__, NULL);
   inputString   = decl;
   //printf("Input=`%s'\n",inputString);
   if (inputString==0) return;
@@ -307,6 +308,7 @@ void parseFuncDecl(const QCString &decl,bool objC,QCString &cl,QCString &t,
   //printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
   //        t.data(),cl.data(),n.data(),a.data());
 
+  printlex(yy_flex_debug, FALSE, __FILE__, NULL);
   return;
   
   
index fa945f6..5f64b66 100644 (file)
@@ -55,6 +55,7 @@
 #include "entry.h"
 #include "util.h"
 #include "arguments.h"
+#include "message.h"
   
 #define YY_NEVER_INTERACTIVE 1
 #define YY_NO_INPUT 1
@@ -212,6 +213,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
                                          else // yytext=='<'
                                          {
                                            g_argSharpCount=0; 
+                                           g_argRoundCount=0; 
                                            BEGIN( CopyArgSharp ); 
                                          }
                                        }
@@ -239,6 +241,26 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
                                          if (g_argRoundCount>0) g_argRoundCount--;
                                          else BEGIN( g_readArgContext );
                                         }
+<CopyArgSharp>"<<"                      {
+                                          if (g_argRoundCount>0)
+                                          {
+                                           *g_copyArgValue += yytext;
+                                          }
+                                          else
+                                          {
+                                            REJECT;
+                                          }
+                                        }
+<CopyArgSharp>">>"                      {
+                                          if (g_argRoundCount>0)
+                                          {
+                                           *g_copyArgValue += yytext;
+                                          }
+                                          else
+                                          {
+                                            REJECT;
+                                          }
+                                        }
 <CopyArgSharp>"<"                      {
                                          g_argSharpCount++;
                                          *g_copyArgValue += *yytext;
@@ -248,6 +270,14 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
                                          if (g_argSharpCount>0) g_argSharpCount--;
                                          else BEGIN( g_readArgContext );
                                        }
+<CopyArgSharp>"("                       {
+                                          g_argRoundCount++;
+                                         *g_copyArgValue += *yytext;
+                                        }
+<CopyArgSharp>")"                       {
+                                          g_argRoundCount--;
+                                         *g_copyArgValue += *yytext;
+                                        }
 <CopyArgCurly>"{"                      {
                                          g_argCurlyCount++;
                                          *g_copyArgValue += *yytext;
@@ -498,6 +528,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extr
 {
   if (al==0) return; 
   if (argsString==0) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, NULL);
 
   g_copyArgValue=0;
   g_curArgDocs.resize(0);
@@ -520,6 +551,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extr
   defargsYYlex();
   if (extraTypeChars) *extraTypeChars=g_extraTypeChars;
   //printf("stringToArgumentList(%s) result=%s\n",argsString,argListToString(al).data());
+  printlex(yy_flex_debug, FALSE, __FILE__, NULL);
 }
 
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
index b259088..46147fc 100644 (file)
@@ -959,7 +959,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
         {
           ol.disable(OutputGenerator::Latex);
         }
-        // write line link (HTML, LaTeX optionally)
+        // write file link (HTML, LaTeX optionally)
         ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
@@ -1050,6 +1050,13 @@ void Definition::setBodyDef(FileDef *fd)
   m_impl->body->fileDef=fd; 
 }
 
+bool Definition::hasSources() const
+{
+  return m_impl->body && m_impl->body->startLine!=-1 &&
+         m_impl->body->endLine>=m_impl->body->startLine &&
+         m_impl->body->fileDef;
+}
+
 /*! Write code of this definition into the documentation */
 void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
 {
@@ -1057,9 +1064,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
   ol.pushGeneratorState();
   //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
   //        m_startBodyLine,m_endBodyLine,m_bodyDef);
-  if (inlineSources && 
-      m_impl->body && m_impl->body->startLine!=-1 && 
-      m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef)
+  if (inlineSources && hasSources())
   {
     QCString codeFragment;
     int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine;
@@ -1815,7 +1820,7 @@ int Definition::getEndBodyLine() const
   return m_impl->body ? m_impl->body->endLine : -1; 
 }
 
-FileDef *Definition::getBodyDef()                
+FileDef *Definition::getBodyDef() const
 { 
   return m_impl->body ? m_impl->body->fileDef : 0; 
 }
@@ -1876,4 +1881,10 @@ void Definition::_setSymbolName(const QCString &name)
   m_symbolName=name; 
 }
 
+bool Definition::hasBriefDescription() const
+{
+  static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC");
+  return !briefDescription().isEmpty() && briefMemberDesc;
+}
+
 
index 6b6e1d7..f444cc5 100644 (file)
@@ -137,18 +137,18 @@ class Definition : public DefinitionIntf
     virtual QCString getSourceAnchor() const;
 
     /*! Returns the detailed description of this definition */
-    QCString documentation() const;
-    
+    virtual QCString documentation() const;
+
     /*! Returns the line number at which the detailed documentation was found. */
     int docLine() const;
 
-    /*! Returns the file in which the detailed documentation block was found. 
+    /*! Returns the file in which the detailed documentation block was found.
      *  This can differ from getDefFileName().
      */
     QCString docFile() const;
 
     /*! Returns the brief description of this definition. This can include commands. */
-    QCString briefDescription(bool abbreviate=FALSE) const;
+    virtual QCString briefDescription(bool abbreviate=FALSE) const;
 
     /*! Returns a plain text version of the brief description suitable for use
      *  as a tool tip. 
@@ -243,7 +243,7 @@ class Definition : public DefinitionIntf
     /*! Returns the file in which the body of this item is located or 0 if no
      *  body is available.
      */
-    FileDef *getBodyDef();
+    FileDef *getBodyDef() const;
 
     /** Returns the programming language this definition was written in. */
     SrcLangExt getLanguage() const;
@@ -259,6 +259,10 @@ class Definition : public DefinitionIntf
     MemberSDict *getReferencedByMembers() const;
 
     bool hasSections() const;
+    bool hasSources() const;
+
+    /** returns TRUE if this class has a brief description */
+    bool hasBriefDescription() const;
 
     QCString id() const;
 
diff --git a/src/dia.cpp b/src/dia.cpp
new file mode 100644 (file)
index 0000000..1032564
--- /dev/null
@@ -0,0 +1,88 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * 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 
+ * 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 "dia.h"
+#include "portable.h"
+#include "config.h"
+#include "message.h"
+#include "util.h"
+
+#include <qdir.h>
+
+static const int maxCmdLine = 40960;
+
+void writeDiaGraphFromFile(const char *inFile,const char *outDir,
+                           const char *outFile,DiaOutputFormat format)
+{
+  QCString absOutFile = outDir;
+  absOutFile+=portable_pathSeparator();
+  absOutFile+=outFile;
+
+  // chdir to the output dir, so dot can find the font file.
+  QCString oldDir = QDir::currentDirPath().utf8();
+  // go to the html output directory (i.e. path)
+  QDir::setCurrent(outDir);
+  //printf("Going to dir %s\n",QDir::currentDirPath().data());
+  QCString diaExe = Config_getString("DIA_PATH")+"dia"+portable_commandExtension();
+  QCString diaArgs;
+  QCString extension;
+  diaArgs+="-n ";
+  if (format==DIA_BITMAP)
+  {
+    diaArgs+="-t png-libart";
+    extension=".png";
+  }
+  else if (format==DIA_EPS)
+  {
+    diaArgs+="-t eps";
+    extension=".eps";
+  }
+
+  diaArgs+=" -e \"";
+  diaArgs+=outFile;
+  diaArgs+=extension+"\"";
+
+  diaArgs+=" \"";
+  diaArgs+=inFile;
+  diaArgs+="\"";
+
+  int exitCode;
+  //printf("*** running: %s %s outDir:%s %s\n",diaExe.data(),diaArgs.data(),outDir,outFile);
+  portable_sysTimerStart();
+  if ((exitCode=portable_system(diaExe,diaArgs,FALSE))!=0)
+  {
+    portable_sysTimerStop();
+    goto error;
+  }
+  portable_sysTimerStop();
+  if ( (format==DIA_EPS) && (Config_getBool("USE_PDFLATEX")) )
+  {
+    QCString epstopdfArgs(maxCmdLine);
+    epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
+                         outFile,outFile);
+    portable_sysTimerStart();
+    if (portable_system("epstopdf",epstopdfArgs)!=0)
+    {
+      err("Problems running epstopdf. Check your TeX installation!\n");
+    }
+    portable_sysTimerStop();
+  }
+
+error:
+  QDir::setCurrent(oldDir);
+}
+
diff --git a/src/dia.h b/src/dia.h
new file mode 100644 (file)
index 0000000..01d5962
--- /dev/null
+++ b/src/dia.h
@@ -0,0 +1,30 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * 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 
+ * 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 _DIA_H
+#define _DIA_H
+
+class QCString;
+class FTextStream;
+
+enum DiaOutputFormat { DIA_BITMAP , DIA_EPS };
+
+void writeDiaGraphFromFile(const char *inFile,const char *outDir,
+                           const char *outFile,DiaOutputFormat format);
+
+#endif
+
index fe6e47d..5df047a 100644 (file)
@@ -329,12 +329,16 @@ void DirDef::endMemberDeclarations(OutputList &ol)
   ol.endMemberSections();
 }
 
+QCString DirDef::shortTitle() const
+{
+  return theTranslator->trDirReference(m_shortName);
+}
+
 void DirDef::writeDocumentation(OutputList &ol)
 {
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   ol.pushGeneratorState();
   
-  QCString shortTitle=theTranslator->trDirReference(m_shortName);
   QCString title=theTranslator->trDirReference(m_dispName);
   startFile(ol,getOutputFileBase(),name(),title,HLI_None,!generateTreeView);
 
@@ -348,7 +352,7 @@ void DirDef::writeDocumentation(OutputList &ol)
   startTitle(ol,getOutputFileBase());
   ol.pushGeneratorState();
     ol.disableAllBut(OutputGenerator::Html);
-    ol.parseText(shortTitle);
+    ol.parseText(shortTitle());
     ol.enableAll();
     ol.disable(OutputGenerator::Html);
     ol.parseText(title);
index 99e2137..8b11b2e 100644 (file)
@@ -66,6 +66,7 @@ class DirDef : public Definition
     const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
     bool isParentOf(DirDef *dir) const;
     bool depGraphIsTrivial() const;
+    QCString shortTitle() const;
 
     // generate output
     void writeDocumentation(OutputList &ol);
index df922b3..47d3b98 100644 (file)
 //------------------
 
 static const char index_xsd[] =
-#include "index_xsd.h"
+#include "index.xsd.h"
 ;
 
 //------------------
 //
 static const char compound_xsd[] =
-#include "compound_xsd.h"
+#include "compound.xsd.h"
 ;
 
 //------------------
@@ -191,8 +191,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
 {
   public:
     DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
-    m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE),
-    m_insideSpecialHL(FALSE) {}
+    m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) {}
     virtual ~DocbookCodeGenerator() {}
 
     void codify(const char *text)
@@ -291,7 +290,6 @@ class DocbookCodeGenerator : public CodeOutputInterface
     bool m_isMemberRef;
     int col;
     bool m_insideCodeLine;
-    bool m_normalHLNeedStartTag;
     bool m_insideSpecialHL;
 };
 
index ad5965d..aaea045 100644 (file)
@@ -32,6 +32,7 @@
 #include "config.h"
 #include "filedef.h"
 #include "msc.h"
+#include "dia.h"
 
 DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
   : DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
@@ -1007,6 +1008,18 @@ void DocbookDocVisitor::visitPost(DocMscFile *df)
   if (m_hide) return;
   endMscFile(df->hasCaption());
 }
+void DocbookDocVisitor::visitPre(DocDiaFile *df)
+{
+  if (m_hide) return;
+  startDiaFile(df->file(),df->width(),df->height(),df->hasCaption());
+}
+
+void DocbookDocVisitor::visitPost(DocDiaFile *df)
+{
+  if (m_hide) return;
+  endDiaFile(df->hasCaption());
+}
+
 void DocbookDocVisitor::visitPre(DocLink *lnk)
 {
   if (m_hide) return;
@@ -1147,6 +1160,7 @@ void DocbookDocVisitor::visitPost(DocParamList *)
 void DocbookDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "<para><link linkend=\"";
   m_t << x->file() << "_1" << x->anchor();
   m_t << "\">";
@@ -1155,9 +1169,10 @@ void DocbookDocVisitor::visitPre(DocXRefItem *x)
   m_t << " ";
 }
 
-void DocbookDocVisitor::visitPost(DocXRefItem *)
+void DocbookDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "</para>";
 }
 
@@ -1223,6 +1238,15 @@ void DocbookDocVisitor::visitPost(DocVhdlFlow *)
   // TODO: to be implemented
 }
 
+void DocbookDocVisitor::visitPre(DocParBlock *)
+{
+}
+
+void DocbookDocVisitor::visitPost(DocParBlock *)
+{
+}
+
+
 void DocbookDocVisitor::filter(const char *str)
 {
   m_t << convertToXML(str);
@@ -1327,6 +1351,80 @@ void DocbookDocVisitor::endMscFile(bool hasCaption)
   m_t << "</para>" << endl;
 }
 
+void DocbookDocVisitor::writeDiaFile(const QCString &baseName)
+{
+  QCString shortName = baseName;
+  int i;
+  if ((i=shortName.findRev('/'))!=-1)
+  {
+    shortName=shortName.right(shortName.length()-i-1);
+  }
+  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;
+}
+
+void DocbookDocVisitor::startDiaFile(const QCString &fileName,
+    const QCString &width,
+    const QCString &height,
+    bool hasCaption
+    )
+{
+  QCString baseName=fileName;
+  int i;
+  if ((i=baseName.findRev('/'))!=-1)
+  {
+    baseName=baseName.right(baseName.length()-i-1);
+  }
+  if ((i=baseName.find('.'))!=-1)
+  {
+    baseName=baseName.left(i);
+  }
+  baseName.prepend("msc_");
+  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;
+  }
+}
+
+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;
+  m_t << "</para>" << endl;
+}
+
 void DocbookDocVisitor::writeDotFile(const QCString &baseName)
 {
   QCString shortName = baseName;
index c79301d..a03e04a 100644 (file)
@@ -103,6 +103,8 @@ class DocbookDocVisitor : public DocVisitor
     void visitPost(DocDotFile *);
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *);
     void visitPost(DocLink *);
     void visitPre(DocRef *);
@@ -129,7 +131,10 @@ class DocbookDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
-    private:
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
+
+  private:
     //--------------------------------------
     // helper functions
     //--------------------------------------
@@ -143,6 +148,10 @@ class DocbookDocVisitor : public DocVisitor
     const QCString &height, bool hasCaption);
     void endMscFile(bool hasCaption);
     void writeMscFile(const QCString &fileName);
+    void startDiaFile(const QCString &fileName,const QCString &width,
+                      const QCString &height, bool hasCaption);
+    void endDiaFile(bool hasCaption);
+    void writeDiaFile(const QCString &fileName);
     void startDotFile(const QCString &fileName,const QCString &width,
     const QCString &height, bool hasCaption);
     void endDotFile(bool hasCaption);
index 5259d46..4a18b4e 100644 (file)
@@ -52,6 +52,7 @@
 #include "formula.h"
 #include "config.h"
 #include "growbuf.h"
+#include "markdown.h"
 
 // debug off
 #define DBG(x) do {} while(0)
@@ -269,6 +270,14 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
          break;
       }
       QCString outputFile = outputDir+"/"+result;
+      QFileInfo outfi(outputFile);
+      if (outfi.isSymLink())
+      {
+        QFile::remove(outputFile);
+        warn_doc_error(g_fileName,doctokenizerYYlineno,
+            "destination of image %s is a symlink, replacing with image",
+            qPrint(outputFile));
+      }
       if (outputFile!=inputFile) // prevent copying to ourself
       {
         QFile outImage(outputFile.data());
@@ -287,6 +296,10 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
               "could not write output image %s",qPrint(outputFile));
         }
       }
+      else
+      {
+        printf("Source & Destination are the same!\n");
+      }
     }
     else
     {
@@ -1562,6 +1575,7 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter)
 {
   int l=symName.length();
   DBG(("decodeSymbol(%s) l=%d\n",qPrint(symName),l));
+  // TODO: replace this with a hash
   if      (symName=="&copy;")  return DocSymbol::Copy;
   else if (symName=="&trade;") return DocSymbol::Tm;
   else if (symName=="&tm;")    return DocSymbol::Tm; // alias for &trade;
@@ -2404,8 +2418,13 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
   QCString     anchor;
   //printf("DocRef::DocRef(target=%s,context=%s)\n",target.data(),context.data());
   ASSERT(!target.isEmpty());
+  SrcLangExt lang = getLanguageFromFileName(target);
   m_relPath = g_relPath;
   SectionInfo *sec = Doxygen::sectionDict->find(target);
+  if (sec==0 && lang==SrcLangExt_Markdown) // lookup as markdown file
+  {
+    sec = Doxygen::sectionDict->find(markdownFileNameToId(target));
+  }
   if (sec) // ref to section or anchor
   {
     PageDef *pd = 0;
@@ -2874,6 +2893,92 @@ void DocMscFile::parse()
 
 //---------------------------------------------------------------------------
 
+DocDiaFile::DocDiaFile(DocNode *parent,const QCString &name,const QCString &context) :
+      m_name(name), m_relPath(g_relPath), m_context(context)
+{
+  m_parent = parent;
+}
+
+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);
+
+  bool ambig;
+  FileDef *fd = findFileDef(Doxygen::diaFileNameDict,m_name,ambig);
+  if (fd==0 && m_name.right(4)!=".dia") // try with .dia extension as well
+  {
+    fd = findFileDef(Doxygen::diaFileNameDict,m_name+".dia",ambig);
+  }
+  if (fd)
+  {
+    m_file = fd->absFilePath();
+  }
+  else if (ambig)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included dia file name %s is ambiguous.\n"
+           "Possible candidates:\n%s",qPrint(m_name),
+           qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
+          );
+  }
+  else
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"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);
+}
+
+//---------------------------------------------------------------------------
+
 DocVhdlFlow::DocVhdlFlow(DocNode *parent)
 {
   m_parent = parent;
@@ -4323,6 +4428,33 @@ int DocHtmlBlockQuote::parse()
 
 //---------------------------------------------------------------------------
 
+int DocParBlock::parse()
+{
+  DBG(("DocParBlock::parse() start\n"));
+  int retval=0;
+  g_nodeStack.push(this);
+
+  // parse one or more paragraphs 
+  bool isFirst=TRUE;
+  DocPara *par=0;
+  do
+  {
+    par = new DocPara(this);
+    if (isFirst) { par->markFirst(); isFirst=FALSE; }
+    m_children.append(par);
+    retval=par->parse();
+  }
+  while (retval==TK_NEWPARA);
+  if (par) par->markLast();
+
+  DocNode *n=g_nodeStack.pop();
+  ASSERT(n==this);
+  DBG(("DocParBlock::parse() end retval=%x\n",retval));
+  return (retval==RetVal_EndBlockQuote) ? RetVal_OK : retval;
+}
+
+//---------------------------------------------------------------------------
+
 int DocSimpleListItem::parse()
 {
   g_nodeStack.push(this);
@@ -5077,6 +5209,30 @@ void DocPara::handleMscFile(const QCString &cmdName)
   df->parse();
 }
 
+void DocPara::handleDiaFile(const QCString &cmdName)
+{
+  int tok=doctokenizerYYlex();
+  if (tok!=TK_WHITESPACE)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
+        qPrint(cmdName));
+    return;
+  }
+  doctokenizerYYsetStateFile();
+  tok=doctokenizerYYlex();
+  doctokenizerYYsetStatePara();
+  if (tok!=TK_WORD)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
+        tokToString(tok),qPrint(cmdName));
+    return;
+  }
+  QCString name = g_token->name;
+  DocDiaFile *df = new DocDiaFile(this,name,g_context);
+  m_children.append(df);
+  df->parse();
+}
+
 void DocPara::handleVhdlFlow()
 {
   DocVhdlFlow *vf = new DocVhdlFlow(this);
@@ -5509,6 +5665,9 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStatePara();
       }
       break;
+    case CMD_ENDPARBLOCK:
+      retval=RetVal_EndParBlock;
+      break;
     case CMD_ENDCODE:
     case CMD_ENDHTMLONLY:
     case CMD_ENDMANONLY:
@@ -5567,6 +5726,13 @@ int DocPara::handleCommand(const QCString &cmdName)
     case CMD_ENDINTERNAL:
       retval = RetVal_EndInternal;
       break;
+    case CMD_PARBLOCK:
+      {
+        DocParBlock *block = new DocParBlock(this);
+        m_children.append(block);
+        retval = block->parse();
+      }
+      break;
     case CMD_COPYDOC:   // fall through
     case CMD_COPYBRIEF: // fall through
     case CMD_COPYDETAILS:
@@ -5615,6 +5781,9 @@ int DocPara::handleCommand(const QCString &cmdName)
     case CMD_MSCFILE:
       handleMscFile(cmdName);
       break;
+    case CMD_DIAFILE:
+      handleDiaFile(cmdName);
+      break;
     case CMD_LINK:
       handleLink(cmdName,FALSE);
       break;
@@ -6920,11 +7089,19 @@ static QCString extractCopyDocId(const char *data, uint &j, uint len)
     }
     if (!found) j++;
   }
+  if (qstrncmp(data+j," const",6)==0)
+  {
+    j+=6;
+  }
+  else if (qstrncmp(data+j," volatile",9)==0)
+  {
+    j+=9;
+  }
   e=j;
   QCString id(e-s+1);
   if (e>s) memcpy(id.data(),data+s,e-s);
   id.at(e-s)='\0';
-  //printf("extractCopyDocId=%s input='%s'\n",id.data(),&data[s]);
+  //printf("extractCopyDocId='%s' input='%s'\n",id.data(),&data[s]);
   return id;
 }
 
index b80e5e1..050c871 100644 (file)
@@ -130,7 +130,9 @@ class DocNode
                 Kind_Text           = 47,
                 Kind_MscFile        = 48,
                 Kind_HtmlBlockQuote = 49,
-                Kind_VhdlFlow       = 50
+                Kind_VhdlFlow       = 50,
+                Kind_ParBlock       = 51,
+                Kind_DiaFile        = 52
               };
     /*! Creates a new node */
     DocNode() : m_parent(0), m_insidePre(FALSE) {}
@@ -687,6 +689,30 @@ class DocMscFile : public CompAccept<DocMscFile>, public DocNode
     QCString  m_context;
 };
 
+/** Node representing a dia file */
+class DocDiaFile : public CompAccept<DocDiaFile>, public DocNode
+{
+  public:
+    DocDiaFile(DocNode *parent,const QCString &name,const QCString &context);
+    void parse();
+    Kind kind() const          { return Kind_DiaFile; }
+    QCString name() const      { return m_name; }
+    QCString file() const      { return m_file; }
+    QCString relPath() const   { return m_relPath; }
+    bool hasCaption() const    { return !m_children.isEmpty(); }
+    QCString width() const     { return m_width; }
+    QCString height() const    { return m_height; }
+    QCString context() const   { return m_context; }
+    void accept(DocVisitor *v) { CompAccept<DocDiaFile>::accept(this,v); }
+  private:
+    QCString  m_name;
+    QCString  m_file;
+    QCString  m_relPath;
+    QCString  m_width;
+    QCString  m_height;
+    QCString  m_context;
+};
+
 /** Node representing a VHDL flow chart */
 class DocVhdlFlow : public CompAccept<DocVhdlFlow>, public DocNode
 {
@@ -900,6 +926,19 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode
   private:
 };
 
+/** Node representing an block of paragraphs */
+class DocParBlock : public CompAccept<DocParBlock>, public DocNode
+{
+  public:
+    DocParBlock(DocNode *parent) { m_parent = parent; }
+    int parse();
+    Kind kind() const          { return Kind_ParBlock; }
+    void accept(DocVisitor *v) { CompAccept<DocParBlock>::accept(this,v); }
+
+  private:
+};
+
+
 /** Node representing a simple list */
 class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode
 {
@@ -983,8 +1022,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
        In=1, Out=2, InOut=3, Unspecified=0
     };
     DocParamSect(DocNode *parent,Type t) 
-      : m_type(t), m_dir(Unspecified), 
-        m_hasInOutSpecifier(FALSE), m_hasTypeSpecifier(FALSE) 
+      : m_type(t), m_hasInOutSpecifier(FALSE), m_hasTypeSpecifier(FALSE) 
     { m_parent = parent; }
     int parse(const QCString &cmdName,bool xmlContext,Direction d);
     Kind kind() const          { return Kind_ParamSect; }
@@ -995,7 +1033,6 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
 
   private:
     Type            m_type;
-    Direction       m_dir;
     bool            m_hasInOutSpecifier;
     bool            m_hasTypeSpecifier;
 };
@@ -1027,6 +1064,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
     void handleImage(const QCString &cmdName);
     void handleDotFile(const QCString &cmdName);
     void handleMscFile(const QCString &cmdName);
+    void handleDiaFile(const QCString &cmdName);
     void handleInclude(const QCString &cmdName,DocInclude::Type t);
     void handleLink(const QCString &cmdName,bool isJavaLink);
     void handleCite();
@@ -1189,7 +1227,6 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
 
   private:
     HtmlAttribList m_attribs;
-    bool           m_atTop;
 };
 
 /** Node representing a HTML table row */
index d2e6ea1..ca0490c 100644 (file)
@@ -63,7 +63,8 @@ enum Tokens
   RetVal_CloseXml       = 0x10013,
   RetVal_EndBlockQuote  = 0x10014,
   RetVal_CopyDoc        = 0x10015,
-  RetVal_EndInternal    = 0x10016
+  RetVal_EndInternal    = 0x10016,
+  RetVal_EndParBlock    = 0x10017
 };
 
 /** @brief Data associated with a token used by the comment block parser. */
index 3c924cf..5ba1a72 100644 (file)
@@ -320,6 +320,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()
 
 %}
 
@@ -355,6 +358,7 @@ INOUT         "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLAN
 PARAMIO   {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
 TEMPCHAR  [a-z_A-Z0-9.,: \t\*\&\(\)\[\]]
 FUNCCHAR  [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]]
+FUNCPART  {FUNCCHAR}*("("{FUNCCHAR}*")"{FUNCCHAR}*)?
 SCOPESEP  "::"|"#"|"."
 TEMPLPART "<"{TEMPCHAR}*">"
 ANONNS    "anonymous_namespace{"[^}]*"}"
@@ -363,7 +367,7 @@ SCOPEKEYS ":"({ID}":")*
 SCOPECPP  {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
 SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
 SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
-FUNCARG   "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
+FUNCARG   "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
 OPNEW     {BLANK}+"new"({BLANK}*"[]")?
 OPDEL     {BLANK}+"delete"({BLANK}*"[]")?
 OPNORM    {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
@@ -386,7 +390,7 @@ HTMLKEYU  "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"
 HTMLKEYW  {HTMLKEYL}|{HTMLKEYU}
 REFWORD2  ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
 REFWORD3  ({ID}":")*{ID}":"?
-REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
+REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
 
 %option noyywrap
 %option yylineno
@@ -735,7 +739,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
                        }
 <St_CodeOpt>{BLANK}*"{"(".")?{LABELID}"}" {
                          g_token->name = yytext;
-                         int i=g_token->name.find('{');
+                         int i=g_token->name.find('{'); /* } to keep vi happy */
                          g_token->name = g_token->name.mid(i+1,g_token->name.length()-i-2);
                          BEGIN(St_Code);
                        }
@@ -1022,6 +1026,10 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
                       }
 <St_Param>[^ \t\n,]+   {
                         g_token->name = yytext;
+                         if (g_token->name.at(yyleng-1)==':')
+                         {
+                           g_token->name=g_token->name.left(yyleng-1);
+                         }
                         return TK_WORD;
                        }
 <St_Param>{WS}*","{WS}*  /* param separator */
@@ -1184,6 +1192,7 @@ void doctokenizerYYFindSections(const char *input,Definition *d,
                                 MemberGroup *mg,const char *fileName)
 {
   if (input==0) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
   g_inputString = input;
   //printf("parsing --->`%s'<---\n",input);
   g_inputPos    = 0;
@@ -1193,6 +1202,7 @@ void doctokenizerYYFindSections(const char *input,Definition *d,
   BEGIN(St_Sections);
   doctokenizerYYlineno = 1;
   doctokenizerYYlex();
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 void doctokenizerYYinit(const char *input,const char *fileName)
@@ -1380,6 +1390,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;
+}
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
 extern "C" { // some bogus code to keep the compiler happy
     void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
index 240e137..d12295c 100644 (file)
@@ -67,6 +67,7 @@ class DocHtmlHeader;
 class DocImage;
 class DocDotFile;
 class DocMscFile;
+class DocDiaFile;
 class DocLink;
 class DocCite;
 class DocRef;
@@ -82,6 +83,7 @@ class DocText;
 class DocSimpleSectSep;
 class DocHtmlBlockQuote;
 class DocVhdlFlow;
+class DocParBlock;
 
 /*! @brief Abstract visitor that participates in the visitor pattern.
  */
@@ -165,6 +167,8 @@ class DocVisitor
     virtual void visitPost(DocDotFile *) = 0;
     virtual void visitPre(DocMscFile *) = 0;
     virtual void visitPost(DocMscFile *) = 0;   
+    virtual void visitPre(DocDiaFile *) = 0;
+    virtual void visitPost(DocDiaFile *) = 0;
     virtual void visitPre(DocLink *) = 0;
     virtual void visitPost(DocLink *) = 0;
     virtual void visitPre(DocRef *) = 0;
@@ -189,6 +193,8 @@ class DocVisitor
     virtual void visitPost(DocHtmlBlockQuote *) = 0;
     virtual void visitPre(DocVhdlFlow *) = 0;
     virtual void visitPost(DocVhdlFlow *) = 0;
+    virtual void visitPre(DocParBlock *) = 0;
+    virtual void visitPost(DocParBlock *) = 0;
     /*! @} */
 };
 
index 7d9e795..8d9ba3f 100644 (file)
@@ -1180,8 +1180,8 @@ uint DotRunnerQueue::count() const
 
 //--------------------------------------------------------------------
 
-DotWorkerThread::DotWorkerThread(int id,DotRunnerQueue *queue)
-      : m_id(id), m_queue(queue)
+DotWorkerThread::DotWorkerThread(DotRunnerQueue *queue)
+      : m_queue(queue)
 {
   m_cleanupItems.setAutoDelete(TRUE);
 }
@@ -1235,7 +1235,7 @@ DotManager::DotManager() : m_dotMaps(1007)
     if (numThreads==0) numThreads = QMAX(2,QThread::idealThreadCount()+1);
     for (i=0;i<numThreads;i++)
     {
-      DotWorkerThread *thread = new DotWorkerThread(i,m_queue);
+      DotWorkerThread *thread = new DotWorkerThread(m_queue);
       thread->start();
       if (thread->isRunning())
       {
index a02b32d..75474ed 100644 (file)
--- a/src/dot.h
+++ b/src/dot.h
@@ -236,7 +236,6 @@ class DotCallGraph
     DotNode        *m_startNode;
     static int      m_curNodeNumber;
     QDict<DotNode> *m_usedNodes;
-    int             m_recDepth;
     bool            m_inverse;
     QCString        m_diskName;
     Definition *    m_scope;
@@ -406,11 +405,10 @@ class DotRunnerQueue
 class DotWorkerThread : public QThread
 {
   public:
-    DotWorkerThread(int id,DotRunnerQueue *queue);
+    DotWorkerThread(DotRunnerQueue *queue);
     void run();
     void cleanup();
   private:
-    int m_id;
     DotRunnerQueue *m_queue;
     QList<DotRunner::CleanupItem> m_cleanupItems;
 };
index 14d34c0..41fca96 100644 (file)
@@ -97,6 +97,7 @@
 #include "docsets.h"
 #include "formula.h"
 #include "settings.h"
+#include "context.h"
 
 #define RECURSE_ENTRYTREE(func,var) \
   do { if (var->children()) { \
@@ -132,7 +133,8 @@ FileNameDict    *Doxygen::includeNameDict = 0;     // include names
 FileNameDict    *Doxygen::exampleNameDict = 0;     // examples
 FileNameDict    *Doxygen::imageNameDict = 0;       // images
 FileNameDict    *Doxygen::dotFileNameDict = 0;     // dot files
-FileNameDict    *Doxygen::mscFileNameDict = 0;     // dot files
+FileNameDict    *Doxygen::mscFileNameDict = 0;     // msc files
+FileNameDict    *Doxygen::diaFileNameDict = 0;     // dia files
 StringDict       Doxygen::namespaceAliasDict(257); // all namespace aliases
 StringDict       Doxygen::tagDestinationDict(257); // all tag locations
 QDict<void>      Doxygen::expandAsDefinedDict(257); // all macros that should be expanded
@@ -176,6 +178,7 @@ static QDict<FileDef>   g_usingDeclarations(1009); // used classes
 static FileStorage     *g_storage = 0;
 static bool             g_successfulRun = FALSE;
 static bool             g_dumpSymbolMap = FALSE;
+static bool             g_useOutputTemplate = FALSE; 
 
 void clearAll()
 {
@@ -196,6 +199,7 @@ void clearAll()
   Doxygen::imageNameDict->clear();
   Doxygen::dotFileNameDict->clear();
   Doxygen::mscFileNameDict->clear();
+  Doxygen::diaFileNameDict->clear();
   Doxygen::formulaDict->clear();
   Doxygen::formulaNameDict->clear();
   Doxygen::tagDestinationDict.clear();
@@ -262,6 +266,8 @@ void statistics()
   Doxygen::dotFileNameDict->statistics();
   fprintf(stderr,"--- mscFileNameDict stats ----\n");
   Doxygen::mscFileNameDict->statistics();
+  fprintf(stderr,"--- diaFileNameDict stats ----\n");
+  Doxygen::diaFileNameDict->statistics();
   //fprintf(stderr,"--- g_excludeNameDict stats ----\n");
   //g_excludeNameDict.statistics();
   fprintf(stderr,"--- aliasDict stats ----\n");
@@ -1330,8 +1336,7 @@ static void addClassToContext(EntryNav *rootNav)
     // see if the class is found inside a namespace     
     //bool found=addNamespace(root,cd);         
 
-    // the empty string test is needed for extract all case     
-    cd->insertUsedFile(root->fileName);
+    cd->insertUsedFile(fd);
 
     // add class to the list
     //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
@@ -1531,7 +1536,6 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
       gd->addClass(cd);
     }
   }
-  //cd->insertUsedFile(root->fileName);
   //printf("** adding class %s based on %s\n",fullName.data(),templ->name().data());
   Doxygen::classSDict->append(fullName,cd);
 
@@ -1770,7 +1774,7 @@ static void buildNamespaceList(EntryNav *rootNav)
 
         // the empty string test is needed for extract all case
         nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-        nd->insertUsedFile(root->fileName);
+        nd->insertUsedFile(fd);
         nd->setBodySegment(root->bodyLine,root->endBodyLine);
         nd->setBodyDef(fd);
         // add class to the list
@@ -1832,6 +1836,10 @@ static void findUsingDirectives(EntryNav *rootNav)
     //printf("Found using directive %s at line %d of %s\n",
     //    root->name.data(),root->startLine,root->fileName.data());
     QCString name=substitute(root->name,".","::");
+    if (name.right(2)=="::")
+    {
+      name=name.left(name.length()-2);
+    }
     if (!name.isEmpty())
     {
       NamespaceDef *usingNd = 0;
@@ -1948,7 +1956,7 @@ static void findUsingDirectives(EntryNav *rootNav)
 
         // the empty string test is needed for extract all case
         nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-        nd->insertUsedFile(root->fileName);
+        nd->insertUsedFile(fd);
         // add class to the list
         Doxygen::namespaceSDict->inSort(name,nd);
         nd->setRefItems(root->sli);
@@ -2367,7 +2375,7 @@ static MemberDef *addVariableToClass(
   md->setRefItems(root->sli);
 
   //TODO: insert FileDef instead of filename strings.
-  cd->insertUsedFile(root->fileName);
+  cd->insertUsedFile(rootNav->fileDef());
   rootNav->changeSection(Entry::EMPTY_SEC);
   return md;
 }
@@ -2787,10 +2795,13 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
 
       root->type=root->name;
       static const QRegExp reName("[a-z_A-Z][a-z_A-Z0-9]*");
-      int l;
+      int l=0;
       int i=root->args.isEmpty() ? -1 : reName.match(root->args,0,&l);
-      root->name=root->args.mid(i,l);
-      root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l);
+      if (i!=-1)
+      {
+        root->name=root->args.mid(i,l);
+        root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l);
+      }
       //printf("new: type=`%s' name=`%s' args=`%s'\n",
       //    root->type.data(),root->name.data(),root->args.data());
     }
@@ -3105,7 +3116,7 @@ static void addInterfaceOrServiceToServiceOrSingleton(
   findClassRelation(rootNav,cd,cd,&base,0,DocumentedOnly,true)
   || findClassRelation(rootNav,cd,cd,&base,0,Undocumented,true);
   // add file to list of used files
-  cd->insertUsedFile(root->fileName);
+  cd->insertUsedFile(fd);
 
   addMemberToGroups(root,md);
   rootNav->changeSection(Entry::EMPTY_SEC);
@@ -3348,7 +3359,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
   // add member to the class cd
   cd->insertMember(md);
   // add file to list of used files
-  cd->insertUsedFile(root->fileName);
+  cd->insertUsedFile(fd);
 
   addMemberToGroups(root,md);
   rootNav->changeSection(Entry::EMPTY_SEC);
@@ -3569,7 +3580,7 @@ static void buildFunctionList(EntryNav *rootNav)
                 md->setDocumentation(root->doc,root->docFile,root->docLine);
                 md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
                 md->setDocsForDefinition(!root->proto);
-                if (md->getStartBodyLine()!=-1 && md->getStartBodyLine()==-1)
+                if (md->getStartBodyLine()==-1 && root->bodyLine!=-1)
                 {
                   md->setBodySegment(root->bodyLine,root->endBodyLine);
                   md->setBodyDef(rfd);
@@ -4822,7 +4833,7 @@ static bool findClassRelation(
           // add this class as super class to the base class
           baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
           // the undocumented base was found in this file
-          baseClass->insertUsedFile(root->fileName);
+          baseClass->insertUsedFile(rootNav->fileDef());
           baseClass->setOuterScope(Doxygen::globalScope);
           if (baseClassName.right(2)=="-p")
           {
@@ -5335,7 +5346,7 @@ static void addMemberDocs(EntryNav *rootNav,
   md->mergeMemberSpecifiers(root->spec);
   md->addSectionsToDefinition(root->anchors);
   addMemberToGroups(root,md);
-  if (cd) cd->insertUsedFile(root->fileName);
+  if (cd) cd->insertUsedFile(rfd);
   //printf("root->mGrpId=%d\n",root->mGrpId);
   if (root->mGrpId!=-1)
   {
@@ -6125,6 +6136,21 @@ static void findMember(EntryNav *rootNav,
                   matching = FALSE;
                 }
               }
+              bool classIsTemplate = md->getClassDef() && md->getClassDef()->templateArguments();
+              bool mdIsTemplate    = md->templateArguments()!=0;
+              bool classOrMdIsTemplate = mdIsTemplate || classIsTemplate;
+              bool rootIsTemplate  = root->tArgLists!=0;
+              //printf("classIsTemplate=%d mdIsTemplate=%d rootIsTemplate=%d\n",classIsTemplate,mdIsTemplate,rootIsTemplate);
+              if ((mdIsTemplate || rootIsTemplate) && // either md or root is a template
+                  ((classOrMdIsTemplate && !rootIsTemplate) || (!classOrMdIsTemplate && rootIsTemplate))
+                 )
+              {
+                // Method with template return type does not match method without return type
+                // even if the parameters are the same. See also bug709052
+                Debug::print(Debug::FindMembers,0,
+                    "5b. Comparing return types: template v.s. non-template\n");
+                matching = FALSE;
+              }
 
 
               Debug::print(Debug::FindMembers,0,
@@ -6407,7 +6433,7 @@ static void findMember(EntryNav *rootNav,
           md->setMemberGroupId(root->mGrpId);
           mn->append(md);
           cd->insertMember(md);
-          cd->insertUsedFile(root->fileName);
+          cd->insertUsedFile(fd);
           md->setRefItems(root->sli);
         }
       }
@@ -6604,7 +6630,7 @@ static void findMember(EntryNav *rootNav,
           //md->setMemberDefTemplateArguments(root->mtArgList);
           mn->append(md);
           cd->insertMember(md);
-          cd->insertUsedFile(root->fileName);
+          cd->insertUsedFile(fd);
           md->setRefItems(root->sli);
           if (root->relatesType == Duplicate) md->setRelatedAlso(cd);
           if (!isDefine)
@@ -6676,7 +6702,7 @@ localObjCMethod:
         md->setMemberSpecifiers(root->spec);
         md->setMemberGroupId(root->mGrpId);
         cd->insertMember(md);
-        cd->insertUsedFile(root->fileName);
+        cd->insertUsedFile(fd);
         md->setRefItems(root->sli);
         if ((mn=Doxygen::memberNameSDict->find(root->name)))
         {
@@ -7060,7 +7086,7 @@ static void findEnums(EntryNav *rootNav)
           md->setDefinition(cd->name()+"::"+name+baseType);  
         }
         cd->insertMember(md);
-        cd->insertUsedFile(root->fileName);
+        cd->insertUsedFile(fd);
       }
       md->setDocumentation(root->doc,root->docFile,root->docLine);
       md->setDocsForDefinition(!root->proto);
@@ -8585,7 +8611,7 @@ static void findMainPage(EntryNav *rootNav)
                               indexName, root->brief+root->doc+root->inbodyDocs,title);
       //setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
       Doxygen::mainPage->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-      Doxygen::mainPage->setFileName(indexName);
+      Doxygen::mainPage->setFileName(indexName,TRUE);
       Doxygen::mainPage->setShowToc(root->stat);
       addPageToContext(Doxygen::mainPage,rootNav);
           
@@ -8783,7 +8809,7 @@ static void buildExampleList(EntryNav *rootNav)
       PageDef *pd=new PageDef(root->fileName,root->startLine,
           root->name,root->brief+root->doc+root->inbodyDocs,root->args);
       pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-      pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
+      pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE),FALSE);
       pd->addSectionsToDefinition(root->anchors);
       pd->setLanguage(root->lang);
       //pi->addSections(root->anchors);
@@ -9128,7 +9154,7 @@ static void copyExtraFiles(const QCString& filesOption,const QCString &outputOpt
       QFileInfo fi(fileName);
       if (!fi.exists()) 
       {
-        err("Extra file '%s' specified in" + filesOption + " does not exist!\n", fileName.data());
+        err("Extra file '%s' specified in " + filesOption + " does not exist!\n", fileName.data());
       }
       else
       {
@@ -9757,6 +9783,18 @@ static void dumpSymbolMap()
   }
 }
 
+// print developer options of doxygen
+static void devUsage()
+{
+  msg("Developer parameters:\n");
+  msg("  -m          dump symbol map\n");
+  msg("  -b          output to wizard\n");
+  msg("  -T          activates output generation via Django like template\n");
+  msg("  -d <level>  enable a debug level, such as (multiple invocations of -d are possible):\n");
+  Debug::printFlags();
+}
+
+
 //----------------------------------------------------------------------------
 // print the usage of doxygen
 
@@ -9780,11 +9818,11 @@ static void usage(const char *name)
   msg("    RTF:        %s -w rtf styleSheetFile\n",name);
   msg("    HTML:       %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
   msg("    LaTeX:      %s -w latex headerFile footerFile styleSheetFile [configFile]\n\n",name);
-  msg("6) Use doxygen to generate an rtf extensions file\n");
+  msg("6) Use doxygen to generate a rtf extensions file\n");
   msg("    RTF:   %s -e rtf extensionsFile\n\n",name);
   msg("If -s is specified the comments of the configuration items in the config file will be omitted.\n");
   msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
-  exit(1);
+  msg("-v print version string\n");
 }
 
 //----------------------------------------------------------------------------
@@ -9863,6 +9901,7 @@ void initDoxygen()
   Doxygen::imageNameDict->setAutoDelete(TRUE);
   Doxygen::dotFileNameDict = new FileNameDict(257);
   Doxygen::mscFileNameDict = new FileNameDict(257);
+  Doxygen::diaFileNameDict = new FileNameDict(257);
   Doxygen::memGrpInfoDict.setAutoDelete(TRUE);
   Doxygen::tagDestinationDict.setAutoDelete(TRUE);
   Doxygen::dirRelations.setAutoDelete(TRUE);
@@ -9903,6 +9942,7 @@ void cleanUpDoxygen()
   delete Doxygen::imageNameDict;
   delete Doxygen::dotFileNameDict;
   delete Doxygen::mscFileNameDict;
+  delete Doxygen::diaFileNameDict;
   delete Doxygen::mainPage;
   delete Doxygen::pageSDict;  
   delete Doxygen::exampleSDict;
@@ -9977,6 +10017,7 @@ void readConfiguration(int argc, char **argv)
   bool shortList=FALSE;
   bool updateConfig=FALSE;
   bool genLayout=FALSE;
+  int retVal;
   while (optind<argc && argv[optind][0]=='-' && 
                (isalpha(argv[optind][1]) || argv[optind][1]=='?' || 
                 argv[optind][1]=='-')
@@ -10000,7 +10041,20 @@ void readConfiguration(int argc, char **argv)
         break;
       case 'd':
         debugLabel=getArg(argc,argv,optind);
-        Debug::setFlag(debugLabel);
+        if (!debugLabel)
+        {
+          err("option \"-d\" is missing debug specifier.\n");
+          devUsage();
+          cleanUpDoxygen();
+          exit(1);
+        }
+        retVal = Debug::setFlag(debugLabel);
+        if (!retVal)
+        {
+          err("option \"-d\" has unknown debug specifier: \"%s\".\n",debugLabel);
+          cleanUpDoxygen();
+          exit(1);
+        }
         break;
       case 's':
         shortList=TRUE;
@@ -10012,7 +10066,7 @@ void readConfiguration(int argc, char **argv)
         formatName=getArg(argc,argv,optind);
         if (!formatName)
         {
-          err("option -e is missing format specifier rtf.\n");
+          err("option \"-e\" is missing format specifier rtf.\n");
           cleanUpDoxygen();
           exit(1);
         }
@@ -10030,7 +10084,7 @@ void readConfiguration(int argc, char **argv)
             RTFGenerator::writeExtensionsFile(f);
           }
           cleanUpDoxygen();
-          exit(1);
+          exit(0);
         }
         err("option \"-e\" has invalid format specifier.\n");
         cleanUpDoxygen();
@@ -10040,7 +10094,7 @@ void readConfiguration(int argc, char **argv)
         formatName=getArg(argc,argv,optind);
         if (!formatName)
         {
-          err("option -w is missing format specifier rtf, html or latex\n");
+          err("option \"-w\" is missing format specifier rtf, html or latex\n");
           cleanUpDoxygen();
           exit(1);
         } 
@@ -10165,7 +10219,7 @@ void readConfiguration(int argc, char **argv)
         }
         else
         {
-          err("Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
+          err("Illegal format specifier \"%s\": should be one of rtf, html or latex\n",formatName);
           cleanUpDoxygen();
           exit(1);
         }
@@ -10182,6 +10236,7 @@ void readConfiguration(int argc, char **argv)
         if (qstrcmp(&argv[optind][2],"help")==0)
         {
           usage(argv[0]);
+          exit(0);
         }
         else if (qstrcmp(&argv[optind][2],"version")==0)
         {
@@ -10191,21 +10246,30 @@ void readConfiguration(int argc, char **argv)
         }
         else
         {
-          err("Unknown option -%s\n",&argv[optind][1]);
+          err("Unknown option \"-%s\"\n",&argv[optind][1]);
           usage(argv[0]);
+          exit(1);
         }
         break;
       case 'b':
         setvbuf(stdout,NULL,_IONBF,0);
         Doxygen::outputToWizard=TRUE;
         break;
+      case 'T':
+        msg("Warning: this option activates output generation via Django like template files. "
+            "This option is scheduled for doxygen 2.0, is currently incomplete and highly experimental! "
+            "Only use if you are a doxygen developer\n");
+        g_useOutputTemplate=TRUE;
+        break;
       case 'h':
       case '?':
         usage(argv[0]);
+        exit(0);
         break;
       default:
-        err("Unknown option -%c\n",argv[optind][1]);
+        err("Unknown option \"-%c\"\n",argv[optind][1]);
         usage(argv[0]);
+        exit(1);
     }
     optind++;
   }
@@ -10244,6 +10308,7 @@ void readConfiguration(int argc, char **argv)
     {
       err("Doxyfile not found and no input file specified!\n");
       usage(argv[0]);
+      exit(1);
     }
   }
   else
@@ -10257,6 +10322,7 @@ void readConfiguration(int argc, char **argv)
     {
       err("configuration file %s not found!\n",argv[optind]);
       usage(argv[0]);
+      exit(1);
     }
   }
 
@@ -10525,6 +10591,18 @@ void searchInputFiles()
   }
   g_s.end();
 
+  g_s.begin("Searching for dia files...\n");
+  QStrList &diaFileList=Config_getList("DIAFILE_DIRS");
+  s=diaFileList.first();
+  while (s)
+  {
+    readFileOrDirectory(s,0,Doxygen::diaFileNameDict,0,0,
+                        0,0,0,
+                        alwaysRecursive);
+    s=diaFileList.next();
+  }
+  g_s.end();
+
   g_s.begin("Searching for files to exclude\n");
   QStrList &excludeList = Config_getList("EXCLUDE");
   s=excludeList.first();
@@ -11262,6 +11340,17 @@ void generateOutput()
     Doxygen::formulaList->generateBitmaps(Config_getString("HTML_OUTPUT"));
     g_s.end();
   }
+
+  if (Config_getBool("SORT_GROUP_NAMES"))
+  {
+    Doxygen::groupSDict->sort();
+    GroupSDict::Iterator gli(*Doxygen::groupSDict);
+    GroupDef *gd;
+    for (gli.toFirst();(gd=gli.current());++gli)
+    {
+      gd->sortSubGroups();
+    }
+  }
   
   writeMainPageTagFileData();
 
@@ -11349,6 +11438,8 @@ void generateOutput()
     g_s.end();
   }
 
+  if (g_useOutputTemplate) generateOutputViaTemplate();
+
   if (generateRtf)
   {
     g_s.begin("Combining RTF output...\n");
@@ -11428,6 +11519,7 @@ void generateOutput()
     msg("finished...\n");
   }
 
+
   /**************************************************************************
    *                        Start cleaning up                               *
    **************************************************************************/
index 3e9451f..3c981f3 100644 (file)
@@ -56,10 +56,14 @@ div.multicol {
        -webkit-column-count: 3;
 }
 
-p.startli, p.startdd, p.starttd {
+p.startli, p.startdd {
        margin-top: 2px;
 }
 
+p.starttd {
+       margin-top: 0px;
+}
+
 p.endli {
        margin-bottom: 0px;
 }
@@ -169,8 +173,8 @@ pre.fragment {
 }
 
 div.fragment {
-        padding: 0px;
-        margin: 0px;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
        background-color: ##FC;
        border: 1px solid ##CC;
 }
@@ -1065,6 +1069,11 @@ dl.section dd {
         text-align: center;
 }
 
+.diagraph
+{
+        text-align: center;
+}
+
 .caption
 {
        font-weight: bold;
index 4edf395..ff9c620 100644 (file)
@@ -109,6 +109,7 @@ class Doxygen
     static FileNameDict             *imageNameDict;
     static FileNameDict             *dotFileNameDict;
     static FileNameDict             *mscFileNameDict;
+    static FileNameDict             *diaFileNameDict;
     static QStrList                  tagfileList;
     static MemberNameSDict          *memberNameSDict;
     static MemberNameSDict          *functionNameSDict;
index ee87e71..9a9d726 100644 (file)
@@ -97,6 +97,78 @@ For doxygen specific concepts the following subclasses are available
 Finally the data for members of classes, namespaces, and files is stored in
 the subclass MemberDef.
 
+Producing debug output
+----------------------
+
+Within doxygen there are a number of ways to obtain debug output. Besides the
+invasive method of  putting print statements in the code there are a number of
+easy ways to get debug information.
+
+- Compilation of `.l` files<br>
+  This is also an invasive method but it will be automatically done by the
+  `flex / lex` command. The result is that of each input line the (lex) rule(s)
+  that are applied on it are shown.
+  - windows
+    - in the Visual C++ GUI
+      - find the required `.l` file
+      - select the `Properties` of this file
+      - set the item `Write used lex rules` to `Yes`
+      - see to it that the `.l` file is newer than the corresponding `.cpp` file
+        or remove the corresponding `.cpp` file
+  - unices
+    - global change<br>
+      In the chapter "Doxygen's internals" a `perl` script is given to toggle the
+      possibility of having the rules debug information.
+    - command line change<br>
+      It is possible to the option `LEX="flex -d"` with the `make` command on the
+      command line. In this case the `.l` that are converted to the corresponding
+      `.cpp` files during this `make` get the rules debug information.<br>
+      To undo the rules debug information output just recompile the file with
+      just `make`.<br>
+      Note this method applies for all the `.l` files that are rebuild to `.cpp`
+      files so be sure that only the `.l` files(s) of which you want to have the
+      rules debug information is (are) newer than the corresponding `.cpp`
+      file(s).
+- Running doxygen<br>
+  During a run of doxygen it is possible to specify the `-d` option with the
+  following possibilities (each option has to be preceded by `-d`):
+  - findmembers<br>
+    Gives of global, class, module members its scope, arguments and other relevant information.
+  - functions<br>
+    Gives of functions its scope, arguments and other relevant information.
+  - variables<br>
+    Gives of variables its scope and other relevant information.
+  - classes<br>
+    Gives of classes en modules its scope and other relevant information.
+  - preprocessor<br>
+    Shows the results of the preprocessing phase, i.e. results from include files, 
+    <tt>\#define</tt> statements etc., definitions in the doxygen configuration file like:
+    `EXPAND_ONLY_PREDEF`, `PREDEFINED` and `MACRO_EXPANSION`. 
+  - commentcnv<br>
+    Shows the results of the comment conversion, the comment conversion does the
+    following:
+     - It converts multi-line C++ style comment blocks (that are aligned)
+       to C style comment blocks (if `MULTILINE_CPP_IS_BRIEF` is set to `NO`).
+     - It replaces aliases with their definition (see `ALIASES`)
+     - It handles conditional sections (<tt>\\cond ... \\endcond</tt> blocks)
+  - commentscan<br>
+    Will print each comment block before and after the comment is interpreted by
+    the comment scanner.
+  - printtree<br>
+    Give the results in in pretty print way, i.e. in an XML like way with each
+    level indented by a `"."` (dot).
+  - time<br>
+    Provides information of the different stages of the doxygen process.
+  - extcmd<br>
+    Shows which external commands are executed and which pipes are opened.
+  - markdown<br>
+    Will print each comment block before and after Markdown processing.
+  - filteroutput<br>
+    Gives the output of the output as result of the filter command (when a filter
+    command is specified)
+  - validate<br>
+    Currently not used
+
 Producing output
 ----------------
 
@@ -121,7 +193,7 @@ Topics TODO
   - comment conversion
   - comment scanner
   - markdown processor
-  - doc tokeninzer
+  - doc tokenizer
   - doc parser
   - doc visitors
 - Diagrams and Images
diff --git a/src/doxygen_bst.h b/src/doxygen_bst.h
deleted file mode 100644 (file)
index c51f2df..0000000
+++ /dev/null
@@ -1,1388 +0,0 @@
-"      % \n"
-"      % \n"
-"      % This file is either \"html-btxbst.doc\" or was derived from\n"
-"      % \"html-btxbst.doc\" using cpp.  \"html-btxbst.doc\" itself was edited\n"
-"      % from \"btxbst.doc\" and \"named.bst\".\n"
-"      % The following copyright information is from btxbst.doc:\n"
-"      % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.\n"
-"      % Copyright (C) 1985, all rights reserved.\n"
-"      % Copying of this file is authorized only if either\n"
-"      % (1) you make absolutely no changes to your copy, including name, or\n"
-"      % (2) if you do make changes, you name it something other than\n"
-"      % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.\n"
-"      % This restriction helps ensure that all standard styles are identical.\n"
-"      % The file btxbst.doc has the documentation for this style.\n"
-" % \"named\" style (sorted keys of the form [name, year])\n"
-" % Some code for this was taken from \"named.bst\".\n"
-"\n"
-"ENTRY\n"
-"  { address\n"
-"    author\n"
-"    booktitle\n"
-"    chapter\n"
-"    edition\n"
-"    editor\n"
-"    howpublished\n"
-"    institution\n"
-"    journal\n"
-"    key\n"
-"    month\n"
-"    note\n"
-"    number\n"
-"    organization\n"
-"    pages\n"
-"    publisher\n"
-"    school\n"
-"    series\n"
-"    title\n"
-"    type\n"
-"    volume\n"
-"    year\n"
-"    dvi\n"
-"    html\n"
-"    keywords\n"
-"    pdf\n"
-"    postscript\n"
-"    url\n"
-"    doi\n"
-"    mailto\n"
-"  }\n"
-"  {}\n"
-"  { label extra.label sort.label }\n"
-"\n"
-"INTEGERS { output.state before.all mid.sentence after.sentence after.block }\n"
-"\n"
-"FUNCTION {init.state.consts}\n"
-"{ #0 'before.all :=\n"
-"  #1 'mid.sentence :=\n"
-"  #2 'after.sentence :=\n"
-"  #3 'after.block :=\n"
-"}\n"
-"\n"
-"STRINGS { s t }\n"
-"\n"
-"FUNCTION {output.nonnull}\n"
-"{ 's :=\n"
-"  output.state mid.sentence =\n"
-"    { \", \" * write$ }\n"
-"    { output.state after.block =\n"
-"      { add.period$ write$\n"
-"        newline$\n"
-"      }\n"
-"      { output.state before.all =\n"
-"          'write$\n"
-"          { add.period$ \" \" * write$ }\n"
-"        if$\n"
-"      }\n"
-"      if$\n"
-"      mid.sentence 'output.state :=\n"
-"    }\n"
-"  if$\n"
-"  s\n"
-"}\n"
-"\n"
-"FUNCTION {output}\n"
-"{ duplicate$ empty$\n"
-"    'pop$\n"
-"    'output.nonnull\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {output.check}\n"
-"{ 't :=\n"
-"  duplicate$ empty$\n"
-"    { pop$ \"empty \" t * \" in \" * cite$ * warning$ }\n"
-"    'output.nonnull\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {output.bibitem}\n"
-"{ newline$\n"
-"  author empty$\n"
-"    { editor empty$\n"
-"      { organization empty$\n"
-"          'skip$\n"
-"          { \"<!-- Authors: \" organization purify$ * \" -->\" * write$ newline$ }\n"
-"          if$\n"
-"      } \n"
-"        { \"<!-- Authors: \" editor purify$ * \" -->\" * write$ newline$ }\n"
-"      if$\n"
-"    }\n"
-"    { \"<!-- Authors: \" author purify$ * \" -->\" * write$ newline$ }\n"
-"  if$\n"
-"  keywords empty$\n"
-"    'skip$\n"
-"    { \"<!-- Keywords: \" keywords * \" -->\" * write$ newline$ }\n"
-"  if$\n"
-"  \"<dt><a name=\" quote$ * \"CITEREF_\" * cite$ * quote$ * \">[\" * label * \"]</a></dt><dd>\" * write$\n"
-"  \"\"\n"
-"  before.all 'output.state :=\n"
-"}\n"
-"\n"
-"FUNCTION {fin.entry}\n"
-"{ add.period$\n"
-"  write$\n"
-"  postscript empty$\n"
-"    'skip$\n"
-"    { newline$ \"<!-- PostScript: \" postscript * \" -->\" * write$ }\n"
-"  if$\n"
-"  pdf empty$\n"
-"    'skip$\n"
-"    { newline$ \"<!-- PDF: \" pdf * \" -->\" * write$ }\n"
-"  if$\n"
-"  dvi empty$\n"
-"    'skip$\n"
-"    { newline$ \"<!-- DVI: \" dvi * \" -->\" * write$ }\n"
-"  if$\n"
-"  doi empty$\n"
-"    'skip$\n"
-"    { newline$ \"<!-- DOI: \" doi * \" -->\" * write$ }\n"
-"  if$\n"
-"  \"</dd>\" write$\n"
-"  newline$\n"
-"  newline$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block}\n"
-"{ output.state before.all =\n"
-"    'skip$\n"
-"    { after.block 'output.state := }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence}\n"
-"{ output.state after.block =\n"
-"    'skip$\n"
-"    { output.state before.all =\n"
-"      'skip$\n"
-"      { after.sentence 'output.state := }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {not}\n"
-"{   { #0 }\n"
-"    { #1 }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {and}\n"
-"{   'skip$\n"
-"    { pop$ #0 }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {or}\n"
-"{   { pop$ #1 }\n"
-"    'skip$\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {str.to.int}\n"
-"{\n"
-"  's :=\n"
-"  #0\n"
-"    { s empty$ not }\n"
-"    { % Multiply the number on the top of the stack by 10 = 1010 binary\n"
-"      duplicate$ +                    % x2\n"
-"      duplicate$                      % x2 x2\n"
-"      duplicate$ + duplicate$ +               % x2 x8\n"
-"      +\n"
-"      s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'\n"
-"      s #2 global.max$ substring$ 's :=\n"
-"    }\n"
-"  while$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block.checka}\n"
-"{ empty$\n"
-"    'skip$\n"
-"    'new.block\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block.checkb}\n"
-"{ empty$\n"
-"  swap$ empty$\n"
-"  and\n"
-"    'skip$\n"
-"    'new.block\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence.checka}\n"
-"{ empty$\n"
-"    'skip$\n"
-"    'new.sentence\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence.checkb}\n"
-"{ empty$\n"
-"  swap$ empty$\n"
-"  and\n"
-"    'skip$\n"
-"    'new.sentence\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {field.or.null}\n"
-"{ duplicate$ empty$\n"
-"    { pop$ \"\" }\n"
-"    'skip$\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {emphasize}\n"
-"{ duplicate$ empty$\n"
-"    { pop$ \"\" }\n"
-"    { \"<em>\" swap$ * \"</em>\" * }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {add.link} % title\n"
-"{\n"
-"  't :=\n"
-"  t empty$\n"
-"    { \"\" }\n"
-"    { url empty$\n"
-"      { html empty$\n"
-"          { t }\n"
-"          { \"<a href=\" quote$ * html * quote$ * \">\" * t * \"</a>\" * }\n"
-"        if$ }\n"
-"      { \"<a href=\" quote$ * url * quote$ * \">\" * t * \"</a>\" * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {add.mailto} % authors\n"
-"{\n"
-"  't :=\n"
-"  t empty$\n"
-"    { \"\" }\n"
-"    { mailto empty$\n"
-"        { t }\n"
-"        { \"<a href=\" quote$ * \"mailto:\" * mailto * quote$ * \">\" * t * \"</a>\" * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"INTEGERS { nameptr namesleft numnames }\n"
-"\n"
-"FUNCTION {format.names}\n"
-"{ 's :=\n"
-"  #1 'nameptr :=\n"
-"  s num.names$ 'numnames :=\n"
-"  numnames 'namesleft :=\n"
-"    { namesleft #0 > }\n"
-"    { s nameptr \"{ff~}{vv~}{ll}{, jj}\" format.name$ 't :=\n"
-"      \"\\bibxhtmlname{\" t * \"}\" * 't :=\n"
-"      nameptr #1 >\n"
-"      { namesleft #1 >\n"
-"          { \", \" * t * }\n"
-"          { numnames #2 >\n"
-"              { \",\" * }\n"
-"              'skip$\n"
-"            if$\n"
-"            t \"others\" =\n"
-"              { \" et~al.\" * }\n"
-"              { \" and \" * t * }\n"
-"            if$\n"
-"          }\n"
-"        if$\n"
-"      }\n"
-"      't\n"
-"      if$\n"
-"      nameptr #1 + 'nameptr :=\n"
-"      namesleft #1 - 'namesleft :=\n"
-"    }\n"
-"  while$\n"
-"}\n"
-"\n"
-"FUNCTION {format.authors}\n"
-"{ author empty$\n"
-"    { \"\" }\n"
-"    { author format.names }\n"
-"  if$\n"
-"  add.mailto\n"
-"}\n"
-"\n"
-"FUNCTION {format.editors}\n"
-"{ editor empty$\n"
-"    { \"\" }\n"
-"    { editor format.names\n"
-"      editor num.names$ #1 >\n"
-"      { \", editors\" * }\n"
-"      { \", editor\" * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.title}\n"
-"{ title empty$\n"
-"    { \"\" }\n"
-"    { title \"t\" change.case$ }\n"
-"  if$\n"
-"  add.link\n"
-"}\n"
-"\n"
-"FUNCTION {n.dashify}\n"
-"{ 't :=\n"
-"  \"\"\n"
-"    { t empty$ not }\n"
-"    { t #1 #1 substring$ \"-\" =\n"
-"      { t #1 #2 substring$ \"--\" = not\n"
-"          { \"--\" *\n"
-"            t #2 global.max$ substring$ 't :=\n"
-"          }\n"
-"          {   { t #1 #1 substring$ \"-\" = }\n"
-"              { \"-\" *\n"
-"                t #2 global.max$ substring$ 't :=\n"
-"              }\n"
-"            while$\n"
-"          }\n"
-"        if$\n"
-"      }\n"
-"      { t #1 #1 substring$ *\n"
-"        t #2 global.max$ substring$ 't :=\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"  while$\n"
-"}\n"
-"\n"
-"FUNCTION {format.date}\n"
-"{ year empty$\n"
-"    { month empty$\n"
-"      { \"\" }\n"
-"      { \"there's a month but no year in \" cite$ * warning$\n"
-"        month\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"    { month empty$\n"
-"      'year\n"
-"      { month \" \" * year * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.btitle}\n"
-"{ title emphasize\n"
-"  add.link\n"
-"}\n"
-"\n"
-"FUNCTION {tie.or.space.connect}\n"
-"{ duplicate$ text.length$ #3 <\n"
-"    { \"~\" }\n"
-"    { \" \" }\n"
-"  if$\n"
-"  swap$ * *\n"
-"}\n"
-"\n"
-"FUNCTION {either.or.check}\n"
-"{ empty$\n"
-"    'pop$\n"
-"    { \"can't use both \" swap$ * \" fields in \" * cite$ * warning$ }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.bvolume}\n"
-"{ volume empty$\n"
-"    { \"\" }\n"
-"    { \"volume\" volume tie.or.space.connect\n"
-"      series empty$\n"
-"      'skip$\n"
-"      { \" of \" * series emphasize * }\n"
-"      if$\n"
-"      \"volume and number\" number either.or.check\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.number.series}\n"
-"{ volume empty$\n"
-"    { number empty$\n"
-"      { series field.or.null }\n"
-"      { output.state mid.sentence =\n"
-"          { \"number\" }\n"
-"          { \"Number\" }\n"
-"        if$\n"
-"        number tie.or.space.connect\n"
-"        series empty$\n"
-"          { \"there's a number but no series in \" cite$ * warning$ }\n"
-"          { \" in \" * series * }\n"
-"        if$\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"    { \"\" }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.edition}\n"
-"{ edition empty$\n"
-"    { \"\" }\n"
-"    { output.state mid.sentence =\n"
-"      { edition \"l\" change.case$ \" edition\" * }\n"
-"      { edition \"t\" change.case$ \" edition\" * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"INTEGERS { multiresult }\n"
-"\n"
-"FUNCTION {multi.page.check}\n"
-"{ 't :=\n"
-"  #0 'multiresult :=\n"
-"    { multiresult not\n"
-"      t empty$ not\n"
-"      and\n"
-"    }\n"
-"    { t #1 #1 substring$\n"
-"      duplicate$ \"-\" =\n"
-"      swap$ duplicate$ \",\" =\n"
-"      swap$ \"+\" =\n"
-"      or or\n"
-"      { #1 'multiresult := }\n"
-"      { t #2 global.max$ substring$ 't := }\n"
-"      if$\n"
-"    }\n"
-"  while$\n"
-"  multiresult\n"
-"}\n"
-"\n"
-"FUNCTION {format.pages}\n"
-"{ pages empty$\n"
-"    { \"\" }\n"
-"    { pages multi.page.check\n"
-"      { \"pages\" pages n.dashify tie.or.space.connect }\n"
-"      { \"page\" pages tie.or.space.connect }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.vol.num.pages}\n"
-"{ volume field.or.null\n"
-"  number empty$\n"
-"    'skip$\n"
-"    { \"(\" number * \")\" * *\n"
-"      volume empty$\n"
-"      { \"there's a number but no volume in \" cite$ * warning$ }\n"
-"      'skip$\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"  pages empty$\n"
-"    'skip$\n"
-"    { duplicate$ empty$\n"
-"      { pop$ format.pages }\n"
-"      { \":\" * pages n.dashify * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.chapter.pages}\n"
-"{ chapter empty$\n"
-"    'format.pages\n"
-"    { type empty$\n"
-"      { \"chapter\" }\n"
-"      { type \"l\" change.case$ }\n"
-"      if$\n"
-"      chapter tie.or.space.connect\n"
-"      pages empty$\n"
-"      'skip$\n"
-"      { \", \" * format.pages * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.in.ed.booktitle}\n"
-"{ booktitle empty$\n"
-"    { \"\" }\n"
-"    { editor empty$\n"
-"      { \"In \" booktitle emphasize * }\n"
-"      { \"In \" format.editors * \", \" * booktitle emphasize * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {empty.misc.check}\n"
-"{ author empty$ title empty$ howpublished empty$\n"
-"  month empty$ year empty$ note empty$\n"
-"  and and and and and\n"
-"  key empty$ not and\n"
-"    { \"all relevant fields are empty in \" cite$ * warning$ }\n"
-"    'skip$\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.thesis.type}\n"
-"{ type empty$\n"
-"    'skip$\n"
-"    { pop$\n"
-"      type \"t\" change.case$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.tr.number}\n"
-"{ type empty$\n"
-"    { \"Technical Report\" }\n"
-"    'type\n"
-"  if$\n"
-"  number empty$\n"
-"    { \"t\" change.case$ }\n"
-"    { number tie.or.space.connect }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.article.crossref}\n"
-"{\n"
-"  \"In <a href=\" quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-"  key empty$\n"
-"    { journal empty$\n"
-"      { \"need key or journal for \" cite$ * \" to crossref \" * crossref *\n"
-"        warning$\n"
-"        \"\"\n"
-"      }\n"
-"        { \"<cite>\" * journal * \"</cite>\" * }\n"
-"      if$\n"
-"    }\n"
-"    { key * }\n"
-"  if$\n"
-"  \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {format.crossref.editor}\n"
-"{ editor #1 \"{vv~}{ll}\" format.name$\n"
-"  editor num.names$ duplicate$\n"
-"  #2 >\n"
-"    { pop$ \" et~al.\" * }\n"
-"    { #2 <\n"
-"      'skip$\n"
-"      { editor #2 \"{ff }{vv }{ll}{ jj}\" format.name$ \"others\" =\n"
-"          { \" et~al.\" * }\n"
-"          { \" and \" * editor #2 \"{vv~}{ll}\" format.name$ * }\n"
-"        if$\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.book.crossref}\n"
-"{ volume empty$\n"
-"    { \"empty volume in \" cite$ * \"'s crossref of \" * crossref * warning$\n"
-"      \"In \"\n"
-"    }\n"
-"    { \"Volume\" volume tie.or.space.connect\n"
-"      \" of \" *\n"
-"    }\n"
-"  if$\n"
-"  \"<a href=\" * quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-"  editor empty$\n"
-"  editor field.or.null author field.or.null =\n"
-"  or\n"
-"    { key empty$\n"
-"      { series empty$\n"
-"          { \"need editor, key, or series for \" cite$ * \" to crossref \" *\n"
-"            crossref * warning$\n"
-"            \"\" *\n"
-"          }\n"
-"            { \"<cite>\" * series * \"</cite>\" * }\n"
-"        if$\n"
-"      }\n"
-"      { key * }\n"
-"      if$\n"
-"    }\n"
-"    { format.crossref.editor * }\n"
-"  if$\n"
-"  \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {format.incoll.inproc.crossref}\n"
-"{\n"
-"  \"In <a href=\" quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-"  editor empty$\n"
-"  editor field.or.null author field.or.null =\n"
-"  or\n"
-"    { key empty$\n"
-"      { booktitle empty$\n"
-"          { \"need editor, key, or booktitle for \" cite$ * \" to crossref \" *\n"
-"            crossref * warning$\n"
-"            \"\"\n"
-"          }\n"
-"            { \"<cite>\" * booktitle * \"</cite>\" * }\n"
-"        if$\n"
-"      }\n"
-"        { key * }\n"
-"      if$\n"
-"    }\n"
-"    { format.crossref.editor * }\n"
-"  if$\n"
-"  \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {article}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  crossref missing$\n"
-"    { journal emphasize \"journal\" output.check\n"
-"      format.vol.num.pages output\n"
-"      format.date \"year\" output.check\n"
-"    }\n"
-"    { format.article.crossref output.nonnull\n"
-"      format.pages output\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {book}\n"
-"{ output.bibitem\n"
-"  author empty$\n"
-"    { format.editors \"author and editor\" output.check }\n"
-"    { format.authors output.nonnull\n"
-"      crossref missing$\n"
-"      { \"author and editor\" editor either.or.check }\n"
-"      'skip$\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  format.btitle \"title\" output.check\n"
-"  crossref missing$\n"
-"    { format.bvolume output\n"
-"      new.block\n"
-"      format.number.series output\n"
-"      new.sentence\n"
-"      publisher \"publisher\" output.check\n"
-"      address output\n"
-"    }\n"
-"    { new.block\n"
-"      format.book.crossref output.nonnull\n"
-"    }\n"
-"  if$\n"
-"  format.edition output\n"
-"  format.date \"year\" output.check\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {booklet}\n"
-"{ output.bibitem\n"
-"  format.authors output\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  howpublished address new.block.checkb\n"
-"  howpublished output\n"
-"  address output\n"
-"  format.date output\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {inbook}\n"
-"{ output.bibitem\n"
-"  author empty$\n"
-"    { format.editors \"author and editor\" output.check }\n"
-"    { format.authors output.nonnull\n"
-"      crossref missing$\n"
-"      { \"author and editor\" editor either.or.check }\n"
-"      'skip$\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  format.btitle \"title\" output.check\n"
-"  crossref missing$\n"
-"    { format.bvolume output\n"
-"      format.chapter.pages \"chapter and pages\" output.check\n"
-"      new.block\n"
-"      format.number.series output\n"
-"      new.sentence\n"
-"      publisher \"publisher\" output.check\n"
-"      address output\n"
-"    }\n"
-"    { format.chapter.pages \"chapter and pages\" output.check\n"
-"      new.block\n"
-"      format.book.crossref output.nonnull\n"
-"    }\n"
-"  if$\n"
-"  format.edition output\n"
-"  format.date \"year\" output.check\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {incollection}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  crossref missing$\n"
-"    { format.in.ed.booktitle \"booktitle\" output.check\n"
-"      format.bvolume output\n"
-"      format.number.series output\n"
-"      format.chapter.pages output\n"
-"      new.sentence\n"
-"      publisher \"publisher\" output.check\n"
-"      address output\n"
-"      format.edition output\n"
-"      format.date \"year\" output.check\n"
-"    }\n"
-"    { format.incoll.inproc.crossref output.nonnull\n"
-"      format.chapter.pages output\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {inproceedings}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  crossref missing$\n"
-"    { format.in.ed.booktitle \"booktitle\" output.check\n"
-"      format.bvolume output\n"
-"      format.number.series output\n"
-"      format.pages output\n"
-"      address empty$\n"
-"      { organization publisher new.sentence.checkb\n"
-"        organization output\n"
-"        publisher output\n"
-"        format.date \"year\" output.check\n"
-"      }\n"
-"      { address output.nonnull\n"
-"        format.date \"year\" output.check\n"
-"        new.sentence\n"
-"        organization output\n"
-"        publisher output\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"    { format.incoll.inproc.crossref output.nonnull\n"
-"      format.pages output\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {conference} { inproceedings }\n"
-"\n"
-"FUNCTION {manual}\n"
-"{ output.bibitem\n"
-"  author empty$\n"
-"    { organization empty$\n"
-"      'skip$\n"
-"      { organization output.nonnull\n"
-"        address output\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"    { format.authors output.nonnull }\n"
-"  if$\n"
-"  new.block\n"
-"  format.btitle \"title\" output.check\n"
-"  author empty$\n"
-"    { organization empty$\n"
-"      { address new.block.checka\n"
-"        address output\n"
-"      }\n"
-"      'skip$\n"
-"      if$\n"
-"    }\n"
-"    { organization address new.block.checkb\n"
-"      organization output\n"
-"      address output\n"
-"    }\n"
-"  if$\n"
-"  format.edition output\n"
-"  format.date output\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {mastersthesis}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  \"Master's thesis\" format.thesis.type output.nonnull\n"
-"  school \"school\" output.check\n"
-"  address output\n"
-"  format.date \"year\" output.check\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {misc}\n"
-"{ output.bibitem\n"
-"  format.authors output\n"
-"  title howpublished new.block.checkb\n"
-"  format.title output\n"
-"  howpublished new.block.checka\n"
-"  howpublished output\n"
-"  format.date output\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"  empty.misc.check\n"
-"}\n"
-"\n"
-"FUNCTION {phdthesis}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.btitle \"title\" output.check\n"
-"  new.block\n"
-"  \"PhD thesis\" format.thesis.type output.nonnull\n"
-"  school \"school\" output.check\n"
-"  address output\n"
-"  format.date \"year\" output.check\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {proceedings}\n"
-"{ output.bibitem\n"
-"  editor empty$\n"
-"    { organization output }\n"
-"    { format.editors output.nonnull }\n"
-"  if$\n"
-"  new.block\n"
-"  format.btitle \"title\" output.check\n"
-"  format.bvolume output\n"
-"  format.number.series output\n"
-"  address empty$\n"
-"    { editor empty$\n"
-"      { publisher new.sentence.checka }\n"
-"      { organization publisher new.sentence.checkb\n"
-"        organization output\n"
-"      }\n"
-"      if$\n"
-"      publisher output\n"
-"      format.date \"year\" output.check\n"
-"    }\n"
-"    { address output.nonnull\n"
-"      format.date \"year\" output.check\n"
-"      new.sentence\n"
-"      editor empty$\n"
-"      'skip$\n"
-"      { organization output }\n"
-"      if$\n"
-"      publisher output\n"
-"    }\n"
-"  if$\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {techreport}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  format.tr.number output.nonnull\n"
-"  institution \"institution\" output.check\n"
-"  address output\n"
-"  format.date \"year\" output.check\n"
-"  new.block\n"
-"  note output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {unpublished}\n"
-"{ output.bibitem\n"
-"  format.authors \"author\" output.check\n"
-"  new.block\n"
-"  format.title \"title\" output.check\n"
-"  new.block\n"
-"  note \"note\" output.check\n"
-"  format.date output\n"
-"  fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {default.type} { misc }\n"
-"\n"
-"MACRO {jan} {\"January\"}\n"
-"\n"
-"MACRO {feb} {\"February\"}\n"
-"\n"
-"MACRO {mar} {\"March\"}\n"
-"\n"
-"MACRO {apr} {\"April\"}\n"
-"\n"
-"MACRO {may} {\"May\"}\n"
-"\n"
-"MACRO {jun} {\"June\"}\n"
-"\n"
-"MACRO {jul} {\"July\"}\n"
-"\n"
-"MACRO {aug} {\"August\"}\n"
-"\n"
-"MACRO {sep} {\"September\"}\n"
-"\n"
-"MACRO {oct} {\"October\"}\n"
-"\n"
-"MACRO {nov} {\"November\"}\n"
-"\n"
-"MACRO {dec} {\"December\"}\n"
-"\n"
-"MACRO {acmcs} {\"ACM Computing Surveys\"}\n"
-"\n"
-"MACRO {acta} {\"Acta Informatica\"}\n"
-"\n"
-"MACRO {cacm} {\"Communications of the ACM\"}\n"
-"\n"
-"MACRO {ibmjrd} {\"IBM Journal of Research and Development\"}\n"
-"\n"
-"MACRO {ibmsj} {\"IBM Systems Journal\"}\n"
-"\n"
-"MACRO {ieeese} {\"IEEE Transactions on Software Engineering\"}\n"
-"\n"
-"MACRO {ieeetc} {\"IEEE Transactions on Computers\"}\n"
-"\n"
-"MACRO {ieeetcad}\n"
-" {\"IEEE Transactions on Computer-Aided Design of Integrated Circuits\"}\n"
-"\n"
-"MACRO {ipl} {\"Information Processing Letters\"}\n"
-"\n"
-"MACRO {jacm} {\"Journal of the ACM\"}\n"
-"\n"
-"MACRO {jcss} {\"Journal of Computer and System Sciences\"}\n"
-"\n"
-"MACRO {scp} {\"Science of Computer Programming\"}\n"
-"\n"
-"MACRO {sicomp} {\"SIAM Journal on Computing\"}\n"
-"\n"
-"MACRO {tocs} {\"ACM Transactions on Computer Systems\"}\n"
-"\n"
-"MACRO {tods} {\"ACM Transactions on Database Systems\"}\n"
-"\n"
-"MACRO {tog} {\"ACM Transactions on Graphics\"}\n"
-"\n"
-"MACRO {toms} {\"ACM Transactions on Mathematical Software\"}\n"
-"\n"
-"MACRO {toois} {\"ACM Transactions on Office Information Systems\"}\n"
-"\n"
-"MACRO {toplas} {\"ACM Transactions on Programming Languages and Systems\"}\n"
-"\n"
-"MACRO {tcs} {\"Theoretical Computer Science\"}\n"
-"\n"
-"READ\n"
-"\n"
-"FUNCTION {sortify}\n"
-"{ purify$\n"
-"  \"l\" change.case$\n"
-"}\n"
-"\n"
-"INTEGERS { len }\n"
-"\n"
-"FUNCTION {chop.word}\n"
-"{ 's :=\n"
-"  'len :=\n"
-"  s #1 len substring$ =\n"
-"    { s len #1 + global.max$ substring$ }\n"
-"    's\n"
-"  if$\n"
-"}\n"
-"\n"
-"\n"
-"FUNCTION {format.lab.names}\n"
-"{ 's :=\n"
-"  s num.names$ 'numnames :=\n"
-"  numnames #1 =\n"
-"    { s #1 \"{vv }{ll}\" format.name$ }\n"
-"    { numnames #2 =\n"
-"        { s #1 \"{vv }{ll }and \" format.name$ s #2 \"{vv }{ll}\" format.name$ * }\n"
-"        { s #1 \"{vv }{ll }\" format.name$ \"et~al.\" * }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.key.label}\n"
-"{ author empty$\n"
-"    { key empty$\n"
-"      { cite$ #1 #3 substring$ }\n"
-"      { key }\n"
-"      if$\n"
-"    }\n"
-"    { author format.lab.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.editor.key.label}\n"
-"{ author empty$\n"
-"    { editor empty$\n"
-"      { key empty$\n"
-"          { cite$ #1 #3 substring$ }\n"
-"          { key }\n"
-"        if$\n"
-"      }\n"
-"      { editor format.lab.names }\n"
-"      if$\n"
-"    }\n"
-"    { author format.lab.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.key.organization.label}\n"
-"{ author empty$\n"
-"    { key empty$\n"
-"      { organization empty$\n"
-"          { cite$ #1 #3 substring$ }\n"
-"          { \"The \" #4 organization chop.word #3 text.prefix$ }\n"
-"        if$\n"
-"      }\n"
-"      { key }\n"
-"      if$\n"
-"    }\n"
-"    { author format.lab.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {editor.key.organization.label}\n"
-"{ editor empty$\n"
-"    { key empty$\n"
-"      { organization empty$\n"
-"          { cite$ #1 #3 substring$ }\n"
-"          { \"The \" #4 organization chop.word #3 text.prefix$ }\n"
-"        if$\n"
-"      }\n"
-"      { key }\n"
-"      if$\n"
-"    }\n"
-"    { editor format.lab.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {month.to.int}\n"
-"{\n"
-"      \"l\" change.case$ #3 text.prefix$\n"
-"      's :=\n"
-"      s \"jan\" = { #1 }  {\n"
-"      s \"feb\" = { #2 }  {\n"
-"      s \"mar\" = { #3 }  {\n"
-"      s \"apr\" = { #4 }  {\n"
-"      s \"may\" = { #5 }  {\n"
-"      s \"jun\" = { #6 }  {\n"
-"      s \"jul\" = { #7 }  {\n"
-"      s \"aug\" = { #8 }  {\n"
-"      s \"sep\" = { #9 }  {\n"
-"      s \"oct\" = { #10 } {\n"
-"      s \"nov\" = { #11 } {\n"
-"    s \"dec\" = { #12 } { #13 }  % 13 if nothing matches\n"
-"    if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$\n"
-"}\n"
-"\n"
-"INTEGERS { done c } \n"
-"FUNCTION { get.day }\n"
-"{ month field.or.null 's :=\n"
-"  \n"
-"  % Strip out month name\n"
-"  #0 'done := \n"
-"  { s \"\" = not done not and }\n"
-"  { s #1 #1 substring$ \" \" = 'done :=\n"
-"    s #2 global.max$ substring$ 's :=\n"
-"  }\n"
-"  while$\n"
-"\n"
-"  % Build up first number in t\n"
-"  \"0\" 't :=\n"
-"  #0 'done :=\n"
-"  { s \"\" = not done not and }\n"
-"  { s #1 #1 substring$ chr.to.int$ 'c :=\n"
-"    c #47 > c #58 < and\n"
-"      { t c int.to.chr$ * 't := }\n"
-"      { #1 'done := }\n"
-"    if$\n"
-"    s #2 global.max$ substring$ 's :=\n"
-"  }\n"
-"  while$\n"
-"\n"
-"  t str.to.int\n"
-"}\n"
-"\n"
-"FUNCTION { sortify.fourdigit }\n"
-"{ 's :=\n"
-"  s empty$\n"
-"    { \"0000\" }\n"
-"    { s\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION { sortify.twodigit }\n"
-"{ 's :=\n"
-"  s empty$\n"
-"    { \"00\" }\n"
-"    { s\n"
-"      str.to.int #10 + int.to.str$\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {calc.label}\n"
-"{ type$ \"book\" =\n"
-"  type$ \"inbook\" =\n"
-"  or\n"
-"    'author.editor.key.label\n"
-"    { type$ \"proceedings\" =\n"
-"      'editor.key.organization.label\n"
-"      { type$ \"manual\" =\n"
-"          'author.key.organization.label\n"
-"          'author.key.label\n"
-"        if$\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"  duplicate$\n"
-"\n"
-"  year empty$\n"
-"    'skip$\n"
-"    { \", \" * }\n"
-"  if$\n"
-"  year field.or.null purify$ *  % CHANGED - pfps - 15 Feb 1989\n"
-"  'label :=\n"
-"\n"
-"  year field.or.null purify$\n"
-"  #-1 #4 substring$ \n"
-"  sortify.fourdigit \n"
-"  \"  \" *\n"
-"  month field.or.null month.to.int int.to.str$ sortify.twodigit *\n"
-"  \"  \" *  \n"
-"  get.day int.to.str$ sortify.twodigit *\n"
-"  \"  \" *\n"
-"  * sortify 'sort.label :=\n"
-"}\n"
-"\n"
-"FUNCTION {sort.format.names}\n"
-"{ 's :=\n"
-"  #1 'nameptr :=\n"
-"  \"\"\n"
-"  s num.names$ 'numnames :=\n"
-"  numnames 'namesleft :=\n"
-"    { namesleft #0 > }\n"
-"    { nameptr #1 >\n"
-"      { \"   \" * }\n"
-"      'skip$\n"
-"      if$\n"
-"      s nameptr \"{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}\" format.name$ 't :=\n"
-"      nameptr numnames = t \"others\" = and\n"
-"      { \"et al.\" * }\n"
-"      { t sortify * }\n"
-"      if$\n"
-"      nameptr #1 + 'nameptr :=\n"
-"      namesleft #1 - 'namesleft :=\n"
-"    }\n"
-"  while$\n"
-"}\n"
-"\n"
-"FUNCTION {sort.format.title}\n"
-"{ 't :=\n"
-"  \"A \" #2\n"
-"    \"An \" #3\n"
-"      \"The \" #4 t chop.word\n"
-"    chop.word\n"
-"  chop.word\n"
-"  sortify\n"
-"  #1 global.max$ substring$\n"
-"}\n"
-"\n"
-"FUNCTION {author.sort}\n"
-"{ author empty$\n"
-"    { key empty$\n"
-"      { \"to sort, need author or key in \" cite$ * warning$\n"
-"        \"\"\n"
-"      }\n"
-"      { key sortify }\n"
-"      if$\n"
-"    }\n"
-"    { author sort.format.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.editor.sort}\n"
-"{ author empty$\n"
-"    { editor empty$\n"
-"      { key empty$\n"
-"          { \"to sort, need author, editor, or key in \" cite$ * warning$\n"
-"            \"\"\n"
-"          }\n"
-"          { key sortify }\n"
-"        if$\n"
-"      }\n"
-"      { editor sort.format.names }\n"
-"      if$\n"
-"    }\n"
-"    { author sort.format.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.organization.sort}\n"
-"{ author empty$\n"
-"    { organization empty$\n"
-"      { key empty$\n"
-"          { \"to sort, need author, organization, or key in \" cite$ * warning$\n"
-"            \"\"\n"
-"          }\n"
-"          { key sortify }\n"
-"        if$\n"
-"      }\n"
-"      { \"The \" #4 organization chop.word sortify }\n"
-"      if$\n"
-"    }\n"
-"    { author sort.format.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {editor.organization.sort}\n"
-"{ editor empty$\n"
-"    { organization empty$\n"
-"      { key empty$\n"
-"          { \"to sort, need editor, organization, or key in \" cite$ * warning$\n"
-"            \"\"\n"
-"          }\n"
-"          { key sortify }\n"
-"        if$\n"
-"      }\n"
-"      { \"The \" #4 organization chop.word sortify }\n"
-"      if$\n"
-"    }\n"
-"    { editor sort.format.names }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {presort}\n"
-"{ calc.label\n"
-"  sort.label\n"
-"  \"    \"\n"
-"  *\n"
-"  type$ \"book\" =\n"
-"  type$ \"inbook\" =\n"
-"  or\n"
-"    'author.editor.sort\n"
-"    { type$ \"proceedings\" =\n"
-"      'editor.organization.sort\n"
-"      { type$ \"manual\" =\n"
-"          'author.organization.sort\n"
-"          'author.sort\n"
-"        if$\n"
-"      }\n"
-"      if$\n"
-"    }\n"
-"  if$\n"
-"  *\n"
-"  \"    \"\n"
-"  *\n"
-"  year field.or.null sortify\n"
-"  *\n"
-"  \"    \"\n"
-"  *\n"
-"  title field.or.null\n"
-"  sort.format.title\n"
-"  *\n"
-"  #1 entry.max$ substring$\n"
-"  'sort.key$ :=\n"
-"}\n"
-"\n"
-"ITERATE {presort}\n"
-"\n"
-"SORT\n"
-"\n"
-"STRINGS { longest.label last.sort.label next.extra }\n"
-"\n"
-"INTEGERS { longest.label.width last.extra.num }\n"
-"\n"
-"FUNCTION {initialize.longest.label}\n"
-"{ \"\" 'longest.label :=\n"
-"  #0 int.to.chr$ 'last.sort.label :=\n"
-"  \"\" 'next.extra :=\n"
-"  #0 'longest.label.width :=\n"
-"  #0 'last.extra.num :=\n"
-"}\n"
-"\n"
-"FUNCTION {forward.pass}\n"
-"{ last.sort.label sort.label =\n"
-"    { last.extra.num #1 + 'last.extra.num :=\n"
-"      last.extra.num int.to.chr$ 'extra.label :=\n"
-"    }\n"
-"    { \"a\" chr.to.int$ 'last.extra.num :=\n"
-"      \"\" 'extra.label :=\n"
-"      sort.label 'last.sort.label :=\n"
-"    }\n"
-"  if$\n"
-"}\n"
-"\n"
-"FUNCTION {reverse.pass}\n"
-"{ next.extra \"b\" =\n"
-"    { \"a\" 'extra.label := }\n"
-"    'skip$\n"
-"  if$\n"
-"  label extra.label * 'label :=\n"
-"  label width$ longest.label.width >\n"
-"    { label 'longest.label :=\n"
-"      label width$ 'longest.label.width :=\n"
-"    }\n"
-"    'skip$\n"
-"  if$\n"
-"  extra.label 'next.extra :=\n"
-"}\n"
-"\n"
-"EXECUTE {initialize.longest.label}\n"
-"\n"
-"ITERATE {forward.pass}\n"
-"\n"
-"REVERSE {reverse.pass}\n"
-"\n"
-"FUNCTION {begin.bib}\n"
-"{\n"
-"  \"# label-style: default\" write$ newline$\n"
-"}\n"
-"\n"
-"EXECUTE {begin.bib}\n"
-"\n"
-"EXECUTE {init.state.consts}\n"
-"\n"
-"ITERATE {call.type$}\n"
-"\n"
-"FUNCTION {end.bib}\n"
-"{ newline$\n"
-"}\n"
-"\n"
-"EXECUTE {end.bib}\n"
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
deleted file mode 100644 (file)
index 38ffa19..0000000
+++ /dev/null
@@ -1,1357 +0,0 @@
-"/* The standard CSS for doxygen $doxygenversion */\n"
-"\n"
-"body, table, div, p, dl {\n"
-"      font: 400 14px/22px Roboto,sans-serif;\n"
-"}\n"
-"\n"
-"/* @group Heading Levels */\n"
-"\n"
-"h1.groupheader {\n"
-"      font-size: 150%;\n"
-"}\n"
-"\n"
-".title {\n"
-"      font: 400 14px/28px Roboto,sans-serif;\n"
-"      font-size: 150%;\n"
-"      font-weight: bold;\n"
-"      margin: 10px 2px;\n"
-"}\n"
-"\n"
-"h2.groupheader {\n"
-"      border-bottom: 1px solid ##99;\n"
-"      color: ##44;\n"
-"      font-size: 150%;\n"
-"      font-weight: normal;\n"
-"      margin-top: 1.75em;\n"
-"      padding-top: 8px;\n"
-"      padding-bottom: 4px;\n"
-"      width: 100%;\n"
-"}\n"
-"\n"
-"h3.groupheader {\n"
-"      font-size: 100%;\n"
-"}\n"
-"\n"
-"h1, h2, h3, h4, h5, h6 {\n"
-"      -webkit-transition: text-shadow 0.5s linear;\n"
-"      -moz-transition: text-shadow 0.5s linear;\n"
-"      -ms-transition: text-shadow 0.5s linear;\n"
-"      -o-transition: text-shadow 0.5s linear;\n"
-"      transition: text-shadow 0.5s linear;\n"
-"      margin-right: 15px;\n"
-"}\n"
-"\n"
-"h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n"
-"      text-shadow: 0 0 15px cyan;\n"
-"}\n"
-"\n"
-"dt {\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"div.multicol {\n"
-"      -moz-column-gap: 1em;\n"
-"      -webkit-column-gap: 1em;\n"
-"      -moz-column-count: 3;\n"
-"      -webkit-column-count: 3;\n"
-"}\n"
-"\n"
-"p.startli, p.startdd, p.starttd {\n"
-"      margin-top: 2px;\n"
-"}\n"
-"\n"
-"p.endli {\n"
-"      margin-bottom: 0px;\n"
-"}\n"
-"\n"
-"p.enddd {\n"
-"      margin-bottom: 4px;\n"
-"}\n"
-"\n"
-"p.endtd {\n"
-"      margin-bottom: 2px;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"caption {\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"span.legend {\n"
-"        font-size: 70%;\n"
-"        text-align: center;\n"
-"}\n"
-"\n"
-"h3.version {\n"
-"        font-size: 90%;\n"
-"        text-align: center;\n"
-"}\n"
-"\n"
-"div.qindex, div.navtab{\n"
-"      background-color: ##ee;\n"
-"      border: 1px solid ##b0;\n"
-"      text-align: center;\n"
-"}\n"
-"\n"
-"div.qindex, div.navpath {\n"
-"      width: 100%;\n"
-"      line-height: 140%;\n"
-"}\n"
-"\n"
-"div.navtab {\n"
-"      margin-right: 15px;\n"
-"}\n"
-"\n"
-"/* @group Link Styling */\n"
-"\n"
-"a {\n"
-"      color: ##50;\n"
-"      font-weight: normal;\n"
-"      text-decoration: none;\n"
-"}\n"
-"\n"
-".contents a:visited {\n"
-"      color: ##60;\n"
-"}\n"
-"\n"
-"a:hover {\n"
-"      text-decoration: underline;\n"
-"}\n"
-"\n"
-"a.qindex {\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"a.qindexHL {\n"
-"      font-weight: bold;\n"
-"      background-color: ##AA;\n"
-"      color: #ffffff;\n"
-"      border: 1px double ##98;\n"
-"}\n"
-"\n"
-".contents a.qindexHL:visited {\n"
-"        color: #ffffff;\n"
-"}\n"
-"\n"
-"a.el {\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"a.elRef {\n"
-"}\n"
-"\n"
-"a.code, a.code:visited, a.line, a.line:visited {\n"
-"      color: #4665A2; \n"
-"}\n"
-"\n"
-"a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n"
-"      color: #4665A2; \n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"dl.el {\n"
-"      margin-left: -1cm;\n"
-"}\n"
-"\n"
-"pre.fragment {\n"
-"        border: 1px solid #C4CFE5;\n"
-"        background-color: #FBFCFD;\n"
-"        padding: 4px 6px;\n"
-"        margin: 4px 8px 4px 2px;\n"
-"        overflow: auto;\n"
-"        word-wrap: break-word;\n"
-"        font-size:  9pt;\n"
-"        line-height: 125%;\n"
-"        font-family: monospace, fixed;\n"
-"        font-size: 105%;\n"
-"}\n"
-"\n"
-"div.fragment {\n"
-"        padding: 0px;\n"
-"        margin: 0px;\n"
-"      background-color: ##FC;\n"
-"      border: 1px solid ##CC;\n"
-"}\n"
-"\n"
-"div.line {\n"
-"      font-family: monospace, fixed;\n"
-"        font-size: 13px;\n"
-"      min-height: 13px;\n"
-"      line-height: 1.0;\n"
-"      text-wrap: unrestricted;\n"
-"      white-space: -moz-pre-wrap; /* Moz */\n"
-"      white-space: -pre-wrap;     /* Opera 4-6 */\n"
-"      white-space: -o-pre-wrap;   /* Opera 7 */\n"
-"      white-space: pre-wrap;      /* CSS3  */\n"
-"      word-wrap: break-word;      /* IE 5.5+ */\n"
-"      text-indent: -53px;\n"
-"      padding-left: 53px;\n"
-"      padding-bottom: 0px;\n"
-"      margin: 0px;\n"
-"      -webkit-transition-property: background-color, box-shadow;\n"
-"      -webkit-transition-duration: 0.5s;\n"
-"      -moz-transition-property: background-color, box-shadow;\n"
-"      -moz-transition-duration: 0.5s;\n"
-"      -ms-transition-property: background-color, box-shadow;\n"
-"      -ms-transition-duration: 0.5s;\n"
-"      -o-transition-property: background-color, box-shadow;\n"
-"      -o-transition-duration: 0.5s;\n"
-"      transition-property: background-color, box-shadow;\n"
-"      transition-duration: 0.5s;\n"
-"}\n"
-"\n"
-"div.line.glow {\n"
-"      background-color: cyan;\n"
-"      box-shadow: 0 0 10px cyan;\n"
-"}\n"
-"\n"
-"\n"
-"span.lineno {\n"
-"      padding-right: 4px;\n"
-"      text-align: right;\n"
-"      border-right: 2px solid #0F0;\n"
-"      background-color: #E8E8E8;\n"
-"        white-space: pre;\n"
-"}\n"
-"span.lineno a {\n"
-"      background-color: #D8D8D8;\n"
-"}\n"
-"\n"
-"span.lineno a:hover {\n"
-"      background-color: #C8C8C8;\n"
-"}\n"
-"\n"
-"div.ah {\n"
-"      background-color: black;\n"
-"      font-weight: bold;\n"
-"      color: #ffffff;\n"
-"      margin-bottom: 3px;\n"
-"      margin-top: 3px;\n"
-"      padding: 0.2em;\n"
-"      border: solid thin #333;\n"
-"      border-radius: 0.5em;\n"
-"      -webkit-border-radius: .5em;\n"
-"      -moz-border-radius: .5em;\n"
-"      box-shadow: 2px 2px 3px #999;\n"
-"      -webkit-box-shadow: 2px 2px 3px #999;\n"
-"      -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n"
-"      background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n"
-"      background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n"
-"}\n"
-"\n"
-"div.groupHeader {\n"
-"      margin-left: 16px;\n"
-"      margin-top: 12px;\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"div.groupText {\n"
-"      margin-left: 16px;\n"
-"      font-style: italic;\n"
-"}\n"
-"\n"
-"body {\n"
-"      background-color: white;\n"
-"      color: black;\n"
-"        margin: 0;\n"
-"}\n"
-"\n"
-"div.contents {\n"
-"      margin-top: 10px;\n"
-"      margin-left: 12px;\n"
-"      margin-right: 8px;\n"
-"}\n"
-"\n"
-"td.indexkey {\n"
-"      background-color: ##ee;\n"
-"      font-weight: bold;\n"
-"      border: 1px solid ##cc;\n"
-"      margin: 2px 0px 2px 0;\n"
-"      padding: 2px 10px;\n"
-"        white-space: nowrap;\n"
-"        vertical-align: top;\n"
-"}\n"
-"\n"
-"td.indexvalue {\n"
-"      background-color: ##ee;\n"
-"      border: 1px solid ##cc;\n"
-"      padding: 2px 10px;\n"
-"      margin: 2px 0px;\n"
-"}\n"
-"\n"
-"tr.memlist {\n"
-"      background-color: ##f0;\n"
-"}\n"
-"\n"
-"p.formulaDsp {\n"
-"      text-align: center;\n"
-"}\n"
-"\n"
-"img.formulaDsp {\n"
-"      \n"
-"}\n"
-"\n"
-"img.formulaInl {\n"
-"      vertical-align: middle;\n"
-"}\n"
-"\n"
-"div.center {\n"
-"      text-align: center;\n"
-"        margin-top: 0px;\n"
-"        margin-bottom: 0px;\n"
-"        padding: 0px;\n"
-"}\n"
-"\n"
-"div.center img {\n"
-"      border: 0px;\n"
-"}\n"
-"\n"
-"address.footer {\n"
-"      text-align: right;\n"
-"      padding-right: 12px;\n"
-"}\n"
-"\n"
-"img.footer {\n"
-"      border: 0px;\n"
-"      vertical-align: middle;\n"
-"}\n"
-"\n"
-"/* @group Code Colorization */\n"
-"\n"
-"span.keyword {\n"
-"      color: #008000\n"
-"}\n"
-"\n"
-"span.keywordtype {\n"
-"      color: #604020\n"
-"}\n"
-"\n"
-"span.keywordflow {\n"
-"      color: #e08000\n"
-"}\n"
-"\n"
-"span.comment {\n"
-"      color: #800000\n"
-"}\n"
-"\n"
-"span.preprocessor {\n"
-"      color: #806020\n"
-"}\n"
-"\n"
-"span.stringliteral {\n"
-"      color: #002080\n"
-"}\n"
-"\n"
-"span.charliteral {\n"
-"      color: #008080\n"
-"}\n"
-"\n"
-"span.vhdldigit { \n"
-"      color: #ff00ff \n"
-"}\n"
-"\n"
-"span.vhdlchar { \n"
-"      color: #000000 \n"
-"}\n"
-"\n"
-"span.vhdlkeyword { \n"
-"      color: #700070 \n"
-"}\n"
-"\n"
-"span.vhdllogic { \n"
-"      color: #ff0000 \n"
-"}\n"
-"\n"
-"blockquote {\n"
-"        background-color: ##F8;\n"
-"        border-left: 2px solid ##AA;\n"
-"        margin: 0 24px 0 4px;\n"
-"        padding: 0 12px 0 16px;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/*\n"
-".search {\n"
-"      color: #003399;\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"form.search {\n"
-"      margin-bottom: 0px;\n"
-"      margin-top: 0px;\n"
-"}\n"
-"\n"
-"input.search {\n"
-"      font-size: 75%;\n"
-"      color: #000080;\n"
-"      font-weight: normal;\n"
-"      background-color: #e8eef2;\n"
-"}\n"
-"*/\n"
-"\n"
-"td.tiny {\n"
-"      font-size: 75%;\n"
-"}\n"
-"\n"
-".dirtab {\n"
-"      padding: 4px;\n"
-"      border-collapse: collapse;\n"
-"      border: 1px solid ##b0;\n"
-"}\n"
-"\n"
-"th.dirtab {\n"
-"      background: ##ee;\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"hr {\n"
-"      height: 0px;\n"
-"      border: none;\n"
-"      border-top: 1px solid ##66;\n"
-"}\n"
-"\n"
-"hr.footer {\n"
-"      height: 1px;\n"
-"}\n"
-"\n"
-"/* @group Member Descriptions */\n"
-"\n"
-"table.memberdecls {\n"
-"      border-spacing: 0px;\n"
-"      padding: 0px;\n"
-"}\n"
-"\n"
-".memberdecls td, .fieldtable tr {\n"
-"      -webkit-transition-property: background-color, box-shadow;\n"
-"      -webkit-transition-duration: 0.5s;\n"
-"      -moz-transition-property: background-color, box-shadow;\n"
-"      -moz-transition-duration: 0.5s;\n"
-"      -ms-transition-property: background-color, box-shadow;\n"
-"      -ms-transition-duration: 0.5s;\n"
-"      -o-transition-property: background-color, box-shadow;\n"
-"      -o-transition-duration: 0.5s;\n"
-"      transition-property: background-color, box-shadow;\n"
-"      transition-duration: 0.5s;\n"
-"}\n"
-"\n"
-".memberdecls td.glow, .fieldtable tr.glow {\n"
-"      background-color: cyan;\n"
-"      box-shadow: 0 0 15px cyan;\n"
-"}\n"
-"\n"
-".mdescLeft, .mdescRight,\n"
-".memItemLeft, .memItemRight,\n"
-".memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n"
-"      background-color: ##FA;\n"
-"      border: none;\n"
-"      margin: 4px;\n"
-"      padding: 1px 0 0 8px;\n"
-"}\n"
-"\n"
-".mdescLeft, .mdescRight {\n"
-"      padding: 0px 8px 4px 8px;\n"
-"      color: #555;\n"
-"}\n"
-"\n"
-".memSeparator {\n"
-"        border-bottom: 1px solid #DEE4F0;\n"
-"        line-height: 1px;\n"
-"        margin: 0px;\n"
-"        padding: 0px;\n"
-"}\n"
-"\n"
-".memItemLeft, .memTemplItemLeft {\n"
-"        white-space: nowrap;\n"
-"}\n"
-"\n"
-".memItemRight {\n"
-"      width: 100%;\n"
-"}\n"
-"\n"
-".memTemplParams {\n"
-"      color: ##60;\n"
-"        white-space: nowrap;\n"
-"      font-size: 80%;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/* @group Member Details */\n"
-"\n"
-"/* Styles for detailed member documentation */\n"
-"\n"
-".memtemplate {\n"
-"      font-size: 80%;\n"
-"      color: ##60;\n"
-"      font-weight: normal;\n"
-"      margin-left: 9px;\n"
-"}\n"
-"\n"
-".memnav {\n"
-"      background-color: ##ee;\n"
-"      border: 1px solid ##b0;\n"
-"      text-align: center;\n"
-"      margin: 2px;\n"
-"      margin-right: 15px;\n"
-"      padding: 2px;\n"
-"}\n"
-"\n"
-".mempage {\n"
-"      width: 100%;\n"
-"}\n"
-"\n"
-".memitem {\n"
-"      padding: 0;\n"
-"      margin-bottom: 10px;\n"
-"      margin-right: 5px;\n"
-"        -webkit-transition: box-shadow 0.5s linear;\n"
-"        -moz-transition: box-shadow 0.5s linear;\n"
-"        -ms-transition: box-shadow 0.5s linear;\n"
-"        -o-transition: box-shadow 0.5s linear;\n"
-"        transition: box-shadow 0.5s linear;\n"
-"        display: table !important;\n"
-"        width: 100%;\n"
-"}\n"
-"\n"
-".memitem.glow {\n"
-"         box-shadow: 0 0 15px cyan;\n"
-"}\n"
-"\n"
-".memname {\n"
-"        font-weight: bold;\n"
-"        margin-left: 6px;\n"
-"}\n"
-"\n"
-".memname td {\n"
-"      vertical-align: bottom;\n"
-"}\n"
-"\n"
-".memproto, dl.reflist dt {\n"
-"        border-top: 1px solid ##B4;\n"
-"        border-left: 1px solid ##B4;\n"
-"        border-right: 1px solid ##B4;\n"
-"        padding: 6px 0px 6px 0px;\n"
-"        color: ##2b;\n"
-"        font-weight: bold;\n"
-"        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-"        background-image:url('nav_f.png');\n"
-"        background-repeat:repeat-x;\n"
-"        background-color: ##E6;\n"
-"        /* opera specific markup */\n"
-"        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"        border-top-right-radius: 4px;\n"
-"        border-top-left-radius: 4px;\n"
-"        /* firefox specific markup */\n"
-"        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n"
-"        -moz-border-radius-topright: 4px;\n"
-"        -moz-border-radius-topleft: 4px;\n"
-"        /* webkit specific markup */\n"
-"        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"        -webkit-border-top-right-radius: 4px;\n"
-"        -webkit-border-top-left-radius: 4px;\n"
-"\n"
-"}\n"
-"\n"
-".memdoc, dl.reflist dd {\n"
-"        border-bottom: 1px solid ##B4;      \n"
-"        border-left: 1px solid ##B4;      \n"
-"        border-right: 1px solid ##B4; \n"
-"        padding: 6px 10px 2px 10px;\n"
-"        background-color: ##FC;\n"
-"        border-top-width: 0;\n"
-"        background-image:url('nav_g.png');\n"
-"        background-repeat:repeat-x;\n"
-"        background-color: #FFFFFF;\n"
-"        /* opera specific markup */\n"
-"        border-bottom-left-radius: 4px;\n"
-"        border-bottom-right-radius: 4px;\n"
-"        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"        /* firefox specific markup */\n"
-"        -moz-border-radius-bottomleft: 4px;\n"
-"        -moz-border-radius-bottomright: 4px;\n"
-"        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n"
-"        /* webkit specific markup */\n"
-"        -webkit-border-bottom-left-radius: 4px;\n"
-"        -webkit-border-bottom-right-radius: 4px;\n"
-"        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"}\n"
-"\n"
-"dl.reflist dt {\n"
-"        padding: 5px;\n"
-"}\n"
-"\n"
-"dl.reflist dd {\n"
-"        margin: 0px 0px 10px 0px;\n"
-"        padding: 5px;\n"
-"}\n"
-"\n"
-".paramkey {\n"
-"      text-align: right;\n"
-"}\n"
-"\n"
-".paramtype {\n"
-"      white-space: nowrap;\n"
-"}\n"
-"\n"
-".paramname {\n"
-"      color: #602020;\n"
-"      white-space: nowrap;\n"
-"}\n"
-".paramname em {\n"
-"      font-style: normal;\n"
-"}\n"
-".paramname code {\n"
-"        line-height: 14px;\n"
-"}\n"
-"\n"
-".params, .retval, .exception, .tparams {\n"
-"        margin-left: 0px;\n"
-"        padding-left: 0px;\n"
-"}       \n"
-"\n"
-".params .paramname, .retval .paramname {\n"
-"        font-weight: bold;\n"
-"        vertical-align: top;\n"
-"}\n"
-"        \n"
-".params .paramtype {\n"
-"        font-style: italic;\n"
-"        vertical-align: top;\n"
-"}       \n"
-"        \n"
-".params .paramdir {\n"
-"        font-family: \"courier new\",courier,monospace;\n"
-"        vertical-align: top;\n"
-"}\n"
-"\n"
-"table.mlabels {\n"
-"      border-spacing: 0px;\n"
-"}\n"
-"\n"
-"td.mlabels-left {\n"
-"      width: 100%;\n"
-"      padding: 0px;\n"
-"}\n"
-"\n"
-"td.mlabels-right {\n"
-"      vertical-align: bottom;\n"
-"      padding: 0px;\n"
-"      white-space: nowrap;\n"
-"}\n"
-"\n"
-"span.mlabels {\n"
-"        margin-left: 8px;\n"
-"}\n"
-"\n"
-"span.mlabel {\n"
-"        background-color: ##88;\n"
-"        border-top:1px solid ##70;\n"
-"        border-left:1px solid ##70;\n"
-"        border-right:1px solid ##CC;\n"
-"        border-bottom:1px solid ##CC;\n"
-"      text-shadow: none;\n"
-"      color: white;\n"
-"      margin-right: 4px;\n"
-"      padding: 2px 3px;\n"
-"      border-radius: 3px;\n"
-"      font-size: 7pt;\n"
-"      white-space: nowrap;\n"
-"      vertical-align: middle;\n"
-"}\n"
-"\n"
-"\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/* these are for tree view when not used as main index */\n"
-"\n"
-"div.directory {\n"
-"        margin: 10px 0px;\n"
-"        border-top: 1px solid #A8B8D9;\n"
-"        border-bottom: 1px solid #A8B8D9;\n"
-"        width: 100%;\n"
-"}\n"
-"\n"
-".directory table {\n"
-"        border-collapse:collapse;\n"
-"}\n"
-"\n"
-".directory td {\n"
-"        margin: 0px;\n"
-"        padding: 0px;\n"
-"      vertical-align: top;\n"
-"}\n"
-"\n"
-".directory td.entry {\n"
-"        white-space: nowrap;\n"
-"        padding-right: 6px;\n"
-"      padding-top: 3px;\n"
-"}\n"
-"\n"
-".directory td.entry a {\n"
-"        outline:none;\n"
-"}\n"
-"\n"
-".directory td.entry a img {\n"
-"        border: none;\n"
-"}\n"
-"\n"
-".directory td.desc {\n"
-"        width: 100%;\n"
-"        padding-left: 6px;\n"
-"      padding-right: 6px;\n"
-"      padding-top: 3px;\n"
-"      border-left: 1px solid rgba(0,0,0,0.05);\n"
-"}\n"
-"\n"
-".directory tr.even {\n"
-"      padding-left: 6px;\n"
-"      background-color: ##F8;\n"
-"}\n"
-"\n"
-".directory img {\n"
-"      vertical-align: -30%;\n"
-"}\n"
-"\n"
-".directory .levels {\n"
-"        white-space: nowrap;\n"
-"        width: 100%;\n"
-"        text-align: right;\n"
-"        font-size: 9pt;\n"
-"}\n"
-"\n"
-".directory .levels span {\n"
-"        cursor: pointer;\n"
-"        padding-left: 2px;\n"
-"        padding-right: 2px;\n"
-"      color: ##50;\n"
-"}\n"
-"\n"
-"div.dynheader {\n"
-"        margin-top: 8px;\n"
-"      -webkit-touch-callout: none;\n"
-"      -webkit-user-select: none;\n"
-"      -khtml-user-select: none;\n"
-"      -moz-user-select: none;\n"
-"      -ms-user-select: none;\n"
-"      user-select: none;\n"
-"}\n"
-"\n"
-"address {\n"
-"      font-style: normal;\n"
-"      color: ##33;\n"
-"}\n"
-"\n"
-"table.doxtable {\n"
-"      border-collapse:collapse;\n"
-"        margin-top: 4px;\n"
-"        margin-bottom: 4px;\n"
-"}\n"
-"\n"
-"table.doxtable td, table.doxtable th {\n"
-"      border: 1px solid ##37;\n"
-"      padding: 3px 7px 2px;\n"
-"}\n"
-"\n"
-"table.doxtable th {\n"
-"      background-color: ##47;\n"
-"      color: #FFFFFF;\n"
-"      font-size: 110%;\n"
-"      padding-bottom: 4px;\n"
-"      padding-top: 5px;\n"
-"}\n"
-"\n"
-"table.fieldtable {\n"
-"        /*width: 100%;*/\n"
-"        margin-bottom: 10px;\n"
-"        border: 1px solid ##B4;\n"
-"        border-spacing: 0px;\n"
-"        -moz-border-radius: 4px;\n"
-"        -webkit-border-radius: 4px;\n"
-"        border-radius: 4px;\n"
-"        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n"
-"        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n"
-"        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n"
-"}\n"
-"\n"
-".fieldtable td, .fieldtable th {\n"
-"        padding: 3px 7px 2px;\n"
-"}\n"
-"\n"
-".fieldtable td.fieldtype, .fieldtable td.fieldname {\n"
-"        white-space: nowrap;\n"
-"        border-right: 1px solid ##B4;\n"
-"        border-bottom: 1px solid ##B4;\n"
-"        vertical-align: top;\n"
-"}\n"
-"\n"
-".fieldtable td.fieldname {\n"
-"        padding-top: 3px;\n"
-"}\n"
-"\n"
-".fieldtable td.fielddoc {\n"
-"        border-bottom: 1px solid ##B4;\n"
-"        /*width: 100%;*/\n"
-"}\n"
-"\n"
-".fieldtable td.fielddoc p:first-child {\n"
-"        margin-top: 0px;\n"
-"}       \n"
-"        \n"
-".fieldtable td.fielddoc p:last-child {\n"
-"        margin-bottom: 2px;\n"
-"}\n"
-"\n"
-".fieldtable tr:last-child td {\n"
-"        border-bottom: none;\n"
-"}\n"
-"\n"
-".fieldtable th {\n"
-"        background-image:url('nav_f.png');\n"
-"        background-repeat:repeat-x;\n"
-"        background-color: ##E6;\n"
-"        font-size: 90%;\n"
-"        color: ##2B;\n"
-"        padding-bottom: 4px;\n"
-"        padding-top: 5px;\n"
-"        text-align:left;\n"
-"        -moz-border-radius-topleft: 4px;\n"
-"        -moz-border-radius-topright: 4px;\n"
-"        -webkit-border-top-left-radius: 4px;\n"
-"        -webkit-border-top-right-radius: 4px;\n"
-"        border-top-left-radius: 4px;\n"
-"        border-top-right-radius: 4px;\n"
-"        border-bottom: 1px solid ##B4;\n"
-"}\n"
-"\n"
-"\n"
-".tabsearch {\n"
-"      top: 0px;\n"
-"      left: 10px;\n"
-"      height: 36px;\n"
-"      background-image: url('tab_b.png');\n"
-"      z-index: 101;\n"
-"      overflow: hidden;\n"
-"      font-size: 13px;\n"
-"}\n"
-"\n"
-".navpath ul\n"
-"{\n"
-"      font-size: 11px;\n"
-"      background-image:url('tab_b.png');\n"
-"      background-repeat:repeat-x;\n"
-"      background-position: 0 -5px;\n"
-"      height:30px;\n"
-"      line-height:30px;\n"
-"      color:##9b;\n"
-"      border:solid 1px ##ca;\n"
-"      overflow:hidden;\n"
-"      margin:0px;\n"
-"      padding:0px;\n"
-"}\n"
-"\n"
-".navpath li\n"
-"{\n"
-"      list-style-type:none;\n"
-"      float:left;\n"
-"      padding-left:10px;\n"
-"      padding-right:15px;\n"
-"      background-image:url('bc_s.png');\n"
-"      background-repeat:no-repeat;\n"
-"      background-position:right;\n"
-"      color:##45;\n"
-"}\n"
-"\n"
-".navpath li.navelem a\n"
-"{\n"
-"      height:32px;\n"
-"      display:block;\n"
-"      text-decoration: none;\n"
-"      outline: none;\n"
-"      color: ##30;\n"
-"      font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
-"      text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-"      text-decoration: none;        \n"
-"}\n"
-"\n"
-".navpath li.navelem a:hover\n"
-"{\n"
-"      color:##80;\n"
-"}\n"
-"\n"
-".navpath li.footer\n"
-"{\n"
-"        list-style-type:none;\n"
-"        float:right;\n"
-"        padding-left:10px;\n"
-"        padding-right:15px;\n"
-"        background-image:none;\n"
-"        background-repeat:no-repeat;\n"
-"        background-position:right;\n"
-"        color:##45;\n"
-"        font-size: 8pt;\n"
-"}\n"
-"\n"
-"\n"
-"div.summary\n"
-"{\n"
-"      float: right;\n"
-"      font-size: 8pt;\n"
-"      padding-right: 5px;\n"
-"      width: 50%;\n"
-"      text-align: right;\n"
-"}       \n"
-"\n"
-"div.summary a\n"
-"{\n"
-"      white-space: nowrap;\n"
-"}\n"
-"\n"
-"div.ingroups\n"
-"{\n"
-"      font-size: 8pt;\n"
-"      width: 50%;\n"
-"      text-align: left;\n"
-"}\n"
-"\n"
-"div.ingroups a\n"
-"{\n"
-"      white-space: nowrap;\n"
-"}\n"
-"\n"
-"div.header\n"
-"{\n"
-"        background-image:url('nav_h.png');\n"
-"        background-repeat:repeat-x;\n"
-"      background-color: ##FA;\n"
-"      margin:  0px;\n"
-"      border-bottom: 1px solid ##CC;\n"
-"}\n"
-"\n"
-"div.headertitle\n"
-"{\n"
-"      padding: 5px 5px 5px 10px;\n"
-"}\n"
-"\n"
-"dl\n"
-"{\n"
-"        padding: 0 0 0 10px;\n"
-"}\n"
-"\n"
-"/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\n"
-"dl.section\n"
-"{\n"
-"      margin-left: 0px;\n"
-"      padding-left: 0px;\n"
-"}\n"
-"\n"
-"dl.note\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #D0C000;\n"
-"}\n"
-"\n"
-"dl.warning, dl.attention\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #FF0000;\n"
-"}\n"
-"\n"
-"dl.pre, dl.post, dl.invariant\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #00D000;\n"
-"}\n"
-"\n"
-"dl.deprecated\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #505050;\n"
-"}\n"
-"\n"
-"dl.todo\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #00C0E0;\n"
-"}\n"
-"\n"
-"dl.test\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #3030E0;\n"
-"}\n"
-"\n"
-"dl.bug\n"
-"{\n"
-"        margin-left:-7px;\n"
-"        padding-left: 3px;\n"
-"        border-left:4px solid;\n"
-"        border-color: #C08050;\n"
-"}\n"
-"\n"
-"dl.section dd {\n"
-"      margin-bottom: 6px;\n"
-"}\n"
-"\n"
-"\n"
-"#projectlogo\n"
-"{\n"
-"      text-align: center;\n"
-"      vertical-align: bottom;\n"
-"      border-collapse: separate;\n"
-"}\n"
-" \n"
-"#projectlogo img\n"
-"{ \n"
-"      border: 0px none;\n"
-"}\n"
-" \n"
-"#projectname\n"
-"{\n"
-"      font: 300% Tahoma, Arial,sans-serif;\n"
-"      margin: 0px;\n"
-"      padding: 2px 0px;\n"
-"}\n"
-"    \n"
-"#projectbrief\n"
-"{\n"
-"      font: 120% Tahoma, Arial,sans-serif;\n"
-"      margin: 0px;\n"
-"      padding: 0px;\n"
-"}\n"
-"\n"
-"#projectnumber\n"
-"{\n"
-"      font: 50% Tahoma, Arial,sans-serif;\n"
-"      margin: 0px;\n"
-"      padding: 0px;\n"
-"}\n"
-"\n"
-"#titlearea\n"
-"{\n"
-"      padding: 0px;\n"
-"      margin: 0px;\n"
-"      width: 100%;\n"
-"      border-bottom: 1px solid ##70;\n"
-"}\n"
-"\n"
-".image\n"
-"{\n"
-"        text-align: center;\n"
-"}\n"
-"\n"
-".dotgraph\n"
-"{\n"
-"        text-align: center;\n"
-"}\n"
-"\n"
-".mscgraph\n"
-"{\n"
-"        text-align: center;\n"
-"}\n"
-"\n"
-".caption\n"
-"{\n"
-"      font-weight: bold;\n"
-"}\n"
-"\n"
-"div.zoom\n"
-"{\n"
-"      border: 1px solid ##A0;\n"
-"}\n"
-"\n"
-"dl.citelist {\n"
-"        margin-bottom:50px;\n"
-"}\n"
-"\n"
-"dl.citelist dt {\n"
-"        color:##40;\n"
-"        float:left;\n"
-"        font-weight:bold;\n"
-"        margin-right:10px;\n"
-"        padding:5px;\n"
-"}\n"
-"\n"
-"dl.citelist dd {\n"
-"        margin:2px 0;\n"
-"        padding:5px 0;\n"
-"}\n"
-"\n"
-"div.toc {\n"
-"        padding: 14px 25px;\n"
-"        background-color: ##F6;\n"
-"        border: 1px solid ##DD;\n"
-"        border-radius: 7px 7px 7px 7px;\n"
-"        float: right;\n"
-"        height: auto;\n"
-"        margin: 0 20px 10px 10px;\n"
-"        width: 200px;\n"
-"}\n"
-"\n"
-"div.toc li {\n"
-"        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n"
-"        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n"
-"        margin-top: 5px;\n"
-"        padding-left: 10px;\n"
-"        padding-top: 2px;\n"
-"}\n"
-"\n"
-"div.toc h3 {\n"
-"        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n"
-"      color: ##60;\n"
-"        border-bottom: 0 none;\n"
-"        margin: 0;\n"
-"}\n"
-"\n"
-"div.toc ul {\n"
-"        list-style: none outside none;\n"
-"        border: medium none;\n"
-"        padding: 0px;\n"
-"}       \n"
-"\n"
-"div.toc li.level1 {\n"
-"        margin-left: 0px;\n"
-"}\n"
-"\n"
-"div.toc li.level2 {\n"
-"        margin-left: 15px;\n"
-"}\n"
-"\n"
-"div.toc li.level3 {\n"
-"        margin-left: 30px;\n"
-"}\n"
-"\n"
-"div.toc li.level4 {\n"
-"        margin-left: 45px;\n"
-"}\n"
-"\n"
-".inherit_header {\n"
-"        font-weight: bold;\n"
-"        color: gray;\n"
-"        cursor: pointer;\n"
-"      -webkit-touch-callout: none;\n"
-"      -webkit-user-select: none;\n"
-"      -khtml-user-select: none;\n"
-"      -moz-user-select: none;\n"
-"      -ms-user-select: none;\n"
-"      user-select: none;\n"
-"}\n"
-"\n"
-".inherit_header td {\n"
-"        padding: 6px 0px 2px 5px;\n"
-"}\n"
-"\n"
-".inherit {\n"
-"        display: none;\n"
-"}\n"
-"\n"
-"tr.heading h2 {\n"
-"        margin-top: 12px;\n"
-"        margin-bottom: 4px;\n"
-"}\n"
-"\n"
-"/* tooltip related style info */\n"
-"\n"
-".ttc {\n"
-"        position: absolute;\n"
-"        display: none;\n"
-"}\n"
-"\n"
-"#powerTip {\n"
-"      cursor: default;\n"
-"      white-space: nowrap;\n"
-"      background-color: white;\n"
-"      border: 1px solid gray;\n"
-"      border-radius: 4px 4px 4px 4px;\n"
-"      box-shadow: 1px 1px 7px gray;\n"
-"      display: none;\n"
-"      font-size: smaller;\n"
-"      max-width: 80%;\n"
-"      opacity: 0.9;\n"
-"      padding: 1ex 1em 1em;\n"
-"      position: absolute;\n"
-"      z-index: 2147483647;\n"
-"}\n"
-"\n"
-"#powerTip div.ttdoc {\n"
-"        color: grey;\n"
-"      font-style: italic;\n"
-"}\n"
-"\n"
-"#powerTip div.ttname a {\n"
-"        font-weight: bold;\n"
-"}\n"
-"\n"
-"#powerTip div.ttname {\n"
-"        font-weight: bold;\n"
-"}\n"
-"\n"
-"#powerTip div.ttdeci {\n"
-"        color: #006318;\n"
-"}\n"
-"\n"
-"#powerTip div {\n"
-"        margin: 0px;\n"
-"        padding: 0px;\n"
-"        font: 12px/16px Roboto,sans-serif;\n"
-"}\n"
-"\n"
-"#powerTip:before, #powerTip:after {\n"
-"      content: \"\";\n"
-"      position: absolute;\n"
-"      margin: 0px;\n"
-"}\n"
-"\n"
-"#powerTip.n:after,  #powerTip.n:before,\n"
-"#powerTip.s:after,  #powerTip.s:before,\n"
-"#powerTip.w:after,  #powerTip.w:before,\n"
-"#powerTip.e:after,  #powerTip.e:before,\n"
-"#powerTip.ne:after, #powerTip.ne:before,\n"
-"#powerTip.se:after, #powerTip.se:before,\n"
-"#powerTip.nw:after, #powerTip.nw:before,\n"
-"#powerTip.sw:after, #powerTip.sw:before {\n"
-"      border: solid transparent;\n"
-"      content: \" \";\n"
-"      height: 0;\n"
-"      width: 0;\n"
-"      position: absolute;\n"
-"}\n"
-"\n"
-"#powerTip.n:after,  #powerTip.s:after,\n"
-"#powerTip.w:after,  #powerTip.e:after,\n"
-"#powerTip.nw:after, #powerTip.ne:after,\n"
-"#powerTip.sw:after, #powerTip.se:after {\n"
-"      border-color: rgba(255, 255, 255, 0);\n"
-"}\n"
-"\n"
-"#powerTip.n:before,  #powerTip.s:before,\n"
-"#powerTip.w:before,  #powerTip.e:before,\n"
-"#powerTip.nw:before, #powerTip.ne:before,\n"
-"#powerTip.sw:before, #powerTip.se:before {\n"
-"      border-color: rgba(128, 128, 128, 0);\n"
-"}\n"
-"\n"
-"#powerTip.n:after,  #powerTip.n:before,\n"
-"#powerTip.ne:after, #powerTip.ne:before,\n"
-"#powerTip.nw:after, #powerTip.nw:before {\n"
-"      top: 100%;\n"
-"}\n"
-"\n"
-"#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n"
-"      border-top-color: #ffffff;\n"
-"      border-width: 10px;\n"
-"      margin: 0px -10px;\n"
-"}\n"
-"#powerTip.n:before {\n"
-"      border-top-color: #808080;\n"
-"      border-width: 11px;\n"
-"      margin: 0px -11px;\n"
-"}\n"
-"#powerTip.n:after, #powerTip.n:before {\n"
-"      left: 50%;\n"
-"}\n"
-"\n"
-"#powerTip.nw:after, #powerTip.nw:before {\n"
-"      right: 14px;\n"
-"}\n"
-"\n"
-"#powerTip.ne:after, #powerTip.ne:before {\n"
-"      left: 14px;\n"
-"}\n"
-"\n"
-"#powerTip.s:after,  #powerTip.s:before,\n"
-"#powerTip.se:after, #powerTip.se:before,\n"
-"#powerTip.sw:after, #powerTip.sw:before {\n"
-"      bottom: 100%;\n"
-"}\n"
-"\n"
-"#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n"
-"      border-bottom-color: #ffffff;\n"
-"      border-width: 10px;\n"
-"      margin: 0px -10px;\n"
-"}\n"
-"\n"
-"#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n"
-"      border-bottom-color: #808080;\n"
-"      border-width: 11px;\n"
-"      margin: 0px -11px;\n"
-"}\n"
-"\n"
-"#powerTip.s:after, #powerTip.s:before {\n"
-"      left: 50%;\n"
-"}\n"
-"\n"
-"#powerTip.sw:after, #powerTip.sw:before {\n"
-"      right: 14px;\n"
-"}\n"
-"\n"
-"#powerTip.se:after, #powerTip.se:before {\n"
-"      left: 14px;\n"
-"}\n"
-"\n"
-"#powerTip.e:after, #powerTip.e:before {\n"
-"      left: 100%;\n"
-"}\n"
-"#powerTip.e:after {\n"
-"      border-left-color: #ffffff;\n"
-"      border-width: 10px;\n"
-"      top: 50%;\n"
-"      margin-top: -10px;\n"
-"}\n"
-"#powerTip.e:before {\n"
-"      border-left-color: #808080;\n"
-"      border-width: 11px;\n"
-"      top: 50%;\n"
-"      margin-top: -11px;\n"
-"}\n"
-"\n"
-"#powerTip.w:after, #powerTip.w:before {\n"
-"      right: 100%;\n"
-"}\n"
-"#powerTip.w:after {\n"
-"      border-right-color: #ffffff;\n"
-"      border-width: 10px;\n"
-"      top: 50%;\n"
-"      margin-top: -10px;\n"
-"}\n"
-"#powerTip.w:before {\n"
-"      border-right-color: #808080;\n"
-"      border-width: 11px;\n"
-"      top: 50%;\n"
-"      margin-top: -11px;\n"
-"}\n"
-"\n"
-"@media print\n"
-"{\n"
-"  #top { display: none; }\n"
-"  #side-nav { display: none; }\n"
-"  #nav-path { display: none; }\n"
-"  body { overflow:visible; }\n"
-"  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n"
-"  .summary { display: none; }\n"
-"  .memitem { page-break-inside: avoid; }\n"
-"  #doc-content\n"
-"  {\n"
-"    margin-left:0 !important;\n"
-"    height:auto !important;\n"
-"    width:auto !important;\n"
-"    overflow:inherit;\n"
-"    display:inline;\n"
-"  }\n"
-"}\n"
-"\n"
diff --git a/src/doxygen_sty.h b/src/doxygen_sty.h
deleted file mode 100644 (file)
index fedbd17..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-"\\NeedsTeXFormat{LaTeX2e}\n"
-"\\ProvidesPackage{doxygen}\n"
-"\n"
-"% Packages used by this style file\n"
-"\\RequirePackage{alltt}\n"
-"\\RequirePackage{array}\n"
-"\\RequirePackage{calc}\n"
-"\\RequirePackage{float}\n"
-"\\RequirePackage{ifthen}\n"
-"\\RequirePackage{verbatim}\n"
-"\\RequirePackage[table]{xcolor}\n"
-"\\RequirePackage{xtab}\n"
-"\n"
-"%---------- Internal commands used in this style file ----------------\n"
-"\n"
-"\\newcommand{\\ensurespace}[1]{%\n"
-"  \\begingroup%\n"
-"    \\setlength{\\dimen@}{#1}%\n"
-"    \\vskip\\z@\\@plus\\dimen@%\n"
-"    \\penalty -100\\vskip\\z@\\@plus -\\dimen@%\n"
-"    \\vskip\\dimen@%\n"
-"    \\penalty 9999%\n"
-"    \\vskip -\\dimen@%\n"
-"    \\vskip\\z@skip% hide the previous |\\vskip| from |\\addvspace|\n"
-"  \\endgroup%\n"
-"}\n"
-"\n"
-"\\newcommand{\\DoxyLabelFont}{}\n"
-"\\newcommand{\\entrylabel}[1]{%\n"
-"  {%\n"
-"    \\parbox[b]{\\labelwidth-4pt}{%\n"
-"      \\makebox[0pt][l]{\\DoxyLabelFont#1}%\n"
-"      \\vspace{1.5\\baselineskip}%\n"
-"    }%\n"
-"  }%\n"
-"}\n"
-"\n"
-"\\newenvironment{DoxyDesc}[1]{%\n"
-"  \\ensurespace{4\\baselineskip}%\n"
-"  \\begin{list}{}{%\n"
-"    \\settowidth{\\labelwidth}{20pt}%\n"
-"    \\setlength{\\parsep}{0pt}%\n"
-"    \\setlength{\\itemsep}{0pt}%\n"
-"    \\setlength{\\leftmargin}{\\labelwidth+\\labelsep}%\n"
-"    \\renewcommand{\\makelabel}{\\entrylabel}%\n"
-"  }%\n"
-"  \\item[#1]%\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"\\newsavebox{\\xrefbox}\n"
-"\\newlength{\\xreflength}\n"
-"\\newcommand{\\xreflabel}[1]{%\n"
-"  \\sbox{\\xrefbox}{#1}%\n"
-"  \\setlength{\\xreflength}{\\wd\\xrefbox}%\n"
-"  \\ifthenelse{\\xreflength>\\labelwidth}{%\n"
-"    \\begin{minipage}{\\textwidth}%\n"
-"      \\setlength{\\parindent}{0pt}%\n"
-"      \\hangindent=15pt\\bfseries #1\\vspace{1.2\\itemsep}%\n"
-"    \\end{minipage}%\n"
-"  }{%\n"
-"   \\parbox[b]{\\labelwidth}{\\makebox[0pt][l]{\\textbf{#1}}}%\n"
-"  }%\n"
-"}\n"
-"\n"
-"%---------- Commands used by doxygen LaTeX output generator ----------\n"
-"\n"
-"% Used by <pre> ... </pre>\n"
-"\\newenvironment{DoxyPre}{%\n"
-"  \\small%\n"
-"  \\begin{alltt}%\n"
-"}{%\n"
-"  \\end{alltt}%\n"
-"  \\normalsize%\n"
-"}\n"
-"\n"
-"% Used by @code ... @endcode\n"
-"\\newenvironment{DoxyCode}{%\n"
-"  \\par%\n"
-"  \\scriptsize%\n"
-"  \\begin{alltt}%\n"
-"}{%\n"
-"  \\end{alltt}%\n"
-"  \\normalsize%\n"
-"}\n"
-"\n"
-"% Used by @example, @include, @includelineno and @dontinclude\n"
-"\\newenvironment{DoxyCodeInclude}{%\n"
-"  \\DoxyCode%\n"
-"}{%\n"
-"  \\endDoxyCode%\n"
-"}\n"
-"\n"
-"% Used by @verbatim ... @endverbatim\n"
-"\\newenvironment{DoxyVerb}{%\n"
-"  \\footnotesize%\n"
-"  \\verbatim%\n"
-"}{%\n"
-"  \\endverbatim%\n"
-"  \\normalsize%\n"
-"}\n"
-"\n"
-"% Used by @verbinclude\n"
-"\\newenvironment{DoxyVerbInclude}{%\n"
-"  \\DoxyVerb%\n"
-"}{%\n"
-"  \\endDoxyVerb%\n"
-"}\n"
-"\n"
-"% Used by numbered lists (using '-#' or <ol> ... </ol>)\n"
-"\\newenvironment{DoxyEnumerate}{%\n"
-"  \\enumerate%\n"
-"}{%\n"
-"  \\endenumerate%\n"
-"}\n"
-"\n"
-"% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)\n"
-"\\newenvironment{DoxyItemize}{%\n"
-"  \\itemize%\n"
-"}{%\n"
-"  \\enditemize%\n"
-"}\n"
-"\n"
-"% Used by description lists (using <dl> ... </dl>)\n"
-"\\newenvironment{DoxyDescription}{%\n"
-"  \\description%\n"
-"}{%\n"
-"  \\enddescription%\n"
-"}\n"
-"\n"
-"% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc\n"
-"% (only if caption is specified)\n"
-"\\newenvironment{DoxyImage}{%\n"
-"  \\begin{figure}[H]%\n"
-"    \\begin{center}%\n"
-"}{%\n"
-"    \\end{center}%\n"
-"  \\end{figure}%\n"
-"}\n"
-"\n"
-"% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc\n"
-"% (only if no caption is specified)\n"
-"\\newenvironment{DoxyImageNoCaption}{%\n"
-"}{%\n"
-"}\n"
-"\n"
-"% Used by @attention\n"
-"\\newenvironment{DoxyAttention}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @author and @authors\n"
-"\\newenvironment{DoxyAuthor}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @date\n"
-"\\newenvironment{DoxyDate}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @invariant\n"
-"\\newenvironment{DoxyInvariant}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @note\n"
-"\\newenvironment{DoxyNote}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @post\n"
-"\\newenvironment{DoxyPostcond}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @pre\n"
-"\\newenvironment{DoxyPrecond}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @copyright\n"
-"\\newenvironment{DoxyCopyright}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @remark\n"
-"\\newenvironment{DoxyRemark}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @return and @returns\n"
-"\\newenvironment{DoxyReturn}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @since\n"
-"\\newenvironment{DoxySince}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @see\n"
-"\\newenvironment{DoxySeeAlso}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @version\n"
-"\\newenvironment{DoxyVersion}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @warning\n"
-"\\newenvironment{DoxyWarning}[1]{%\n"
-"  \\begin{DoxyDesc}{#1}%\n"
-"}{%\n"
-"  \\end{DoxyDesc}%\n"
-"}\n"
-"\n"
-"% Used by @internal\n"
-"\\newenvironment{DoxyInternal}[1]{%\n"
-"  \\paragraph*{#1}%\n"
-"}{%\n"
-"}\n"
-"\n"
-"% Used by @par and @paragraph\n"
-"\\newenvironment{DoxyParagraph}[1]{%\n"
-"  \\begin{list}{}{%\n"
-"    \\settowidth{\\labelwidth}{40pt}%\n"
-"    \\setlength{\\leftmargin}{\\labelwidth}%\n"
-"    \\setlength{\\parsep}{0pt}%\n"
-"    \\setlength{\\itemsep}{-4pt}%\n"
-"    \\renewcommand{\\makelabel}{\\entrylabel}%\n"
-"  }%\n"
-"  \\item[#1]%\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used by parameter lists\n"
-"\\newenvironment{DoxyParams}[2][]{%\n"
-"    \\par%\n"
-"    \\tabletail{\\hline}%\n"
-"    \\tablelasttail{\\hline}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\tablehead{}%\n"
-"    \\ifthenelse{\\equal{#1}{}}%\n"
-"    {\\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #2}\\\\[1ex]}%\n"
-"     \\begin{xtabular}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
-"                        p{0.805\\textwidth}|}}%\n"
-"    {\\ifthenelse{\\equal{#1}{1}}%\n"
-"      {\\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #2}\\\\[1ex]}%\n"
-"       \\begin{xtabular}{|>{\\centering}p{0.10\\textwidth}|%\n"
-"                         >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
-"                         p{0.678\\textwidth}|}}%\n"
-"      {\\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #2}\\\\[1ex]}%\n"
-"       \\begin{xtabular}{|>{\\centering}p{0.10\\textwidth}|%\n"
-"                         >{\\centering\\hspace{0pt}}p{0.15\\textwidth}|%\n"
-"                         >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
-"                         p{0.501\\textwidth}|}}%\n"
-"    }\\hline%\n"
-"}{%\n"
-"    \\end{xtabular}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\vspace{6pt}%\n"
-"}\n"
-"\n"
-"% Used for fields of simple structs\n"
-"\\newenvironment{DoxyFields}[1]{%\n"
-"    \\par%\n"
-"    \\tabletail{\\hline}%\n"
-"    \\tablelasttail{\\hline}%\n"
-"    \\tablehead{}%\n"
-"    \\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #1}\\\\[1ex]}%\n"
-"    \\begin{xtabular}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
-"                         p{0.15\\textwidth}|%\n"
-"                         p{0.63\\textwidth}|}%\n"
-"    \\hline%\n"
-"}{%\n"
-"    \\end{xtabular}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\vspace{6pt}%\n"
-"}\n"
-"\n"
-"% Used for parameters within a detailed function description\n"
-"\\newenvironment{DoxyParamCaption}{%\n"
-"  \\renewcommand{\\item}[2][]{##1 {\\em ##2}}%\n"
-"}{%\n"
-"}\n"
-"\n"
-"% Used by return value lists\n"
-"\\newenvironment{DoxyRetVals}[1]{%\n"
-"    \\par%\n"
-"    \\tabletail{\\hline}%\n"
-"    \\tablelasttail{\\hline}%\n"
-"    \\tablehead{}%\n"
-"    \\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #1}\\\\[1ex]}%\n"
-"    \\begin{xtabular}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
-"                          p{0.705\\textwidth}|}%\n"
-"    \\hline%\n"
-"}{%\n"
-"    \\end{xtabular}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\vspace{6pt}%\n"
-"}\n"
-"\n"
-"% Used by exception lists\n"
-"\\newenvironment{DoxyExceptions}[1]{%\n"
-"    \\par%\n"
-"    \\tabletail{\\hline}%\n"
-"    \\tablelasttail{\\hline}%\n"
-"    \\tablehead{}%\n"
-"    \\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #1}\\\\[1ex]}%\n"
-"    \\begin{xtabular}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
-"                          p{0.705\\textwidth}|}%\n"
-"    \\hline%\n"
-"}{%\n"
-"    \\end{xtabular}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\vspace{6pt}%\n"
-"}\n"
-"\n"
-"% Used by template parameter lists\n"
-"\\newenvironment{DoxyTemplParams}[1]{%\n"
-"    \\par%\n"
-"    \\tabletail{\\hline}%\n"
-"    \\tablelasttail{\\hline}%\n"
-"    \\tablehead{}%\n"
-"    \\tablefirsthead{\\multicolumn{2}{l}{\\hspace{-6pt}\\bfseries\\fontseries{bc}\\selectfont\\color{darkgray} #1}\\\\[1ex]}%\n"
-"    \\begin{xtabular}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
-"                          p{0.705\\textwidth}|}%\n"
-"    \\hline%\n"
-"}{%\n"
-"    \\end{xtabular}%\n"
-"    \\tablefirsthead{}%\n"
-"    \\vspace{6pt}%\n"
-"}\n"
-"\n"
-"% Used for member lists\n"
-"\\newenvironment{DoxyCompactItemize}{%\n"
-"  \\begin{itemize}%\n"
-"    \\setlength{\\itemsep}{-3pt}%\n"
-"    \\setlength{\\parsep}{0pt}%\n"
-"    \\setlength{\\topsep}{0pt}%\n"
-"    \\setlength{\\partopsep}{0pt}%\n"
-"}{%\n"
-"  \\end{itemize}%\n"
-"}\n"
-"\n"
-"% Used for member descriptions\n"
-"\\newenvironment{DoxyCompactList}{%\n"
-"  \\begin{list}{}{%\n"
-"    \\setlength{\\leftmargin}{0.5cm}%\n"
-"    \\setlength{\\itemsep}{0pt}%\n"
-"    \\setlength{\\parsep}{0pt}%\n"
-"    \\setlength{\\topsep}{0pt}%\n"
-"    \\renewcommand{\\makelabel}{\\hfill}%\n"
-"  }%\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used for reference lists (@bug, @deprecated, @todo, etc.)\n"
-"\\newenvironment{DoxyRefList}{%\n"
-"  \\begin{list}{}{%\n"
-"    \\setlength{\\labelwidth}{10pt}%\n"
-"    \\setlength{\\leftmargin}{\\labelwidth}%\n"
-"    \\addtolength{\\leftmargin}{\\labelsep}%\n"
-"    \\renewcommand{\\makelabel}{\\xreflabel}%\n"
-"  }%\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used by @bug, @deprecated, @todo, etc.\n"
-"\\newenvironment{DoxyRefDesc}[1]{%\n"
-"  \\begin{list}{}{%\n"
-"    \\renewcommand\\makelabel[1]{\\textbf{##1}}%\n"
-"    \\settowidth\\labelwidth{\\makelabel{#1}}%\n"
-"    \\setlength\\leftmargin{\\labelwidth+\\labelsep}%\n"
-"  }%\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used by parameter lists and simple sections\n"
-"\\newenvironment{Desc}\n"
-"{\\begin{list}{}{%\n"
-"    \\settowidth{\\labelwidth}{40pt}%\n"
-"    \\setlength{\\leftmargin}{\\labelwidth}%\n"
-"    \\setlength{\\parsep}{0pt}%\n"
-"    \\setlength{\\itemsep}{-4pt}%\n"
-"    \\renewcommand{\\makelabel}{\\entrylabel}%\n"
-"  }\n"
-"}{%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used by tables\n"
-"\\newcommand{\\PBS}[1]{\\let\\temp=\\\\#1\\let\\\\=\\temp}%\n"
-"\\newlength{\\tmplength}%\n"
-"\\newenvironment{TabularC}[1]%\n"
-"{%\n"
-"\\setlength{\\tmplength}%\n"
-"     {\\linewidth/(#1)-\\tabcolsep*2-\\arrayrulewidth*(#1+1)/(#1)}%\n"
-"      \\par\\begin{xtabular*}{\\linewidth}%\n"
-"             {*{#1}{|>{\\PBS\\raggedright\\hspace{0pt}}p{\\the\\tmplength}}|}%\n"
-"}%\n"
-"{\\end{xtabular*}\\par}%\n"
-"\n"
-"% Used for member group headers\n"
-"\\newenvironment{Indent}{%\n"
-"  \\begin{list}{}{%\n"
-"    \\setlength{\\leftmargin}{0.5cm}%\n"
-"  }%\n"
-"  \\item[]\\ignorespaces%\n"
-"}{%\n"
-"  \\unskip%\n"
-"  \\end{list}%\n"
-"}\n"
-"\n"
-"% Used when hyperlinks are turned off\n"
-"\\newcommand{\\doxyref}[3]{%\n"
-"  \\textbf{#1} (\\textnormal{#2}\\,\\pageref{#3})%\n"
-"}\n"
-"\n"
-"% Used for syntax highlighting\n"
-"\\definecolor{comment}{rgb}{0.5,0.0,0.0}\n"
-"\\definecolor{keyword}{rgb}{0.0,0.5,0.0}\n"
-"\\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}\n"
-"\\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}\n"
-"\\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}\n"
-"\\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}\n"
-"\\definecolor{charliteral}{rgb}{0.0,0.5,0.5}\n"
-"\\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}\n"
-"\\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}\n"
-"\\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}\n"
-"\\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}\n"
diff --git a/src/dynsections_js.h b/src/dynsections_js.h
deleted file mode 100644 (file)
index c2fba04..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-"function toggleVisibility(linkObj)\n"
-"{\n"
-" var base = $(linkObj).attr('id');\n"
-" var summary = $('#'+base+'-summary');\n"
-" var content = $('#'+base+'-content');\n"
-" var trigger = $('#'+base+'-trigger');\n"
-" var src=$(trigger).attr('src');\n"
-" if (content.is(':visible')===true) {\n"
-"   content.hide();\n"
-"   summary.show();\n"
-"   $(linkObj).addClass('closed').removeClass('opened');\n"
-"   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n"
-" } else {\n"
-"   content.show();\n"
-"   summary.hide();\n"
-"   $(linkObj).removeClass('closed').addClass('opened');\n"
-"   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n"
-" } \n"
-" return false;\n"
-"}\n"
-"\n"
-"function updateStripes()\n"
-"{\n"
-"  $('table.directory tr').\n"
-"       removeClass('even').filter(':visible:even').addClass('even');\n"
-"}\n"
-"function toggleLevel(level)\n"
-"{\n"
-"  $('table.directory tr').each(function(){ \n"
-"    var l = this.id.split('_').length-1;\n"
-"    var i = $('#img'+this.id.substring(3));\n"
-"    var a = $('#arr'+this.id.substring(3));\n"
-"    if (l<level+1) {\n"
-"      i.attr('src','ftv2folderopen.png');\n"
-"      a.attr('src','ftv2mnode.png');\n"
-"      $(this).show();\n"
-"    } else if (l==level+1) {\n"
-"      i.attr('src','ftv2folderclosed.png');\n"
-"      a.attr('src','ftv2pnode.png');\n"
-"      $(this).show();\n"
-"    } else {\n"
-"      $(this).hide();\n"
-"    }\n"
-"  });\n"
-"  updateStripes();\n"
-"}\n"
-"\n"
-"function toggleFolder(id)\n"
-"{\n"
-"  //The clicked row\n"
-"  var currentRow = $('#row_'+id);\n"
-"  var currentRowImages = currentRow.find(\"img\");\n"
-"\n"
-"  //All rows after the clicked row\n"
-"  var rows = currentRow.nextAll(\"tr\");\n"
-"\n"
-"  //Only match elements AFTER this one (can't hide elements before)\n"
-"  var childRows = rows.filter(function() {\n"
-"    var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n"
-"    return this.id.match(re);\n"
-"  });\n"
-"\n"
-"  //First row is visible we are HIDING\n"
-"  if (childRows.filter(':first').is(':visible')===true) {\n"
-"    currentRowImages.filter(\"[id^=arr]\").attr('src', 'ftv2pnode.png');\n"
-"    currentRowImages.filter(\"[id^=img]\").attr('src', 'ftv2folderclosed.png');\n"
-"    rows.filter(\"[id^=row_\"+id+\"]\").hide();\n"
-"  } else { //We are SHOWING\n"
-"    //All sub images\n"
-"    var childImages = childRows.find(\"img\");\n"
-"    var childImg = childImages.filter(\"[id^=img]\");\n"
-"    var childArr = childImages.filter(\"[id^=arr]\");\n"
-"\n"
-"    currentRow.find(\"[id^=arr]\").attr('src', 'ftv2mnode.png'); //open row\n"
-"    currentRow.find(\"[id^=img]\").attr('src', 'ftv2folderopen.png'); //open row\n"
-"    childImg.attr('src','ftv2folderclosed.png'); //children closed\n"
-"    childArr.attr('src','ftv2pnode.png'); //children closed\n"
-"    childRows.show(); //show all children\n"
-"  }\n"
-"  updateStripes();\n"
-"}\n"
-"\n"
-"\n"
-"function toggleInherit(id)\n"
-"{\n"
-"  var rows = $('tr.inherit.'+id);\n"
-"  var img = $('tr.inherit_header.'+id+' img');\n"
-"  var src = $(img).attr('src');\n"
-"  if (rows.filter(':first').is(':visible')===true) {\n"
-"    rows.css('display','none');\n"
-"    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n"
-"  } else {\n"
-"    rows.css('display','table-row'); // using show() causes jump in firefox\n"
-"    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n"
-"  }\n"
-"}\n"
-"\n"
diff --git a/src/extsearch_js.h b/src/extsearch_js.h
deleted file mode 100644 (file)
index dc72659..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-"function SearchBox(name, resultsPath, inFrame, label)\n"
-"{\n"
-"  this.searchLabel = label;\n"
-"  this.DOMSearchField = function()\n"
-"  {  return document.getElementById(\"MSearchField\");  }\n"
-"  this.DOMSearchBox = function()\n"
-"  {  return document.getElementById(\"MSearchBox\");  }\n"
-"  this.OnSearchFieldFocus = function(isActive)\n"
-"  {\n"
-"    if (isActive)\n"
-"    {\n"
-"      this.DOMSearchBox().className = 'MSearchBoxActive';\n"
-"      var searchField = this.DOMSearchField();\n"
-"      if (searchField.value == this.searchLabel) \n"
-"      {\n"
-"        searchField.value = '';\n"
-"      }\n"
-"    }\n"
-"    else\n"
-"    {\n"
-"      this.DOMSearchBox().className = 'MSearchBoxInactive';\n"
-"      this.DOMSearchField().value   = this.searchLabel;\n"
-"    }\n"
-"  }\n"
-"}\n"
-"\n"
-"function trim(s) {\n"
-"  return s?s.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''):'';\n"
-"}\n"
-"\n"
-"function getURLParameter(name) {\n"
-"  return decodeURIComponent((new RegExp('[?|&]'+name+\n"
-"         '='+'([^&;]+?)(&|#|;|$)').exec(location.search)\n"
-"         ||[,\"\"])[1].replace(/\\+/g, '%20'))||null;\n"
-"}\n"
-"\n"
-"var entityMap = {\n"
-"  \"&\": \"&amp;\",\n"
-"  \"<\": \"&lt;\",\n"
-"  \">\": \"&gt;\",\n"
-"  '\"': '&quot;',\n"
-"  \"'\": '&#39;',\n"
-"  \"/\": '&#x2F;'\n"
-"};\n"
-"\n"
-"function escapeHtml(s) {\n"
-"  return String(s).replace(/[&<>\"'\\/]/g, function (s) {\n"
-"    return entityMap[s];\n"
-"  });\n"
-"}\n"
-"\n"
-"function searchFor(query,page,count) {\n"
-"  $.getJSON(serverUrl+\"?cb=?\",\n"
-"  {\n"
-"    n:count,\n"
-"    p:page,\n"
-"    q:query\n"
-"  },\n"
-"  function(data) {\n"
-"    var results = $('#searchresults');\n"
-"    $('#MSearchField').val(query);\n"
-"    if (data.hits>0) {\n"
-"      if (data.hits==1) {\n"
-"        results.html('<p>'+searchResultsText[1]+'</p>');\n"
-"      } else {\n"
-"        results.html('<p>'+searchResultsText[2].replace(/\\$num/,data.hits)+'</p>');\n"
-"      }\n"
-"      var r='<table>';\n"
-"      $.each(data.items, function(i,item){\n"
-"        var prefix = tagMap[item.tag];\n"
-"        if (prefix) prefix+='/'; else prefix='';\n"
-"        r+='<tr class=\"searchresult\">'+\n"
-"           '<td align=\"right\">'+(data.first+i+1)+'.</td>'+\n"
-"           '<td>'+escapeHtml(item.type)+'&#160;'+\n"
-"                '<a href=\"'+escapeHtml(prefix+item.url)+\n"
-"                '\">'+escapeHtml(item.name)+'</a>';\n"
-"        if (item.type==\"source\") {\n"
-"          var l=item.url.match(/[1-9][0-9]*$/);\n"
-"          if (l) r+=' at line '+parseInt(l[0]);\n"
-"        }\n"
-"        r+='</td>';\n"
-"        for (var i=0;i<item.fragments.length;i++)\n"
-"        {\n"
-"          r+='<tr><td></td><td>'+item.fragments[i]+'</td></tr>';\n"
-"        }\n"
-"        r+='</tr>';\n"
-"      });\n"
-"      r+='</table>';\n"
-"      if (data.pages>1) // write multi page navigation bar\n"
-"      {\n"
-"        r+='<div class=\"searchpages\">';\n"
-"        if (data.page>0)\n"
-"        {\n"
-"          r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+(page-1).toString()+','+count.toString()+')\">&laquo;</a></span>&nbsp;';\n"
-"        }\n"
-"        var firstPage = data.page-5;\n"
-"        var lastPage  = data.page+5;\n"
-"        if (firstPage<0)\n"
-"        {\n"
-"          lastPage-=firstPage;\n"
-"          firstPage=0;\n"
-"        }  \n"
-"        if (lastPage>data.pages)\n"
-"        {\n"
-"          lastPage=data.pages;\n"
-"        }\n"
-"        for(var i=firstPage;i<lastPage;i++)\n"
-"        {\n"
-"          if (i==data.page)\n"
-"          {\n"
-"            r+='<span class=\"pages\"><b>'+(i+1).toString()+'</b></span>&nbsp;';\n"
-"          }\n"
-"          else\n"
-"          {\n"
-"            r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+i.toString()+','+count.toString()+')\">'+(i+1).toString()+'</a></span>&nbsp;';\n"
-"          }\n"
-"        }\n"
-"        if (data.page+1<data.pages)\n"
-"        {\n"
-"          r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+(page+1).toString()+','+count.toString()+')\">&raquo;</a></span>';\n"
-"        }\n"
-"        r+='</div>';\n"
-"      }\n"
-"      results.append(r);\n"
-"    } else {\n"
-"      results.html('<p>'+searchResultsText[0]+'</p>');\n"
-"    }\n"
-"  });\n"
-"}\n"
index 7bd6aeb..e286284 100644 (file)
@@ -514,7 +514,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
       MemberList * ml = getMemberList(lmd->type);
       if (ml && ml->declVisible())
       {
-        ol.writeSummaryLink(0,ml->listTypeAsString(ml->listType()),lmd->title(lang),first);
+        ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
         first=FALSE;
       }
     }
@@ -807,6 +807,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");
+  DevNullCodeDocInterface devNullIntf;
   QCString title = m_docname;
   if (!m_fileVersion.isEmpty())
   {
@@ -878,10 +879,33 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
     ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
     pIntf->resetCodeParserState();
     ol.startCodeFragment();
+    bool needs2PassParsing = 
+        Doxygen::parseSourcesNeeded &&                // we need to parse (filtered) sources for cross-references
+        !filterSourceFiles &&                         // but user wants to show sources as-is
+        !getFileFilter(absFilePath(),TRUE).isEmpty(); // and there is a filter used while parsing
+
+    if (needs2PassParsing)
+    {
+      // parse code for cross-references only (see bug707641)
+      pIntf->parseCode(devNullIntf,0,
+                       fileToString(absFilePath(),TRUE,TRUE),
+                       getLanguage(),
+                       FALSE,0,this
+                      );
+    }
     pIntf->parseCode(ol,0,
         fileToString(absFilePath(),filterSourceFiles,TRUE),
-        getLanguage(),
-        FALSE,0,this
+        getLanguage(),      // lang
+        FALSE,              // isExampleBlock
+        0,                  // exampleName
+        this,               // fileDef
+        -1,                 // startLine
+        -1,                 // endLine
+        FALSE,              // inlineFragment
+        0,                  // memberDef
+        TRUE,               // showLineNumbers
+        0,                  // searchCtx
+        !needs2PassParsing  // collectXRefs
         );
     ol.endCodeFragment();
   }
@@ -1770,3 +1794,9 @@ void FileDef::getAllIncludeFilesRecursively(QStrList &incFiles) const
   QDict<void> includes(257);
   ::getAllIncludeFilesRecursively(&includes,this,incFiles);
 }
+
+QCString FileDef::title() const
+{
+  return theTranslator->trFileReference(name());
+}
+
index f6e5bad..d1d7496 100644 (file)
@@ -131,6 +131,8 @@ class FileDef : public Definition
     MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
     NamespaceSDict *getNamespaceSDict() const     { return m_namespaceSDict; }
     ClassSDict *getClassSDict() const             { return m_classSDict; }
+
+    QCString title() const;
     
     //---------------------------------
 
@@ -294,7 +296,6 @@ class DirEntry
   private:
     EntryKind m_kind;
     FileDef   *m_fd;
-    int num;
     bool m_isLast;
 };
 
diff --git a/src/footer_html.h b/src/footer_html.h
deleted file mode 100644 (file)
index 2891692..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-"<!-- start footer part -->\n"
-"<!--BEGIN GENERATE_TREEVIEW-->\n"
-"<div id=\"nav-path\" class=\"navpath\"><!-- id is needed for treeview function! -->\n"
-"  <ul>\n"
-"    $navpath\n"
-"    <li class=\"footer\">$generatedby\n"
-"    <a href=\"http://www.doxygen.org/index.html\">\n"
-"    <img class=\"footer\" src=\"$relpath^doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n"
-"  </ul>\n"
-"</div>\n"
-"<!--END GENERATE_TREEVIEW-->\n"
-"<!--BEGIN !GENERATE_TREEVIEW-->\n"
-"<hr class=\"footer\"/><address class=\"footer\"><small>\n"
-"$generatedby &#160;<a href=\"http://www.doxygen.org/index.html\">\n"
-"<img class=\"footer\" src=\"$relpath^doxygen.png\" alt=\"doxygen\"/>\n"
-"</a> $doxygenversion\n"
-"</small></address>\n"
-"<!--END !GENERATE_TREEVIEW-->\n"
-"</body>\n"
-"</html>\n"
index 4b709c5..3913ebb 100644 (file)
@@ -27,7 +27,8 @@ class Definition;
 void parseFortranCode(CodeOutputInterface &,const char *,const QCString &, 
             bool ,const char *,FileDef *fd,
             int startLine,int endLine,bool inlineFragment,
-            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx);
+            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx,
+            bool collectRefs);
 void resetFortranCodeParserState();
 void codeFreeScanner();
 
index 80fc333..8ee825b 100644 (file)
@@ -132,6 +132,7 @@ static int           g_inputLines;      //!< number of line in the code fragment
 static int          g_yyLineNr;        //!< current line number
 static bool          g_needsTermination;
 static Definition   *g_searchCtx;
+static bool          g_collectXRefs;
 static bool          g_isFixedForm;
 
 static bool          g_insideBody;      //!< inside subprog/program body? => create links
@@ -378,36 +379,6 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
   }
 }
 
-#if 0
-static QCString fileLocation() 
-{
-  QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
-  result+=":"+QCString().setNum(g_yyLineNr);
-  result+=":"+QCString().setNum(1);
-  return result;
-}
-
-
-/**
-  generates dictionay entries that are used if REFERENCED_BY_RELATION ... options are set
-  (e.g. the "referenced by ..." list after the function documentation) 
-*/
-
-static void addDocCrossReference(MemberDef *src, MemberDef *dst)
-{
-  if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- //printf("======= addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
-  if ((Config_getBool("REFERENCED_BY_RELATION") || Config_getBool("CALLER_GRAPH")) && 
-      (src->isFunction()))
-  {
-    dst->addSourceReferencedBy(src,fileLocation());
-  }
-  if ((Config_getBool("REFERENCES_RELATION") || Config_getBool("CALL_GRAPH")) && (src->isFunction()))
-  {
-    src->addSourceReferences(dst,fileLocation());
-  }
-}
-#endif
 
 //-------------------------------------------------------------------------------
 /**
@@ -565,7 +536,8 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
     if (md->getGroupDef()) d = md->getGroupDef();
     if (d && d->isLinkable())
     {
-      if (g_currentDefinition && g_currentMemberDef && md!=g_currentMemberDef && g_insideBody)
+      if (g_currentDefinition && g_currentMemberDef && 
+          md!=g_currentMemberDef && g_insideBody && g_collectXRefs)
       { 
        addDocCrossReference(g_currentMemberDef,md); 
       }     
@@ -712,14 +684,14 @@ 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})
 
 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|ELEMENTAL)
+ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|IMPURE|ELEMENTAL)
 ACCESS_SPEC (PROTECTED|PRIVATE|PUBLIC)
 /* Assume that attribute statements are almost the same as attributes. */
 ATTR_STMT {ATTR_SPEC}|DIMENSION
 FLOW  (DO|SELECT|CASE|WHERE|IF|THEN|ELSE|WHILE|FORALL|ELSEWHERE|ELSEIF|RETURN|CONTINUE|EXIT)
 COMMANDS  (FORMAT|CONTAINS|MODULE{BS_}PROCEDURE|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|DEALLOCATE|SIZE|INQUIRE|OPEN|CLOSE|DATA|COMMON)
 IGNORE (CALL)
-PREFIX    (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)?
+PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|IMPURE|PURE|ELEMENTAL)?
 
 /* |  */
 
@@ -1133,7 +1105,8 @@ void resetFortranCodeParserState() {}
 void parseFortranCode(CodeOutputInterface &od,const char *className,const QCString &s, 
                   bool exBlock, const char *exName,FileDef *fd,
                  int startLine,int endLine,bool inlineFragment,
-                 MemberDef *memberDef,bool,Definition *searchCtx)
+                 MemberDef *memberDef,bool,Definition *searchCtx,
+                  bool collectXRefs)
 {
   //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
 
@@ -1142,6 +1115,7 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
   (void)className;
 
   if (s.isEmpty()) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
   TooltipManager::instance()->clearTooltips();
   g_code = &od;
   g_inputString   = s;
@@ -1150,6 +1124,7 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
   g_currentFontClass = 0;
   g_needsTermination = FALSE;
   g_searchCtx = searchCtx;
+  g_collectXRefs = collectXRefs;
   if (endLine!=-1)
     g_inputLines  = endLine+1;
   else
@@ -1182,9 +1157,9 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
   startCodeLine();
   g_parmName.resize(0);
   g_parmType.resize(0);
-  fcodeYYrestart( fcodeYYin );
+  fortrancodeYYrestart( fortrancodeYYin );
   BEGIN( Start );
-  fcodeYYlex();
+  fortrancodeYYlex();
   if (g_needsTermination)
   {
     endFontClass();
@@ -1200,18 +1175,19 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
     delete g_sourceFileDef;
     g_sourceFileDef=0;
   }
+  printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
   return;
 }
 
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
 extern "C" { // some bogus code to keep the compiler happy
-  void fcodeYYdummy() { yy_flex_realloc(0,0); } 
+  void fortrancodeYYdummy() { yy_flex_realloc(0,0); } 
 }
 #elif YY_FLEX_SUBMINOR_VERSION<33
 #error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
 #else
 extern "C" { // some bogus code to keep the compiler happy
-  void fcodeYYdummy() { yy_top_state(); } 
+  void fortrancodeYYdummy() { yy_top_state(); } 
 }
 #endif
 
index e834698..41f7790 100644 (file)
@@ -48,7 +48,8 @@ class FortranLanguageScanner : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index 3ed0031..4cdea23 100644 (file)
@@ -265,7 +265,7 @@ LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")
 ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
 
 CONTAINS  CONTAINS
-PREFIX    (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)?
+PREFIX    (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|IMPURE|PURE|ELEMENTAL)?
 SCOPENAME ({ID}{BS}"::"{BS})*
 
 %option noyywrap
@@ -738,7 +738,7 @@ private                                 {
                                       }
 {ID}                                  {
                                        }  
-^{BS}"type"{BS_}"is"                    { }
+^{BS}"type"{BS_}"is"/{BS_}             { }
 }
 <AttributeList>{
 {COMMA}                                        {}
@@ -944,7 +944,7 @@ private                                 {
                                          }
 
                                          // TYPE_SPEC is for old function style function result
-                                         result = QCString(yytext).stripWhiteSpace();
+                                         result = QCString(yytext).stripWhiteSpace().lower();
                                          current->type = result;
                                          yy_push_state(SubprogPrefix);
                                        }
@@ -1170,11 +1170,11 @@ static void extractPrefix(QCString &text)
   int prefixIndex = 0;
   int curIndex = 0;
   bool cont = TRUE;
-  const char* pre[] = {"RECURSIVE","PURE","ELEMENTAL"};
+  const char* pre[] = {"RECURSIVE","IMPURE","PURE","ELEMENTAL"};
   while(cont)
   {
     cont = FALSE;
-    for(unsigned int i=0; i<3; i++)
+    for(unsigned int i=0; i<4; i++)
     {
       if((prefixIndex=text.find(pre[i], curIndex, FALSE))==0)
       {
@@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents)
   int prevLineLength=0;
   int prevLineAmpOrExclIndex=-1;
   bool emptyLabel=TRUE;
-  int newContentsSize = strlen(contents)+2; // \000 and one spare character (to avoid reallocation)
+  int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation)
   char* newContents = (char*)malloc(newContentsSize);
 
   for(int i=0, j=0;;i++,j++) {
@@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents)
         break;
       case '\000':
         newContents[j]='\000';
+        newContentsSize = strlen(newContents);
+        if (newContents[newContentsSize - 1] != '\n')
+        {
+          // to be on the safe side
+          newContents = (char*)realloc(newContents, newContentsSize+2);
+          newContents[newContentsSize] = '\n';
+          newContents[newContentsSize + 1] = '\000';
+        }
         return newContents;
       case 'C':
       case 'c':
@@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents)
         break;
     }
   }
+
+  newContentsSize = strlen(newContents);
+  if (newContents[newContentsSize - 1] != '\n')
+  {
+    // to be on the safe side
+    newContents = (char*)realloc(newContents, newContentsSize+2);
+    newContents[newContentsSize] = '\n';
+    newContents[newContentsSize + 1] = '\000';
+  }
   return newContents;
 }
 
@@ -1998,7 +2015,7 @@ static void addSubprogram(const char *text)
   subrCurrent.prepend(current);
   current->section = Entry::FUNCTION_SEC ;
   QCString subtype = text; subtype=subtype.lower().stripWhiteSpace();
-  functionLine = subtype=="function";
+  functionLine = (subtype.find("function") != -1);
   current->type += " " + subtype;
   current->type = current->type.stripWhiteSpace();
   current->fileName  = yyFileName;
@@ -2109,7 +2126,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
   int lineNr = brief ? current->briefLine : current->docLine;
   while (parseCommentBlock(
        g_thisParser,
-       docBlockInBody ? last_entry : current,
+       docBlockInBody ? subrCurrent.first() : current,
        doc,        // text
        yyFileName, // file
        lineNr,
@@ -2228,6 +2245,7 @@ level--;
 
 static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
 {
+  char *tmpBuf = NULL;
   initParser();
 
   defaultProtection = Public;
@@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
       //clock_t end=clock();
       //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC);
     }
+    else if (inputString[strlen(fileBuf)-1] != '\n')
+    {
+      tmpBuf = (char *)malloc(strlen(fileBuf)+2);
+      strcpy(tmpBuf,fileBuf);
+      tmpBuf[strlen(fileBuf)]= '\n';
+      tmpBuf[strlen(fileBuf)+1]= '\000';
+      inputString = tmpBuf;
+    }
 
     yyLineNr= 1 ; 
     yyFileName = fileName;
@@ -2276,12 +2302,12 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
     current          = new Entry;
     current->lang    = SrcLangExt_Fortran; 
 
-    fscanYYrestart( fscanYYin );
+    fortranscannerYYrestart( fortranscannerYYin );
     {
       BEGIN( Start );
     }
 
-    fscanYYlex();
+    fortranscannerYYlex();
     groupLeaveFile(yyFileName,yyLineNr);
 
     endScope(current_root, TRUE); // TRUE - global root
@@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
     rt->program.resize(0);
     delete current; current=0;
     moduleProcedures.clear();
+    if (tmpBuf) {
+      free((char*)tmpBuf);
+      inputString=NULL;
+    }
     if (isFixedForm) {
       free((char*)inputString);
       inputString=NULL;
@@ -2309,7 +2339,12 @@ void FortranLanguageScanner::parseInput(const char *fileName,
                                         QStrList & /*filesInSameTranslationUnit*/)
 {
   g_thisParser = this;
+
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
+
   ::parseMain(fileName,fileBuf,root);
+
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
@@ -2324,12 +2359,13 @@ void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
                    bool inlineFragment,
                   MemberDef *memberDef,
                    bool showLineNumbers,
-                   Definition *searchCtx
+                   Definition *searchCtx,
+                   bool collectXRefs
                   )
 {
   ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
                      fileDef,startLine,endLine,inlineFragment,memberDef,
-                     showLineNumbers,searchCtx);
+                     showLineNumbers,searchCtx,collectXRefs);
 }
 
 bool FortranLanguageScanner::needsPreprocessing(const QCString &extension)
@@ -2347,7 +2383,7 @@ void FortranLanguageScanner::parsePrototype(const char *text)
   pushBuffer(buffer);
   parsingPrototype = TRUE;
   BEGIN(Prototype);
-  fscanYYlex();
+  fortranscannerYYlex();
   parsingPrototype = FALSE;
   popBuffer();
 }
@@ -2380,7 +2416,7 @@ static void scanner_abort()
 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
 //----------------------------------------------------------------------------
 extern "C" { // some bogus code to keep the compiler happy
-  void fscannerYYdummy() { yy_flex_realloc(0,0); } 
+  void fortranscannernerYYdummy() { yy_flex_realloc(0,0); } 
 }
 #endif
 
index 9167ae9..d073f40 100644 (file)
@@ -48,14 +48,14 @@ class FTextStream
 
 inline FTextStream &FTextStream::operator<<( char c)
 {
-  m_dev->putch(c);
+  if (m_dev) m_dev->putch(c);
   return *this;
 }
 
 inline FTextStream &FTextStream::operator<<( const char* s)
 {
   uint len = qstrlen( s );
-  m_dev->writeBlock( s, len );
+  if (m_dev) m_dev->writeBlock( s, len );
   return *this;
 }
 
index c0ea2bd..11d3b1d 100644 (file)
 
 
 static const char navtree_script[]=
-#include "navtree_js.h"
+#include "navtree.js.h"
 ;
 
 static const char resize_script[]=
-#include "resize_js.h"
+#include "resize.js.h"
 ;
 
 static const char navtree_css[]=
-#include "navtree_css.h"
+#include "navtree.css.h"
 ;
 
 static unsigned char blank_png[352] =
@@ -890,7 +890,7 @@ static void generateBriefDoc(FTextStream &t,Definition *def)
         def,0,brief,FALSE,FALSE,0,TRUE,TRUE);
     QCString relPath = relativePathToRoot(def->getOutputFileBase());
     HtmlCodeGenerator htmlGen(t,relPath);
-    HtmlDocVisitor *visitor = new HtmlDocVisitor(t,htmlGen,def,0);
+    HtmlDocVisitor *visitor = new HtmlDocVisitor(t,htmlGen,def);
     root->accept(visitor);
     delete visitor;
     delete root;
@@ -1129,7 +1129,14 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
       if (n->children.count()>0) // write children to separate file for dynamic loading
       {
         QCString fileId = n->file;
-        if (dupOfParent(n)) fileId+="_dup";
+        if (n->anchor)
+        {
+          fileId+="_"+n->anchor;
+        }
+        if (dupOfParent(n)) 
+        {
+          fileId+="_dup";
+        }
         QFile f(htmlOutput+"/"+fileId+".js");
         if (f.open(IO_WriteOnly))
         {
index f9b47ae..9426c24 100644 (file)
@@ -913,7 +913,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
       MemberList * ml = getMemberList(lmd->type);
       if (ml && ml->declVisible())
       {
-        ol.writeSummaryLink(0,ml->listTypeAsString(ml->listType()),lmd->title(lang),first);
+        ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
         first=FALSE;
       }
     }
diff --git a/src/header_html.h b/src/header_html.h
deleted file mode 100644 (file)
index 62960d6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
-"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
-"<head>\n"
-"<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
-"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n"
-"<meta name=\"generator\" content=\"Doxygen $doxygenversion\"/>\n"
-"<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->\n"
-"<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->\n"
-"<link href=\"$relpath^tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
-"<script type=\"text/javascript\" src=\"$relpath^jquery.js\"></script>\n"
-"<script type=\"text/javascript\" src=\"$relpath^dynsections.js\"></script>\n"
-"$treeview\n"
-"$search\n"
-"$mathjax\n"
-"<link href=\"$relpath^$stylesheet\" rel=\"stylesheet\" type=\"text/css\" />\n"
-"$extrastylesheet\n"
-"</head>\n"
-"<body>\n"
-"<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n"
-"\n"
-"<!--BEGIN TITLEAREA-->\n"
-"<div id=\"titlearea\">\n"
-"<table cellspacing=\"0\" cellpadding=\"0\">\n"
-" <tbody>\n"
-" <tr style=\"height: 56px;\">\n"
-"  <!--BEGIN PROJECT_LOGO-->\n"
-"  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"$relpath^$projectlogo\"/></td>\n"
-"  <!--END PROJECT_LOGO-->\n"
-"  <!--BEGIN PROJECT_NAME-->\n"
-"  <td style=\"padding-left: 0.5em;\">\n"
-"   <div id=\"projectname\">$projectname\n"
-"   <!--BEGIN PROJECT_NUMBER-->&#160;<span id=\"projectnumber\">$projectnumber</span><!--END PROJECT_NUMBER-->\n"
-"   </div>\n"
-"   <!--BEGIN PROJECT_BRIEF--><div id=\"projectbrief\">$projectbrief</div><!--END PROJECT_BRIEF-->\n"
-"  </td>\n"
-"  <!--END PROJECT_NAME-->\n"
-"  <!--BEGIN !PROJECT_NAME-->\n"
-"   <!--BEGIN PROJECT_BRIEF-->\n"
-"    <td style=\"padding-left: 0.5em;\">\n"
-"    <div id=\"projectbrief\">$projectbrief</div>\n"
-"    </td>\n"
-"   <!--END PROJECT_BRIEF-->\n"
-"  <!--END !PROJECT_NAME-->\n"
-"  <!--BEGIN DISABLE_INDEX-->\n"
-"   <!--BEGIN SEARCHENGINE-->\n"
-"   <td>$searchbox</td>\n"
-"   <!--END SEARCHENGINE-->\n"
-"  <!--END DISABLE_INDEX-->\n"
-" </tr>\n"
-" </tbody>\n"
-"</table>\n"
-"</div>\n"
-"<!--END TITLEAREA-->\n"
-"<!-- end header part -->\n"
index 6fe4f35..6ccbda4 100644 (file)
@@ -28,6 +28,7 @@
 #include "htmlgen.h"
 #include "parserintf.h"
 #include "msc.h"
+#include "dia.h"
 #include "util.h"
 #include "vhdldocgen.h"
 #include "filedef.h"
@@ -102,6 +103,8 @@ static bool mustBeOutsideParagraph(DocNode *n)
         case DocNode::Kind_Copy:
           /* <blockquote> */
         case DocNode::Kind_HtmlBlockQuote:
+          /* \parblock */
+        case DocNode::Kind_ParBlock:
           return TRUE;
         case DocNode::Kind_StyleChange:
           return ((DocStyleChange*)n)->style()==DocStyleChange::Preformatted ||
@@ -136,9 +139,9 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs)
 //-------------------------------------------------------------------------
 
 HtmlDocVisitor::HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,
-                               Definition *ctx,MemberDef *md
+                               Definition *ctx) 
   : DocVisitor(DocVisitor_Html), m_t(t), m_ci(ci), m_insidePre(FALSE), 
-                                 m_hide(FALSE), m_ctx(ctx), m_md(md)
+                                 m_hide(FALSE), m_ctx(ctx)
 {
   if (ctx) m_langExt=ctx->getDefFileExtension();
 }
@@ -829,21 +832,21 @@ bool isSeparatedParagraph(DocSimpleSect *parent,DocPara *par)
   int i = nodes.findRef(par);
   if (i==-1) return FALSE;
   int count = parent->children().count();
-  if (count>1 && i==0)
+  if (count>1 && i==0) // first node
   {
     if (nodes.at(i+1)->kind()==DocNode::Kind_SimpleSectSep)
     {
       return TRUE;
     }
   }
-  else if (count>1 && i==count-1)
+  else if (count>1 && i==count-1) // last node
   {
     if (nodes.at(i-1)->kind()==DocNode::Kind_SimpleSectSep)
     {
       return TRUE;
     }
   }
-  else if (count>2 && i>0 && i<count-1)
+  else if (count>2 && i>0 && i<count-1) // intermediate node
   {
     if (nodes.at(i-1)->kind()==DocNode::Kind_SimpleSectSep &&
         nodes.at(i+1)->kind()==DocNode::Kind_SimpleSectSep)
@@ -863,9 +866,58 @@ static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
   {
     switch (p->parent()->kind()) 
     {
+      case DocNode::Kind_ParBlock:
+        { // hierarchy: node N -> para -> parblock -> para
+          // adapt return value to kind of N
+          DocNode::Kind kind = DocNode::Kind_Para;
+          if ( p->parent()->parent() && p->parent()->parent()->parent() )
+          {
+            kind = p->parent()->parent()->parent()->kind();
+          }
+          isFirst=isFirstChildNode((DocParBlock*)p->parent(),p);
+          isLast =isLastChildNode ((DocParBlock*)p->parent(),p);
+          t=0;
+          if (isFirst)
+          {
+            if (kind==DocNode::Kind_HtmlListItem ||
+                kind==DocNode::Kind_SecRefItem)
+            {
+              t=1;
+            }
+            else if (kind==DocNode::Kind_HtmlDescData ||
+                     kind==DocNode::Kind_XRefItem ||
+                     kind==DocNode::Kind_SimpleSect)
+            {
+              t=2;
+            }
+            else if (kind==DocNode::Kind_HtmlCell ||
+                     kind==DocNode::Kind_ParamList)
+            {
+              t=5;
+            }
+          }
+          if (isLast)
+          {
+            if (kind==DocNode::Kind_HtmlListItem ||
+                kind==DocNode::Kind_SecRefItem)
+            {
+              t=3;
+            }
+            else if (kind==DocNode::Kind_HtmlDescData ||
+                     kind==DocNode::Kind_XRefItem ||
+                     kind==DocNode::Kind_SimpleSect)
+            {
+              t=4;
+            }
+            else if (kind==DocNode::Kind_HtmlCell ||
+                     kind==DocNode::Kind_ParamList)
+            {
+              t=6;
+            }
+          }
+          break;
+        }
       case DocNode::Kind_AutoListItem:
-        //isFirst=TRUE;
-        //isLast =TRUE;
         isFirst=isFirstChildNode((DocAutoListItem*)p->parent(),p);
         isLast =isLastChildNode ((DocAutoListItem*)p->parent(),p);
         t=1; // not used
@@ -904,12 +956,6 @@ static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
         if (isFirst) t=2;
         if (isLast)  t=4;
         break;
-      case DocNode::Kind_HtmlCell:
-        isFirst=isFirstChildNode((DocHtmlCell*)p->parent(),p);
-        isLast =isLastChildNode ((DocHtmlCell*)p->parent(),p);
-        if (isFirst) t=5;
-        if (isLast)  t=6;
-        break;
       case DocNode::Kind_SimpleSect:
         isFirst=isFirstChildNode((DocSimpleSect*)p->parent(),p);
         isLast =isLastChildNode ((DocSimpleSect*)p->parent(),p);
@@ -923,6 +969,12 @@ static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
           isFirst=isLast=TRUE;
         }
         break;
+      case DocNode::Kind_HtmlCell:
+        isFirst=isFirstChildNode((DocHtmlCell*)p->parent(),p);
+        isLast =isLastChildNode ((DocHtmlCell*)p->parent(),p);
+        if (isFirst) t=5;
+        if (isLast)  t=6;
+        break;
       default:
         break;
     }
@@ -955,6 +1007,7 @@ void HtmlDocVisitor::visitPre(DocPara *p)
       case DocNode::Kind_XRefItem:
       case DocNode::Kind_Copy:
       case DocNode::Kind_HtmlBlockQuote:
+      case DocNode::Kind_ParBlock:
         needsTag = TRUE;
         break;
       case DocNode::Kind_Root:
@@ -1028,6 +1081,7 @@ void HtmlDocVisitor::visitPost(DocPara *p)
       case DocNode::Kind_XRefItem:
       case DocNode::Kind_Copy:
       case DocNode::Kind_HtmlBlockQuote:
+      case DocNode::Kind_ParBlock:
         needsTag = TRUE;
         break;
       case DocNode::Kind_Root:
@@ -1493,6 +1547,26 @@ void HtmlDocVisitor::visitPost(DocMscFile *df)
   m_t << "</div>" << endl;
 }
 
+void HtmlDocVisitor::visitPre(DocDiaFile *df)
+{
+  if (m_hide) return;
+  m_t << "<div class=\"diagraph\">" << endl;
+  writeDiaFile(df->file(),df->relPath(),df->context());
+  if (df->hasCaption())
+  {
+    m_t << "<div class=\"caption\">" << endl;
+  }
+}
+void HtmlDocVisitor::visitPost(DocDiaFile *df)
+{
+  if (m_hide) return;
+  if (df->hasCaption())
+  {
+    m_t << "</div>" << endl;
+  }
+  m_t << "</div>" << endl;
+}
+
 void HtmlDocVisitor::visitPre(DocLink *lnk)
 {
   if (m_hide) return;
@@ -1703,6 +1777,8 @@ void HtmlDocVisitor::visitPost(DocParamList *)
 void HtmlDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
+
   forceEndParagraph(x);
   bool anonymousEnum = x->file()=="@";
   if (!anonymousEnum)
@@ -1724,6 +1800,7 @@ void HtmlDocVisitor::visitPre(DocXRefItem *x)
 void HtmlDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "</dd></dl>" << endl;
   forceStartParagraph(x);
 }
@@ -1811,6 +1888,18 @@ void HtmlDocVisitor::visitPost(DocVhdlFlow *vf)
   }
 }
 
+void HtmlDocVisitor::visitPre(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
+void HtmlDocVisitor::visitPost(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
+
+
 void HtmlDocVisitor::filter(const char *str)
 { 
   if (str==0) return;
@@ -1942,8 +2031,33 @@ void HtmlDocVisitor::writeMscFile(const QCString &fileName,
   }
   baseName.prepend("msc_");
   QCString outDir = Config_getString("HTML_OUTPUT");
-  writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP);
-  writeMscImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context);
+  QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+  MscOutputFormat mscFormat = MSC_BITMAP;
+  if ("svg" == imgExt)
+    mscFormat = MSC_SVG;
+  writeMscGraphFromFile(fileName,outDir,baseName,mscFormat);
+  writeMscImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context,mscFormat);
+}
+
+void HtmlDocVisitor::writeDiaFile(const QCString &fileName,
+                                  const QCString &,
+                                  const QCString &)
+{
+  QCString baseName=fileName;
+  int i;
+  if ((i=baseName.findRev('/'))!=-1) // strip path
+  {
+    baseName=baseName.right(baseName.length()-i-1);
+  }
+  if ((i=baseName.find('.'))!=-1) // strip extension
+  {
+    baseName=baseName.left(i);
+  }
+  baseName.prepend("dia_");
+  QCString outDir = Config_getString("HTML_OUTPUT");
+  writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP);
+
+  m_t << "<img src=\"" << outDir << '/' << baseName << ".png" << "\" />" << endl;
 }
 
 /** Used for items found inside a paragraph, which due to XHTML restrictions
index 3624224..fd7c23a 100644 (file)
@@ -33,7 +33,7 @@ class CodeOutputInterface;
 class HtmlDocVisitor : public DocVisitor
 {
   public:
-    HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,Definition *ctx,MemberDef *md);
+    HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,Definition *ctx);
     
     //--------------------------------------
     // visitor functions for leaf nodes
@@ -108,6 +108,8 @@ class HtmlDocVisitor : public DocVisitor
     void visitPost(DocDotFile *);
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *);
     void visitPost(DocLink *);
     void visitPre(DocRef *);
@@ -132,6 +134,8 @@ class HtmlDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
 
   private:
 
@@ -148,6 +152,7 @@ class HtmlDocVisitor : public DocVisitor
     void endLink();
     void writeDotFile(const QCString &fileName,const QCString &relPath,const QCString &context);
     void writeMscFile(const QCString &fileName,const QCString &relPath,const QCString &context);
+    void writeDiaFile(const QCString &fileName,const QCString &relPath,const QCString &context);
 
     void pushEnabled();
     void popEnabled();
@@ -165,7 +170,6 @@ class HtmlDocVisitor : public DocVisitor
     bool m_hide;
     QStack<bool> m_enabled;
     Definition *m_ctx;
-    MemberDef *m_md;
     QCString m_langExt;
 };
 
index 6fe61fc..059d0e7 100644 (file)
 #define DBG_HTML(x) 
 
 static const char defaultHtmlHeader[] =
-#include "header_html.h"
+#include "header.html.h"
 ;
 
 static const char defaultHtmlFooter[] =
-#include "footer_html.h"
+#include "footer.html.h"
 ;
 
 static const char defaultStyleSheet[] = 
-#include "doxygen_css.h"
+#include "doxygen.css.h"
 ;
 
 static const char search_functions_script[]=
-#include "search_functions_php.h"
+#include "search_functions.php.h"
 ;
 
 static const char search_opensearch_script[]=
-#include "search_opensearch_php.h"
+#include "search_opensearch.php.h"
 ;
 
 static const char search_styleSheet[] =
-#include "search_css.h"
+#include "search.css.h"
 ;
 
 static const char search_jquery_script1[]=
-#include "jquery_p1_js.h"
+#include "jquery_p1.js.h"
 ;
 
 static const char search_jquery_script2[]=
-#include "jquery_p2_js.h"
+#include "jquery_p2.js.h"
 ;
 
 static const char search_jquery_script3[]=
-#include "jquery_p3_js.h"
+#include "jquery_p3.js.h"
 ;
 
 static const char search_jquery_script4[]=
-#include "jquery_ui_js.h"
+#include "jquery_ui.js.h"
 ;
 
 static const char search_jquery_script5[]=
-#include "jquery_fx_js.h"
+#include "jquery_fx.js.h"
 ;
 
 static const char search_jquery_script6[]=
-#include "jquery_pt_js.h"
+#include "jquery_pt.js.h"
 ;
 
 static const char svgpan_script[]=
-#include "svgpan_js.h"
+#include "svgpan.js.h"
 ;
 
 static const char dynsections_script[]=
-#include "dynsections_js.h"
+#include "dynsections.js.h"
 ;
 
 static const char extsearch_script[]=
-#include "extsearch_js.h"
+#include "extsearch.js.h"
 ;
 
 static QCString g_header;
@@ -1385,8 +1385,8 @@ void HtmlCodeGenerator::_writeCodeLink(const char *className,
 }
 
 void HtmlCodeGenerator::writeTooltip(const char *id, const DocLinkInfo &docInfo,
-                                     const char *decl, const char *desc, 
-                                     const SourceLinkInfo &defInfo, 
+                                     const char *decl, const char *desc,
+                                     const SourceLinkInfo &defInfo,
                                      const SourceLinkInfo &declInfo)
 {
   m_t << "<div class=\"ttc\" id=\"" << id << "\">";
@@ -1417,7 +1417,7 @@ void HtmlCodeGenerator::writeTooltip(const char *id, const DocLinkInfo &docInfo,
   if (desc)
   {
     m_t << "<div class=\"ttdoc\">";
-    docify(desc);
+    m_t << desc; // desc is already HTML escaped
     m_t << "</div>";
   }
   if (!defInfo.file.isEmpty())
@@ -2748,9 +2748,9 @@ void HtmlGenerator::endParamList()
   t << "</dl>"; 
 }
 
-void HtmlGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *md)
+void HtmlGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
 {
-  HtmlDocVisitor *visitor = new HtmlDocVisitor(t,m_codeGen,ctx,md);
+  HtmlDocVisitor *visitor = new HtmlDocVisitor(t,m_codeGen,ctx);
   n->accept(visitor);
   delete visitor; 
 }
@@ -3279,7 +3279,7 @@ void HtmlGenerator::writeExternalSearchPage()
 void HtmlGenerator::startConstraintList(const char *header)
 {
   t << "<div class=\"typeconstraint\">" << endl;
-  t << "<dl><dt><b>" << header << "</b><dt><dd>" << endl;
+  t << "<dl><dt><b>" << header << "</b></dt><dd>" << endl;
   t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl;
 }
 
index 6fb168b..366027d 100644 (file)
@@ -282,7 +282,7 @@ class HtmlGenerator : public OutputGenerator
     //{ t << "<tr><td valign=\"top\"><em>"; }
     { t << "<tr><td class=\"fieldname\"><em>"; }
     void endDescTableTitle()
-    { t << "</em>&nbsp;</td>"; }
+    { t << "</em>&#160;</td>"; }
     void startDescTableData()
     //{ t << "<td>" << endl; }
     { t << "<td class=\"fielddoc\">" << endl; }
index 6b1f98b..23d5194 100644 (file)
@@ -406,7 +406,7 @@ void HtmlHelp::initialize()
   s_languageDict.insert("norwegian",   new QCString("0x814 Norwegian"));
   s_languageDict.insert("polish",      new QCString("0x415 Polish"));
   s_languageDict.insert("portuguese",  new QCString("0x816 Portuguese(Portugal)"));
-  s_languageDict.insert("brazil",      new QCString("0x416 Portuguese(Brazil)"));
+  s_languageDict.insert("brazilian",   new QCString("0x416 Portuguese(Brazil)"));
   s_languageDict.insert("russian",     new QCString("0x419 Russian"));
   s_languageDict.insert("spanish",     new QCString("0x40A Spanish(Traditional Sort)"));
   s_languageDict.insert("swedish",     new QCString("0x41D Swedish"));
@@ -433,6 +433,13 @@ void HtmlHelp::initialize()
   s_languageDict.insert("persian",     new QCString("0x429 Persian (Iran)"));
   s_languageDict.insert("arabic",      new QCString("0xC01 Arabic (Egypt)"));
   s_languageDict.insert("latvian",     new QCString("0x426 Latvian"));
+  s_languageDict.insert("macedonian",  new QCString("0x042f Macedonian (Former Yugoslav Republic of Macedonia)"));
+  s_languageDict.insert("armenian",    new QCString("0x42b Armenian"));
+  //Code for Esperanto should be as shown below but the htmlhelp compiler 1.3 does not support this
+  // (and no newer version is available).
+  //So do a fallback to the default language (see getLanguageString())
+  //s_languageDict.insert("esperanto",   new QCString("0x48f Esperanto"));
+  s_languageDict.insert("serbian-cyrillic", new QCString("0xC1A Serbian (Serbia, Cyrillic)"));
 }
 
 
diff --git a/src/increasebuffer.pl b/src/increasebuffer.pl
deleted file mode 100755 (executable)
index 109f9ad..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Since the internal token buffer of a generated flex file is hardcoded
-# to 16K, this script is used to increase the buffer size of a flex 
-# generated scanner to 256K. 
-while (<>)
-{
-       s/YY_BUF_SIZE 16384/YY_BUF_SIZE 262144/g; 
-        s/YY_READ_BUF_SIZE 8192/YY_READ_BUF_SIZE 262144/g;
-       print $_;
-}
diff --git a/src/increasebuffer.py b/src/increasebuffer.py
new file mode 100755 (executable)
index 0000000..e2b2d0c
--- /dev/null
@@ -0,0 +1,7 @@
+# Since the internal token buffer of a generated flex file is hardcoded
+# to 16K, this script is used to increase the buffer size of a flex
+# generated scanner to 256K.
+import sys
+sys.stdout.write(sys.stdin.read().
+    replace('YY_BUF_SIZE 16384','YY_BUF_SIZE 262144').
+    replace('YY_READ_BUF_SIZE 8192','YY_READ_BUF_SIZE 262144'))
index 5970a43..ae96c80 100644 (file)
@@ -119,23 +119,28 @@ static void endIndexHierarchy(OutputList &ol,int level)
 class MemberIndexList : public QList<MemberDef>
 {
   public:
-    MemberIndexList() : QList<MemberDef>() {}
+    typedef MemberDef ElementType;
+    MemberIndexList(uint letter) : QList<MemberDef>(), m_letter(letter) {}
     ~MemberIndexList() {}
     int compareItems(QCollection::Item item1, QCollection::Item item2)
     {
       MemberDef *md1=(MemberDef *)item1;
       MemberDef *md2=(MemberDef *)item2;
-      return qstricmp(md1->name(),md2->name());
+      int result = qstricmp(md1->name(),md2->name());
+      if (result==0)
+      {
+        result = qstricmp(md1->qualifiedName(),md2->qualifiedName());
+      }
+      return result;
     }
+    uint letter() const { return m_letter; }
+  private:
+    uint m_letter;
 };
 
-#define MEMBER_INDEX_ENTRIES 256
-
-static MemberIndexList g_memberIndexLetterUsed[CMHL_Total][MEMBER_INDEX_ENTRIES];
-static MemberIndexList g_fileIndexLetterUsed[FMHL_Total][MEMBER_INDEX_ENTRIES];
-static MemberIndexList g_namespaceIndexLetterUsed[NMHL_Total][MEMBER_INDEX_ENTRIES];
-
-//static bool g_classIndexLetterUsed[CHL_Total][256];
+static LetterToIndexMap<MemberIndexList> g_memberIndexLetterUsed[CMHL_Total];
+static LetterToIndexMap<MemberIndexList> g_fileIndexLetterUsed[FMHL_Total];
+static LetterToIndexMap<MemberIndexList> g_namespaceIndexLetterUsed[NMHL_Total];
 
 const int maxItemsBeforeQuickIndex = MAX_ITEMS_BEFORE_QUICK_INDEX;
 
@@ -409,38 +414,11 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
   }
 }
 
-//----------------------------------------------------------------------------
-
-static bool classHasVisibleChildren(ClassDef *cd)
-{
-  BaseClassList *bcl;
-
-  if (cd->getLanguage()==SrcLangExt_VHDL) // reverse baseClass/subClass relation
-  {
-    if (cd->baseClasses()==0) return FALSE;
-    bcl=cd->baseClasses();
-  }
-  else 
-  {
-    if (cd->subClasses()==0) return FALSE;
-    bcl=cd->subClasses();
-  }
-
-  BaseClassListIterator bcli(*bcl);
-  for ( ; bcli.current() ; ++bcli)
-  {
-    if (bcli.current()->classDef->isVisibleInHierarchy())
-    {
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
 
 //----------------------------------------------------------------------------
 /*! Generates HTML Help tree of classes */
 
-static void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv,bool addToIndex)
+static void writeClassTree(OutputList &ol,const BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv,bool addToIndex)
 {
   if (bcl==0) return;
   BaseClassListIterator bcli(*bcl);
@@ -557,14 +535,6 @@ static void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int
 
 //----------------------------------------------------------------------------
 
-static bool classVisibleInIndex(ClassDef *cd)
-{
-  static bool allExternals = Config_getBool("ALLEXTERNALS");
-  return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
-}
-
-//----------------------------------------------------------------------------
-
 static bool dirHasVisibleChildren(DirDef *dd)
 {
   if (dd->hasDocumentation()) return TRUE;
@@ -1404,39 +1374,6 @@ void writeClassTree(ClassSDict *clDict,FTVHelp *ftv,bool addToIndex,bool globalO
   }
 }
 
-static bool containsVisibleChild(NamespaceDef *nd,bool includeClasses)
-{
-  if (nd->getNamespaceSDict())
-  {
-    NamespaceSDict::Iterator cnli(*nd->getNamespaceSDict());
-    NamespaceDef *cnd;
-    for (cnli.toFirst();(cnd=cnli.current());++cnli)
-    {
-      if (cnd->isLinkable() && cnd->localName().find('@')==-1)
-      {
-        return TRUE;
-      }
-      else if (containsVisibleChild(cnd,includeClasses))
-      {
-        return TRUE;
-      }
-    }
-  }
-  if (includeClasses && nd->getClassSDict())
-  {
-    ClassSDict::Iterator cli(*nd->getClassSDict());
-    ClassDef *cd;
-    for (;(cd=cli.current());++cli)
-    {
-      if (cd->isLinkableInProject() && cd->templateMaster()==0) 
-      { 
-        return TRUE;
-      }
-    }
-  }
-  return FALSE;
-}
-
 static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
                                bool rootOnly,bool showClasses,bool addToIndex)
 {
@@ -1450,7 +1387,7 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
           (!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
       {
 
-        bool hasChildren = containsVisibleChild(nd,showClasses);
+        bool hasChildren = namespaceHasVisibleChild(nd,showClasses);
         bool isLinkable  = nd->isLinkableInProject();
 
         QCString ref; 
@@ -1690,21 +1627,39 @@ static void writeAnnotatedClassList(OutputList &ol)
   ol.endIndexList();
 }
 
-static QCString letterToLabel(char startLetter)
+static QCString letterToLabel(uint startLetter)
 {
-  QCString s(5); 
-  if (isId(startLetter))
+  char s[10];
+  if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character
   {
-    s[0]=startLetter; s[1]=0;
+    s[0]=(char)startLetter;
+    s[1]=0;
   }
   else
   {
     const char hex[]="0123456789abcdef";
-    s[0]='0';
-    s[1]='x';
-    s[2]=hex[startLetter>>4];
-    s[3]=hex[startLetter&0xF];
-    s[4]=0;
+    int i=0;
+    s[i++]='0';
+    s[i++]='x';
+    if (startLetter>(1<<24)) // 4 byte character
+    {
+      s[i++]=hex[(startLetter>>28)&0xf];
+      s[i++]=hex[(startLetter>>24)&0xf];
+    }
+    if (startLetter>(1<<16)) // 3 byte character
+    {
+      s[i++]=hex[(startLetter>>20)&0xf];
+      s[i++]=hex[(startLetter>>16)&0xf];
+    }
+    if (startLetter>(1<<8)) // 2 byte character
+    {
+      s[i++]=hex[(startLetter>>12)&0xf];
+      s[i++]=hex[(startLetter>>8)&0xf];
+    }
+    // one byte character
+    s[i++]=hex[(startLetter>>4)&0xf];
+    s[i++]=hex[(startLetter>>0)&0xf];
+    s[i++]=0;
   }
   return s;
 }
@@ -1714,35 +1669,40 @@ static QCString letterToLabel(char startLetter)
 /** Special class list where sorting takes IGNORE_PREFIX into account. */
 class PrefixIgnoreClassList : public ClassList
 {
-public:
-  virtual int compareItems(QCollection::Item item1, QCollection::Item item2)
-  {
-    ClassDef *c1=(ClassDef *)item1;
-    ClassDef *c2=(ClassDef *)item2;
+  public:
+    typedef ClassDef ElementType;
+    PrefixIgnoreClassList(uint letter) : m_letter(letter) {}
+    virtual int compareItems(QCollection::Item item1, QCollection::Item item2)
+    {
+      ClassDef *c1=(ClassDef *)item1;
+      ClassDef *c2=(ClassDef *)item2;
 
-    QCString n1 = c1->className();
-    QCString n2 = c2->className();
-    return qstricmp (n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2));
-  }
+      QCString n1 = c1->className();
+      QCString n2 = c2->className();
+      return qstricmp (n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2));
+    }
+    uint letter() const { return m_letter; }
+  private:
+    uint m_letter;
 };
 
 /** Class representing a cell in the alphabetical class index. */
 class AlphaIndexTableCell
 {
   public:
-    AlphaIndexTableCell(int row,int col,uchar letter,ClassDef *cd) : 
+    AlphaIndexTableCell(int row,int col,uint letter,ClassDef *cd) : 
       m_letter(letter), m_class(cd), m_row(row), m_col(col) 
     { //printf("AlphaIndexTableCell(%d,%d,%c,%s)\n",row,col,letter!=0 ? letter: '-',
       //       cd!=(ClassDef*)0x8 ? cd->name().data() : "<null>"); 
     }
 
     ClassDef *classDef() const { return m_class; }
-    uchar letter()       const { return m_letter; }
+    uint letter()        const { return m_letter; }
     int row()            const { return m_row; }
     int column()         const { return m_col; }
 
   private:
-    uchar m_letter;
+    uint m_letter;
     ClassDef *m_class;
     int m_row;
     int m_col;
@@ -1770,12 +1730,31 @@ class AlphaIndexTableColumns : public QList<AlphaIndexTableRows>
     AlphaIndexTableColumns() { setAutoDelete(TRUE); }
 };
 
+class UsedIndexLetters : public SIntDict<uint>
+{
+  public:
+    UsedIndexLetters() : SIntDict<uint>(257) { setAutoDelete(TRUE); }
+    int compareItems( QCollection::Item item1, QCollection::Item item2)
+    {
+      int *p1=(int *)item1;
+      int *p2=(int *)item2;
+      return *p1 - *p2; // subtracting is done by int not uint.
+    }
+    void add(uint letter)
+    {
+      uint *v = find(letter);
+      if (v==0)
+      {
+        append(letter,new uint(letter));
+      }
+    }
+};
+
 // write an alphabetical index of all class with a header for each letter
 static void writeAlphabeticalClassList(OutputList &ol)
 {
   // What starting letters are used
-  bool indexLetterUsed[256];
-  memset (indexLetterUsed, 0, sizeof (indexLetterUsed));
+  UsedIndexLetters indexLettersUsed;
 
   // first count the number of headers
   ClassSDict::Iterator cli(*Doxygen::classSDict);
@@ -1791,24 +1770,25 @@ static void writeAlphabeticalClassList(OutputList &ol)
             
       int index = getPrefixIndex(cd->className());
       //printf("name=%s index=%d %d\n",cd->className().data(),index,cd->protection());
-      startLetter=toupper(cd->className().at(index))&0xFF;
-      indexLetterUsed[startLetter] = true;
+      startLetter=getUtf8CodeToUpper(cd->className(),index);
+      indexLettersUsed.add(startLetter);
     }
   }
+  indexLettersUsed.sort();
 
   // write quick link index (row of letters)
   QCString alphaLinks = "<div class=\"qindex\">";
-  int l;
-  for (l=0; l<256; l++)
-  {
-    if (indexLetterUsed[l])
-    {
-      if (headerItems) alphaLinks += "&#160;|&#160;";
-      headerItems++;
-      alphaLinks += (QCString)"<a class=\"qindex\" href=\"#letter_" + 
-                    (char)l + "\">" + 
-                    (char)l + "</a>";
-    }
+  SIntDict<uint>::Iterator it(indexLettersUsed);
+  uint *pLetter;
+  for (it.toFirst();(pLetter=it.current());++it)
+  {
+    if (headerItems) alphaLinks += "&#160;|&#160;";
+    headerItems++;
+    QCString li = letterToLabel(*pLetter);
+    QCString ls = QString(QChar(*pLetter)).utf8();
+    alphaLinks += (QCString)"<a class=\"qindex\" href=\"#letter_" + 
+                  li + "\">" + 
+                  ls + "</a>";
   }
   alphaLinks += "</div>\n";
   ol.writeString(alphaLinks);
@@ -1825,7 +1805,7 @@ static void writeAlphabeticalClassList(OutputList &ol)
   //    headerItems,totalItems,columns,rows,itemsInLastRow);
 
   // Keep a list of classes for each starting letter
-  PrefixIgnoreClassList classesByLetter[256];
+  LetterToIndexMap<PrefixIgnoreClassList> classesByLetter;
   AlphaIndexTableColumns tableColumns;
 
   // fill the columns with the class list (row elements in each column,
@@ -1841,16 +1821,20 @@ static void writeAlphabeticalClassList(OutputList &ol)
     if (cd->isLinkableInProject() && cd->templateMaster()==0)
     {
       int index = getPrefixIndex(cd->className());
-      startLetter=toupper(cd->className().at(index))&0xFF;
+      startLetter=getUtf8Code(cd->className(),index);
       // Do some sorting again, since the classes are sorted by name with 
       // prefix, which should be ignored really.
       if (cd->getLanguage()==SrcLangExt_VHDL)
       {
         if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS )// no architecture
-          classesByLetter[startLetter].inSort(cd);
+        {
+          classesByLetter.append(startLetter,cd);
+        }
       }
       else
-      classesByLetter[startLetter].inSort(cd);
+      {
+        classesByLetter.append(startLetter,cd);
+      }
     }
   }
 
@@ -1871,25 +1855,29 @@ static void writeAlphabeticalClassList(OutputList &ol)
   AlphaIndexTableRows *tableRows = new AlphaIndexTableRows;
   tableColumns.append(tableRows);
   int col=0,row=0,maxRows=0;
-  for (l=0; l<256; l++)
-  {
-    if (classesByLetter[l].count()>0)
+  PrefixIgnoreClassList *cl;
+  SIntDict<PrefixIgnoreClassList>::Iterator lit(classesByLetter);
+  for (lit.toFirst();(cl=lit.current());++lit)
+  {
+    uint l = cl->letter();
+    // add special header cell
+    tableRows->append(new AlphaIndexTableCell(row,col,l,(ClassDef*)0x8));
+    row++;
+    tableRows->append(new AlphaIndexTableCell(row,col,0,(ClassDef*)0x8));
+    row++;
+    ClassListIterator cit(*cl);
+    cit.toFirst();
+    ClassDef *cd = cit.current();
+    ++cit;
+    tableRows->append(new AlphaIndexTableCell(row,col,0,cd));
+    row++; 
+    NEXT_ROW();
+    for (;(cd=cit.current()); ++cit)
     {
-      // add special header cell
-      tableRows->append(new AlphaIndexTableCell(row,col,(uchar)l,(ClassDef*)0x8));
+      // add normal cell
+      tableRows->append(new AlphaIndexTableCell(row,col,0,cd));
       row++;
-      tableRows->append(new AlphaIndexTableCell(row,col,0,(ClassDef*)0x8));
-      row++;
-      tableRows->append(new AlphaIndexTableCell(row,col,0,classesByLetter[l].at(0)));
-      row++; 
       NEXT_ROW();
-      for (i=1; i<(int)classesByLetter[l].count(); i++)
-      {
-        // add normal cell
-        tableRows->append(new AlphaIndexTableCell(row,col,0,classesByLetter[l].at(i)));
-        row++;
-        NEXT_ROW();
-      }
     }
   }
 
@@ -1936,7 +1924,7 @@ static void writeAlphabeticalClassList(OutputList &ol)
               ol.writeString("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
                   "<tr>"
                   "<td><div class=\"ah\">&#160;&#160;"); 
-              ol.writeString(s);
+              ol.writeString(QString(QChar(cell->letter())).utf8());
               ol.writeString(         "&#160;&#160;</div>"
                   "</td>"
                   "</tr>"
@@ -2164,14 +2152,9 @@ static void writeNamespaceLinkForMember(OutputList &ol,MemberDef *md,const char
 }
 
 static void writeMemberList(OutputList &ol,bool useSections,int page,
-                            MemberIndexList memberLists[MEMBER_INDEX_ENTRIES],
+                            const LetterToIndexMap<MemberIndexList> &memberLists,
                             DefinitionIntf::DefType type)
 {
-  int pi;
-  // page==-1 => write all member indices to one page (used when total members is small)
-  // page!=-1 => write all member for this page only (used when total member is large)
-  int startIndex = page==-1 ? 0                      : page;
-  int endIndex   = page==-1 ? MEMBER_INDEX_ENTRIES-1 : page;
   ASSERT((int)type<3);
 
   typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
@@ -2189,10 +2172,16 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
   bool first=TRUE;
   bool firstSection=TRUE;
   bool firstItem=TRUE;
-  for (pi=startIndex; pi<=endIndex; pi++) // page==-1 => pi=[0..127], page!=-1 => pi=page 
+  MemberIndexList *ml;
+  SIntDict<MemberIndexList>::Iterator it(memberLists);
+  for (it.toFirst();(ml=it.current());++it)
   {
-    MemberIndexList *ml = &memberLists[pi];
-    if (ml->count()==0) continue;
+    if (page!=-1)
+    {
+      ml = memberLists[page];
+      it.toLast();
+    }
+    if (ml==0 || ml->count()==0) continue;
     ml->sort();
     QListIterator<MemberDef> mli(*ml);
     MemberDef *md;
@@ -2211,10 +2200,8 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
         {
           if (!firstItem)    ol.endItemListItem();
           if (!firstSection) ol.endItemList();
-          char cl[2];
-          cl[0] = tolower(name.at(startIndex));
-          cl[1] = 0;
-          QCString cs = letterToLabel(cl[0]);
+          QCString cs = letterToLabel(ml->letter());
+          QCString cl = QString(QChar(ml->letter())).utf8();
           QCString anchor=(QCString)"index_"+cs;
           QCString title=(QCString)"- "+cl+" -";
           ol.startSection(anchor,title,SectionInfo::Subsection);
@@ -2260,15 +2247,11 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
 
 void initClassMemberIndices()
 {
-  int i=0;
   int j=0;
   for (j=0;j<CMHL_Total;j++)
   {
     documentedClassMembers[j]=0;
-    for (i=0;i<MEMBER_INDEX_ENTRIES;i++) 
-    {
-      g_memberIndexLetterUsed[j][i].clear();
-    }
+    g_memberIndexLetterUsed[j].clear();
   }
 }
 
@@ -2286,8 +2269,7 @@ void addClassMemberNameToIndex(MemberDef *md)
   {
     QCString n = md->name();
     int index = getPrefixIndex(n);
-    uchar charCode = (uchar)n.at(index);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
+    uint letter = getUtf8CodeToLower(n,index);
     if (!n.isEmpty()) 
     {
       bool isFriendToHide = hideFriendCompounds &&
@@ -2296,48 +2278,48 @@ void addClassMemberNameToIndex(MemberDef *md)
          QCString(md->typeString())=="friend union");
       if (!(md->isFriend() && isFriendToHide))
       {
-        g_memberIndexLetterUsed[CMHL_All][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_All].append(letter,md);
         documentedClassMembers[CMHL_All]++;
       }
       if (md->isFunction()  || md->isSlot() || md->isSignal())
       {
-        g_memberIndexLetterUsed[CMHL_Functions][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Functions].append(letter,md);
         documentedClassMembers[CMHL_Functions]++;
       } 
       else if (md->isVariable())
       {
-        g_memberIndexLetterUsed[CMHL_Variables][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Variables].append(letter,md);
         documentedClassMembers[CMHL_Variables]++;
       }
       else if (md->isTypedef())
       {
-        g_memberIndexLetterUsed[CMHL_Typedefs][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Typedefs].append(letter,md);
         documentedClassMembers[CMHL_Typedefs]++;
       }
       else if (md->isEnumerate())
       {
-        g_memberIndexLetterUsed[CMHL_Enums][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Enums].append(letter,md);
         documentedClassMembers[CMHL_Enums]++;
       }
       else if (md->isEnumValue())
       {
-        g_memberIndexLetterUsed[CMHL_EnumValues][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_EnumValues].append(letter,md);
         documentedClassMembers[CMHL_EnumValues]++;
       }
       else if (md->isProperty())
       {
-        g_memberIndexLetterUsed[CMHL_Properties][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Properties].append(letter,md);
         documentedClassMembers[CMHL_Properties]++;
       }
       else if (md->isEvent())
       {
-        g_memberIndexLetterUsed[CMHL_Events][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Events].append(letter,md);
         documentedClassMembers[CMHL_Events]++;
       }
       else if (md->isRelated() || md->isForeign() ||
                (md->isFriend() && !isFriendToHide))
       {
-        g_memberIndexLetterUsed[CMHL_Related][letter].append(md);
+        g_memberIndexLetterUsed[CMHL_Related].append(letter,md);
         documentedClassMembers[CMHL_Related]++;
       }
     }
@@ -2348,15 +2330,11 @@ void addClassMemberNameToIndex(MemberDef *md)
 
 void initNamespaceMemberIndices()
 {
-  int i=0;
   int j=0;
   for (j=0;j<NMHL_Total;j++)
   {
     documentedNamespaceMembers[j]=0;
-    for (i=0;i<MEMBER_INDEX_ENTRIES;i++) 
-    {
-      g_namespaceIndexLetterUsed[j][i].clear();
-    }
+    g_namespaceIndexLetterUsed[j].clear();
   }
 }
 
@@ -2367,36 +2345,35 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
   {
     QCString n = md->name();
     int index = getPrefixIndex(n);
-    uchar charCode = (uchar)n.at(index);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
+    uint letter = getUtf8CodeToLower(n,index);
     if (!n.isEmpty()) 
     {
-      g_namespaceIndexLetterUsed[NMHL_All][letter].append(md);
+      g_namespaceIndexLetterUsed[NMHL_All].append(letter,md);
       documentedNamespaceMembers[NMHL_All]++;
 
       if (md->isFunction()) 
       {
-        g_namespaceIndexLetterUsed[NMHL_Functions][letter].append(md);
+        g_namespaceIndexLetterUsed[NMHL_Functions].append(letter,md);
         documentedNamespaceMembers[NMHL_Functions]++;
       }
       else if (md->isVariable()) 
       {
-        g_namespaceIndexLetterUsed[NMHL_Variables][letter].append(md);
+        g_namespaceIndexLetterUsed[NMHL_Variables].append(letter,md);
         documentedNamespaceMembers[NMHL_Variables]++;
       }
       else if (md->isTypedef())
       {
-        g_namespaceIndexLetterUsed[NMHL_Typedefs][letter].append(md);
+        g_namespaceIndexLetterUsed[NMHL_Typedefs].append(letter,md);
         documentedNamespaceMembers[NMHL_Typedefs]++;
       }
       else if (md->isEnumerate())
       {
-        g_namespaceIndexLetterUsed[NMHL_Enums][letter].append(md);
+        g_namespaceIndexLetterUsed[NMHL_Enums].append(letter,md);
         documentedNamespaceMembers[NMHL_Enums]++;
       }
       else if (md->isEnumValue())
       {
-        g_namespaceIndexLetterUsed[NMHL_EnumValues][letter].append(md);
+        g_namespaceIndexLetterUsed[NMHL_EnumValues].append(letter,md);
         documentedNamespaceMembers[NMHL_EnumValues]++;
       }
     }
@@ -2407,15 +2384,11 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
 
 void initFileMemberIndices()
 {
-  int i=0;
   int j=0;
   for (j=0;j<NMHL_Total;j++)
   {
     documentedFileMembers[j]=0;
-    for (i=0;i<MEMBER_INDEX_ENTRIES;i++) 
-    {
-      g_fileIndexLetterUsed[j][i].clear();
-    }
+    g_fileIndexLetterUsed[j].clear();
   }
 }
 
@@ -2426,41 +2399,40 @@ void addFileMemberNameToIndex(MemberDef *md)
   {
     QCString n = md->name();
     int index = getPrefixIndex(n);
-    uchar charCode = (uchar)n.at(index);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
+    uint letter = getUtf8CodeToLower(n,index);
     if (!n.isEmpty()) 
     {
-      g_fileIndexLetterUsed[FMHL_All][letter].append(md);
+      g_fileIndexLetterUsed[FMHL_All].append(letter,md);
       documentedFileMembers[FMHL_All]++;
 
       if (md->isFunction()) 
       {
-        g_fileIndexLetterUsed[FMHL_Functions][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_Functions].append(letter,md);
         documentedFileMembers[FMHL_Functions]++;
       }
       else if (md->isVariable()) 
       {
-        g_fileIndexLetterUsed[FMHL_Variables][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_Variables].append(letter,md);
         documentedFileMembers[FMHL_Variables]++;
       }
       else if (md->isTypedef())
       {
-        g_fileIndexLetterUsed[FMHL_Typedefs][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_Typedefs].append(letter,md);
         documentedFileMembers[FMHL_Typedefs]++;
       }
       else if (md->isEnumerate())
       {
-        g_fileIndexLetterUsed[FMHL_Enums][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_Enums].append(letter,md);
         documentedFileMembers[FMHL_Enums]++;
       }
       else if (md->isEnumValue())
       {
-        g_fileIndexLetterUsed[FMHL_EnumValues][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_EnumValues].append(letter,md);
         documentedFileMembers[FMHL_EnumValues]++;
       }
       else if (md->isDefine())
       {
-        g_fileIndexLetterUsed[FMHL_Defines][letter].append(md);
+        g_fileIndexLetterUsed[FMHL_Defines].append(letter,md);
         documentedFileMembers[FMHL_Defines]++;
       }
     }
@@ -2470,31 +2442,30 @@ void addFileMemberNameToIndex(MemberDef *md)
 //----------------------------------------------------------------------------
 
 static void writeQuickMemberIndex(OutputList &ol,
-    MemberIndexList charUsed[MEMBER_INDEX_ENTRIES],int page,
+    const LetterToIndexMap<MemberIndexList> &charUsed,uint page,
     QCString fullName,bool multiPage)
 {
   bool first=TRUE;
-  int i;
   startQuickIndexList(ol,TRUE);
-  for (i=33;i<127;i++)
-  {
-    char is[2];is[0]=(char)i;is[1]='\0';
-    QCString ci = letterToLabel((char)i);
-    if (charUsed[i].count()>0)
-    {
-      QCString anchor;
-      QCString extension=Doxygen::htmlFileExtension;
-      if (!multiPage)
-        anchor="#index_";
-      else if (first) 
-        anchor=fullName+extension+"#index_";
-      else 
-        anchor=fullName+QCString().sprintf("_0x%02x",i)+extension+"#index_";
-      startQuickIndexItem(ol,anchor+ci,i==page,TRUE,first);
-      ol.writeString(is);
-      endQuickIndexItem(ol);
-      first=FALSE;
-    }
+  SIntDict<MemberIndexList>::Iterator it(charUsed);
+  MemberIndexList *ml;
+  for (it.toFirst();(ml=it.current());++it)
+  {
+    uint i = ml->letter();
+    QCString is = letterToLabel(i);
+    QCString ci = QString(QChar(i)).utf8();
+    QCString anchor;
+    QCString extension=Doxygen::htmlFileExtension;
+    if (!multiPage)
+      anchor="#index_";
+    else if (first) 
+      anchor=fullName+extension+"#index_";
+    else 
+      anchor=fullName+"_"+letterToLabel(i)+extension+"#index_";
+    startQuickIndexItem(ol,anchor+ci,i==page,TRUE,first);
+    ol.writeString(is);
+    endQuickIndexItem(ol);
+    first=FALSE;
   }
   endQuickIndexList(ol);
 }
@@ -2534,15 +2505,13 @@ static const CmhlInfo *getCmhlInfo(int hl)
 static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl)
 {
   if (documentedClassMembers[hl]==0) return;
-  
+
   static bool disableIndex     = Config_getBool("DISABLE_INDEX");
 
   bool multiPageIndex=FALSE;
-  int numPages=1;
   if (documentedClassMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
   {
     multiPageIndex=TRUE;
-    numPages=127;
   }
 
   ol.pushGeneratorState();
@@ -2557,99 +2526,96 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
   if (addToIndex)
   {
     Doxygen::indexList->addContentsItem(multiPageIndex,getCmhlInfo(hl)->title,0,
-                                       getCmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+        getCmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
     if (multiPageIndex) Doxygen::indexList->incContentsDepth();
   }
 
-  int page;
   bool first=TRUE;
-  for (page=0;page<numPages;page++)
+  SIntDict<MemberIndexList>::Iterator it(g_memberIndexLetterUsed[hl]);
+  MemberIndexList *ml;
+  for (it.toFirst();(ml=it.current());++it)
   {
-    if (!multiPageIndex || g_memberIndexLetterUsed[hl][page].count()>0)
-    {
-      QCString fileName = getCmhlInfo(hl)->fname;
-      if (multiPageIndex)
-      { 
-        if (!first)
-        {
-          fileName+=QCString().sprintf("_0x%02x",page);
-        }
-        char cs[2];
-        cs[0]=page;
-        cs[1]=0;
-        if (addToIndex)
-        {
-          Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
-        }
+    uint page = ml->letter();
+    QCString fileName = getCmhlInfo(hl)->fname;
+    if (multiPageIndex)
+    { 
+      if (!first)
+      {
+        fileName+="_"+letterToLabel(page);
       }
-      bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
-      
-      ol.startFile(fileName+extension,0,title);
-      ol.startQuickIndices();
-      if (!disableIndex)
+      QCString cs = QString(QChar(page)).utf8();
+      if (addToIndex)
       {
-        ol.writeQuickLinks(TRUE,HLI_Functions,0);
-        startQuickIndexList(ol);
-
-        // index item for global member list
-        startQuickIndexItem(ol,
-            getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first);
-        ol.writeString(fixSpaces(getCmhlInfo(0)->title));
-        endQuickIndexItem(ol);
-
-        int i;
-        // index items per category member lists
-        for (i=1;i<CMHL_Total;i++)
-        {
-          if (documentedClassMembers[i]>0)
-          {
-            startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-            ol.writeString(fixSpaces(getCmhlInfo(i)->title));
-            //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n",
-            //    multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data());
-            endQuickIndexItem(ol);
-          }
-        }
+        Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
+      }
+    }
+    bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
+
+    ol.startFile(fileName+extension,0,title);
+    ol.startQuickIndices();
+    if (!disableIndex)
+    {
+      ol.writeQuickLinks(TRUE,HLI_Functions,0);
+      startQuickIndexList(ol);
 
-        endQuickIndexList(ol);
+      // index item for global member list
+      startQuickIndexItem(ol,
+          getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first);
+      ol.writeString(fixSpaces(getCmhlInfo(0)->title));
+      endQuickIndexItem(ol);
 
-        // quick alphabetical index
-        if (quickIndex)
+      int i;
+      // index items per category member lists
+      for (i=1;i<CMHL_Total;i++)
+      {
+        if (documentedClassMembers[i]>0)
         {
-          writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
-              getCmhlInfo(hl)->fname,multiPageIndex);
+          startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+          ol.writeString(fixSpaces(getCmhlInfo(i)->title));
+          //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n",
+          //    multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data());
+          endQuickIndexItem(ol);
         }
       }
-      ol.endQuickIndices();
-      ol.writeSplitBar(fileName);
-      ol.writeSearchInfo();
 
-      ol.startContents();
+      endQuickIndexList(ol);
 
-      if (hl==CMHL_All)
-      {
-        ol.startTextBlock();
-        ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
-        ol.endTextBlock();
-      }
-      else
+      // quick alphabetical index
+      if (quickIndex)
       {
-        // hack to work around a mozilla bug, which refuses to switch to
-        // normal lists otherwise
-        ol.writeString("&#160;");
+        writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
+            getCmhlInfo(hl)->fname,multiPageIndex);
       }
-      //ol.newParagraph();  // FIXME:PARA
-      writeMemberList(ol,quickIndex,
-                      multiPageIndex?page:-1,
-                      g_memberIndexLetterUsed[hl],
-                      Definition::TypeClass);
-      endFile(ol);
-      first=FALSE;
     }
+    ol.endQuickIndices();
+    ol.writeSplitBar(fileName);
+    ol.writeSearchInfo();
+
+    ol.startContents();
+
+    if (hl==CMHL_All)
+    {
+      ol.startTextBlock();
+      ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
+      ol.endTextBlock();
+    }
+    else
+    {
+      // hack to work around a mozilla bug, which refuses to switch to
+      // normal lists otherwise
+      ol.writeString("&#160;");
+    }
+
+    writeMemberList(ol,quickIndex,
+        multiPageIndex?page:-1,
+        g_memberIndexLetterUsed[hl],
+        Definition::TypeClass);
+    endFile(ol);
+    first=FALSE;
   }
 
   if (multiPageIndex && addToIndex) Doxygen::indexList->decContentsDepth();
-  
+
   ol.popGeneratorState();
 }
 
@@ -2716,11 +2682,9 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
   static bool disableIndex     = Config_getBool("DISABLE_INDEX");
 
   bool multiPageIndex=FALSE;
-  int numPages=1;
   if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
   {
     multiPageIndex=TRUE;
-    numPages=127;
   }
 
   ol.pushGeneratorState();
@@ -2734,94 +2698,90 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
   if (addToIndex)
   {
     Doxygen::indexList->addContentsItem(multiPageIndex,getFmhlInfo(hl)->title,0,
-                                       getFmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+        getFmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
     if (multiPageIndex) Doxygen::indexList->incContentsDepth();
   }
 
-  int page;
   bool first=TRUE;
-  for (page=0;page<numPages;page++)
+  SIntDict<MemberIndexList>::Iterator it(g_fileIndexLetterUsed[hl]);
+  MemberIndexList *ml;
+  for (it.toFirst();(ml=it.current());++it)
   {
-    if (!multiPageIndex || g_fileIndexLetterUsed[hl][page].count()>0)
+    uint page = ml->letter();
+    QCString fileName = getFmhlInfo(hl)->fname;
+    if (multiPageIndex)
     {
-      QCString fileName = getFmhlInfo(hl)->fname;
-      if (multiPageIndex)
+      if (!first)
       {
-        if (!first)
-        {
-          fileName+=QCString().sprintf("_0x%02x",page);
-        }
-        char cs[2];
-        cs[0]=page;
-        cs[1]=0;
-        if (addToIndex)
-        {
-          Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
-        }
+        fileName+="_"+letterToLabel(page);
       }
-      bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
-      
-      ol.startFile(fileName+extension,0,title);
-      ol.startQuickIndices();
-      if (!disableIndex)
+      QCString cs = QString(QChar(page)).utf8();
+      if (addToIndex)
       {
-        ol.writeQuickLinks(TRUE,HLI_Globals,0);
-        startQuickIndexList(ol);
-
-        // index item for all file member lists
-        startQuickIndexItem(ol,
-            getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
-        ol.writeString(fixSpaces(getFmhlInfo(0)->title));
-        endQuickIndexItem(ol);
-
-        int i;
-        // index items for per category member lists
-        for (i=1;i<FMHL_Total;i++)
-        {
-          if (documentedFileMembers[i]>0)
-          {
-            startQuickIndexItem(ol,
-                getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-            ol.writeString(fixSpaces(getFmhlInfo(i)->title));
-            endQuickIndexItem(ol);
-          }
-        }
+        Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
+      }
+    }
+    bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
+
+    ol.startFile(fileName+extension,0,title);
+    ol.startQuickIndices();
+    if (!disableIndex)
+    {
+      ol.writeQuickLinks(TRUE,HLI_Globals,0);
+      startQuickIndexList(ol);
 
-        endQuickIndexList(ol);
+      // index item for all file member lists
+      startQuickIndexItem(ol,
+          getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
+      ol.writeString(fixSpaces(getFmhlInfo(0)->title));
+      endQuickIndexItem(ol);
 
-        if (quickIndex)
+      int i;
+      // index items for per category member lists
+      for (i=1;i<FMHL_Total;i++)
+      {
+        if (documentedFileMembers[i]>0)
         {
-          writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
-              getFmhlInfo(hl)->fname,multiPageIndex);
+          startQuickIndexItem(ol,
+              getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+          ol.writeString(fixSpaces(getFmhlInfo(i)->title));
+          endQuickIndexItem(ol);
         }
       }
-      ol.endQuickIndices();
-      ol.writeSplitBar(fileName);
-      ol.writeSearchInfo();
 
-      ol.startContents();
+      endQuickIndexList(ol);
 
-      if (hl==FMHL_All)
-      {
-        ol.startTextBlock();
-        ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
-        ol.endTextBlock();
-      }
-      else
+      if (quickIndex)
       {
-        // hack to work around a mozilla bug, which refuses to switch to
-        // normal lists otherwise
-        ol.writeString("&#160;");
+        writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
+            getFmhlInfo(hl)->fname,multiPageIndex);
       }
-      //ol.newParagraph();  // FIXME:PARA
-      //writeFileMemberList(ol,quickIndex,hl,page);
-      writeMemberList(ol,quickIndex,
-          multiPageIndex?page:-1,
-          g_fileIndexLetterUsed[hl],
-          Definition::TypeFile);
-      endFile(ol);
-      first=FALSE;
     }
+    ol.endQuickIndices();
+    ol.writeSplitBar(fileName);
+    ol.writeSearchInfo();
+
+    ol.startContents();
+
+    if (hl==FMHL_All)
+    {
+      ol.startTextBlock();
+      ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
+      ol.endTextBlock();
+    }
+    else
+    {
+      // hack to work around a mozilla bug, which refuses to switch to
+      // normal lists otherwise
+      ol.writeString("&#160;");
+    }
+
+    writeMemberList(ol,quickIndex,
+        multiPageIndex?page:-1,
+        g_fileIndexLetterUsed[hl],
+        Definition::TypeFile);
+    endFile(ol);
+    first=FALSE;
   }
   if (multiPageIndex && addToIndex) Doxygen::indexList->decContentsDepth();
   ol.popGeneratorState();
@@ -2890,11 +2850,9 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
 
 
   bool multiPageIndex=FALSE;
-  int numPages=1;
   if (documentedNamespaceMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
   {
     multiPageIndex=TRUE;
-    numPages=127;
   }
 
   ol.pushGeneratorState();
@@ -2908,95 +2866,90 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
   if (addToIndex)
   {
     Doxygen::indexList->addContentsItem(multiPageIndex,getNmhlInfo(hl)->title,0,
-                                       getNmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+        getNmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
     if (multiPageIndex) Doxygen::indexList->incContentsDepth();
   }
 
-  int page;
   bool first=TRUE;
-  for (page=0;page<numPages;page++)
+  SIntDict<MemberIndexList>::Iterator it(g_namespaceIndexLetterUsed[hl]);
+  MemberIndexList *ml;
+  for (it.toFirst();(ml=it.current());++it)
   {
-    if (!multiPageIndex || g_namespaceIndexLetterUsed[hl][page].count()>0)
+    uint page = ml->letter();
+    QCString fileName = getNmhlInfo(hl)->fname;
+    if (multiPageIndex)
     {
-      QCString fileName = getNmhlInfo(hl)->fname;
-      if (multiPageIndex)
+      if (!first)
       {
-        if (!first)
-        {
-          fileName+=QCString().sprintf("_0x%02x",page);
-        }
-        char cs[2];
-        cs[0]=page;
-        cs[1]=0;
-        if (addToIndex)
-        {
-          Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
-        }
+        fileName+="_"+letterToLabel(page);
       }
-      bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
-      
-      ol.startFile(fileName+extension,0,title);
-      ol.startQuickIndices();
-      if (!disableIndex)
+      QCString cs = QString(QChar(page)).utf8();
+      if (addToIndex)
       {
-        ol.writeQuickLinks(TRUE,HLI_NamespaceMembers,0);
-        startQuickIndexList(ol);
-
-        // index item for all namespace member lists
-        startQuickIndexItem(ol,
-            getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
-        ol.writeString(fixSpaces(getNmhlInfo(0)->title));
-        endQuickIndexItem(ol);
-
-        int i;
-        // index items per category member lists
-        for (i=1;i<NMHL_Total;i++)
-        {
-          if (documentedNamespaceMembers[i]>0)
-          {
-            startQuickIndexItem(ol,
-                getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-            ol.writeString(fixSpaces(getNmhlInfo(i)->title));
-            endQuickIndexItem(ol);
-          }
-        }
+        Doxygen::indexList->addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
+      }
+    }
+    bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
 
-        endQuickIndexList(ol);
+    ol.startFile(fileName+extension,0,title);
+    ol.startQuickIndices();
+    if (!disableIndex)
+    {
+      ol.writeQuickLinks(TRUE,HLI_NamespaceMembers,0);
+      startQuickIndexList(ol);
+
+      // index item for all namespace member lists
+      startQuickIndexItem(ol,
+          getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
+      ol.writeString(fixSpaces(getNmhlInfo(0)->title));
+      endQuickIndexItem(ol);
 
-        if (quickIndex)
+      int i;
+      // index items per category member lists
+      for (i=1;i<NMHL_Total;i++)
+      {
+        if (documentedNamespaceMembers[i]>0)
         {
-          writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
-              getNmhlInfo(hl)->fname,multiPageIndex);
+          startQuickIndexItem(ol,
+              getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+          ol.writeString(fixSpaces(getNmhlInfo(i)->title));
+          endQuickIndexItem(ol);
         }
-
       }
-      ol.endQuickIndices();
-      ol.writeSplitBar(fileName);
-      ol.writeSearchInfo();
 
-      ol.startContents();
+      endQuickIndexList(ol);
 
-      if (hl==NMHL_All)
-      {
-        ol.startTextBlock();
-        ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
-        ol.endTextBlock();
-      }
-      else
+      if (quickIndex)
       {
-        // hack to work around a mozilla bug, which refuses to switch to
-        // normal lists otherwise
-        ol.writeString("&#160;");
+        writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
+            getNmhlInfo(hl)->fname,multiPageIndex);
       }
-      //ol.newParagraph(); // FIXME:PARA
-
-      //writeNamespaceMemberList(ol,quickIndex,hl,page);
-      writeMemberList(ol,quickIndex,
-                      multiPageIndex?page:-1,
-                      g_namespaceIndexLetterUsed[hl],
-                      Definition::TypeNamespace);
-      endFile(ol);
+
+    }
+    ol.endQuickIndices();
+    ol.writeSplitBar(fileName);
+    ol.writeSearchInfo();
+
+    ol.startContents();
+
+    if (hl==NMHL_All)
+    {
+      ol.startTextBlock();
+      ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
+      ol.endTextBlock();
     }
+    else
+    {
+      // hack to work around a mozilla bug, which refuses to switch to
+      // normal lists otherwise
+      ol.writeString("&#160;");
+    }
+
+    writeMemberList(ol,quickIndex,
+        multiPageIndex?page:-1,
+        g_namespaceIndexLetterUsed[hl],
+        Definition::TypeNamespace);
+    endFile(ol);
   }
   if (multiPageIndex && addToIndex) Doxygen::indexList->decContentsDepth();
   ol.popGeneratorState();
@@ -3095,167 +3048,6 @@ static void writeExampleIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-template<typename T>
-bool writeMemberNavIndex(FTextStream &t,
-                         int indent,
-                         int n,
-                         int documentedMembers[],
-                         MemberIndexList indexLetterUsed[][MEMBER_INDEX_ENTRIES],
-                         const T *(*getInfo)(int),
-                         bool &first
-                        )
-
-{
-  bool found=FALSE;
-  QCString indentStr;
-  indentStr.fill(' ',indent*2);
-  // index items per category member lists
-  int i;
-  for (i=0;i<n;i++)
-  {
-    bool hasIndex       = documentedMembers[i]>0;
-    bool quickIndex     = documentedMembers[i]>maxItemsBeforeQuickIndex;
-    bool multiIndexPage = documentedMembers[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX;
-    if (hasIndex)
-    {
-      // terminate previous entry
-      if (!first) t << "," << endl;
-      first = FALSE;
-
-      // start entry
-      if (!found)
-      {
-        t << "[" << endl;
-      }
-      found = TRUE;
-
-      t << indentStr << "  [ ";
-      t << "\"" << fixSpaces(getInfo(i)->title) << "\", ";
-      t << "\"" << getInfo(i)->fname << Doxygen::htmlFileExtension << "\", ";
-      bool firstPage=TRUE;
-      if (quickIndex)
-      {
-        t << "[ " << endl;
-        int j;
-        for (j=33;j<127;j++)
-        {
-          if (indexLetterUsed[i][j].count()>0)
-          {
-            if (!firstPage) t << "," << endl;
-            QCString fullName = getInfo(i)->fname;
-            QCString extension = Doxygen::htmlFileExtension;
-            QCString anchor;
-            if (firstPage || !multiIndexPage) 
-              anchor=fullName+extension+"#index_";
-            else 
-              anchor=fullName+QCString().sprintf("_0x%02x",j)+extension+"#index_";
-            char is[2];is[0]=(char)j;is[1]='\0';
-            QCString ci = letterToLabel((char)j);
-            t << indentStr << "    [ ";
-            t << "\"" << is << "\", ";
-            t << "\"" << anchor << ci << "\", null ]";
-            firstPage=FALSE;
-          }
-        }
-        t << endl << indentStr << "  ] ]";
-      }
-      else
-      {
-        t << "null" << " ]";
-      }
-    }
-  }
-  return found;
-}
-
-//----------------------------------------------------------------------------
-
-#if 0
-static bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
-{
-  static struct NavEntryCountMap 
-  {
-    LayoutNavEntry::Kind kind;
-    bool hasItems;
-  } navEntryCountMap[] =
-  {
-    { LayoutNavEntry::MainPage,         TRUE                                   },
-    { LayoutNavEntry::Pages,            indexedPages>0                         },
-    { LayoutNavEntry::Modules,          documentedGroups>0                     },
-    { LayoutNavEntry::Namespaces,       documentedNamespaces>0                 },
-    { LayoutNavEntry::NamespaceList,    documentedNamespaces>0                 },
-    { LayoutNavEntry::NamespaceMembers, documentedNamespaceMembers[NMHL_All]>0 },
-    { LayoutNavEntry::Classes,          annotatedClasses>0                     },
-    { LayoutNavEntry::ClassList,        annotatedClasses>0                     },
-    { LayoutNavEntry::ClassIndex,       annotatedClasses>0                     },
-    { LayoutNavEntry::ClassHierarchy,   hierarchyClasses>0                     },
-    { LayoutNavEntry::ClassMembers,     documentedClassMembers[CMHL_All]>0     },
-    { LayoutNavEntry::Files,            documentedFiles>0                      },
-    { LayoutNavEntry::FileList,         documentedFiles>0                      },
-    { LayoutNavEntry::FileGlobals,      documentedFileMembers[FMHL_All]>0      },
-    //{ LayoutNavEntry::Dirs,             documentedDirs>0                       },
-    { LayoutNavEntry::Examples,         Doxygen::exampleSDict->count()>0       }
-  };
-
-  QCString indentStr;
-  indentStr.fill(' ',indent*2);
-  bool found=FALSE;
-  if (root->children().count()>0)
-  {
-    QListIterator<LayoutNavEntry> li(root->children());
-    LayoutNavEntry *entry;
-    for (li.toFirst();(entry=li.current());++li)
-    {
-      if (navEntryCountMap[entry->kind()].hasItems && entry->visible())
-      {
-        // terminate previous entry
-        if (!first) t << "," << endl;
-        first = FALSE;
-
-        // start entry
-        if (!found)
-        {
-          t << "[" << endl;
-        }
-        found = TRUE;
-
-        bool emptySection=TRUE;
-        t << indentStr << "  [ ";
-        t << "\"" << fixSpaces(entry->title()) << "\", ";
-        t << "\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\", ";
-
-        // write children (if any)
-        bool firstChild=TRUE;
-        if (entry->kind()==LayoutNavEntry::ClassMembers)
-        {
-          emptySection = !writeMemberNavIndex(t,indent+1,CMHL_Total,documentedClassMembers,g_memberIndexLetterUsed,&getCmhlInfo,firstChild);
-        }
-        else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
-        {
-          emptySection = !writeMemberNavIndex(t,indent+1,NMHL_Total,documentedNamespaceMembers,g_namespaceIndexLetterUsed,&getNmhlInfo,firstChild);
-        }
-        else if (entry->kind()==LayoutNavEntry::FileGlobals)
-        {
-          emptySection = !writeMemberNavIndex(t,indent+1,FMHL_Total,documentedFileMembers,g_fileIndexLetterUsed,&getFmhlInfo,firstChild);
-        }
-        else
-        {
-          emptySection = !writeFullNavIndex(t,entry,indent+1,firstChild);
-        }
-        // end entry
-        if (emptySection) // entry without children
-          t << "null ]";
-        else // entry with children
-          t << endl << indentStr << "  ] ]";
-      }
-    }
-  }
-  return found;
-}
-#endif
-
-//----------------------------------------------------------------------------
-
 static void countRelatedPages(int &docPages,int &indexPages)
 {
   docPages=indexPages=0;
@@ -3440,15 +3232,21 @@ void writeGraphInfo(OutputList &ol)
   ol.pushGeneratorState();
   ol.disableAllBut(OutputGenerator::Html);
   generateGraphLegend(Config_getString("HTML_OUTPUT"));
+
+  bool &stripCommentsStateRef = Config_getBool("STRIP_CODE_COMMENTS");
+  bool oldStripCommentsState = stripCommentsStateRef;
+  bool &createSubdirs = Config_getBool("CREATE_SUBDIRS");
+  bool oldCreateSubdirs = createSubdirs;
+  // temporarily disable the stripping of comments for our own code example!
+  stripCommentsStateRef = FALSE;
+  // temporarily disable create subdirs for linking to our example
+  createSubdirs = FALSE;
+
   startFile(ol,"graph_legend",0,theTranslator->trLegendTitle().data());
   startTitle(ol,0);
   ol.parseText(theTranslator->trLegendTitle());
   endTitle(ol,0,0);
   ol.startContents();
-  bool &stripCommentsStateRef = Config_getBool("STRIP_CODE_COMMENTS");
-  bool oldStripCommentsState = stripCommentsStateRef;
-  // temporarily disable the stripping of comments for our own code example!
-  stripCommentsStateRef = FALSE;
   QCString legendDocs = theTranslator->trLegendDocs();
   int s = legendDocs.find("<center>");
   int e = legendDocs.find("</center>");
@@ -3459,7 +3257,11 @@ void writeGraphInfo(OutputList &ol)
   }
   FileDef fd("","graph_legend");
   ol.generateDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
+
+  // restore config settings
   stripCommentsStateRef = oldStripCommentsState;
+  createSubdirs = oldCreateSubdirs;
+
   endFile(ol);
   ol.popGeneratorState();
 }
@@ -3692,7 +3494,6 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
         if (gd->getSubGroups()->count()>0)
         {
           startIndexHierarchy(ol,level+1);
-          if (Config_getBool("SORT_GROUP_NAMES")) gd->sortSubGroups();
           QListIterator<GroupDef> gli(*gd->getSubGroups());
           GroupDef *subgd = 0;
           for (gli.toFirst();(subgd=gli.current());++gli)
@@ -3726,10 +3527,6 @@ static void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
     ol.disable(OutputGenerator::Html);
   }
   startIndexHierarchy(ol,0);
-  if (Config_getBool("SORT_GROUP_NAMES"))
-  {
-    Doxygen::groupSDict->sort();
-  }
   GroupSDict::Iterator gli(*Doxygen::groupSDict);
   GroupDef *gd;
   for (gli.toFirst();(gd=gli.current());++gli)
diff --git a/src/index_xsd.h b/src/index_xsd.h
deleted file mode 100644 (file)
index 2f5d0c5..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-"<?xml version='1.0' encoding='utf-8' ?>\n"
-"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
-"  <xsd:element name=\"doxygenindex\" type=\"DoxygenType\"/>\n"
-"\n"
-"  <xsd:complexType name=\"DoxygenType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"compound\" type=\"CompoundType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"version\" type=\"xsd:string\" use=\"required\"/>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"CompoundType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"name\" type=\"xsd:string\"/>\n"
-"      <xsd:element name=\"member\" type=\"MemberType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"required\"/>\n"
-"    <xsd:attribute name=\"kind\" type=\"CompoundKind\" use=\"required\"/>\n"
-"  </xsd:complexType>\n"
-"\n"
-"  <xsd:complexType name=\"MemberType\">\n"
-"    <xsd:sequence>\n"
-"      <xsd:element name=\"name\" type=\"xsd:string\"/>\n"
-"    </xsd:sequence>\n"
-"    <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"required\"/>\n"
-"    <xsd:attribute name=\"kind\" type=\"MemberKind\" use=\"required\"/>\n"
-"  </xsd:complexType>\n"
-"  \n"
-"  <xsd:simpleType name=\"CompoundKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"class\"/>\n"
-"      <xsd:enumeration value=\"struct\"/>\n"
-"      <xsd:enumeration value=\"union\"/>\n"
-"      <xsd:enumeration value=\"interface\"/>\n"
-"      <xsd:enumeration value=\"protocol\"/>\n"
-"      <xsd:enumeration value=\"category\"/>\n"
-"      <xsd:enumeration value=\"exception\"/>\n"
-"      <xsd:enumeration value=\"file\"/>\n"
-"      <xsd:enumeration value=\"namespace\"/>\n"
-"      <xsd:enumeration value=\"group\"/>\n"
-"      <xsd:enumeration value=\"page\"/>\n"
-"      <xsd:enumeration value=\"example\"/>\n"
-"      <xsd:enumeration value=\"dir\"/>\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"  <xsd:simpleType name=\"MemberKind\">\n"
-"    <xsd:restriction base=\"xsd:string\">\n"
-"      <xsd:enumeration value=\"define\"/>\n"
-"      <xsd:enumeration value=\"property\"/>\n"
-"      <xsd:enumeration value=\"event\"/>\n"
-"      <xsd:enumeration value=\"variable\"/>\n"
-"      <xsd:enumeration value=\"typedef\"/>\n"
-"      <xsd:enumeration value=\"enum\"/>\n"
-"      <xsd:enumeration value=\"enumvalue\"/>\n"
-"      <xsd:enumeration value=\"function\"/>\n"
-"      <xsd:enumeration value=\"signal\"/>\n"
-"      <xsd:enumeration value=\"prototype\"/>\n"
-"      <xsd:enumeration value=\"friend\"/>\n"
-"      <xsd:enumeration value=\"dcop\"/>\n"
-"      <xsd:enumeration value=\"slot\"/>\n"
-"    </xsd:restriction>\n"
-"  </xsd:simpleType>\n"
-"\n"
-"</xsd:schema>\n"
-"\n"
diff --git a/src/jquery_fx_js.h b/src/jquery_fx_js.h
deleted file mode 100644 (file)
index 7fd7f2e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:\"xy\",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),[\"iframe\",\"#document\",\"html\",\"body\"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode==\"BackCompat\"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e==\"object\"){d=e;e=0}if(typeof d==\"function\"){d={onAfter:d}}if(f==\"max\"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is(\"html,body\");switch(typeof k){case\"number\":case\"string\":if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case\"object\":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(\"\"),function(q,r){var s=r==\"x\"?\"Left\":\"Top\",u=s.toLowerCase(),p=\"scroll\"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css(\"margin\"+s))||0;g[p]-=parseInt(k.css(\"border\"+s+\"Width\"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r==\"x\"?\"width\":\"height\"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)==\"%\"?parseFloat(t)/100*n:t}if(/^\\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i==\"x\"?\"Width\":\"Height\",e=\"scroll\"+h;if(!c(j).is(\"html,body\")){return j[e]-c(j)[h.toLowerCase()]()}var g=\"client\"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d==\"object\"?d:{top:d,left:d}}})(jQuery);\n"
diff --git a/src/jquery_p1_js.h b/src/jquery_p1_js.h
deleted file mode 100644 (file)
index 1effb45..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-"/*!\n"
-" * jQuery JavaScript Library v1.7.1\n"
-" * http://jquery.com/\n"
-" *\n"
-" * Copyright 2011, John Resig\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * Includes Sizzle.js\n"
-" * http://sizzlejs.com/\n"
-" * Copyright 2011, The Dojo Foundation\n"
-" * Released under the MIT, BSD, and GPL Licenses.\n"
-" *\n"
-" * Date: Mon Nov 21 21:11:03 2011 -0500\n"
-" */\n"
-"(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))\n"
-"}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;\n"
-"if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false\n"
diff --git a/src/jquery_p2_js.h b/src/jquery_p2_js.h
deleted file mode 100644 (file)
index 7c905ef..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-"}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n"
-"/*!\n"
-" * Sizzle CSS Selector Engine\n"
-" *  Copyright 2011, The Dojo Foundation\n"
-" *  Released under the MIT, BSD, and GPL Licenses.\n"
-" *  More information: http://sizzlejs.com/\n"
-" */\n"
-"(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1\n"
-"},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);\n"
-"ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;\n"
diff --git a/src/jquery_p3_js.h b/src/jquery_p3_js.h
deleted file mode 100644 (file)
index 880da7f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-"if(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)\n"
-"}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b\n"
-"})}})(window);\n"
diff --git a/src/jquery_pt_js.h b/src/jquery_pt_js.h
deleted file mode 100644 (file)
index 27ba1c2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-"/*!\n"
-" PowerTip - v1.2.0 - 2013-04-03\n"
-" http://stevenbenner.github.com/jquery-powertip/\n"
-" Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).\n"
-" Released under MIT license.\n"
-" https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt\n"
-"*/\n"
-"(function(a){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k(\"body\");var n=\"displayController\",e=\"hasActiveHover\",d=\"forcedOpen\",u=\"hasMouseMove\",f=\"mouseOnToPopup\",g=\"originalTitle\",y=\"powertip\",o=\"powertipjq\",l=\"powertiptarget\",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)===\"string\"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr(\"title\");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr(\"title\")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({\"mouseenter.powertip\":function J(P){k.powerTip.show(this,P)},\"mouseleave.powertip\":function L(){k.powerTip.hide(this)},\"focus.powertip\":function K(){k.powerTip.show(this)},\"blur.powertip\":function H(){k.powerTip.hide(this,true)},\"keydown.powertip\":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:\"powerTip\",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:\"n\",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:[\"n\",\"ne\",\"nw\",\"s\"],e:[\"e\",\"ne\",\"se\",\"w\",\"nw\",\"sw\",\"n\",\"s\",\"e\"],s:[\"s\",\"se\",\"sw\",\"n\"],w:[\"w\",\"nw\",\"sw\",\"e\",\"ne\",\"se\",\"n\",\"s\",\"w\"],nw:[\"nw\",\"w\",\"sw\",\"n\",\"s\",\"se\",\"nw\"],ne:[\"ne\",\"e\",\"se\",\"n\",\"s\",\"sw\",\"ne\"],sw:[\"sw\",\"w\",\"nw\",\"s\",\"n\",\"ne\",\"sw\"],se:[\"se\",\"e\",\"ne\",\"s\",\"n\",\"nw\",\"se\"],\"nw-alt\":[\"nw-alt\",\"n\",\"ne-alt\",\"sw-alt\",\"s\",\"se-alt\",\"w\",\"e\"],\"ne-alt\":[\"ne-alt\",\"n\",\"nw-alt\",\"se-alt\",\"s\",\"sw-alt\",\"e\",\"w\"],\"sw-alt\":[\"sw-alt\",\"s\",\"se-alt\",\"nw-alt\",\"n\",\"ne-alt\",\"w\",\"e\"],\"se-alt\":[\"se-alt\",\"s\",\"sw-alt\",\"ne-alt\",\"n\",\"nw-alt\",\"e\",\"w\"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(\".powertip\").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr(\"title\",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top=\"auto\";F.left=\"auto\";F.right=\"auto\";F.bottom=\"auto\";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split(\"-\")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case\"n\":N.set(\"left\",I.left-(J/2));N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"e\":N.set(\"left\",I.left+P);N.set(\"top\",I.top-(O/2));break;case\"s\":N.set(\"left\",I.left-(J/2));N.set(\"top\",I.top+P);break;case\"w\":N.set(\"top\",I.top-(O/2));N.set(\"right\",c.windowWidth-I.left+P);break;case\"nw\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"nw-alt\":N.set(\"left\",I.left);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne\":N.set(\"left\",I.left-20);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne-alt\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left);break;case\"sw\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"sw-alt\":N.set(\"left\",I.left);N.set(\"top\",I.top+P);break;case\"se\":N.set(\"left\",I.left-20);N.set(\"top\",I.top+P);break;case\"se-alt\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case\"n\":M=O.left+N/2;L=O.top;break;case\"e\":M=O.left+N;L=O.top+I/2;break;case\"s\":M=O.left+N/2;L=O.top+I;break;case\"w\":M=O.left;L=O.top+I/2;break;case\"nw\":M=O.left;L=O.top;break;case\"ne\":M=O.left+N;L=O.top;break;case\"sw\":M=O.left;L=O.top+I;break;case\"se\":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest(\"svg\")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=[\"nw\",\"n\",\"ne\",\"e\",\"se\",\"s\",\"sw\",\"w\"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k(\"#\"+Q.popupId);if(O.length===0){O=k(\"<div/>\",{id:Q.popupId});if(w.length===0){w=k(\"body\")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on(\"mousemove\",M);s.on(\"scroll\",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger(\"powerTipPreRender\");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger(\"powerTipRender\");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger(\"powerTipOpen\")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set(\"top\",c.currentY+Q.offset);T.set(\"left\",c.currentX+Q.offset);O.css(T);R.trigger(\"powerTipClose\")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set(\"top\",c.currentY+Q.offset);U.set(\"left\",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set(\"left\",c.windowWidth-R)}else{if(S===p.bottom){U.set(\"top\",c.scrollTop+c.windowHeight-V)}}}else{U.set(\"left\",c.currentX-R-Q.offset);U.set(\"top\",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set(\"top\",0);V.set(\"left\",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(\":disabled\")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(\":focus\")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on(\"mousemove\",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k(\"#\"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));\n"
diff --git a/src/jquery_ui_js.h b/src/jquery_ui_js.h
deleted file mode 100644 (file)
index c860682..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-"/*!\n"
-" * jQuery UI 1.8.18\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI\n"
-" */\n"
-"(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e===\"number\"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css(\"zIndex\",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){g=parseInt(f.css(\"zIndex\"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}});a.each([\"Width\",\"Height\"],function(g,e){var f=e===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,\"padding\"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,\"border\"+this+\"Width\",true))||0}if(n){l-=parseFloat(a.curCSS(m,\"margin\"+this,true))||0}});return l}a.fn[\"inner\"+e]=function(i){if(i===d){return k[\"inner\"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+\"px\")})};a.fn[\"outer\"+e]=function(i,l){if(typeof i!==\"number\"){return k[\"outer\"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+\"px\")})}});function c(g,e){var j=g.nodeName.toLowerCase();if(\"area\"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!==\"map\"){return false}f=a(\"img[usemap=#\"+h+\"]\")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:\"a\"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[\":\"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,\"tabindex\")))},tabbable:function(g){var e=a.attr(g,\"tabindex\"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement(\"div\"));f.offsetHeight;a.extend(f.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart=\"onselectstart\" in f;e.removeChild(f).style.display=\"none\"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css(\"overflow\")===\"hidden\"){return false}var e=(f&&f===\"left\")?\"scrollLeft\":\"scrollTop\",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!\n"
-" * jQuery UI Widget 1.8.18\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Widget\n"
-" */\n"
-"(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler(\"remove\")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b(\"*\",this).add([this]).each(function(){try{b(this).triggerHandler(\"remove\")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(\".\")[0],j;f=f.split(\".\")[1];j=g+\"-\"+f;if(!e){e=h;h=b.Widget}b.expr[\":\"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i===\"string\",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)===\"_\"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind(\"remove.\"+this.widgetName,function(){e.destroy()});this._create();this._trigger(\"create\");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind(\".\"+this.widgetName).removeData(this.widgetName);this.widget().unbind(\".\"+this.widgetName).removeAttr(\"aria-disabled\").removeClass(this.widgetBaseClass+\"-disabled ui-state-disabled\")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f===\"string\"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e===\"disabled\"){this.widget()[f?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled ui-state-disabled\").attr(\"aria-disabled\",f)}return this},enable:function(){return this._setOption(\"disabled\",false)},disable:function(){return this._setOption(\"disabled\",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!\n"
-" * jQuery UI Mouse 1.8.18\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Mouse\n"
-" *\n"
-" * Depends:\n"
-" *    jquery.ui.widget.js\n"
-" */\n"
-"(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return d._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+\".preventClickEvent\")){b.removeData(e.target,d.widgetName+\".preventClickEvent\");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel==\"string\"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+\".preventClickEvent\")){b.removeData(f.target,this.widgetName+\".preventClickEvent\")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+\".preventClickEvent\",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget(\"ui.resizable\",c.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=k.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var l=this.handles.split(\",\");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e=\"ui-resizable-\"+j;var h=c('<div class=\"ui-resizable-handle '+e+'\"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if(\"se\"==j){h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[j]=\".ui-resizable-\"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=[\"padding\",/ne|nw|n/.test(n)?\"Top\":/se|sw|s/.test(n)?\"Bottom\":/^e$/.test(n)?\"Right\":\"Left\"].join(\"\");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:\"se\"}});if(k.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){if(k.disabled){return}c(this).removeClass(\"ui-resizable-autohide\");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass(\"ui-resizable-autohide\");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css(\"position\"),width:f.outerWidth(),height:f.outerHeight(),top:f.css(\"top\"),left:f.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(\".ui-draggable\")||(/absolute/).test(e.css(\"position\"))){e.css({position:\"absolute\",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css(\"left\")),h=b(this.helper.css(\"top\"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio==\"number\")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i);e.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate(\"resize\",e);h.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger(\"resize\",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],\"left\")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css(\"left\"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css(\"top\"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e==\"sw\"){h.left=j.left+(f.width-h.width);h.top=null}if(e==\"nw\"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css(\"borderTopWidth\"),h.css(\"borderRightWidth\"),h.css(\"borderBottomWidth\"),h.css(\"borderLeftWidth\")],j=[h.css(\"paddingTop\"),h.css(\"paddingRight\"),h.css(\"paddingBottom\"),h.css(\"paddingLeft\")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(\":hidden\")||c(g).parents(\":hidden\").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:\"absolute\",left:this.elementOffset.left-g+\"px\",top:this.elementOffset.top-g+\"px\",zIndex:++i.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!=\"resize\"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:\"1.8.18\"});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(f,g){var e=c(this).data(\"resizable\"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data(\"resizable-alsoresize\",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css(\"left\"),10),top:parseInt(k.css(\"top\"),10)})})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data(\"resizable\"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data(\"resizable-alsoresize\"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)==\"object\"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData(\"resizable-alsoresize\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(i,n){var p=c(this).data(\"resizable\"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],\"left\")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top))||null;\n"
-"p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css(\"width\"),10),height:parseInt(p.element.css(\"height\"),10),top:parseInt(p.element.css(\"top\"),10),left:parseInt(p.element.css(\"left\"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate(\"resize\",i)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(f,r){var t=c(this).data(\"resizable\"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){i[p]=b(n.css(\"padding\"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,\"left\")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data(\"resizable\"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css(\"position\"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css(\"position\"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data(\"resizable\"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(g,h){var e=c(this).data(\"resizable\"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof i.ghost==\"string\"?i.ghost:\"\");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost){e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(e,m){var p=c(this).data(\"resizable\"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid==\"number\"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!\n"
-" * jQuery hashchange event - v1.3 - 7/21/2010\n"
-" * http://benalman.com/projects/jquery-hashchange-plugin/\n"
-" * \n"
-" * Copyright (c) 2010 \"Cowboy\" Ben Alman\n"
-" * Dual licensed under the MIT and GPL licenses.\n"
-" * http://benalman.com/about/license/\n"
-" */\n"
-"(function($,e,b){var c=\"hashchange\",h=document,f,g=$.event.special,i=h.documentMode,d=\"on\"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return\"#\"+j.replace(/^[^#]*#?(.*)$/,\"$1\")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,\"\")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one(\"load\",function(){r||l(a());n()}).attr(\"src\",r||\"javascript:0\").insertAfter(\"body\")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName===\"title\"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain=\"'+t+'\"<\\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);\n"
index 72305af..769696c 100644 (file)
@@ -1,40 +1,42 @@
-#define LANG_NL
-#define LANG_SV
+#define LANG_AM
+#define LANG_AR
+#define LANG_BR
+#define LANG_CA
+#define LANG_CN
 #define LANG_CZ
-#define LANG_FR
-#define LANG_ID
-#define LANG_IT
 #define LANG_DE
-#define LANG_JP
-#define LANG_JE
+#define LANG_DK
+#define LANG_EN
+#define LANG_EO
 #define LANG_ES
+#define LANG_FA
 #define LANG_FI
-#define LANG_RU
+#define LANG_FR
+#define LANG_GR
 #define LANG_HR
-#define LANG_PL
-#define LANG_PT
 #define LANG_HU
-#define LANG_KR
+#define LANG_ID
+#define LANG_IT
+#define LANG_JE
+#define LANG_JP
 #define LANG_KE
+#define LANG_KR
+#define LANG_LT
+#define LANG_LV
+#define LANG_MK
+#define LANG_NL
+#define LANG_NO
+#define LANG_PL
+#define LANG_PT
 #define LANG_RO
+#define LANG_RU
+#define LANG_SC
 #define LANG_SI
-#define LANG_CN
-#define LANG_NO
-#define LANG_MK
-#define LANG_BR
-#define LANG_DK
 #define LANG_SK
-#define LANG_UA
-#define LANG_GR
-#define LANG_TW
 #define LANG_SR
-#define LANG_CA
-#define LANG_LT
-#define LANG_ZA
-#define LANG_AR
-#define LANG_FA
-#define LANG_SC
-#define LANG_VI
+#define LANG_SV
 #define LANG_TR
-#define LANG_EO
-#define LANG_AM
+#define LANG_TW
+#define LANG_UA
+#define LANG_VI
+#define LANG_ZA
diff --git a/src/lang_cfg.py b/src/lang_cfg.py
new file mode 100644 (file)
index 0000000..9ba1319
--- /dev/null
@@ -0,0 +1,8 @@
+import sys
+
+if (len(sys.argv) > 0):
+    if (sys.argv[1] == "ENONLY"):
+        print "#define ENGLISH_ONLY"
+    else:
+        for x in xrange(1, len(sys.argv)):
+            print "#define LANG_%s"%(sys.argv[x])
index eb88455..c993323 100644 (file)
@@ -354,9 +354,9 @@ bool setTranslator(const char *langName)
   }
 #endif
 #ifdef LANG_SC
-  else if (L_EQUAL("serbian-cyrilic"))
+  else if (L_EQUAL("serbian-cyrillic") || L_EQUAL("serbiancyr")) /* serbiancyr for consistency with older versions */
   {
-    theTranslator=new TranslatorSerbian;
+    theTranslator=new TranslatorSerbianCyrillic;
   }
 #endif
 #ifdef LANG_CA
diff --git a/src/languages.py b/src/languages.py
new file mode 100755 (executable)
index 0000000..0005e88
--- /dev/null
@@ -0,0 +1,106 @@
+#
+# This file is an aid to generated the Languages rules file.
+# usage:
+#   python languages.py > ..\winbuild\Languages.rules
+#
+import os
+import re
+
+files = [f for f in os.listdir('.') if re.match(r'translator_[a-z][a-z]\.h', f)]
+new_list = []
+for f in files:
+    new_list.append([f,(os.path.splitext(f)[0]).replace("translator_","").upper()])
+
+#
+# generating file is lang_cfg.py
+# the rules file has to output lang_cfg.h
+#
+print """\
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+        Name="languages"
+        Version="8.00"
+        >
+        <Rules>
+                <CustomBuildRule
+                        Name="Languages"
+                        DisplayName="Settings"
+                        CommandLine="python $(InputPath) [AllOptions] [AdditionalOptions] &gt; $(InputDir)../src/$(InputName).h"
+                        Outputs="$(InputDir)../src/$(InputName).h"
+                        FileExtensions="*.py"
+                        AdditionalDependencies=""
+                        ExecutionDescription="Executing languages ..."
+                        ShowOnlyRuleProperties="false"
+                        >
+                        <Properties>
+                               <EnumProperty
+                                       Name="EnglishOnly"
+                                       DisplayName="Use English Only"
+                                       Description="Use English Only"
+                                       DefaultValue="0"
+                               >
+                                       <Values>
+                                               <EnumValue
+                                               Value="0"
+                                               Switch=""
+                                               DisplayName="Don't use English Only"
+                                               />
+                                               <EnumValue
+                                               Value="1"
+                                               Switch="ENONLY"
+                                               DisplayName="Use English Only"
+                                               />
+                                       </Values>
+                               </EnumProperty>
+"""
+#
+# generate loop, English is mandatory (so cannot be chosen)
+#
+for f in new_list:
+    if (f[1] != "EN"):
+        # search for the language description
+        fil = open(f[0], 'r')
+        tmp = ""
+        for line in fil:
+          if "idLanguage" in line:
+             tmp = line
+             if "}" in line:
+               break
+          elif (tmp != ""):
+             tmp += line
+             if "}" in line:
+               break
+    
+        tmp = tmp.replace("\n","")
+        l = re.sub('[^"]*"([^"]*)".*','\\1',tmp)
+        l1 = l.replace("-","")
+        # capatalize first letter
+        l = l.title()
+        print """\
+                                   <EnumProperty
+                                           Name="%s"
+                                           DisplayName="Use %s"
+                                           Description="Use %s"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use %s"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="%s"
+                                                   DisplayName="Use %s"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        """ % (l1, l, l, l, f[1], l)
+
+print """\
+                        </Properties>
+                </CustomBuildRule>
+        </Rules>
+</VisualStudioToolFile>
+"""
index cdcf8b4..91064a3 100644 (file)
@@ -27,6 +27,7 @@
 #include "message.h"
 #include "parserintf.h"
 #include "msc.h"
+#include "dia.h"
 #include "cite.h"
 #include "filedef.h"
 #include "config.h"
@@ -1255,6 +1256,18 @@ void LatexDocVisitor::visitPost(DocMscFile *df)
   if (m_hide) return;
   endMscFile(df->hasCaption());
 }
+
+void LatexDocVisitor::visitPre(DocDiaFile *df)
+{
+  if (m_hide) return;
+  startDiaFile(df->file(),df->width(),df->height(),df->hasCaption());
+}
+
+void LatexDocVisitor::visitPost(DocDiaFile *df)
+{
+  if (m_hide) return;
+  endDiaFile(df->hasCaption());
+}
 void LatexDocVisitor::visitPre(DocLink *lnk)
 {
   if (m_hide) return;
@@ -1296,15 +1309,25 @@ void LatexDocVisitor::visitPost(DocRef *ref)
   }
 }
 
-void LatexDocVisitor::visitPre(DocSecRefItem *)
+void LatexDocVisitor::visitPre(DocSecRefItem *ref)
 {
   if (m_hide) return;
   m_t << "\\item \\contentsline{section}{";
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  if (pdfHyperlinks)
+  {
+    m_t << "\\hyperlink{" << ref->file() << "_" << ref->anchor() << "}{" ;
+  }
 }
 
 void LatexDocVisitor::visitPost(DocSecRefItem *ref) 
 {
   if (m_hide) return;
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  if (pdfHyperlinks)
+  {
+    m_t << "}";
+  }
   m_t << "}{\\ref{" << ref->file() << "_" << ref->anchor() << "}}{}" << endl;
 }
 
@@ -1492,6 +1515,7 @@ void LatexDocVisitor::visitPost(DocParamList *pl)
 void LatexDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "\\begin{DoxyRefDesc}{";
   filter(x->title());
   m_t << "}" << endl;
@@ -1511,9 +1535,10 @@ void LatexDocVisitor::visitPre(DocXRefItem *x)
   m_t << "}]";
 }
 
-void LatexDocVisitor::visitPost(DocXRefItem *)
+void LatexDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "\\end{DoxyRefDesc}" << endl;
 }
 
@@ -1567,6 +1592,16 @@ void LatexDocVisitor::visitPost(DocVhdlFlow *)
   if (m_hide) return;
 }
 
+void LatexDocVisitor::visitPre(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
+void LatexDocVisitor::visitPost(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
 void LatexDocVisitor::filter(const char *str)
 { 
   filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem);
@@ -1793,3 +1828,94 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
   m_t << "\\end{DoxyImageNoCaption}\n";
 }
 
+void LatexDocVisitor::startDiaFile(const QCString &fileName,
+                                   const QCString &width,
+                                   const QCString &height,
+                                   bool hasCaption
+                                  )
+{
+  QCString baseName=fileName;
+  int i;
+  if ((i=baseName.findRev('/'))!=-1)
+  {
+    baseName=baseName.right(baseName.length()-i-1);
+  }
+  if ((i=baseName.find('.'))!=-1)
+  {
+    baseName=baseName.left(i);
+  }
+  baseName.prepend("dia_");
+
+  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{";
+  }
+}
+
+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";
+  }
+}
+
+
+void LatexDocVisitor::writeDiaFile(const QCString &baseName)
+{
+  QCString shortName = baseName;
+  int i;
+  if ((i=shortName.findRev('/'))!=-1)
+  {
+    shortName=shortName.right(shortName.length()-i-1);
+  }
+  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";
+}
+
index 3fea33c..4073b7f 100644 (file)
@@ -110,6 +110,8 @@ class LatexDocVisitor : public DocVisitor
     void visitPost(DocDotFile *);
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *lnk);
     void visitPost(DocLink *);
     void visitPre(DocRef *ref);
@@ -134,6 +136,8 @@ class LatexDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
 
   private:
 
@@ -168,6 +172,11 @@ class LatexDocVisitor : public DocVisitor
     void endMscFile(bool hasCaption);
     void writeMscFile(const QCString &fileName);
 
+    void startDiaFile(const QCString &fileName,const QCString &width,
+                      const QCString &height, bool hasCaption);
+    void endDiaFile(bool hasCaption);
+    void writeDiaFile(const QCString &fileName);
+
     void pushEnabled();
     void popEnabled();
 
index 49f06fe..e473e79 100644 (file)
@@ -38,7 +38,7 @@
 #include "filename.h"
 
 static const char doxygenLatexStyle[] =
-#include "doxygen_sty.h"
+#include "doxygen.sty.h"
 ;
 
 //static QCString filterTitle(const char *s)
@@ -126,7 +126,7 @@ static void writeLatexMakefile()
     }
     t << "\techo \"Rerunning latex....\"" << endl
       << "\t" << latex_command << " refman.tex" << endl
-      << "\tlatex_count=5 ; \\" << endl
+      << "\tlatex_count=8 ; \\" << endl
       << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
       << "\t    do \\" << endl
       << "\t      echo \"Rerunning latex....\" ;\\" << endl
@@ -154,7 +154,7 @@ static void writeLatexMakefile()
       t << "\tpdflatex refman" << endl;
     }
     t << "\tpdflatex refman" << endl
-      << "\tlatex_count=5 ; \\" << endl
+      << "\tlatex_count=8 ; \\" << endl
       << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
       << "\t    do \\" << endl
       << "\t      echo \"Rerunning latex....\" ;\\" << endl
@@ -199,7 +199,7 @@ static void writeMakeBat()
       t << latex_command << " refman.tex\n";
     }
     t << "setlocal enabledelayedexpansion\n";
-    t << "set count=5\n";
+    t << "set count=8\n";
     t << ":repeat\n";
     t << "set content=X\n";
     t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
@@ -231,7 +231,7 @@ static void writeMakeBat()
     t << "echo ----\n";
     t << "pdflatex refman\n\n";
     t << "setlocal enabledelayedexpansion\n";
-    t << "set count=5\n";
+    t << "set count=8\n";
     t << ":repeat\n";
     t << "set content=X\n";
     t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
@@ -525,10 +525,15 @@ static void writeDefaultFooter(FTextStream &t)
   Doxygen::citeDict->writeLatexBibliography(t);
 
   // Index
+  QCString unit;
+  if (Config_getBool("COMPACT_LATEX"))
+    unit = "section";
+  else
+    unit = "chapter";
   t << "% Index\n"
        "\\newpage\n"
        "\\phantomsection\n"
-       "\\addcontentsline{toc}{part}{" << theTranslator->trRTFGeneralIndex() << "}\n"
+       "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trRTFGeneralIndex() << "}\n"
        "\\printindex\n"
        "\n"
        "\\end{document}\n";
index 010c850..bc00745 100644 (file)
@@ -33,7 +33,7 @@
 #include <qtextstream.h>
 
 static const char layout_default[] =
-#include "layout_default.h"
+#include "layout_default.xml.h"
 ;
 
 #define ADD_OPTION(langId,text) "|"+QCString().setNum(langId)+"="+text
index 270d090..3a2ce0a 100644 (file)
@@ -18,6 +18,7 @@
 
 LEX     =   %%FLEX%%
 YACC    =   %%BISON%%
+PYTHON  =   %%PYTHON%%
 
 #${
 sub GenerateDep {
@@ -48,5 +49,5 @@ sub GenerateDep {
        $(LEX) -PconfigYY -t config.l >config.cpp 
 
 configoptions.cpp: config.xml configgen.py
-       python configgen.py -cpp config.xml >configoptions.cpp
+       $(PYTHON) configgen.py -cpp config.xml >configoptions.cpp
 
index c4e79da..b230b2f 100644 (file)
@@ -17,6 +17,7 @@
 TEMPLATE     = libdoxygen.t
 CONFIG       = console warn_on staticlib $extraopts
 HEADERS      = arguments.h \
+                bib2xhtml.pl.h \
                 bufstr.h \
                cite.h \
                clangparser.h \
@@ -26,9 +27,10 @@ HEADERS      =       arguments.h \
                 code.h \
                commentcnv.h \
                commentscan.h \
-                compound_xsd.h \
+                compound.xsd.h \
                condparser.h \
                 config.h \
+               context.h \
                constexp.h \
                cppvalue.h \
                debug.h \
@@ -45,20 +47,20 @@ HEADERS      =      arguments.h \
                 docvisitor.h \
                dot.h \
                doxygen.h \
-               doxygen_bst.h \
-               doxygen_css.h \
-               doxygen_sty.h \
+               doxygen.bst.h \
+               doxygen.css.h \
+               doxygen.sty.h \
                eclipsehelp.h \
                entry.h \
                example.h \
                filedef.h \
                filename.h \
-               footer_html.h \
+               footer.html.h \
                formula.h \
                ftextstream.h \
                ftvhelp.h \
                groupdef.h \
-               header_html.h \
+               header.html.h \
                htags.h \
                htmlattrib.h \
                 htmldocvisitor.h \
@@ -66,20 +68,20 @@ HEADERS      =      arguments.h \
                htmlhelp.h \
                image.h \
                index.h \
-                index_xsd.h \
-               jquery_p1_js.h \
-               jquery_p2_js.h \
-               jquery_p3_js.h \
-               jquery_ui_js.h \
-               jquery_fx_js.h \
-               jquery_pt_js.h \
-               svgpan_js.h \
-               dynsections_js.h \
+                index.xsd.h \
+               jquery_p1.js.h \
+               jquery_p2.js.h \
+               jquery_p3.js.h \
+               jquery_ui.js.h \
+               jquery_fx.js.h \
+               jquery_pt.js.h \
+               svgpan.js.h \
+               dynsections.js.h \
                language.h \
                 latexdocvisitor.h \
                latexgen.h \
                 layout.h \
-                layout_default.h \
+                layout_default.xml.h \
                logos.h \
                mandocvisitor.h \
                mangen.h \
@@ -92,9 +94,10 @@ HEADERS      =       arguments.h \
                membername.h \
                message.h \
                 msc.h \
+                dia.h \
                namespacedef.h \
-               navtree_css.h \
-               navtree_js.h \
+               navtree.css.h \
+               navtree.js.h \
                 objcache.h \
                outputgen.h \
                outputlist.h \
@@ -111,63 +114,27 @@ HEADERS      =    arguments.h \
                qhp.h \
                qhpxmlwriter.h \
                reflist.h \
-               resize_js.h \
+               resize.js.h \
                 rtfdocvisitor.h \
                rtfgen.h \
                rtfstyle.h \
                scanner.h \
                searchindex.h \
-               search_css.h \
-               search_js.h \
-               extsearch_js.h \
-               search_functions_php.h \
-               search_opensearch_php.h \
+               search.css.h \
+               search.js.h \
+               extsearch.js.h \
+               search_functions.php.h \
+               search_opensearch.php.h \
                section.h \
                sortdict.h \
                 store.h \
                tagreader.h \
                tclscanner.h \
+               template.h \
                 textdocvisitor.h \
                tooltip.h \
                translator.h \
                translator_adapter.h \
-               translator_am.h \
-               translator_br.h \
-               translator_ca.h \
-               translator_cn.h \
-               translator_cz.h \
-               translator_de.h \
-               translator_dk.h \
-               translator_en.h \
-               translator_es.h \
-               translator_fi.h \
-               translator_fr.h \
-               translator_gr.h \
-               translator_hr.h \
-               translator_hu.h \
-               translator_id.h \
-               translator_it.h \
-               translator_je.h \
-               translator_jp.h \
-               translator_ke.h \
-               translator_kr.h \
-               translator_nl.h \
-               translator_no.h \
-               translator_mk.h \
-               translator_pl.h \
-               translator_pt.h \
-               translator_ro.h \
-               translator_ru.h \
-               translator_se.h \
-               translator_si.h \
-               translator_sk.h \
-               translator_sr.h \
-               translator_tw.h \
-               translator_ua.h \
-               translator_vi.h \
-               translator_za.h \
-               types.h \
-               unistd.h \
                util.h \
                version.h \
                vhdlcode.h \
@@ -179,7 +146,7 @@ HEADERS      =      arguments.h \
                 docbookgen.h
 
 SOURCES      = arguments.cpp \
-                ce_lex.cpp \
+                constexp.cpp \
                 ce_parse.cpp \
                cite.cpp \
                clangparser.cpp \
@@ -190,6 +157,7 @@ SOURCES      =      arguments.cpp \
                commentcnv.cpp \
                commentscan.cpp \
                condparser.cpp \
+               context.cpp \
                cppvalue.cpp \
                 dbusxmlscanner.cpp \
                debug.cpp \
@@ -238,6 +206,7 @@ SOURCES      =      arguments.cpp \
                membername.cpp \
                message.cpp \
                 msc.cpp \
+                dia.cpp \
                namespacedef.cpp \
                 objcache.cpp \
                outputgen.cpp \
@@ -258,6 +227,7 @@ SOURCES      =      arguments.cpp \
                 store.cpp \
                tagreader.cpp \
                 tclscanner.cpp \
+               template.cpp \
                 textdocvisitor.cpp \
                 tooltip.cpp \
                util.cpp \
@@ -273,8 +243,8 @@ SOURCES      =      arguments.cpp \
 
 win32:TMAKE_CXXFLAGS       += -DQT_NODLL 
 win32-msvc:TMAKE_CXXFLAGS  += -Zm200
-win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
-linux-g++:TMAKE_CXXFLAGS    += -fno-exceptions -fno-rtti
+win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions
+linux-g++:TMAKE_CXXFLAGS    += -fno-exceptions
 INCLUDEPATH                += ../qtools
 #INCLUDEPATH                += ../libpng
 INCLUDEPATH                += ../libmd5
index 959fd69..f131f70 100644 (file)
@@ -18,7 +18,9 @@
 
 LEX        = %%FLEX%%
 YACC       = %%BISON%%
-INCBUFSIZE = $(PERL) increasebuffer.pl
+PYTHON     = %%PYTHON%%
+PERL       = %%PERL%%
+INCBUFSIZE = $(PYTHON) increasebuffer.py
 
 #${
 sub GenerateDep {
@@ -41,155 +43,176 @@ sub GenerateDep {
     }
     chop $text;
 }
+sub GenerateLex {
+    my($name,$caseOpt) = @_;
+    $text = "\t\$(LEX) ";
+    if ($caseOpt) {
+        $text .= "-i ";
+    }
+    $text .= "-P".$name."YY -t ".$name.".l | \$(INCBUFSIZE) >".$name.".cpp";
+}
 #$} 
 
 ####################
 
 #$ GenerateDep("scanner.cpp","scanner.l");
-       $(LEX) -PscanYY -t scanner.l | $(INCBUFSIZE) >scanner.cpp
+#$ GenerateLex("scanner",0);
 
 #$ GenerateDep("code.cpp","code.l");
-       $(LEX) -PcodeYY -t code.l | $(INCBUFSIZE) >code.cpp
+#$ GenerateLex("code",0);
 
 #$ GenerateDep("pyscanner.cpp","pyscanner.l");
-       $(LEX) -PpyscanYY -t pyscanner.l | $(INCBUFSIZE) >pyscanner.cpp
+#$ GenerateLex("pyscanner",0);
 
 #$ GenerateDep("pycode.cpp","pycode.l");
-       $(LEX) -PpycodeYY -t pycode.l | $(INCBUFSIZE) >pycode.cpp
+#$ GenerateLex("pycode",0);
 
 #$ GenerateDep("fortranscanner.cpp","fortranscanner.l");
-       $(LEX) -i -PfscanYY -t fortranscanner.l | $(INCBUFSIZE) >fortranscanner.cpp
+#$ GenerateLex("fortranscanner",1);
 
 #$ GenerateDep("fortrancode.cpp","fortrancode.l");
-       $(LEX) -i -PfcodeYY -t fortrancode.l | $(INCBUFSIZE) >fortrancode.cpp
+#$ GenerateLex("fortrancode",1);
 
 #$ GenerateDep("vhdlcode.cpp","vhdlcode.l");
-       $(LEX) -i -PvhdlcodeYY -t vhdlcode.l | $(INCBUFSIZE) >vhdlcode.cpp
+#$ GenerateLex("vhdlcode",1);
 
 #$ GenerateDep("tclscanner.cpp","tclscanner.l");
-       $(LEX) -i -PtclscanYY -t tclscanner.l | $(INCBUFSIZE) >tclscanner.cpp
+#$ GenerateLex("tclscanner",1);
 
 #$ GenerateDep("pre.cpp","pre.l");
-       $(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp 
+#$ GenerateLex("pre",0);
 
 #$ GenerateDep("declinfo.cpp","declinfo.l");
-       $(LEX) -PdeclinfoYY -t declinfo.l | $(INCBUFSIZE) >declinfo.cpp
+#$ GenerateLex("declinfo",0);
 
 #$ GenerateDep("defargs.cpp","defargs.l");
-       $(LEX) -PdefargsYY -t defargs.l | $(INCBUFSIZE) >defargs.cpp
+#$ GenerateLex("defargs",0);
 
 #$ GenerateDep("doctokenizer.cpp","doctokenizer.l");
-       $(LEX) -PdoctokenizerYY -t doctokenizer.l | $(INCBUFSIZE) >doctokenizer.cpp
+#$ GenerateLex("doctokenizer",0);
 
 #$ GenerateDep("commentcnv.cpp","commentcnv.l");
-       $(LEX) -PcommentcnvYY -t commentcnv.l | $(INCBUFSIZE) >commentcnv.cpp
+#$ GenerateLex("commentcnv",0);
 
 #$ GenerateDep("commentscan.cpp","commentscan.l");
-       $(LEX) -PcommentScanYY -t commentscan.l | $(INCBUFSIZE) >commentscan.cpp
+#$ GenerateLex("commentscan",0);
 
-#$ GenerateDep("ce_lex.cpp","constexp.l","ce_parse.h");
-       $(LEX) -PcppExpYY -t constexp.l | $(INCBUFSIZE) >ce_lex.cpp 
+#$ GenerateDep("constexp.cpp","constexp.l","ce_parse.h");
+#$ GenerateLex("constexp",0);
 
 #$ GenerateDep("ce_parse.cpp","constexp.y");
-       $(YACC) -l -p cppExpYY constexp.y -o ce_parse.cpp 
+       $(YACC) -l -p constexpYY constexp.y -o ce_parse.cpp 
 
 #$ GenerateDep("ce_parse.h","constexp.y");
-       $(YACC) -l -d -p cppExpYY constexp.y -o ce_parse.c 
+       $(YACC) -l -d -p ce_parsexpYY constexp.y -o ce_parse.c 
        -rm ce_parse.c
 
 #$ GenerateDep("vhdlscanner.cpp","vhdlscanner.l","vhdlparser.h");
-       $(LEX) -i -PvhdlScanYY -t vhdlscanner.l | $(INCBUFSIZE) >vhdlscanner.cpp
+#$ GenerateLex("vhdlscanner",1);
 
 #$ GenerateDep("vhdlparser.cpp","vhdlparser.y");
-       $(YACC) -l -p vhdlScanYY vhdlparser.y -o vhdlparser.cpp         
+       $(YACC) -l -p vhdlscannerYY vhdlparser.y -o vhdlparser.cpp      
 
 #$ GenerateDep("vhdlparser.h","vhdlparser.y");
-       $(YACC) -l -d -p vhdlScanYY vhdlparser.y -o vhdlparser.c 
+       $(YACC) -l -d -p vhdlscannerYY vhdlparser.y -o vhdlparser.c 
        -rm vhdlparser.c        
        
-#$ GenerateDep("layout.cpp","layout_default.h");
+#$ GenerateDep("layout.cpp","layout_default.xml.h");
+
+TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
+
+cite.cpp: doxygen.bst.h bib2xhtml.pl.h
+
+ftvhelp.cpp: navtree.js.h resize.js.h navtree.css.h
+
+htmlgen.cpp: header.html.h footer.html.h doxygen.css.h search_functions.php.h \
+             search_opensearch.php.h search.css.h jquery_p1.js.h jquery_p2.js.h \
+            jquery_p3.js.h jquery_ui.js.h jquery_fx.js.h jquery_pt.js.h \
+            svgpan.js.h dynsections.js.h extsearch.js.h
+
+layout.cpp: layout_default.xml.h
 
-TO_C_CMD=sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g"
+xmlgen.cpp: index.xsd.h compound.xsd.h
 
-index_xsd.h: index.xsd
-       cat index.xsd | $(TO_C_CMD) >index_xsd.h 
+latexgen.cpp: doxygen.sty.h
 
-compound_xsd.h: compound.xsd
-       cat compound.xsd | $(TO_C_CMD) >compound_xsd.h 
+searchindex.cpp: search.js.h
 
-layout_default.h: layout_default.xml
-       cat layout_default.xml | $(TO_C_CMD) >layout_default.h 
+index.xsd.h: index.xsd
+       $(TO_C_CMD)
 
-header_html.h: header.html
-       cat header.html | $(TO_C_CMD) >header_html.h
+compound.xsd.h: compound.xsd
+       $(TO_C_CMD)
 
-footer_html.h: footer.html
-       cat footer.html | $(TO_C_CMD) >footer_html.h
+layout_default.xml.h: layout_default.xml
+       $(TO_C_CMD)
 
-search_functions_php.h: search_functions.php
-       cat search_functions.php | $(TO_C_CMD) >search_functions_php.h 
+header.html.h: header.html
+       $(TO_C_CMD)
 
-search_opensearch_php.h: search_opensearch.php
-       cat search_opensearch.php | $(TO_C_CMD) >search_opensearch_php.h 
+footer.html.h: footer.html
+       $(TO_C_CMD)
 
-search_js.h: search.js
-       cat search.js | $(TO_C_CMD) >search_js.h 
+search_functions.php.h: search_functions.php
+       $(TO_C_CMD)
 
-search_css.h: search.css
-       cat search.css | $(TO_C_CMD) >search_css.h 
+search_opensearch.php.h: search_opensearch.php
+       $(TO_C_CMD)
 
-extsearch_js.h: extsearch.js
-       cat extsearch.js | $(TO_C_CMD) >extsearch_js.h 
+search.js.h: search.js
+       $(TO_C_CMD)
 
-doxygen_css.h: doxygen.css
-       cat doxygen.css | $(TO_C_CMD) >doxygen_css.h 
+search.css.h: search.css
+       $(TO_C_CMD)
 
-doxygen_sty.h: doxygen.sty
-       cat doxygen.sty | $(TO_C_CMD) >doxygen_sty.h 
+extsearch.js.h: extsearch.js
+       $(TO_C_CMD)
 
-navtree_js.h: navtree.js
-       cat navtree.js | $(TO_C_CMD) >navtree_js.h
+doxygen.css.h: doxygen.css
+       $(TO_C_CMD)
 
-navindex_js.h: navindex.js
-       cat navindex.js | $(TO_C_CMD) >navindex_js.h
+doxygen.sty.h: doxygen.sty
+       $(TO_C_CMD)
 
-resize_js.h: resize.js
-       cat resize.js | $(TO_C_CMD) >resize_js.h
 
-jquery_p1_js.h: jquery_p1.js
-       cat jquery_p1.js | $(TO_C_CMD) >jquery_p1_js.h
+navtree.js.h: navtree.js
+       $(TO_C_CMD)
 
-jquery_p2_js.h: jquery_p2.js
-       cat jquery_p2.js | $(TO_C_CMD) >jquery_p2_js.h
+resize.js.h: resize.js
+       $(TO_C_CMD)
 
-jquery_p3_js.h: jquery_p3.js
-       cat jquery_p3.js | $(TO_C_CMD) >jquery_p3_js.h
+jquery_p1.js.h: jquery_p1.js
+       $(TO_C_CMD)
 
-jquery_p4_js.h: jquery_p4.js
-       cat jquery_p4.js | $(TO_C_CMD) >jquery_p4_js.h
+jquery_p2.js.h: jquery_p2.js
+       $(TO_C_CMD)
 
-jquery_ui_js.h: jquery_ui.js
-       cat jquery_ui.js | $(TO_C_CMD) >jquery_ui_js.h
+jquery_p3.js.h: jquery_p3.js
+       $(TO_C_CMD)
 
-jquery_fx_js.h: jquery_fx.js
-       cat jquery_fx.js | $(TO_C_CMD) >jquery_fx_js.h
+jquery_ui.js.h: jquery_ui.js
+       $(TO_C_CMD)
 
-jquery_pt_js.h: jquery_pt.js
-       cat jquery_pt.js | $(TO_C_CMD) >jquery_pt_js.h
+jquery_fx.js.h: jquery_fx.js
+       $(TO_C_CMD)
 
-navtree_css.h: navtree.css
-       cat navtree.css | $(TO_C_CMD) >navtree_css.h
+jquery_pt.js.h: jquery_pt.js
+       $(TO_C_CMD)
 
-svgpan_js.h: svgpan.js
-       cat svgpan.js | $(TO_C_CMD) >svgpan_js.h
+navtree.css.h: navtree.css
+       $(TO_C_CMD)
 
-dynsections_js.h: dynsections.js
-       cat dynsections.js | $(TO_C_CMD) >dynsections_js.h
+svgpan.js.h: svgpan.js
+       $(TO_C_CMD)
 
-doxygen_bst.h: doxygen.bst
-       cat doxygen.bst | $(TO_C_CMD) >doxygen_bst.h
+dynsections.js.h: dynsections.js
+       $(TO_C_CMD)
 
-bib2xhtml.h: bib2xhtml.pl
-       cat bib2xhtml.pl | $(TO_C_CMD) >bib2xhtml.h
+doxygen.bst.h: doxygen.bst
+       $(TO_C_CMD)
 
+bib2xhtml.pl.h: bib2xhtml.pl
+       $(TO_C_CMD)
 
+version.cpp: ../configure
+       $(PYTHON) version.py
index 18f93bb..729f3d4 100644 (file)
@@ -775,6 +775,13 @@ void ManDocVisitor::visitPost(DocMscFile *)
 {
 }
 
+void ManDocVisitor::visitPre(DocDiaFile *)
+{
+}
+
+void ManDocVisitor::visitPost(DocDiaFile *)
+{
+}
 
 void ManDocVisitor::visitPre(DocLink *)
 {
@@ -926,6 +933,7 @@ void ManDocVisitor::visitPost(DocParamList *pl)
 void ManDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   if (!m_firstCol)
   { 
     m_t << endl;
@@ -937,9 +945,10 @@ void ManDocVisitor::visitPre(DocXRefItem *x)
   m_t << ".RS 4" << endl;
 }
 
-void ManDocVisitor::visitPost(DocXRefItem *)
+void ManDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   if (!m_firstCol) m_t << endl;
   m_t << ".RE" << endl;
   m_t << ".PP" << endl;
@@ -1002,6 +1011,14 @@ void ManDocVisitor::visitPost(DocVhdlFlow *)
 {
 }
 
+void ManDocVisitor::visitPre(DocParBlock *)
+{
+}
+
+void ManDocVisitor::visitPost(DocParBlock *)
+{
+}
+
 
 void ManDocVisitor::filter(const char *str)
 { 
index cc4e85f..7012152 100644 (file)
@@ -107,6 +107,8 @@ class ManDocVisitor : public DocVisitor
     void visitPost(DocDotFile *);
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *lnk);
     void visitPost(DocLink *);
     void visitPre(DocRef *ref);
@@ -133,6 +135,8 @@ class ManDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
 
   private:
 
index 63d6cfc..ac824f4 100644 (file)
@@ -850,9 +850,15 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
   }
   else
   {
-    if (link.find("@ref ")!=-1 || link.find("\\ref ")!=-1) 
+    SrcLangExt lang = getLanguageFromFileName(link);
+    int lp=-1;
+    if ((lp=link.find("@ref "))!=-1 || (lp=link.find("\\ref "))!=-1 || lang==SrcLangExt_Markdown) 
         // assume doxygen symbol link
     {
+      if (lp==-1) // link to markdown page
+      {
+        out.addStr("@ref ");
+      }
       out.addStr(link);
       out.addStr(" \"");
       if (explicitTitle && !title.isEmpty())
@@ -1968,6 +1974,9 @@ static QCString processBlocks(const QCString &s,int indent)
     end++;
   }
 
+#if 0 // commented out, since starting with a comment block is probably a usage error
+      // see also http://stackoverflow.com/q/20478611/784672
+
   // special case when the documentation starts with a code block
   // since the first line is skipped when looking for a code block later on.
   if (end>codeBlockIndent && isCodeBlock(data,0,end,blockIndent))
@@ -1976,6 +1985,7 @@ static QCString processBlocks(const QCString &s,int indent)
     end=i+1;
     pi=-1;
   }
+#endif
 
   // process each line
   while (i<size)
@@ -2249,6 +2259,15 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
 
 //---------------------------------------------------------------------------
 
+QCString markdownFileNameToId(const QCString &fileName)
+{
+  QCString baseFn  = stripFromPath(QFileInfo(fileName).absFilePath().utf8());
+  int i = baseFn.findRev('.');
+  if (i!=-1) baseFn = baseFn.left(i);
+  QCString baseName = substitute(substitute(baseFn," ","_"),"/","_");
+  return "md_"+baseName;
+}
+
 void MarkdownFileParser::parseInput(const char *fileName, 
                 const char *fileBuf, 
                 Entry *root,
@@ -2270,17 +2289,16 @@ void MarkdownFileParser::parseInput(const char *fileName,
   QCString docs = output.data();
   QCString id;
   QCString title=extractPageTitle(docs,id).stripWhiteSpace();
-  //g_correctSectionLevel = !title.isEmpty();
-  QCString baseFn  = stripFromPath(QFileInfo(fileName).absFilePath().utf8());
-  int i = baseFn.findRev('.');
-  if (i!=-1) baseFn = baseFn.left(i);
   QCString titleFn = QFileInfo(fileName).baseName().utf8();
   QCString fn      = QFileInfo(fileName).fileName().utf8();
-  QCString baseName = substitute(substitute(baseFn," ","_"),"/","_");
   static QCString mdfileAsMainPage = Config_getString("USE_MDFILE_AS_MAINPAGE");
-  if (id.isEmpty()) id = "md_"+baseName;
+  if (id.isEmpty()) id = markdownFileNameToId(fileName);
   if (title.isEmpty()) title = titleFn;
-  if (fn==mdfileAsMainPage)
+  if (!mdfileAsMainPage.isEmpty() &&
+      (fn==mdfileAsMainPage || // name reference
+       QFileInfo(fileName).absFilePath()==
+       QFileInfo(mdfileAsMainPage).absFilePath()) // file reference with path
+     )
   {
     docs.prepend("@mainpage\n");
   }
@@ -2347,7 +2365,8 @@ void MarkdownFileParser::parseCode(CodeOutputInterface &codeOutIntf,
                bool inlineFragment,
                MemberDef *memberDef,
                bool showLineNumbers,
-               Definition *searchCtx
+               Definition *searchCtx,
+               bool collectXRefs
               )
 {
   ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
@@ -2355,7 +2374,8 @@ void MarkdownFileParser::parseCode(CodeOutputInterface &codeOutIntf,
   {
     pIntf->parseCode(
        codeOutIntf,scopeName,input,lang,isExampleBlock,exampleName,
-       fileDef,startLine,endLine,inlineFragment,memberDef,showLineNumbers,searchCtx);
+       fileDef,startLine,endLine,inlineFragment,memberDef,showLineNumbers,
+       searchCtx,collectXRefs);
   }
 }
 
index daabc33..d3a845e 100644 (file)
@@ -23,6 +23,7 @@ class Entry;
 
 /** processes string \a s and converts markdown into doxygen/html commands. */
 QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &s);
+QCString markdownFileNameToId(const QCString &fileName);
 
 class MarkdownFileParser : public ParserInterface
 {
@@ -48,7 +49,8 @@ class MarkdownFileParser : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index d9b9ce9..4d7ea9f 100644 (file)
@@ -3,8 +3,8 @@
  * 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 
- * 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.
  *
@@ -71,9 +71,9 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
     if (s.length()==j || (s.at(j)!='<' && !isId(s.at(j))))
     { // add template names
       //printf("Adding %s+%s\n",clRealName.data(),t.data());
-      result+=clRealName+t; 
+      result+=clRealName+t;
     }
-    else 
+    else
     { // template names already present
       //printf("Adding %s\n",clRealName.data());
       result+=clRealName;
@@ -116,19 +116,18 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
 //   --- leave writeDefArgumentList with return value FALSE
 //   ol.endMemberDocName
 //   ol.endMemberDoc(hasArgs=FALSE);
-//  
+//
 
 static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
                                  const QCString & /*scopeName*/,MemberDef *md)
 {
-  ArgumentList *defArgList=(md->isDocsForDefinition()) ? 
+  ArgumentList *defArgList=(md->isDocsForDefinition()) ?
                              md->argumentList() : md->declArgumentList();
   //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
-  if (defArgList==0 || md->isProperty()) 
+  if (defArgList==0 || md->isProperty())
   {
     return FALSE; // member has no function like argument list
   }
-  if (!md->isDefine()) ol.docify(" ");
 
   // simple argument list for tcl
   if (md->getLanguage()==SrcLangExt_Tcl)
@@ -140,7 +139,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     ol.startParameterType(TRUE,0);
     ol.endParameterType();
     ol.startParameterName(FALSE);
-    while (a) 
+    while (a)
     {
       if (a->defval.isEmpty())
       {
@@ -156,6 +155,8 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     return TRUE;
   }
 
+  if (!md->isDefine()) ol.docify(" ");
+
   //printf("writeDefArgList(%d)\n",defArgList->count());
   ol.pushGeneratorState();
   //ol.disableAllBut(OutputGenerator::Html);
@@ -167,7 +168,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     if (latexOn) ol.enable(OutputGenerator::Latex);
 
     ol.endMemberDocName();
-    ol.startParameterList(!md->isObjCMethod()); 
+    ol.startParameterList(!md->isObjCMethod());
   }
   ol.enableAll();
   ol.disable(OutputGenerator::Html);
@@ -194,7 +195,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     }
     else if (cd->templateArguments())
     {
-      cName=tempArgListToString(cd->templateArguments()); 
+      cName=tempArgListToString(cd->templateArguments());
       //printf("2. cName=%s\n",cName.data());
     }
     else // no template specifier
@@ -209,7 +210,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
   bool isDefine = md->isDefine();
   while (a)
   {
-    if (isDefine || first) 
+    if (isDefine || first)
     {
       ol.startParameterType(first,0);
       paramTypeStarted=TRUE;
@@ -224,7 +225,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     int wp=a->type.find(res);
 
     // use the following to put the function pointer type before the name
-    bool hasFuncPtrType=FALSE; 
+    bool hasFuncPtrType=FALSE;
 
     if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
     {
@@ -251,7 +252,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     }
     if (!isDefine)
     {
-      if (paramTypeStarted) 
+      if (paramTypeStarted)
       {
         ol.endParameterType();
         paramTypeStarted=FALSE;
@@ -260,10 +261,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     }
     if (hasFuncPtrType)
     {
-      ol.docify(a->type.mid(wp,vp-wp)); 
+      ol.docify(a->type.mid(wp,vp-wp));
     }
-    if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
-    { 
+    if (!a->name.isEmpty() || a->type=="...") // argument has a name
+    {
       //if (!hasFuncPtrType)
       //{
       //  ol.docify(" ");
@@ -284,7 +285,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
     {
       ol.docify(a->array);
     }
-    if (hasFuncPtrType) // write the part of the argument type 
+    if (hasFuncPtrType) // write the part of the argument type
                         // that comes after the name
     {
       linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),
@@ -297,15 +298,15 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
       ol.docify(" = ");
 
       ol.startTypewriter();
-      linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n,FALSE,TRUE,TRUE); 
+      linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n,FALSE,TRUE,TRUE);
       ol.endTypewriter();
 
     }
     a=defArgList->next();
-    if (a) 
+    if (a)
     {
       if (!md->isObjCMethod()) ol.docify(", "); // there are more arguments
-      if (!isDefine) 
+      if (!isDefine)
       {
         QCString key;
         if (md->isObjCMethod() && a->attrib.length()>=2)
@@ -316,7 +317,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
           if (key!=",") key+=":"; // for normal keywords add colon
         }
         ol.endParameterName(FALSE,FALSE,!md->isObjCMethod());
-        if (paramTypeStarted) 
+        if (paramTypeStarted)
         {
           ol.endParameterType();
         }
@@ -360,7 +361,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
                 md,                      // self
                 defArgList->trailingReturnType, // text
                 FALSE                    // autoBreak
-               ); 
+               );
 
   }
   return TRUE;
@@ -370,12 +371,13 @@ static void writeExceptionListImpl(
         OutputList &ol, ClassDef *cd, MemberDef *md, QCString const& exception)
 {
   // this is ordinary exception spec - there must be a '('
+  //printf("exception='%s'\n",exception.data());
   int index = exception.find('(');
-  if (-1!=index)
+  if (index!=-1)
   {
     ol.exceptionEntry(exception.left(index),false);
     ++index; // paren in second column so skip it here
-    for (int comma = exception.find(',', index); -1!=comma; )
+    for (int comma = exception.find(',', index); comma!=-1; )
     {
       ++comma; // include comma
       linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,
@@ -385,21 +387,20 @@ static void writeExceptionListImpl(
       comma = exception.find(',', index);
     }
     int close = exception.find(')', index);
-    if (-1!=close)
+    if (close!=-1)
     {
       QCString type=removeRedundantWhiteSpace(exception.mid(index,close-index));
       linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,type);
       ol.exceptionEntry(0,true);
     }
     else
-        warn(md->getDefFileName(),md->getDefLine(),
-            "missing ) in exception list on member %s",qPrint(md->name()));
+    {
+      warn(md->getDefFileName(),md->getDefLine(),
+          "missing ) in exception list on member %s",qPrint(md->name()));
+    }
   }
-  else
+  else // Java Exception
   {
-    // fallback - is it possible to get here?
-    warn(md->getDefFileName(),md->getDefLine(),
-            "missing ( in exception list on member %s",qPrint(md->name()));
     ol.docify(" ");
     linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,exception);
   }
@@ -441,34 +442,13 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al)
     {
       ol.docify(" = ");
       ol.docify(a->defval);
-    } 
+    }
     a=al->next();
     if (a) ol.docify(", ");
   }
   ol.docify("> ");
 }
 
-QCString extractDirection(QCString &docs)
-{
-  QRegExp re("\\[[^\\]]+\\]"); // [...]
-  int l=0;
-  if (re.match(docs,0,&l)==0)
-  {
-    int  inPos  = docs.find("in", 1,FALSE);
-    int outPos  = docs.find("out",1,FALSE);
-    bool input  =  inPos!=-1 &&  inPos<l;
-    bool output = outPos!=-1 && outPos<l;
-    if (input || output) // in,out attributes
-    {
-      docs = docs.mid(l); // strip attributes
-      if (input && output) return "[in,out]";
-      else if (input)      return "[in]";
-      else if (output)     return "[out]";
-    }
-  }
-  return QCString();
-}
-
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -484,16 +464,16 @@ class MemberDefImpl
               const ArgumentList *al
              );
 
-    ClassDef     *classDef;   // member of or related to 
-    FileDef      *fileDef;    // member of file definition 
+    ClassDef     *classDef;   // member of or related to
+    FileDef      *fileDef;    // member of file definition
     NamespaceDef *nspace;     // the namespace this member is in.
 
     MemberDef  *enumScope;    // the enclosing scope, if this is an enum field
-    bool        livesInsideEnum; 
+    bool        livesInsideEnum;
     MemberDef  *annEnumType;  // the anonymous enum that is the type of this member
     MemberList *enumFields;   // enumeration fields
 
-    MemberDef  *redefines;    // the members that this member redefines 
+    MemberDef  *redefines;    // the members that this member redefines
     MemberList *redefinedBy;  // the list of members that redefine this one
 
     MemberDef  *memDef;       // member definition for this declaration
@@ -523,7 +503,7 @@ class MemberDefImpl
 
     uint64  memSpec;          // The specifiers present for this member
     MemberType mtype;         // returns the kind of member
-    int maxInitLines;         // when the initializer will be displayed 
+    int maxInitLines;         // when the initializer will be displayed
     int userInitLines;        // result of explicit \hideinitializer or \showinitializer
     MemberDef  *annMemb;
 
@@ -533,13 +513,13 @@ class MemberDefImpl
     ArgumentList *tArgList;      // template argument list of function template
     ArgumentList *typeConstraints; // type constraints for template parameters
     MemberDef *templateMaster;
-    QList<ArgumentList> *defTmpArgLists; // lists of template argument lists 
+    QList<ArgumentList> *defTmpArgLists; // lists of template argument lists
                                          // (for template functions in nested template classes)
 
     ClassDef *cachedAnonymousType; // if the member has an anonymous compound
                                    // as its type then this is computed by
-                                   // getClassDefOfAnonymousType() and 
-                                   // cached here. 
+                                   // getClassDefOfAnonymousType() and
+                                   // cached here.
     SDict<MemberList> *classSectionSDict; // not accessible
 
     MemberDef *groupAlias;    // Member containing the definition
@@ -555,7 +535,7 @@ class MemberDefImpl
     ClassDef *cachedTypedefValue;
     QCString cachedTypedefTemplSpec;
     QCString cachedResolvedType;
-    
+
     // inbody documentation
     //int inbodyLine;
     //QCString inbodyFile;
@@ -568,7 +548,7 @@ class MemberDefImpl
     QCString explicitOutputFileBase;
 
     // objective-c
-    bool implOnly; // function found in implementation but not 
+    bool implOnly; // function found in implementation but not
                      // in the interface
     bool hasDocumentedParams;
     bool hasDocumentedReturnType;
@@ -578,7 +558,7 @@ class MemberDefImpl
     bool proto;               // is it a prototype;
     bool docEnumValues;       // is an enum with documented enum values.
     bool annScope;            // member is part of an annoymous scope
-    bool annUsed;             
+    bool annUsed;
     bool hasCallGraph;
     bool hasCallerGraph;
     bool explExt;             // member was explicitly declared external
@@ -743,10 +723,10 @@ void MemberDefImpl::init(Definition *def,
  *           \c Normal, \c Virtual, \c Pure.
  * \param s  A boolean that is true iff the member is static.
  * \param r  The relationship between the class and the member.
- * \param mt The kind of member. See #MemberType for a list of 
+ * \param mt The kind of member. See #MemberType for a list of
  *           all types.
  * \param tal The template arguments of this member.
- * \param al  The arguments of this member. This is a structured form of 
+ * \param al  The arguments of this member. This is a structured form of
  *            the string past as argument \a a.
  */
 
@@ -788,7 +768,7 @@ MemberDef *MemberDef::deepCopy() const
   result->m_impl->defTmpArgLists=0;
   result->m_impl->classSectionSDict=0;
   result->m_impl->declArgList=0;
-  // replace pointers owned by the object by deep copies 
+  // replace pointers owned by the object by deep copies
   if (m_impl->redefinedBy)
   {
     MemberListIterator mli(*m_impl->redefinedBy);
@@ -809,7 +789,7 @@ MemberDef *MemberDef::deepCopy() const
   }
   if (m_impl->enumFields)
   {
-    MemberListIterator mli(*m_impl->redefinedBy);
+    MemberListIterator mli(*m_impl->enumFields);
     MemberDef *md;
     for (mli.toFirst();(md=mli.current());++mli)
     {
@@ -861,8 +841,8 @@ void MemberDef::moveTo(Definition *scope)
    {
      m_impl->nspace = (NamespaceDef*)scope;
    }
-   m_isLinkableCached = 0; 
-   m_isConstructorCached = 0; 
+   m_isLinkableCached = 0;
+   m_isConstructorCached = 0;
 }
 
 
@@ -874,8 +854,8 @@ MemberDef::~MemberDef()
   m_impl=0;
 }
 
-void MemberDef::setReimplements(MemberDef *md)   
-{ 
+void MemberDef::setReimplements(MemberDef *md)
+{
   m_impl->redefines = md;
 }
 
@@ -886,20 +866,20 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
     m_impl->templateMaster->insertReimplementedBy(md);
   }
   if (m_impl->redefinedBy==0) m_impl->redefinedBy = new MemberList(MemberListType_redefinedBy);
-  if (m_impl->redefinedBy->findRef(md)==-1) 
+  if (m_impl->redefinedBy->findRef(md)==-1)
   {
     m_impl->redefinedBy->inSort(md);
   }
 }
 
-MemberDef *MemberDef::reimplements() const      
-{ 
-  return m_impl->redefines; 
+MemberDef *MemberDef::reimplements() const
+{
+  return m_impl->redefines;
 }
 
-MemberList *MemberDef::reimplementedBy() const   
-{ 
-  return m_impl->redefinedBy; 
+MemberList *MemberDef::reimplementedBy() const
+{
+  return m_impl->redefinedBy;
 }
 
 bool MemberDef::isReimplementedBy(ClassDef *cd) const
@@ -934,7 +914,7 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
 {
   //printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
   if (m_impl->exampleSDict==0) m_impl->exampleSDict = new ExampleSDict;
-  if (m_impl->exampleSDict->find(nameStr)==0) 
+  if (m_impl->exampleSDict->find(nameStr)==0)
   {
     //printf("Add reference to example %s to member %s\n",nameStr,name.data());
     Example *e=new Example;
@@ -944,12 +924,12 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
     m_impl->exampleSDict->inSort(nameStr,e);
     return TRUE;
   }
-  return FALSE; 
+  return FALSE;
 }
 
 bool MemberDef::hasExamples()
 {
-  if (m_impl->exampleSDict==0) 
+  if (m_impl->exampleSDict==0)
     return FALSE;
   else
     return m_impl->exampleSDict->count()>0;
@@ -986,7 +966,7 @@ QCString MemberDef::getOutputFileBase() const
   {
     baseName=m_impl->fileDef->getOutputFileBase();
   }
-  
+
   if (baseName.isEmpty())
   {
     warn(getDefFileName(),getDefLine(),
@@ -1048,7 +1028,7 @@ QCString MemberDef::anchor() const
   {
     result.prepend(m_impl->enumScope->anchor());
   }
-  if (m_impl->group) 
+  if (m_impl->group)
   {
     if (m_impl->groupMember)
     {
@@ -1067,7 +1047,7 @@ void MemberDef::_computeLinkableInProject()
   static bool extractStatic  = Config_getBool("EXTRACT_STATIC");
   m_isLinkableCached = 2; // linkable
   //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
-  if (isHidden()) 
+  if (isHidden())
   {
     //printf("is hidden\n");
     m_isLinkableCached = 1;
@@ -1079,51 +1059,51 @@ void MemberDef::_computeLinkableInProject()
     m_isLinkableCached = m_impl->templateMaster->isLinkableInProject() ? 2 : 1;
     return;
   }
-  if (name().isEmpty() || name().at(0)=='@') 
+  if (name().isEmpty() || name().at(0)=='@')
   {
     //printf("name invalid\n");
     m_isLinkableCached = 1; // not a valid or a dummy name
     return;
   }
-  if (!hasDocumentation() && !isReference()) 
+  if (!hasDocumentation() && !isReference())
   {
     //printf("no docs or reference\n");
     m_isLinkableCached = 1; // no documentation
     return;
   }
-  if (m_impl->group && !m_impl->group->isLinkableInProject()) 
+  if (m_impl->group && !m_impl->group->isLinkableInProject())
   {
     //printf("group but group not linkable!\n");
     m_isLinkableCached = 1; // group but group not linkable
     return;
   }
-  if (!m_impl->group && m_impl->classDef && !m_impl->classDef->isLinkableInProject()) 
+  if (!m_impl->group && m_impl->classDef && !m_impl->classDef->isLinkableInProject())
   {
     //printf("in a class but class not linkable!\n");
     m_isLinkableCached = 1; // in class but class not linkable
     return;
   }
-  if (!m_impl->group && m_impl->nspace && !m_impl->related && !m_impl->nspace->isLinkableInProject()) 
+  if (!m_impl->group && m_impl->nspace && !m_impl->related && !m_impl->nspace->isLinkableInProject())
   {
     //printf("in a namespace but namespace not linkable!\n");
     m_isLinkableCached = 1; // in namespace but namespace not linkable
     return;
   }
-  if (!m_impl->group && !m_impl->nspace && 
-      !m_impl->related && !m_impl->classDef && 
-      m_impl->fileDef && !m_impl->fileDef->isLinkableInProject()) 
+  if (!m_impl->group && !m_impl->nspace &&
+      !m_impl->related && !m_impl->classDef &&
+      m_impl->fileDef && !m_impl->fileDef->isLinkableInProject())
   {
     //printf("in a file but file not linkable!\n");
     m_isLinkableCached = 1; // in file (and not in namespace) but file not linkable
     return;
   }
-  if (!protectionLevelVisible(m_impl->prot) && m_impl->mtype!=MemberType_Friend) 
+  if (!protectionLevelVisible(m_impl->prot) && m_impl->mtype!=MemberType_Friend)
   {
     //printf("private and invisible!\n");
     m_isLinkableCached = 1; // hidden due to protection
     return;
   }
-  if (m_impl->stat && m_impl->classDef==0 && !extractStatic) 
+  if (m_impl->stat && m_impl->classDef==0 && !extractStatic)
   {
     //printf("static and invisible!\n");
     m_isLinkableCached = 1; // hidden due to staticness
@@ -1203,11 +1183,11 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
     {
       n.prepend(m_impl->enumScope->displayName()+sep);
     }
-    if (m_impl->classDef && gd && !isRelated()) 
+    if (m_impl->classDef && gd && !isRelated())
     {
       n.prepend(m_impl->classDef->displayName()+sep);
     }
-    else if (m_impl->nspace && (gd || fd)) 
+    else if (m_impl->nspace && (gd || fd))
     {
       n.prepend(m_impl->nspace->displayName()+sep);
     }
@@ -1243,12 +1223,12 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
 /*! If this member has an anonymous class/struct/union as its type, then
  *  this method will return the ClassDef that describes this return type.
  */
-ClassDef *MemberDef::getClassDefOfAnonymousType() 
+ClassDef *MemberDef::getClassDefOfAnonymousType()
 {
   if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
 
   QCString cname;
-  if (getClassDef()!=0) 
+  if (getClassDef()!=0)
   {
     cname=getClassDef()->name().copy();
   }
@@ -1277,7 +1257,7 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
     QCString annName = ltype.mid(il,ir-il);
 
     // if inside a class or namespace try to prepend the scope name
-    if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::") 
+    if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::")
     {
       QCString ts=stripAnonymousNamespaceScope(cname+"::"+annName);
       annoClassDef=getClass(ts);
@@ -1292,7 +1272,7 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
   m_impl->cachedAnonymousType = annoClassDef;
   return annoClassDef;
 }
-    
+
 /*! This methods returns TRUE iff the brief section (also known as
  *  declaration section) is visible in the documentation.
  */
@@ -1313,51 +1293,51 @@ bool MemberDef::isBriefSectionVisible() const
   MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId];
   //printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info);
   //QCString *pMemGrp = Doxygen::memberDocDict[grpId];
-  bool hasDocs = hasDocumentation() || 
+  bool hasDocs = hasDocumentation() ||
                   // part of a documented member group
                  (m_impl->grpId!=-1 && info && !(info->doc.isEmpty() && info->header.isEmpty()));
 
-  // only include static members with file/namespace scope if 
+  // only include static members with file/namespace scope if
   // explicitly enabled in the config file
-  bool visibleIfStatic = !(getClassDef()==0 && 
-                           isStatic() && 
+  bool visibleIfStatic = !(getClassDef()==0 &&
+                           isStatic() &&
                            !extractStatic
                           );
 
-  // only include members is the are documented or 
+  // only include members is the are documented or
   // HIDE_UNDOC_MEMBERS is NO in the config file
-  bool visibleIfDocumented = (!hideUndocMembers || 
-                              hasDocs || 
+  bool visibleIfDocumented = (!hideUndocMembers ||
+                              hasDocs ||
                               isDocumentedFriendClass()
                              );
 
-  // hide members with no detailed description and brief descriptions 
+  // hide members with no detailed description and brief descriptions
   // explicitly disabled.
-  bool visibleIfEnabled = !(hideUndocMembers && 
+  bool visibleIfEnabled = !(hideUndocMembers &&
                             documentation().isEmpty() &&
-                            !briefMemberDesc && 
+                            !briefMemberDesc &&
                             !repeatBrief
                            );
 
   // Hide friend (class|struct|union) declarations if HIDE_FRIEND_COMPOUNDS is true
   bool visibleIfFriendCompound = !(hideFriendCompounds &&
                                    isFriend() &&
-                                   (m_impl->type=="friend class" || 
+                                   (m_impl->type=="friend class" ||
                                     m_impl->type=="friend struct" ||
                                     m_impl->type=="friend union"
                                    )
                                   );
-  
+
   // only include members that are non-private unless EXTRACT_PRIVATE is
   // set to YES or the member is part of a group
-  bool visibleIfPrivate = (protectionLevelVisible(protection()) || 
+  bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
                            m_impl->mtype==MemberType_Friend
                           );
-  
+
   // hide member if it overrides a member in a superclass and has no
   // documentation of its own
-  //bool visibleIfDocVirtual = !reimplements() || 
-  //                           !Config_getBool("INHERIT_DOCS") ||  
+  //bool visibleIfDocVirtual = !reimplements() ||
+  //                           !Config_getBool("INHERIT_DOCS") ||
   //                           hasDocs;
 
   // true if this member is a constructor or destructor
@@ -1380,20 +1360,47 @@ bool MemberDef::isBriefSectionVisible() const
   //       visibleIfStatic,visibleIfDocumented,
   //       visibleIfEnabled,visibleIfPrivate,visibleIfNotDefaultCDTor,
   //       visibleIfFriendCompound,!m_impl->annScope);
-  
-  bool visible = visibleIfStatic     && visibleIfDocumented      && 
+
+  bool visible = visibleIfStatic     && visibleIfDocumented      &&
                  visibleIfEnabled    && visibleIfPrivate         &&
-                 /*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor && 
-                 visibleIfFriendCompound && 
+                 /*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
+                 visibleIfFriendCompound &&
                  !m_impl->annScope && !isHidden();
   //printf("MemberDef::isBriefSectionVisible() %d\n",visible);
   return visible;
 }
 
+QCString MemberDef::getDeclType() const
+{
+  QCString ltype(m_impl->type);
+  if (m_impl->mtype==MemberType_Typedef)
+  {
+    ltype.prepend("typedef ");
+  }
+  if (isAlias())
+  {
+    ltype="using";
+  }
+  // strip `friend' keyword from ltype
+  ltype.stripPrefix("friend ");
+  if (ltype=="@") // rename type from enum values
+  {
+    ltype="";
+  }
+  else
+  {
+    if (isObjCMethod())
+    {
+      ltype.prepend("(");
+      ltype.append(")");
+    }
+  }
+  return ltype;
+}
 
 void MemberDef::writeDeclaration(OutputList &ol,
                ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
-               bool inGroup, const DefType compoundType, 
+               bool inGroup, const DefType compoundType,
                ClassDef *inheritedFrom,const char *inheritId)
 {
   //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
@@ -1402,9 +1409,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
   // are explicitly grouped.
   if (!inGroup && m_impl->mtype==MemberType_EnumValue) return;
 
-  // hide members whose brief section should not be visible
-  //if (!isBriefSectionVisible()) return;
-
   Definition *d=0;
   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;
@@ -1414,14 +1418,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
   QCString cname  = d->name();
   QCString cdname = d->displayName();
   QCString cfname = getOutputFileBase();
-  //QCString osname = cname;
-  // in case of class members that are put in a group the name of the outerscope
-  // differs from the cname.
-  //if (getOuterScope()) osname=getOuterScope()->name();
-
-  //HtmlHelp *htmlHelp=0;
-  //bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
-  //if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
 
   // search for the last anonymous scope in the member type
   ClassDef *annoClassDef=getClassDefOfAnonymousType();
@@ -1431,22 +1427,34 @@ void MemberDef::writeDeclaration(OutputList &ol,
   // start a new member declaration
   bool isAnonymous = annoClassDef || m_impl->annMemb || m_impl->annEnumType;
   ///printf("startMemberItem for %s\n",name().data());
-  ol.startMemberItem(anchor(), 
+  ol.startMemberItem(anchor(),
                      isAnonymous ? 1 : m_impl->tArgList ? 3 : 0,
                      inheritId
                     );
 
   // If there is no detailed description we need to write the anchor here.
   bool detailsVisible = isDetailedSectionLinkable();
-  if (!detailsVisible && !m_impl->annMemb)
+  if (!detailsVisible)
   {
-    QCString doxyName=name().copy();
-    if (!cname.isEmpty()) 
+    QCString doxyArgs=argsString();
+    if (m_impl->annMemb)
     {
-      doxyName.prepend(cdname+getLanguageSpecificSeparator(getLanguage()));
+      QCString doxyName=m_impl->annMemb->name();
+      if (!cname.isEmpty())
+      {
+        doxyName.prepend(cdname+getLanguageSpecificSeparator(getLanguage()));
+      }
+      ol.startDoxyAnchor(cfname,cname,m_impl->annMemb->anchor(),doxyName,doxyArgs);
+    }
+    else
+    {
+      QCString doxyName=name();
+      if (!cname.isEmpty())
+      {
+        doxyName.prepend(cdname+getLanguageSpecificSeparator(getLanguage()));
+      }
+      ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
     }
-    QCString doxyArgs=argsString();
-    ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
 
     ol.pushGeneratorState();
     ol.disable(OutputGenerator::Man);
@@ -1458,7 +1466,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
   if (annoClassDef || m_impl->annMemb)
   {
     int j;
-    for (j=0;j<s_indentLevel;j++) 
+    for (j=0;j<s_indentLevel;j++)
     {
       ol.writeNonBreakableSpace(3);
     }
@@ -1499,16 +1507,16 @@ void MemberDef::writeDeclaration(OutputList &ol,
       //printf(">>>>>>>>>>>>>> startMemberItem(2)\n");
       ol.startMemberItem(anchor(),2,inheritId);
       int j;
-      for (j=0;j< s_indentLevel-1;j++) 
+      for (j=0;j< s_indentLevel-1;j++)
       {
         ol.writeNonBreakableSpace(3);
       }
       QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace();
       //printf(">>>>>> indDepth=%d ltype=`%s' varName=`%s'\n",indDepth,ltype.data(),varName.data());
       ol.docify("}");
-      if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@')) 
+      if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@'))
       {
-        ol.docify(";"); 
+        ol.docify(";");
       }
       endAnonScopeNeeded=TRUE;
     }
@@ -1522,10 +1530,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
                     this,                    // self
                     ltype.left(i),           // text
                     TRUE                     // autoBreak
-                   ); 
+                   );
         getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType);
         //ol+=*getAnonymousEnumType()->enumDecl();
-        linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,this,ltype.right(ltype.length()-i-l),TRUE); 
+        linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,this,ltype.right(ltype.length()-i-l),TRUE);
       }
       else
       {
@@ -1536,7 +1544,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
                     this,                    // self
                     ltype,                   // text
                     TRUE                     // autoBreak
-                   ); 
+                   );
       }
     }
   }
@@ -1565,12 +1573,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
     ol.disable(OutputGenerator::Html);
   }
   if (!ltype.isEmpty()) ol.docify(" ");
-  if (htmlOn) 
+  if (htmlOn)
   {
     ol.enable(OutputGenerator::Html);
   }
 
-  if (m_impl->annMemb) 
+  if (m_impl->annMemb)
   {
     ol.pushGeneratorState();
     ol.disableAllBut(OutputGenerator::Html);
@@ -1583,7 +1591,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
   }
 
   // *** write name
-  if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff 
+  if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff
   {
     //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable());
     if (!(name().isEmpty() || name().at(0)=='@') && // name valid
@@ -1608,27 +1616,27 @@ void MemberDef::writeDeclaration(OutputList &ol,
       {
         //printf("writeLink %s->%d\n",name.data(),hasDocumentation());
         ClassDef *rcd = cd;
-        if (isReference() && m_impl->classDef) rcd = m_impl->classDef; 
+        if (isReference() && m_impl->classDef) rcd = m_impl->classDef;
         writeLink(ol,rcd,nd,fd,gd);
       }
     }
     else if (isDocumentedFriendClass())
-      // if the member is an undocumented friend declaration for some class, 
+      // if the member is an undocumented friend declaration for some class,
       // then maybe we can link to the class
     {
       writeLink(ol,getClass(name()),0,0,0);
     }
     else
-      // there is a brief member description and brief member 
+      // there is a brief member description and brief member
       // descriptions are enabled or there is no detailed description.
     {
-      if (m_impl->annMemb)  
+      if (m_impl->annMemb)
       {
         m_impl->annMemb->setAnonymousUsed();
         setAnonymousUsed();
       }
       ClassDef *rcd = cd;
-      if (isReference() && m_impl->classDef) rcd = m_impl->classDef; 
+      if (isReference() && m_impl->classDef) rcd = m_impl->classDef;
       writeLink(ol,rcd,nd,fd,gd,TRUE);
     }
   }
@@ -1654,7 +1662,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
   }
 
   // *** write arguments
-  if (argsString() && !isObjCMethod()) 
+  if (argsString() && !isObjCMethod())
   {
     if (!isDefine()) ol.writeString(" ");
     linkifyText(TextGeneratorOLImpl(ol), // out
@@ -1678,20 +1686,20 @@ void MemberDef::writeDeclaration(OutputList &ol,
   // *** write bitfields
   if (!m_impl->bitfields.isEmpty()) // add bitfields
   {
-    linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_impl->bitfields.simplifyWhiteSpace());
+    linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_impl->bitfields);
   }
   else if (hasOneLineInitializer()
       //!init.isEmpty() && initLines==0 && // one line initializer
       //((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
           ) // add initializer
   {
-    if (!isDefine()) 
+    if (!isDefine())
     {
-      //ol.writeString(" = "); 
-      ol.writeString(" "); 
+      //ol.writeString(" = ");
+      ol.writeString(" ");
       linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_impl->initializer.simplifyWhiteSpace());
     }
-    else 
+    else
     {
       ol.writeNonBreakableSpace(3);
       linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_impl->initializer);
@@ -1699,7 +1707,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
   }
   else if (isAlias()) // using template alias
   {
-    ol.writeString(" = "); 
+    ol.writeString(" = ");
     linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_impl->type);
   }
 
@@ -1758,14 +1766,14 @@ void MemberDef::writeDeclaration(OutputList &ol,
   //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
   //    name().data(),annoClassDef,annEnumType);
   ol.endMemberItem();
-  if (endAnonScopeNeeded) 
+  if (endAnonScopeNeeded)
   {
     ol.endAnonTypeScope(--s_indentLevel);
   }
 
   // write brief description
-  if (!briefDescription().isEmpty() && 
-      Config_getBool("BRIEF_MEMBER_DESC") 
+  if (!briefDescription().isEmpty() &&
+      Config_getBool("BRIEF_MEMBER_DESC")
       /* && !annMemb */
      )
   {
@@ -1777,7 +1785,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
     {
       ol.startMemberDescription(anchor(),inheritId);
       ol.writeDoc(rootNode,getOuterScope()?getOuterScope():d,this);
-      if (detailsVisible) 
+      if (detailsVisible)
       {
         ol.pushGeneratorState();
         ol.disableAllBut(OutputGenerator::Html);
@@ -1812,8 +1820,8 @@ void MemberDef::writeDeclaration(OutputList &ol,
   warnIfUndocumented();
 }
 
-bool MemberDef::isDetailedSectionLinkable() const          
-{ 
+bool MemberDef::isDetailedSectionLinkable() const
+{
   static bool extractAll        = Config_getBool("EXTRACT_ALL");
   static bool alwaysDetailedSec = Config_getBool("ALWAYS_DETAILED_SEC");
   static bool repeatBrief       = Config_getBool("REPEAT_BRIEF");
@@ -1822,27 +1830,27 @@ bool MemberDef::isDetailedSectionLinkable() const
   static bool extractStatic     = Config_getBool("EXTRACT_STATIC");
 
   // the member has details documentation for any of the following reasons
-  bool docFilter = 
+  bool docFilter =
          // treat everything as documented
-         extractAll ||          
+         extractAll ||
          // has detailed docs
-         !documentation().isEmpty() ||             
+         !documentation().isEmpty() ||
          // has inbody docs
          !inbodyDocumentation().isEmpty() ||
          // is an enum with values that are documented
-         (m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) ||  
+         (m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) ||
          // is documented enum value
-         (m_impl->mtype==MemberType_EnumValue && !briefDescription().isEmpty()) || 
+         (m_impl->mtype==MemberType_EnumValue && !briefDescription().isEmpty()) ||
          // has brief description that is part of the detailed description
          (!briefDescription().isEmpty() &&           // has brief docs
           (alwaysDetailedSec &&                      // they are visible in
            (repeatBrief ||                           // detailed section or
             !briefMemberDesc                         // they are explicitly not
            )                                         // shown in brief section
-          )                                       
+          )
          ) ||
          // has a multi-line initialization block
-         //(initLines>0 && initLines<maxInitLines) || 
+         //(initLines>0 && initLines<maxInitLines) ||
          (hasMultiLineInitializer() && !hideUndocMembers) ||
          // has one or more documented arguments
          (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()) ||
@@ -1850,11 +1858,11 @@ bool MemberDef::isDetailedSectionLinkable() const
          (m_impl->memSpec & (Entry::Attribute|Entry::Property)) ||
          // has user comments
          Doxygen::userComments
-         ; 
-         
+         ;
+
   // this is not a global static or global statics should be extracted
-  bool staticFilter = getClassDef()!=0 || !isStatic() || extractStatic; 
-         
+  bool staticFilter = getClassDef()!=0 || !isStatic() || extractStatic;
+
   // only include members that are non-private unless EXTRACT_PRIVATE is
   // set to YES or the member is part of a   group
   bool privateFilter = protectionLevelVisible(protection()) || m_impl->mtype==MemberType_Friend;
@@ -1868,29 +1876,29 @@ bool MemberDef::isDetailedSectionLinkable() const
   // is true
   bool friendCompoundFilter = !(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
                                 isFriend() &&
-                                (m_impl->type=="friend class" || 
+                                (m_impl->type=="friend class" ||
                                  m_impl->type=="friend struct" ||
                                  m_impl->type=="friend union"
                                 )
                                );
-  
+
+
   bool result = ((docFilter && staticFilter && privateFilter && friendCompoundFilter && !isHidden()));
   //printf("%s::isDetailedSectionLinkable: %d\n",name().data(),result);
   return result;
 }
 
-bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const          
-{ 
+bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
+{
   static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES");
   static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS");
   static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
-  bool groupFilter = getGroupDef()==0 || inGroup || separateMemPages; 
+  bool groupFilter = getGroupDef()==0 || inGroup || separateMemPages;
   bool fileFilter  = getNamespaceDef()==0 || !inFile;
-  bool simpleFilter = !hideUndocMembers && inlineSimpleStructs && 
+  bool simpleFilter = !hideUndocMembers && inlineSimpleStructs &&
                       getClassDef()!=0 && getClassDef()->isSimple();
 
-  bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter && 
+  bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter &&
                  !isReference();
   bool result = visible || simpleFilter;
   //printf("%s::isDetailedSectionVisble: %d groupFilter=%d fileFilter=%d\n",
@@ -1898,19 +1906,19 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
   return result;
 }
 
-void MemberDef::_getLabels(QStrList &sl,Definition *container) const
+void MemberDef::getLabels(QStrList &sl,Definition *container) const
 {
   static bool inlineInfo = Config_getBool("INLINE_INFO");
 
   Specifier lvirt=virtualness();
   if ((!isObjCMethod() || isOptional() || isRequired()) &&
       (protection()!=Public || lvirt!=Normal ||
-       isFriend() || isRelated() || 
+       isFriend() || isRelated() ||
        (isInline() && inlineInfo) ||
        isSignal() || isSlot() ||
-       isStatic() || 
+       isStatic() ||
        (m_impl->classDef && m_impl->classDef!=container && container->definitionType()==TypeClass) ||
-       (m_impl->memSpec & ~Entry::Inline)!=0 
+       (m_impl->memSpec & ~Entry::Inline)!=0
       )
      )
   {
@@ -1991,11 +1999,11 @@ void MemberDef::_getLabels(QStrList &sl,Definition *container) const
           sl.append("implementation");
         }
       }
-      if (m_impl->classDef && 
-          container->definitionType()==TypeClass && 
+      if (m_impl->classDef &&
+          container->definitionType()==TypeClass &&
           m_impl->classDef!=container &&
           !isRelated()
-         ) 
+         )
       {
         sl.append("inherited");
       }
@@ -2010,7 +2018,7 @@ void MemberDef::_getLabels(QStrList &sl,Definition *container) const
 void MemberDef::_writeCallGraph(OutputList &ol)
 {
   // write call graph
-  if ((m_impl->hasCallGraph || Config_getBool("CALL_GRAPH")) 
+  if ((m_impl->hasCallGraph || Config_getBool("CALL_GRAPH"))
       && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT")
      )
   {
@@ -2027,7 +2035,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
       ol.startCallGraph();
       ol.parseText(theTranslator->trCallGraph());
       ol.endCallGraph(callGraph);
-      ol.endParagraph(); 
+      ol.endParagraph();
       ol.enableAll();
     }
   }
@@ -2035,7 +2043,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
 
 void MemberDef::_writeCallerGraph(OutputList &ol)
 {
-  if ((m_impl->hasCallerGraph || Config_getBool("CALLER_GRAPH")) 
+  if ((m_impl->hasCallerGraph || Config_getBool("CALLER_GRAPH"))
       && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT")
      )
   {
@@ -2068,7 +2076,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
     if (bcd->isLinkable())
     {
       ol.startParagraph();
-      QCString reimplFromLine; 
+      QCString reimplFromLine;
       if (bmd->virtualness()!=Pure && bcd->compoundType()!=ClassDef::Interface)
       {
         reimplFromLine = theTranslator->trReimplementedFromList(1);
@@ -2090,7 +2098,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
 
           //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
           //    bmd->anchor(),bcd->name());
-          if ( bmd->isLinkableInProject() ) 
+          if ( bmd->isLinkableInProject() )
           {
             writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
           }
@@ -2130,7 +2138,7 @@ void MemberDef::_writeReimplementedBy(OutputList &ol)
     {
       // count the members that directly inherit from md and for
       // which the member and class are visible in the docs.
-      if ( bmd->isLinkable() && bcd->isLinkable() ) 
+      if ( bmd->isLinkable() && bcd->isLinkable() )
       {
         count++;
       }
@@ -2164,7 +2172,7 @@ void MemberDef::_writeReimplementedBy(OutputList &ol)
         // find the entryIndex-th documented entry in the inheritance list.
         for (mli.toLast();(bmd=mli.current()) && (bcd=bmd->getClassDef());--mli)
         {
-          if ( bmd->isLinkable() && bcd->isLinkable()) 
+          if ( bmd->isLinkable() && bcd->isLinkable())
           {
             if (count==entryIndex) break;
             count++;
@@ -2178,14 +2186,14 @@ void MemberDef::_writeReimplementedBy(OutputList &ol)
           ol.writeObjectLink(bmd->getReference(),bmd->getOutputFileBase(),
               bmd->anchor(),bcd->displayName());
 
-          if (bmd->isLinkableInProject() ) 
+          if (bmd->isLinkableInProject() )
           {
             writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
           }
         }
         ++mli;
         index=newIndex+matchLen;
-      } 
+      }
       ol.parseText(reimplInLine.right(reimplInLine.length()-index));
       ol.endParagraph();
     }
@@ -2213,7 +2221,7 @@ void MemberDef::_writeCategoryRelation(OutputList &ol)
     {
       if (m_impl->category)
       {
-        // this member is in a normal class and implements method categoryRelation from category 
+        // this member is in a normal class and implements method categoryRelation from category
         // so link to method 'categoryRelation' with 'provided by category 'category' text.
         text = theTranslator->trProvidedByCategory();
         name = m_impl->category->displayName();
@@ -2322,19 +2330,19 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
           bool hasDetails = !fmd->documentation().isEmpty();
 
           if (hasBrief)
-          { 
+          {
             ol.generateDoc(fmd->briefFile(),fmd->briefLine(),
                 getOuterScope()?getOuterScope():container,
                 fmd,fmd->briefDescription(),TRUE,FALSE);
           }
           // FIXME:PARA
-          //if (!fmd->briefDescription().isEmpty() && 
+          //if (!fmd->briefDescription().isEmpty() &&
           //    !fmd->documentation().isEmpty())
           //{
           //  ol.newParagraph();
           //}
           if (hasDetails)
-          { 
+          {
             ol.generateDoc(fmd->docFile(),fmd->docLine(),
                 getOuterScope()?getOuterScope():container,
                 fmd,fmd->documentation()+"\n",TRUE,FALSE);
@@ -2344,17 +2352,136 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
         fmd=fmdl->next();
       }
     }
-    if (!first) 
-    { 
-      //ol.endItemList(); 
+    if (!first)
+    {
+      //ol.endItemList();
       ol.endDescTable();
       //ol.endDescForItem();
       //ol.endSimpleSect();
-      //ol.writeChar('\n'); 
+      //ol.writeChar('\n');
+    }
+  }
+}
+
+QCString MemberDef::displayDefinition() const
+{
+  QCString ldef = definition();
+  QCString title = name();
+  if (isEnumerate())
+  {
+    if (title.at(0)=='@')
+    {
+      ldef = title = "anonymous enum";
+      if (!m_impl->enumBaseType.isEmpty())
+      {
+        ldef+=" : "+m_impl->enumBaseType;
+      }
+    }
+    else
+    {
+      ldef.prepend("enum ");
     }
   }
+  else if (isEnumValue())
+  {
+    if (ldef.at(0)=='@')
+    {
+      ldef=ldef.mid(2);
+    }
+  }
+  static QRegExp r("@[0-9]+");
+  int l,i=r.match(ldef,0,&l);
+  if (i!=-1) // replace anonymous parts with { ... }
+  {
+    int si=ldef.find(' '),pi,ei=i+l;
+    if (si==-1) si=0;
+    while ((pi=r.match(ldef,i+l,&l))!=-1)
+    {
+      i=pi;
+      ei=i+l;
+    }
+    int ni=ldef.find("::",si);
+    if (ni>=ei) ei=ni+2;
+    ldef = ldef.left(si) + " { ... } " + ldef.right(ldef.length()-ei);
+  }
+  ClassDef *cd=getClassDef();
+  if (cd && cd->isObjectiveC())
+  {
+    // strip scope name
+    int ep = ldef.find("::");
+    if (ep!=-1)
+    {
+      int sp=ldef.findRev(' ',ep);
+      if (sp!=-1)
+      {
+        ldef=ldef.left(sp+1)+ldef.mid(ep+2);
+      }
+    }
+    // strip keywords
+    int dp = ldef.find(':');
+    if (dp!=-1)
+    {
+      ldef=ldef.left(dp+1);
+    }
+    l=ldef.length();
+    //printf("start >%s<\n",ldef.data());
+    i=l-1;
+    while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
+    while (i>=0 && isspace((uchar)ldef.at(i))) i--;
+    if (i>0)
+    {
+      // insert braches around the type
+      QCString tmp("("+ldef.left(i+1)+")"+ldef.mid(i+1));
+      ldef=tmp;
+    }
+    //printf("end   >%s< i=%d\n",ldef.data(),i);
+    if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
+  }
+  SrcLangExt lang = getLanguage();
+  QCString sep = getLanguageSpecificSeparator(lang,TRUE);
+  return substitute(ldef,"::",sep);
 }
 
+void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
+{
+  // only write out the include file if this is not part of a class or file
+  // definition
+  static bool showGroupedMembInc = Config_getBool("SHOW_GROUPED_MEMB_INC");
+  FileDef *fd = getFileDef();
+  QCString nm;
+  if (fd) nm = getFileDef()->docName();
+  if (inGroup && fd && showGroupedMembInc && !nm.isEmpty())
+  {
+    ol.startParagraph();
+    ol.startTypewriter();
+    SrcLangExt lang = getLanguage();
+    bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
+    if (isIDLorJava)
+    {
+      ol.docify("import ");
+    }
+    else
+    {
+      ol.docify("#include ");
+    }
+
+    if (isIDLorJava) ol.docify("\""); else ol.docify("<");
+
+    if (fd && fd->isLinkable())
+    {
+      ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
+    }
+    else
+    {
+      ol.docify(nm);
+    }
+
+    if (isIDLorJava) ol.docify("\""); else ol.docify(">");
+
+    ol.endTypewriter();
+    ol.endParagraph();
+  }
+}
 
 /*! Writes the "detailed documentation" section of this member to
  *  all active output formats.
@@ -2372,8 +2499,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   bool inFile = container->definitionType()==Definition::TypeFile;
   bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
 
-  //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
-  //    name().data(),hasDocs,container->definitionType(),inGroup);
+  //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
+  //    name().data(),hasDocs,container->definitionType(),inGroup,isDetailedSectionLinkable());
 
   if ( !hasDocs ) return;
   if (isEnumValue() && !showEnumValues) return;
@@ -2415,7 +2542,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   QCString ldef = definition();
   QCString title = name();
   //printf("member `%s' def=`%s'\n",name().data(),ldef.data());
-  if (isEnumerate()) 
+  if (isEnumerate())
   {
     if (title.at(0)=='@')
     {
@@ -2446,7 +2573,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
 
   bool htmlEndLabelTable=FALSE;
   QStrList sl;
-  _getLabels(sl,container);
+  getLabels(sl,container);
 
   if ((isVariable() || isTypedef()) && (i=r.match(ldef,0,&l))!=-1)
   {
@@ -2463,7 +2590,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i));
         vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),definitionType());
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l));
-        
+
         found=TRUE;
       }
     }
@@ -2475,7 +2602,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
       // search for the last anonymous compound name in the definition
       int si=ldef.find(' '),pi,ei=i+l;
       if (si==-1) si=0;
-      while ((pi=r.match(ldef,i+l,&l))!=-1) 
+      while ((pi=r.match(ldef,i+l,&l))!=-1)
       {
         i=pi;
         ei=i+l;
@@ -2500,7 +2627,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     {
       bool first=TRUE;
       SrcLangExt lang = getLanguage();
-      if (m_impl->defTmpArgLists && lang==SrcLangExt_Cpp) 
+      if (m_impl->defTmpArgLists && lang==SrcLangExt_Cpp)
         // definition has explicit template parameter declarations
       {
         QListIterator<ArgumentList> ali(*m_impl->defTmpArgLists);
@@ -2563,7 +2690,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     {
       // strip scope name
       int ep = ldef.find("::");
-      if (ep!=-1) 
+      if (ep!=-1)
       {
         int sp=ldef.findRev(' ',ep);
         if (sp!=-1)
@@ -2609,14 +2736,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
 
     if (hasOneLineInitializer()) // add initializer
     {
-      if (!isDefine()) 
+      if (!isDefine())
       {
-        //ol.docify(" = "); 
-        ol.docify(" "); 
+        //ol.docify(" = ");
+        ol.docify(" ");
         QCString init = m_impl->initializer.simplifyWhiteSpace();
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,init);
       }
-      else 
+      else
       {
         ol.writeNonBreakableSpace(3);
         linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,m_impl->initializer);
@@ -2645,7 +2772,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   }
   ol.popGeneratorState();
 
-  if (hasParameterList) 
+  if (hasParameterList)
   {
     ol.endParameterList();
     ol.endMemberDoc(TRUE);
@@ -2684,6 +2811,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   ol.endDoxyAnchor(cfname,memAnchor);
   ol.startIndent();
 
+  _writeGroupInclude(ol,inGroup);
+
   /* write multi-line initializer (if any) */
   if (hasMultiLineInitializer()
       //initLines>0 && ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
@@ -2717,12 +2846,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   }
 
   /* write brief description */
-  if (!brief.isEmpty() && 
-      (Config_getBool("REPEAT_BRIEF") || 
+  if (!brief.isEmpty() &&
+      (Config_getBool("REPEAT_BRIEF") ||
        !Config_getBool("BRIEF_MEMBER_DESC")
-      ) 
-     )  
-  { 
+      )
+     )
+  {
     ol.startParagraph();
     ol.generateDoc(briefFile(),briefLine(),
                 getOuterScope()?getOuterScope():container,this,
@@ -2731,11 +2860,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   }
 
   /* write detailed description */
-  if (!detailed.isEmpty() || 
+  if (!detailed.isEmpty() ||
       !inbodyDocumentation().isEmpty())
-  { 
+  {
     // write vhdl inline code with or without option INLINE_SOURCE
-    if (optVhdl && VhdlDocGen::isMisc(this)) 
+    if (optVhdl && VhdlDocGen::isMisc(this))
     {
       VhdlDocGen::writeSource(this,ol,cname);
       return;
@@ -2744,7 +2873,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     {
       ol.generateDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
     }
-   
+
     if (!inbodyDocumentation().isEmpty())
     {
       ol.generateDoc(inbodyFile(),inbodyLine(),
@@ -2763,7 +2892,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
 
 
   //printf("***** defArgList=%p name=%s docs=%s hasDocs=%d\n",
-  //     defArgList, 
+  //     defArgList,
   //     defArgList?defArgList->hasDocumentation():-1);
   if (docArgList!=0 && docArgList->hasDocumentation())
   {
@@ -2818,7 +2947,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   ol.endIndent();
 
   // enable LaTeX again
-  //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); 
+  //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
   ol.popGeneratorState();
 
   //------------------------------------------------
@@ -2864,7 +2993,7 @@ static QCString simplifyTypeForTable(const QCString &s)
 }
 
 #if 0
-/** Returns the type definition corresponding to a member's return type. 
+/** Returns the type definition corresponding to a member's return type.
  *  @param[in]  scope The scope in which to search for the class definition.
  *  @param[in]  type  The string representing the member's return type.
  *  @param[in]  lang  The programming language in which the class is defined.
@@ -2887,7 +3016,7 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
       cd = getResolvedClass(scope,0,name+templSpec,&md);
     }
     cd = getResolvedClass(scope,0,name);
-    if (cd) 
+    if (cd)
     {
       start=i;
       length=l;
@@ -2965,20 +3094,20 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
                 this,                    // self
                 ts,                      // text
                 TRUE                     // autoBreak
-               ); 
+               );
   }
   ol.endDoxyAnchor(cfname,memAnchor);
   ol.endInlineMemberType();
 
   ol.startInlineMemberName();
   ol.docify(doxyName);
-  if (isVariable() && argsString() && !isObjCMethod()) 
+  if (isVariable() && argsString() && !isObjCMethod())
   {
     linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,argsString());
   }
   if (!m_impl->bitfields.isEmpty()) // add bitfields
   {
-    linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_impl->bitfields.simplifyWhiteSpace());
+    linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_impl->bitfields);
   }
   ol.endInlineMemberName();
 
@@ -2988,12 +3117,8 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
   QCString detailed        = documentation();
 
   /* write brief description */
-  if (!brief.isEmpty() && 
-      (Config_getBool("REPEAT_BRIEF") || 
-       !Config_getBool("BRIEF_MEMBER_DESC")
-      ) 
-     )  
-  { 
+  if (!brief.isEmpty())
+  {
     ol.generateDoc(briefFile(),briefLine(),
                 getOuterScope()?getOuterScope():container,this,
                 brief,FALSE,FALSE,0,TRUE,FALSE);
@@ -3001,11 +3126,11 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
 
   /* write detailed description */
   if (!detailed.isEmpty())
-  { 
+  {
     ol.generateDoc(docFile(),docLine(),
                 getOuterScope()?getOuterScope():container,this,
                 detailed+"\n",FALSE,FALSE,0,FALSE,FALSE);
-   
+
   }
 
   ol.endInlineMemberDoc();
@@ -3019,7 +3144,7 @@ QCString MemberDef::memberTypeName() const
     case MemberType_Function:    return "function";
     case MemberType_Variable:    return "variable";
     case MemberType_Typedef:     return "typedef";
-    case MemberType_Enumeration: return "enumeration"; 
+    case MemberType_Enumeration: return "enumeration";
     case MemberType_EnumValue:   return "enumvalue";
     case MemberType_Signal:      return "signal";
     case MemberType_Slot:        return "slot";
@@ -3042,10 +3167,10 @@ void MemberDef::warnIfUndocumented()
   GroupDef     *gd = getGroupDef();
   Definition *d=0;
   const char *t=0;
-  if (cd) 
-    t="class", d=cd; 
-  else if (nd) 
-    t="namespace", d=nd; 
+  if (cd)
+    t="class", d=cd;
+  else if (nd)
+    t="namespace", d=nd;
   else if (gd)
     t="group", d=gd;
   else
@@ -3057,7 +3182,7 @@ void MemberDef::warnIfUndocumented()
   //       d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
   //       name().data(),prot);
   if ((!hasUserDocumentation() && !extractAll) &&
-      !isFriendClass() && 
+      !isFriendClass() &&
       name().find('@')==-1 && d && d->name().find('@')==-1 &&
       protectionLevelVisible(m_impl->prot) &&
       !isReference()
@@ -3072,8 +3197,8 @@ void MemberDef::warnIfUndocumented()
 
 bool MemberDef::isFriendClass() const
 {
-  return (isFriend() && 
-         (m_impl->type=="friend class" || m_impl->type=="friend struct" || 
+  return (isFriend() &&
+         (m_impl->type=="friend class" || m_impl->type=="friend struct" ||
           m_impl->type=="friend union"));
 }
 
@@ -3084,12 +3209,12 @@ bool MemberDef::isDocumentedFriendClass() const
   int i=baseName.find('<');
   if (i!=-1) baseName=baseName.left(i);
   return (isFriendClass() &&
-         (fcd=getClass(baseName)) && fcd->isLinkable()); 
+         (fcd=getClass(baseName)) && fcd->isLinkable());
 }
 
 bool MemberDef::hasDocumentation() const
-{ 
-  return Definition::hasDocumentation() || 
+{
+  return Definition::hasDocumentation() ||
          (m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) ||  // has enum values
          (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
 }
@@ -3108,10 +3233,10 @@ void MemberDef::setMemberGroup(MemberGroup *grp)
   m_impl->memberGroup = grp;
 }
 
-bool MemberDef::visibleMemberGroup(bool hideNoHeader) 
-{ 
-  return m_impl->memberGroup!=0 && 
-          (!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]"); 
+bool MemberDef::visibleMemberGroup(bool hideNoHeader)
+{
+  return m_impl->memberGroup!=0 &&
+          (!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]");
 }
 
 QCString MemberDef::getScopeString() const
@@ -3156,17 +3281,17 @@ void MemberDef::setAnchor()
             // twice, which is silly, but we keep it this way for backward
             // compatibility.
 
-  // include number of template arguments as well, 
+  // include number of template arguments as well,
   // to distinguish between two template
   // specializations that only differ in the template parameters.
-  if (m_impl->tArgList) 
+  if (m_impl->tArgList)
   {
     char buf[20];
     qsnprintf(buf,20,"%d:",m_impl->tArgList->count());
     buf[19]='\0';
     memAnchor.prepend(buf);
   }
-  
+
   // convert to md5 hash
   uchar md5_sig[16];
   QCString sigStr(33);
@@ -3187,12 +3312,12 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
   m_impl->groupStartLine=startLine;
   m_impl->groupHasDocs=hasDocs;
   m_impl->groupMember=member;
-  m_isLinkableCached = 0; 
+  m_isLinkableCached = 0;
 }
 
-void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum) 
-{ 
-  m_impl->enumScope=md; 
+void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
+{
+  m_impl->enumScope=md;
   m_impl->livesInsideEnum=livesInsideEnum;
   if (md->getGroupDef())
   {
@@ -3201,22 +3326,22 @@ void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
     m_impl->groupFileName=md->getGroupFileName();
     m_impl->groupStartLine=md->getGroupStartLine();
     m_impl->groupHasDocs=md->getGroupHasDocs();
-    m_isLinkableCached = 0; 
+    m_isLinkableCached = 0;
   }
 }
 
-void MemberDef::setMemberClass(ClassDef *cd)     
-{ 
-  m_impl->classDef=cd; 
-  m_isLinkableCached = 0; 
-  m_isConstructorCached = 0; 
-  setOuterScope(cd); 
+void MemberDef::setMemberClass(ClassDef *cd)
+{
+  m_impl->classDef=cd;
+  m_isLinkableCached = 0;
+  m_isConstructorCached = 0;
+  setOuterScope(cd);
 }
 
-void MemberDef::setNamespace(NamespaceDef *nd) 
-{ 
-  m_impl->nspace=nd; 
-  setOuterScope(nd); 
+void MemberDef::setNamespace(NamespaceDef *nd)
+{
+  m_impl->nspace=nd;
+  setOuterScope(nd);
 }
 
 MemberDef *MemberDef::createTemplateInstanceMember(
@@ -3235,7 +3360,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
     {
       arg->type = substituteTemplateArgumentsInString(arg->type,formalArgs,actualArgs);
     }
-    actualArgList->trailingReturnType = 
+    actualArgList->trailingReturnType =
        substituteTemplateArgumentsInString(actualArgList->trailingReturnType,formalArgs,actualArgs);
   }
 
@@ -3247,9 +3372,9 @@ MemberDef *MemberDef::createTemplateInstanceMember(
 
   MemberDef *imd = new MemberDef(
                        getDefFileName(),getDefLine(),getDefColumn(),
-                       substituteTemplateArgumentsInString(m_impl->type,formalArgs,actualArgs), 
-                       methodName, 
-                       substituteTemplateArgumentsInString(m_impl->args,formalArgs,actualArgs), 
+                       substituteTemplateArgumentsInString(m_impl->type,formalArgs,actualArgs),
+                       methodName,
+                       substituteTemplateArgumentsInString(m_impl->args,formalArgs,actualArgs),
                        m_impl->exception, m_impl->prot,
                        m_impl->virt, m_impl->stat, m_impl->related, m_impl->mtype, 0, 0
                    );
@@ -3261,7 +3386,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
 
   // TODO: init other member variables (if needed).
   // TODO: reimplemented info
-  return imd; 
+  return imd;
 }
 
 bool MemberDef::hasOneLineInitializer() const
@@ -3277,15 +3402,15 @@ bool MemberDef::hasMultiLineInitializer() const
 {
   //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
   //    initLines,userInitLines,maxInitLines);
-  return m_impl->initLines>0 && 
+  return m_impl->initLines>0 &&
          ((m_impl->initLines<m_impl->maxInitLines && m_impl->userInitLines==-1) // implicitly enabled
           || m_impl->initLines<m_impl->userInitLines // explicitly enabled
          );
 }
 
-void MemberDef::setInitializer(const char *initializer)    
-{ 
-  m_impl->initializer=initializer; 
+void MemberDef::setInitializer(const char *initializer)
+{
+  m_impl->initializer=initializer;
   int l=m_impl->initializer.length();
   int p=l-1;
   while (p>=0 && isspace((uchar)m_impl->initializer.at(p))) p--;
@@ -3299,12 +3424,12 @@ void MemberDef::addListReference(Definition *)
   static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
   //static bool hideScopeNames     = Config_getBool("HIDE_SCOPE_NAMES");
   //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
-  //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");  
+  //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
   SrcLangExt lang = getLanguage();
   visited=TRUE;
   if (!isLinkableInProject()) return;
   QCString memLabel;
-  if (optimizeOutputForC) 
+  if (optimizeOutputForC)
   {
     memLabel=theTranslator->trGlobal(TRUE,TRUE);
   }
@@ -3318,11 +3443,11 @@ void MemberDef::addListReference(Definition *)
   }
   QCString memName = name();
   Definition *pd=getOuterScope();
-  QCString pdName = pd->definitionType()==Definition::TypeClass ? 
+  QCString pdName = pd->definitionType()==Definition::TypeClass ?
                     ((ClassDef*)pd)->displayName() : pd->name();
   QCString sep = getLanguageSpecificSeparator(lang,TRUE);
   QCString memArgs;
-  if (!isRelated() 
+  if (!isRelated()
       /* && commented out as a result of bug 597016
       (
        (!hideScopeNames &&                    // there is a scope
@@ -3338,7 +3463,7 @@ void MemberDef::addListReference(Definition *)
     {
       memName = "[" + pd->name() + " " + name() + "]";
     }
-    else 
+    else
     {
       if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
       memArgs = argsString();
@@ -3354,19 +3479,19 @@ void MemberDef::addListReference(Definition *)
   }
 }
 
-MemberList *MemberDef::getSectionList(Definition *d) const 
-{ 
+MemberList *MemberDef::getSectionList(Definition *d) const
+{
   char key[20];
   sprintf(key,"%p",d);
   return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
 }
 
-void MemberDef::setSectionList(Definition *d, MemberList *sl)   
-{ 
+void MemberDef::setSectionList(Definition *d, MemberList *sl)
+{
   //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
   char key[20];
   sprintf(key,"%p",d);
-  if (m_impl->classSectionSDict==0) 
+  if (m_impl->classSectionSDict==0)
   {
     m_impl->classSectionSDict = new SDict<MemberList>(7);
   }
@@ -3375,7 +3500,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
 
 Specifier MemberDef::virtualness(int count) const
 {
-  if (count>25) 
+  if (count>25)
   {
      warn(getDefFileName(),getDefLine(),
        "Internal inconsistency: recursion detected in overload relation for member %s!"
@@ -3394,7 +3519,7 @@ Specifier MemberDef::virtualness(int count) const
 }
 
 void MemberDef::_writeTagData(const DefType compoundType)
-{ 
+{
   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 &&
@@ -3426,13 +3551,13 @@ void MemberDef::_writeTagData(const DefType compoundType)
       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"; 
+      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"; 
+      else /* Pure */            Doxygen::tagFile << "pure";
     }
     if (isStatic())
     {
@@ -3463,11 +3588,11 @@ void MemberDef::_writeTagData(const DefType compoundType)
             Doxygen::tagFile << "      <enumvalue file=\"" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension);
             Doxygen::tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
             QCString idStr = fmd->id();
-            if (!idStr.isEmpty()) 
+            if (!idStr.isEmpty())
             {
               Doxygen::tagFile << "\" clangid=\"" << convertToXML(idStr);
             }
-            Doxygen::tagFile  << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl; 
+            Doxygen::tagFile  << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl;
           }
         }
       }
@@ -3482,7 +3607,7 @@ void MemberDef::_writeTagData(const DefType compoundType)
 void MemberDef::_computeIsConstructor()
 {
   m_isConstructorCached=1; // FALSE
-  if (m_impl->classDef) 
+  if (m_impl->classDef)
   {
     if (m_impl->isDMember) // for D
     {
@@ -3490,11 +3615,11 @@ void MemberDef::_computeIsConstructor()
       return;
     }
     else if (getLanguage()==SrcLangExt_PHP) // for PHP
-    { 
+    {
       m_isConstructorCached = name()=="__construct" ? 2 : 1;
       return;
     }
-    else if (name()=="__init__" && 
+    else if (name()=="__init__" &&
              getLanguage()==SrcLangExt_Python) // for Python
     {
       m_isConstructorCached = 2; // TRUE
@@ -3522,8 +3647,8 @@ void MemberDef::_computeIsConstructor()
   }
 }
 
-bool MemberDef::isConstructor() const            
-{ 
+bool MemberDef::isConstructor() const
+{
   if (m_isConstructorCached==0)
   {
     MemberDef *that = (MemberDef*)this;
@@ -3542,14 +3667,14 @@ void MemberDef::_computeIsDestructor()
     isDestructor = name()=="~this";
   }
   else if (getLanguage()==SrcLangExt_PHP) // for PHP
-  {                
+  {
     isDestructor = name()=="__destruct";
   }
   else if (getLanguage()==SrcLangExt_Tcl) // for Tcl
-  { 
+  {
     isDestructor = name()=="destructor";
   }
-  else if (name()=="__del__" && 
+  else if (name()=="__del__" &&
            getLanguage()==SrcLangExt_Python) // for Python
   {
     isDestructor=TRUE;
@@ -3558,13 +3683,13 @@ void MemberDef::_computeIsDestructor()
   {
     isDestructor =
            (name().find('~')!=-1 || name().find('!')!=-1)  // The ! is for C++/CLI
-           && name().find("operator")==-1; 
+           && name().find("operator")==-1;
   }
   m_isDestructorCached = isDestructor ? 2 : 1;
 }
 
 bool MemberDef::isDestructor() const
-{ 
+{
   if (m_isDestructorCached==0)
   {
     MemberDef *that=(MemberDef*)this;
@@ -3575,7 +3700,7 @@ bool MemberDef::isDestructor() const
 }
 
 void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
-     ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, 
+     ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
      const DefType compoundType)
 {
   int enumMemCount=0;
@@ -3591,7 +3716,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
       fmd=fmdl->next();
     }
   }
-  if (numVisibleEnumValues==0 && !isBriefSectionVisible()) 
+  if (numVisibleEnumValues==0 && !isBriefSectionVisible())
   {
     return;
   }
@@ -3642,7 +3767,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
             typeDecl.pushGeneratorState();
             typeDecl.disableAllBut(OutputGenerator::Html);
             typeDecl.enable(OutputGenerator::Latex);
-            typeDecl.lineBreak(); 
+            typeDecl.lineBreak();
             typeDecl.disable(OutputGenerator::Latex);
             typeDecl.writeString("&#160;&#160;");
             typeDecl.popGeneratorState();
@@ -3669,7 +3794,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
 
         bool prevVisible = fmdVisible;
         fmd=fmdl->next();
-        if (fmd && (fmdVisible=fmd->isBriefSectionVisible())) 
+        if (fmd && (fmdVisible=fmd->isBriefSectionVisible()))
         {
           typeDecl.writeString(", ");
         }
@@ -3685,7 +3810,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
       {
         typeDecl.pushGeneratorState();
         typeDecl.disableAllBut(OutputGenerator::Html);
-        typeDecl.lineBreak(); 
+        typeDecl.lineBreak();
         typeDecl.popGeneratorState();
       }
     }
@@ -3693,8 +3818,8 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
   }
 }
 
-void MemberDef::setArgumentList(ArgumentList *al) 
-{ 
+void MemberDef::setArgumentList(ArgumentList *al)
+{
   if (m_impl->defArgList) delete m_impl->defArgList;
   m_impl->defArgList = al;
 }
@@ -3732,25 +3857,25 @@ void MemberDef::setAccessorType(ClassDef *cd,const char *t)
 
 void MemberDef::findSectionsInDocumentation()
 {
-  docFindSections(documentation(),this,0,docFile());  
+  docFindSections(documentation(),this,0,docFile());
 }
 
-void MemberDef::enableCallGraph(bool e) 
-{ 
-  m_impl->hasCallGraph=e; 
+void MemberDef::enableCallGraph(bool e)
+{
+  m_impl->hasCallGraph=e;
   if (e) Doxygen::parseSourcesNeeded = TRUE;
 }
 
-void MemberDef::enableCallerGraph(bool e) 
-{ 
-  m_impl->hasCallerGraph=e; 
+void MemberDef::enableCallerGraph(bool e)
+{
+  m_impl->hasCallerGraph=e;
   if (e) Doxygen::parseSourcesNeeded = TRUE;
 }
 
 #if 0
 bool MemberDef::protectionVisible() const
 {
-  return m_impl->prot==Public || 
+  return m_impl->prot==Public ||
          (m_impl->prot==Private   && Config_getBool("EXTRACT_PRIVATE"))   ||
          (m_impl->prot==Protected && Config_getBool("EXTRACT_PROTECTED")) ||
          (m_impl->prot==Package   && Config_getBool("EXTRACT_PACKAGE"));
@@ -3771,13 +3896,13 @@ void MemberDef::setInbodyDocumentation(const char *docs,
 bool MemberDef::isObjCMethod() const
 {
   if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
-  return FALSE; 
+  return FALSE;
 }
 
 bool MemberDef::isObjCProperty() const
 {
   if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
-  return FALSE; 
+  return FALSE;
 }
 
 QCString MemberDef::qualifiedName() const
@@ -3801,7 +3926,7 @@ QCString MemberDef::qualifiedName() const
   else
   {
     return Definition::qualifiedName();
-  }  
+  }
 }
 
 void MemberDef::setTagInfo(TagInfo *ti)
@@ -3833,12 +3958,12 @@ QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
 }
 
 const char *MemberDef::declaration() const
-{ 
-  return m_impl->decl; 
+{
+  return m_impl->decl;
 }
 
 const char *MemberDef::definition() const
-{ 
+{
   return m_impl->def;
 }
 
@@ -3848,133 +3973,133 @@ const char *MemberDef::extraTypeChars() const
 }
 
 const char *MemberDef::typeString() const
-{ 
-  return m_impl->type; 
+{
+  return m_impl->type;
 }
 
 const char *MemberDef::argsString() const
-{ 
-  return m_impl->args; 
+{
+  return m_impl->args;
 }
 
 const char *MemberDef::excpString() const
-{ 
-  return m_impl->exception; 
+{
+  return m_impl->exception;
 }
 
 const char *MemberDef::bitfieldString() const
-{ 
-  return m_impl->bitfields; 
+{
+  return m_impl->bitfields;
 }
 
 const QCString &MemberDef::initializer() const
-{ 
-  return m_impl->initializer; 
+{
+  return m_impl->initializer;
 }
 
 int MemberDef::initializerLines() const
-{ 
-  return m_impl->initLines; 
+{
+  return m_impl->initLines;
 }
 
 uint64 MemberDef::getMemberSpecifiers() const
-{ 
-  return m_impl->memSpec; 
+{
+  return m_impl->memSpec;
 }
 
 ClassDef *MemberDef::getClassDef() const
-{ 
-  return m_impl->classDef; 
+{
+  return m_impl->classDef;
 }
 
 FileDef  *MemberDef::getFileDef() const
-{ 
-  return m_impl->fileDef; 
+{
+  return m_impl->fileDef;
 }
 
 NamespaceDef* MemberDef::getNamespaceDef() const
-{ 
-  return m_impl->nspace; 
+{
+  return m_impl->nspace;
 }
 
 const char *MemberDef::getReadAccessor() const
-{ 
-  return m_impl->read; 
+{
+  return m_impl->read;
 }
 
 const char *MemberDef::getWriteAccessor() const
-{ 
-  return m_impl->write; 
+{
+  return m_impl->write;
 }
 
 GroupDef *MemberDef::getGroupDef() const
-{ 
-  return m_impl->group; 
+{
+  return m_impl->group;
 }
 
 Grouping::GroupPri_t MemberDef::getGroupPri() const
-{ 
-  return m_impl->grouppri; 
+{
+  return m_impl->grouppri;
 }
 
 const char *MemberDef::getGroupFileName() const
-{ 
-  return m_impl->groupFileName; 
+{
+  return m_impl->groupFileName;
 }
 
 int MemberDef::getGroupStartLine() const
-{ 
-  return m_impl->groupStartLine; 
+{
+  return m_impl->groupStartLine;
 }
 
 bool MemberDef::getGroupHasDocs() const
-{ 
-  return m_impl->groupHasDocs; 
+{
+  return m_impl->groupHasDocs;
 }
 
 Protection MemberDef::protection() const
-{ 
-  return m_impl->prot; 
+{
+  return m_impl->prot;
 }
 
 MemberType MemberDef::memberType() const
-{ 
-  return m_impl->mtype; 
+{
+  return m_impl->mtype;
 }
 
 bool MemberDef::isSignal() const
-{ 
-  return m_impl->mtype==MemberType_Signal;      
+{
+  return m_impl->mtype==MemberType_Signal;
 }
 
 bool MemberDef::isSlot() const
-{ 
-  return m_impl->mtype==MemberType_Slot;        
+{
+  return m_impl->mtype==MemberType_Slot;
 }
 
 bool MemberDef::isVariable() const
-{ 
-  return m_impl->mtype==MemberType_Variable;    
+{
+  return m_impl->mtype==MemberType_Variable;
 }
 
 bool MemberDef::isEnumerate() const
-{ 
-  return m_impl->mtype==MemberType_Enumeration; 
+{
+  return m_impl->mtype==MemberType_Enumeration;
 }
 
 bool MemberDef::isEnumValue() const
-{ 
-  return m_impl->mtype==MemberType_EnumValue;   
+{
+  return m_impl->mtype==MemberType_EnumValue;
 }
 
 bool MemberDef::isTypedef() const
-{ 
-  return m_impl->mtype==MemberType_Typedef;     
+{
+  return m_impl->mtype==MemberType_Typedef;
 }
 
 bool MemberDef::isFunction() const
-{ 
-  return m_impl->mtype==MemberType_Function;    
+{
+  return m_impl->mtype==MemberType_Function;
 }
 
 bool MemberDef::isFunctionPtr() const
@@ -3983,175 +4108,175 @@ bool MemberDef::isFunctionPtr() const
 }
 
 bool MemberDef::isDefine() const
-{ 
-  return m_impl->mtype==MemberType_Define;      
+{
+  return m_impl->mtype==MemberType_Define;
 }
 
 bool MemberDef::isFriend() const
-{ 
-  return m_impl->mtype==MemberType_Friend;      
+{
+  return m_impl->mtype==MemberType_Friend;
 }
 
 bool MemberDef::isDCOP() const
-{ 
-  return m_impl->mtype==MemberType_DCOP;        
+{
+  return m_impl->mtype==MemberType_DCOP;
 }
 
 bool MemberDef::isProperty() const
-{ 
-  return m_impl->mtype==MemberType_Property;    
+{
+  return m_impl->mtype==MemberType_Property;
 }
 
 bool MemberDef::isEvent() const
-{ 
-  return m_impl->mtype==MemberType_Event;       
+{
+  return m_impl->mtype==MemberType_Event;
 }
 
 bool MemberDef::isRelated() const
-{ 
+{
   return m_impl->related == Related;
 }
 
 bool MemberDef::isForeign() const
-{ 
-  return m_impl->related == Foreign; 
+{
+  return m_impl->related == Foreign;
 }
 
 bool MemberDef::isStatic() const
-{ 
-  return m_impl->stat; 
+{
+  return m_impl->stat;
 }
 
 bool MemberDef::isInline() const
-{ 
-  return (m_impl->memSpec&Entry::Inline)!=0; 
+{
+  return (m_impl->memSpec&Entry::Inline)!=0;
 }
 
 bool MemberDef::isExplicit() const
-{ 
-  return (m_impl->memSpec&Entry::Explicit)!=0; 
+{
+  return (m_impl->memSpec&Entry::Explicit)!=0;
 }
 
 bool MemberDef::isMutable() const
-{ 
-  return (m_impl->memSpec&Entry::Mutable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Mutable)!=0;
 }
 
 bool MemberDef::isGettable() const
-{ 
-  return (m_impl->memSpec&Entry::Gettable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Gettable)!=0;
 }
 
 bool MemberDef::isSettable() const
-{ 
-  return (m_impl->memSpec&Entry::Settable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Settable)!=0;
 }
 
 bool MemberDef::isAddable() const
-{ 
-  return (m_impl->memSpec&Entry::Addable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Addable)!=0;
 }
 
 bool MemberDef::isRemovable() const
-{ 
-  return (m_impl->memSpec&Entry::Removable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Removable)!=0;
 }
 
 bool MemberDef::isRaisable() const
-{ 
-  return (m_impl->memSpec&Entry::Raisable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Raisable)!=0;
 }
 
 bool MemberDef::isReadable() const
-{ 
-  return (m_impl->memSpec&Entry::Readable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Readable)!=0;
 }
 
 bool MemberDef::isWritable() const
-{ 
-  return (m_impl->memSpec&Entry::Writable)!=0; 
+{
+  return (m_impl->memSpec&Entry::Writable)!=0;
 }
 
 bool MemberDef::isFinal() const
-{ 
-  return (m_impl->memSpec&Entry::Final)!=0; 
+{
+  return (m_impl->memSpec&Entry::Final)!=0;
 }
 
 bool MemberDef::isNew() const
-{ 
-  return (m_impl->memSpec&Entry::New)!=0; 
+{
+  return (m_impl->memSpec&Entry::New)!=0;
 }
 
 bool MemberDef::isSealed() const
-{ 
-  return (m_impl->memSpec&Entry::Sealed)!=0; 
+{
+  return (m_impl->memSpec&Entry::Sealed)!=0;
 }
 
 bool MemberDef::isOverride() const
-{ 
-  return (m_impl->memSpec&Entry::Override)!=0; 
+{
+  return (m_impl->memSpec&Entry::Override)!=0;
 }
 
 bool MemberDef::isInitonly() const
-{ 
-  return (m_impl->memSpec&Entry::Initonly)!=0; 
+{
+  return (m_impl->memSpec&Entry::Initonly)!=0;
 }
 
 bool MemberDef::isAbstract() const
-{ 
-  return (m_impl->memSpec&Entry::Abstract)!=0; 
+{
+  return (m_impl->memSpec&Entry::Abstract)!=0;
 }
 
 bool MemberDef::isOptional() const
-{ 
-  return (m_impl->memSpec&Entry::Optional)!=0; 
+{
+  return (m_impl->memSpec&Entry::Optional)!=0;
 }
 
 bool MemberDef::isRequired() const
-{ 
-  return (m_impl->memSpec&Entry::Required)!=0; 
+{
+  return (m_impl->memSpec&Entry::Required)!=0;
 }
 
 bool MemberDef::isNonAtomic() const
-{ 
-  return (m_impl->memSpec&Entry::NonAtomic)!=0; 
+{
+  return (m_impl->memSpec&Entry::NonAtomic)!=0;
 }
 
 bool MemberDef::isCopy() const
-{ 
-  return (m_impl->memSpec&Entry::Copy)!=0; 
+{
+  return (m_impl->memSpec&Entry::Copy)!=0;
 }
 
 bool MemberDef::isAssign() const
-{ 
-  return (m_impl->memSpec&Entry::Assign)!=0; 
+{
+  return (m_impl->memSpec&Entry::Assign)!=0;
 }
 
 bool MemberDef::isRetain() const
-{ 
-  return (m_impl->memSpec&Entry::Retain)!=0; 
+{
+  return (m_impl->memSpec&Entry::Retain)!=0;
 }
 
 bool MemberDef::isWeak() const
 {
-  return (m_impl->memSpec&Entry::Weak)!=0; 
+  return (m_impl->memSpec&Entry::Weak)!=0;
 }
 
 bool MemberDef::isStrong() const
 {
-  return (m_impl->memSpec&Entry::Strong)!=0; 
+  return (m_impl->memSpec&Entry::Strong)!=0;
 }
 
 bool MemberDef::isStrongEnumValue() const
 {
   return m_impl->mtype==MemberType_EnumValue &&
-         m_impl->enumScope && 
+         m_impl->enumScope &&
          m_impl->enumScope->isStrong();
 }
 
 bool MemberDef::isUnretained() const
 {
-  return (m_impl->memSpec&Entry::Unretained)!=0; 
+  return (m_impl->memSpec&Entry::Unretained)!=0;
 }
 
 bool MemberDef::isAlias() const
@@ -4226,356 +4351,361 @@ bool MemberDef::isPublished() const
 
 
 bool MemberDef::isImplementation() const
-{ 
-  return m_impl->implOnly; 
+{
+  return m_impl->implOnly;
 }
 
 bool MemberDef::isExternal() const
-{ 
-  return m_impl->explExt; 
+{
+  return m_impl->explExt;
 }
 
 bool MemberDef::isTemplateSpecialization() const
-{ 
-  return m_impl->tspec; 
+{
+  return m_impl->tspec;
 }
 
 bool MemberDef::hasDocumentedParams() const
-{ 
-  return m_impl->hasDocumentedParams; 
+{
+  return m_impl->hasDocumentedParams;
 }
 
 bool MemberDef::hasDocumentedReturnType() const
-{ 
-  return m_impl->hasDocumentedReturnType; 
+{
+  return m_impl->hasDocumentedReturnType;
 }
 
 bool MemberDef::showInCallGraph() const
 {
-  return isFunction() || 
-         isSlot() || 
+  return isFunction() ||
+         isSlot() ||
          isConstructor() ||
-         isDestructor() || 
+         isDestructor() ||
          isObjCMethod();
 }
 
 ClassDef *MemberDef::relatedAlso() const
-{ 
-  return m_impl->relatedAlso; 
+{
+  return m_impl->relatedAlso;
 }
 
 bool MemberDef::hasDocumentedEnumValues() const
-{ 
-  return m_impl->docEnumValues; 
+{
+  return m_impl->docEnumValues;
 }
 
 MemberDef *MemberDef::getAnonymousEnumType() const
-{ 
-  return m_impl->annEnumType; 
+{
+  return m_impl->annEnumType;
 }
 
 bool MemberDef::isDocsForDefinition() const
-{ 
-  return m_impl->docsForDefinition; 
+{
+  return m_impl->docsForDefinition;
 }
 
 MemberDef *MemberDef::getEnumScope() const
-{ 
-  return m_impl->enumScope; 
+{
+  return m_impl->enumScope;
 }
 
 MemberList *MemberDef::enumFieldList() const
-{ 
-  return m_impl->enumFields; 
+{
+  return m_impl->enumFields;
 }
 
 ExampleSDict *MemberDef::getExamples() const
-{ 
-  return m_impl->exampleSDict; 
+{
+  return m_impl->exampleSDict;
 }
 
 bool MemberDef::isPrototype() const
-{ 
-  return m_impl->proto; 
+{
+  return m_impl->proto;
 }
 
 ArgumentList *MemberDef::argumentList() const
-{ 
-  return m_impl->defArgList; 
+{
+  return m_impl->defArgList;
 }
 
 ArgumentList *MemberDef::declArgumentList() const
-{ 
-  return m_impl->declArgList; 
+{
+  return m_impl->declArgList;
 }
 
 ArgumentList *MemberDef::templateArguments() const
-{ 
-  return m_impl->tArgList; 
+{
+  return m_impl->tArgList;
 }
 
 QList<ArgumentList> *MemberDef::definitionTemplateParameterLists() const
-{ 
-  return m_impl->defTmpArgLists; 
+{
+  return m_impl->defTmpArgLists;
 }
 
 int MemberDef::getMemberGroupId() const
-{ 
-  return m_impl->grpId; 
+{
+  return m_impl->grpId;
 }
 
 MemberGroup *MemberDef::getMemberGroup() const
-{ 
-  return m_impl->memberGroup; 
+{
+  return m_impl->memberGroup;
 }
 
 bool MemberDef::fromAnonymousScope() const
-{ 
-  return m_impl->annScope; 
+{
+  return m_impl->annScope;
 }
 
 bool MemberDef::anonymousDeclShown() const
-{ 
-  return m_impl->annUsed; 
+{
+  return m_impl->annUsed;
 }
 
-void MemberDef::setAnonymousUsed() 
+void MemberDef::setAnonymousUsed()
 {
   m_impl->annUsed = TRUE;
 }
 
 bool MemberDef::hasCallGraph() const
-{ 
-  return m_impl->hasCallGraph; 
+{
+  return m_impl->hasCallGraph;
 }
 
 bool MemberDef::hasCallerGraph() const
-{ 
-  return m_impl->hasCallerGraph; 
+{
+  return m_impl->hasCallerGraph;
 }
 
 MemberDef *MemberDef::templateMaster() const
-{ 
-  return m_impl->templateMaster; 
+{
+  return m_impl->templateMaster;
 }
 
 bool MemberDef::isTypedefValCached() const
-{ 
-  return m_impl->isTypedefValCached; 
+{
+  return m_impl->isTypedefValCached;
 }
 
 ClassDef *MemberDef::getCachedTypedefVal() const
-{ 
-  return m_impl->cachedTypedefValue; 
+{
+  return m_impl->cachedTypedefValue;
 }
 
 QCString MemberDef::getCachedTypedefTemplSpec() const
-{ 
-  return m_impl->cachedTypedefTemplSpec; 
+{
+  return m_impl->cachedTypedefTemplSpec;
 }
 
 QCString MemberDef::getCachedResolvedTypedef() const
-{ 
+{
   //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
-  return m_impl->cachedResolvedType; 
+  return m_impl->cachedResolvedType;
 }
 
 MemberDef *MemberDef::memberDefinition() const
-{ 
-  return m_impl->memDef; 
+{
+  return m_impl->memDef;
 }
 
 MemberDef *MemberDef::memberDeclaration() const
-{ 
-  return m_impl->memDec; 
+{
+  return m_impl->memDec;
 }
 
 MemberDef *MemberDef::inheritsDocsFrom() const
-{ 
-  return m_impl->docProvider; 
+{
+  return m_impl->docProvider;
 }
 
 MemberDef *MemberDef::getGroupAlias() const
-{ 
-  return m_impl->groupAlias; 
+{
+  return m_impl->groupAlias;
 }
 
 void MemberDef::setMemberType(MemberType t)
-{ 
-  m_impl->mtype=t; 
+{
+  m_impl->mtype=t;
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setDefinition(const char *d)
-{ 
-  m_impl->def=d; 
+{
+  m_impl->def=d;
 }
 
 void MemberDef::setFileDef(FileDef *fd)
-{ 
-  m_impl->fileDef=fd; 
+{
+  m_impl->fileDef=fd;
   m_isLinkableCached = 0;
   m_isConstructorCached = 0;
   m_isDestructorCached = 0;
 }
 
 void MemberDef::setProtection(Protection p)
-{ 
-  m_impl->prot=p; 
+{
+  m_impl->prot=p;
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setMemberSpecifiers(uint64 s)
-{ 
-  m_impl->memSpec=s; 
+{
+  m_impl->memSpec=s;
 }
 
 void MemberDef::mergeMemberSpecifiers(uint64 s)
-{ 
-  m_impl->memSpec|=s; 
+{
+  m_impl->memSpec|=s;
 }
 
 void MemberDef::setBitfields(const char *s)
-{ 
-  m_impl->bitfields = s; 
+{
+  m_impl->bitfields = QCString(s).simplifyWhiteSpace();
 }
 
 void MemberDef::setMaxInitLines(int lines)
-{ 
+{
   if (lines!=-1)
   {
-    m_impl->userInitLines=lines; 
+    m_impl->userInitLines=lines;
   }
 }
 
 void MemberDef::setExplicitExternal(bool b)
-{ 
-  m_impl->explExt=b; 
+{
+  m_impl->explExt=b;
 }
 
 void MemberDef::setReadAccessor(const char *r)
-{ 
-  m_impl->read=r; 
+{
+  m_impl->read=r;
 }
 
 void MemberDef::setWriteAccessor(const char *w)
-{ 
-  m_impl->write=w; 
+{
+  m_impl->write=w;
 }
 
 void MemberDef::setTemplateSpecialization(bool b)
-{ 
-  m_impl->tspec=b; 
+{
+  m_impl->tspec=b;
 }
 
 void MemberDef::makeRelated()
-{ 
-  m_impl->related = Related; 
+{
+  m_impl->related = Related;
   m_isLinkableCached = 0;
 }
 
 void MemberDef::makeForeign()
-{ 
-  m_impl->related = Foreign; 
+{
+  m_impl->related = Foreign;
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setHasDocumentedParams(bool b)
-{ 
-  m_impl->hasDocumentedParams = b; 
+{
+  m_impl->hasDocumentedParams = b;
 }
 
 void MemberDef::setHasDocumentedReturnType(bool b)
-{ 
-  m_impl->hasDocumentedReturnType = b; 
+{
+  m_impl->hasDocumentedReturnType = b;
 }
 
 void MemberDef::setInheritsDocsFrom(MemberDef *md)
-{ 
-  m_impl->docProvider = md; 
+{
+  m_impl->docProvider = md;
 }
 
 void MemberDef::setArgsString(const char *as)
-{ 
-  m_impl->args = as; 
+{
+  m_impl->args = as;
 }
 
 void MemberDef::setRelatedAlso(ClassDef *cd)
-{ 
-  m_impl->relatedAlso=cd; 
+{
+  m_impl->relatedAlso=cd;
 }
 
 void MemberDef::setEnumClassScope(ClassDef *cd)
-{ 
-  m_impl->classDef = cd; 
-  m_isLinkableCached = 0; 
-  m_isConstructorCached = 0; 
+{
+  m_impl->classDef = cd;
+  m_isLinkableCached = 0;
+  m_isConstructorCached = 0;
 }
 
 void MemberDef::setDocumentedEnumValues(bool value)
-{ 
-  m_impl->docEnumValues=value; 
+{
+  m_impl->docEnumValues=value;
 }
 
 void MemberDef::setAnonymousEnumType(MemberDef *md)
-{ 
-  m_impl->annEnumType = md; 
+{
+  m_impl->annEnumType = md;
 }
 
 void MemberDef::setPrototype(bool p)
-{ 
-  m_impl->proto=p; 
+{
+  m_impl->proto=p;
 }
 
 void MemberDef::setMemberGroupId(int id)
-{ 
-  m_impl->grpId=id; 
+{
+  m_impl->grpId=id;
 }
 
 void MemberDef::makeImplementationDetail()
-{ 
-  m_impl->implOnly=TRUE; 
+{
+  m_impl->implOnly=TRUE;
 }
 
 void MemberDef::setFromAnonymousScope(bool b)
-{ 
-  m_impl->annScope=b; 
+{
+  m_impl->annScope=b;
 }
 
 void MemberDef::setFromAnonymousMember(MemberDef *m)
-{ 
-  m_impl->annMemb=m; 
+{
+  m_impl->annMemb=m;
+}
+
+MemberDef *MemberDef::fromAnonymousMember() const
+{
+  return m_impl->annMemb;
 }
 
 void MemberDef::setTemplateMaster(MemberDef *mt)
-{ 
-  m_impl->templateMaster=mt; 
-  m_isLinkableCached = 0; 
+{
+  m_impl->templateMaster=mt;
+  m_isLinkableCached = 0;
 }
 
 void MemberDef::setDocsForDefinition(bool b)
-{ 
-  m_impl->docsForDefinition = b; 
+{
+  m_impl->docsForDefinition = b;
 }
 
 void MemberDef::setGroupAlias(MemberDef *md)
-{ 
-  m_impl->groupAlias = md; 
+{
+  m_impl->groupAlias = md;
 }
 
 void MemberDef::invalidateTypedefValCache()
-{ 
-  m_impl->isTypedefValCached=FALSE; 
+{
+  m_impl->isTypedefValCached=FALSE;
 }
 
 void MemberDef::setMemberDefinition(MemberDef *md)
-{ 
-  m_impl->memDef=md; 
+{
+  m_impl->memDef=md;
 }
 
 void MemberDef::setMemberDeclaration(MemberDef *md)
-{ 
-  m_impl->memDec=md; 
+{
+  m_impl->memDec=md;
 }
 
 ClassDef *MemberDef::category() const
@@ -4611,9 +4741,9 @@ QCString MemberDef::enumBaseType() const
 
 void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
 {
-  m_impl->isTypedefValCached=TRUE; 
-  m_impl->cachedTypedefValue=val; 
-  m_impl->cachedTypedefTemplSpec=templSpec; 
+  m_impl->isTypedefValCached=TRUE;
+  m_impl->cachedTypedefValue=val;
+  m_impl->cachedTypedefTemplSpec=templSpec;
   m_impl->cachedResolvedType=resolvedType;
   //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
 }
@@ -4669,9 +4799,9 @@ void MemberDef::invalidateCachedArgumentTypes()
 
 //----------------
 
-QCString MemberDef::displayName(bool) const 
-{ 
-  return Definition::name(); 
+QCString MemberDef::displayName(bool) const
+{
+  return Definition::name();
 }
 
 void MemberDef::_addToSearchIndex()
@@ -4855,3 +4985,33 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
   }
 }
 
+QCString MemberDef::briefDescription(bool abbr) const
+{
+  if (m_impl->templateMaster)
+  {
+    return m_impl->templateMaster->briefDescription(abbr);
+  }
+  else
+  {
+    return Definition::briefDescription(abbr);
+  }
+}
+
+QCString MemberDef::documentation() const
+{
+  if (m_impl->templateMaster)
+  {
+    return m_impl->templateMaster->documentation();
+  }
+  else
+  {
+    return Definition::documentation();
+  }
+}
+
+const ArgumentList *MemberDef::typeConstraints() const
+{
+  return m_impl->typeConstraints;
+}
+
+
index fc2bb44..47912b8 100644 (file)
@@ -75,6 +75,7 @@ class MemberDef : public Definition
     int initializerLines() const;
     uint64 getMemberSpecifiers() const;
     MemberList *getSectionList(Definition *d) const;
+    QCString    displayDefinition() const;
 
     // scope query members
     ClassDef *getClassDef() const;
@@ -216,6 +217,7 @@ class MemberDef : public Definition
 
     bool fromAnonymousScope() const;
     bool anonymousDeclShown() const;
+    MemberDef *fromAnonymousMember() const;
 
     // callgraph related members
     bool hasCallGraph() const;
@@ -241,6 +243,16 @@ class MemberDef : public Definition
     MemberDef *categoryRelation() const;
 
     QCString displayName(bool=TRUE) const;
+    QCString getDeclType() const;
+    void getLabels(QStrList &sl,Definition *container) const;
+
+    const ArgumentList *typeConstraints() const;
+
+    // overrules
+    QCString documentation() const;
+    QCString briefDescription(bool abbr=FALSE) const;
+
+
 
     //-----------------------------------------------------------------------------------
     // ----  setters -----
@@ -383,7 +395,7 @@ class MemberDef : public Definition
     void _computeLinkableInProject();
     void _computeIsConstructor();
     void _computeIsDestructor();
-    void _getLabels(QStrList &sl,Definition *container) const;
+    void _writeGroupInclude(OutputList &ol,bool inGroup);
     void _writeCallGraph(OutputList &ol);
     void _writeCallerGraph(OutputList &ol);
     void _writeReimplements(OutputList &ol);
index 64a521b..c5a2d0c 100644 (file)
@@ -61,8 +61,8 @@ class MemberGroup
                MemberListType lt,
                ClassDef *inheritedFrom,const QCString &inheritId);
 
-    QCString documentation() { return doc; }
-    bool allMembersInSameSection() { return inSameSection; }
+    QCString documentation() const { return doc; }
+    bool allMembersInSameSection() const { return inSameSection; }
     void addToDeclarationSection();
     int countDecMembers(GroupDef *gd=0);
     int countDocMembers();
index 68edabc..101293a 100644 (file)
@@ -489,6 +489,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
  *  @param inheritedFrom if not 0, the list is shown inside the
  *         given class as inherited members, parameter cd points to the
  *         class containing the members.
+ *  @param lt Type of list that is inherited from.
  */
 void MemberList::writeDeclarations(OutputList &ol,
              ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
@@ -878,7 +879,7 @@ void MemberList::setNeedsSorting(bool b)
   m_needsSorting = b;
 }
 
-QCString MemberList::listTypeAsString(MemberListType type) const
+QCString MemberList::listTypeAsString(MemberListType type) 
 {
   switch(type)
   {
index 7241258..9dfa104 100644 (file)
@@ -36,7 +36,7 @@ class MemberList : public QList<MemberDef>
     MemberList(MemberListType lt);
    ~MemberList();
     MemberListType listType() const { return m_listType; }
-    QCString listTypeAsString(MemberListType type) const;
+    static QCString listTypeAsString(MemberListType type);
     bool insert(uint index,const MemberDef *md);
     void inSort(const MemberDef *md);
     void append(const MemberDef *md);
index 7c9c02b..dd3549a 100644 (file)
@@ -1,12 +1,10 @@
 /******************************************************************************
  *
- * 
- *
  * 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 
- * 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.
  *
@@ -211,3 +209,30 @@ void err(const char *fmt, ...)
   vfprintf(warnFile, (QCString(error_str) + fmt).data(), args);
   va_end(args); 
 }
+
+void printlex(int dbg, bool enter, const char *lexName, const char *fileName)
+{
+  const char *enter_txt = "entering";
+  const char *enter_txt_uc = "Entering";
+
+  if (!enter)
+  {
+    enter_txt = "finished";
+    enter_txt_uc = "Finished";
+  }
+
+  if (dbg)
+  {
+    if (fileName)
+      fprintf(stderr,"--%s lexical analyzer: %s (for: %s)\n",enter_txt, lexName, fileName);
+    else
+      fprintf(stderr,"--%s lexical analyzer: %s\n",enter_txt, lexName);
+  }
+  else
+  {
+    if (fileName)
+      Debug::print(Debug::Lex,0,"%s lexical analyzer: %s (for: %s)\n",enter_txt_uc, lexName, fileName);
+    else
+      Debug::print(Debug::Lex,0,"%s lexical analyzer: %s\n",enter_txt_uc, lexName);
+  }
+}
index e01b8be..b7bdfe4 100644 (file)
@@ -29,4 +29,5 @@ extern void warn_uncond(const char *fmt, ...);
 extern void err(const char *fmt, ...);
 void initWarningFormat();
 
+extern void printlex(int dbg, bool enter, const char *lexName, const char *fileName);
 #endif
index 91b1d05..3592e76 100644 (file)
 #include "docparser.h"
 #include "doxygen.h"
 #include "util.h"
+#include "ftextstream.h"
 
-#include <qtextstream.h>
 #include <qdir.h>
 
 static const int maxCmdLine = 40960;
 
-static bool convertMapFile(QTextStream &t,const char *mapName,const QCString relPath,
+static bool convertMapFile(FTextStream &t,const char *mapName,const QCString relPath,
                            const QCString &context)
 {
   QFile f(mapName);
@@ -103,15 +103,22 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
   QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension();
   QCString mscArgs;
   QCString extension;
-  if (format==MSC_BITMAP)
+  switch (format)
   {
-    mscArgs+="-T png";
-    extension=".png";
-  }
-  else if (format==MSC_EPS)
-  {
-    mscArgs+="-T eps";
-    extension=".eps";
+    case MSC_BITMAP:
+      mscArgs+="-T png";
+      extension=".png";
+      break;
+    case MSC_EPS:
+      mscArgs+="-T eps";
+      extension=".eps";
+      break;
+    case MSC_SVG:
+      mscArgs+="-T svg";
+      extension=".svg";
+      break;
+    default:
+      goto error; // I am not very fond of goto statements, but when in Rome...
   }
   mscArgs+=" -i \"";
   mscArgs+=inFile;
@@ -175,8 +182,8 @@ QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir,
   }
   portable_sysTimerStop();
   
-  QString result;
-  QTextOStream tmpout(&result);
+  QGString result;
+  FTextStream tmpout(&result);
   convertMapFile(tmpout, outFile, relPath, context);
   QDir().remove(outFile);
 
@@ -188,11 +195,28 @@ void writeMscImageMapFromFile(FTextStream &t,const QCString &inFile,
                               const QCString &outDir,
                               const QCString &relPath,
                               const QCString &baseName,
-                              const QCString &context)
+                              const QCString &context,
+                             MscOutputFormat format
+                           )
 {
   QCString mapName = baseName+".map";
   QCString mapFile = inFile+".map";
-  t << "<img src=\"" << relPath << baseName << ".png\" alt=\""
+  t << "<img src=\"" << relPath << baseName << ".";
+  switch (format)
+  {
+    case MSC_BITMAP:
+      t << "png";
+      break;
+    case MSC_EPS:
+      t << "eps";
+      break;
+    case MSC_SVG:
+      t << "svg";
+      break;
+    default:
+      t << "unknown";
+  }
+  t << "\" alt=\""
     << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\"/>" << endl;
   QCString imap = getMscImageMapFromFile(inFile,outDir,relPath,context);
   t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">" << imap << "</map>" << endl;
index 711e3de..961f544 100644 (file)
--- a/src/msc.h
+++ b/src/msc.h
@@ -21,7 +21,7 @@
 class QCString;
 class FTextStream;
 
-enum MscOutputFormat { MSC_BITMAP , MSC_EPS };
+enum MscOutputFormat { MSC_BITMAP , MSC_EPS, MSC_SVG };
 
 void writeMscGraphFromFile(const char *inFile,const char *outDir,
                            const char *outFile,MscOutputFormat format);
@@ -31,7 +31,9 @@ QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir,
 
 void writeMscImageMapFromFile(FTextStream &t,const QCString &inFile,
                               const QCString &outDir, const QCString &relPath,
-                              const QCString &baseName, const QCString &context);
+                              const QCString &baseName, const QCString &context,
+                             MscOutputFormat format
+                           );
 
 #endif
 
index ee1568e..d00d845 100644 (file)
@@ -115,14 +115,15 @@ void NamespaceDef::findSectionsInDocumentation()
   }
 }
 
-void NamespaceDef::insertUsedFile(const char *f)
+void NamespaceDef::insertUsedFile(FileDef *fd)
 {
-  if (files.find(f)==-1) 
+  if (fd==0) return;
+  if (files.find(fd)==-1) 
   {
     if (Config_getBool("SORT_MEMBER_DOCS"))
-      files.inSort(f);
+      files.inSort(fd);
     else
-      files.append(f);
+      files.append(fd);
   }
 }
 
@@ -429,7 +430,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
       MemberList * ml = getMemberList(lmd->type);
       if (ml && ml->declVisible())
       {
-        ol.writeSummaryLink(0,ml->listTypeAsString(ml->listType()),lmd->title(lang),first);
+        ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
         first=FALSE;
       }
     }
@@ -460,27 +461,8 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   //static bool outputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
   //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
-  SrcLangExt lang = getLanguage();
 
-  QCString pageTitle;
-  if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
-  {
-    pageTitle = theTranslator->trPackage(displayName());
-  }
-  else if (lang==SrcLangExt_Fortran)
-  {
-    pageTitle = theTranslator->trModuleReference(displayName());
-  }
-  else if (lang==SrcLangExt_IDL)
-  {
-    pageTitle = isConstantGroup()
-        ? theTranslator->trConstantGroupReference(displayName())
-        : theTranslator->trModuleReference(displayName());
-  }
-  else
-  {
-    pageTitle = theTranslator->trNamespaceReference(displayName());
-  }
+  QCString pageTitle = title();
   startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
 
   if (!generateTreeView)
@@ -522,6 +504,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
 
   //---------------------------------------- start flexible part -------------------------------
 
+  SrcLangExt lang = getLanguage();
   QListIterator<LayoutDocEntry> eli(
       LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
   LayoutDocEntry *lde;
@@ -908,7 +891,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
       {
         if (nd->isConstantGroup())
         {
-          err("Internal inconsistency: constant group but not IDL?");
+          err("Internal inconsistency: constant group but not IDL?\n");
         }
         found=TRUE;
         break;
@@ -953,7 +936,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
         }
         else
         {
-          err("Internal inconsistency: namespace in IDL not module or cg");
+          err("Internal inconsistency: namespace in IDL not module or cg\n");
         }
       }
       ol.insertMemberAlign();
@@ -1096,3 +1079,27 @@ MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
   return md;
 }
 
+QCString NamespaceDef::title() const
+{
+  SrcLangExt lang = getLanguage();
+  QCString pageTitle;
+  if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
+  {
+    pageTitle = theTranslator->trPackage(displayName());
+  }
+  else if (lang==SrcLangExt_Fortran)
+  {
+    pageTitle = theTranslator->trModuleReference(displayName());
+  }
+  else if (lang==SrcLangExt_IDL)
+  {
+    pageTitle = isConstantGroup()
+        ? theTranslator->trConstantGroupReference(displayName())
+        : theTranslator->trModuleReference(displayName());
+  }
+  else
+  {
+    pageTitle = theTranslator->trNamespaceReference(displayName());
+  }
+  return pageTitle;
+}
index ff64107..2037d23 100644 (file)
@@ -22,6 +22,7 @@
 #include <qdict.h>
 #include "sortdict.h"
 #include "definition.h"
+#include "filedef.h"
 
 class MemberList;
 class ClassDef;
@@ -45,7 +46,7 @@ class NamespaceDef : public Definition
     DefType definitionType() const { return TypeNamespace; }
     QCString getOutputFileBase() const;
     QCString anchor() const { return QCString(); }
-    void insertUsedFile(const char *fname);
+    void insertUsedFile(FileDef *fd);
     
     void writeDocumentation(OutputList &ol);
     void writeMemberPages(OutputList &ol);
@@ -92,6 +93,8 @@ class NamespaceDef : public Definition
     /*! Returns the namespaces contained in this namespace */
     NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
 
+    QCString title() const;
+
     bool visited;
 
   private:
@@ -115,7 +118,7 @@ class NamespaceDef : public Definition
     void addNamespaceAttributes(OutputList &ol);
 
     QCString              fileName;
-    QStrList              files;
+    FileList              files;
 
     NamespaceSDict       *usingDirList;
     SDict<Definition>    *usingDeclList;
index ed2565a..1d739b2 100644 (file)
@@ -106,7 +106,7 @@ function createIndent(o,domNode,node,level)
     span.style.display = 'inline-block';
     span.style.width   = 16*(level+1)+'px';
     span.style.height  = '22px';
-    span.innerHTML = '&nbsp;';
+    span.innerHTML = '&#160;';
     domNode.appendChild(span);
   } 
 }
diff --git a/src/navtree_css.h b/src/navtree_css.h
deleted file mode 100644 (file)
index 6e42061..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-"#nav-tree .children_ul {\n"
-"  margin:0;\n"
-"  padding:4px;\n"
-"}\n"
-"\n"
-"#nav-tree ul {\n"
-"  list-style:none outside none;\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree li {\n"
-"  white-space:nowrap;\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .plus {\n"
-"  margin:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .selected {\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"
-"\n"
-"#nav-tree img {\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"  border:0px;\n"
-"  vertical-align: middle;\n"
-"}\n"
-"\n"
-"#nav-tree a {\n"
-"  text-decoration:none;\n"
-"  padding:0px;\n"
-"  margin:0px;\n"
-"  outline:none;\n"
-"}\n"
-"\n"
-"#nav-tree .label {\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"  font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
-"}\n"
-"\n"
-"#nav-tree .label a {\n"
-"  padding:2px;\n"
-"}\n"
-"\n"
-"#nav-tree .selected a {\n"
-"  text-decoration:none;\n"
-"  color:#fff;\n"
-"}\n"
-"\n"
-"#nav-tree .children_ul {\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .item {\n"
-"  margin:0px;\n"
-"  padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree {\n"
-"  padding: 0px 0px;\n"
-"  background-color: #FAFAFF; \n"
-"  font-size:14px;\n"
-"  overflow:auto;\n"
-"}\n"
-"\n"
-"#doc-content {\n"
-"  overflow:auto;\n"
-"  display:block;\n"
-"  padding:0px;\n"
-"  margin:0px;\n"
-"  -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
-"}\n"
-"\n"
-"#side-nav {\n"
-"  padding:0 6px 0 0;\n"
-"  margin: 0px;\n"
-"  display:block;\n"
-"  position: absolute;\n"
-"  left: 0px;\n"
-"  width: $width;\n"
-"}\n"
-"\n"
-".ui-resizable .ui-resizable-handle {\n"
-"  display:block;\n"
-"}\n"
-"\n"
-".ui-resizable-e {\n"
-"  background:url(\"ftv2splitbar.png\") repeat scroll right center transparent;\n"
-"  cursor:e-resize;\n"
-"  height:100%;\n"
-"  right:0;\n"
-"  top:0;\n"
-"  width:6px;\n"
-"}\n"
-"\n"
-".ui-resizable-handle {\n"
-"  display:none;\n"
-"  font-size:0.1px;\n"
-"  position:absolute;\n"
-"  z-index:1;\n"
-"}\n"
-"\n"
-"#nav-tree-contents {\n"
-"  margin: 6px 0px 0px 0px;\n"
-"}\n"
-"\n"
-"#nav-tree {\n"
-"  background-image:url('nav_h.png');\n"
-"  background-repeat:repeat-x;\n"
-"  background-color: ##FA;\n"
-"  -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
-"}\n"
-"\n"
-"#nav-sync {\n"
-"  position:absolute;\n"
-"  top:5px;\n"
-"  right:24px;\n"
-"  z-index:0;\n"
-"}\n"
-"\n"
-"#nav-sync img {\n"
-"  opacity:0.3;\n"
-"}\n"
-"\n"
-"#nav-sync img:hover {\n"
-"  opacity:0.9;\n"
-"}\n"
-"\n"
-"@media print\n"
-"{\n"
-"  #nav-tree { display: none; }\n"
-"  div.ui-resizable-handle { display: none; position: relative; }\n"
-"}\n"
-"\n"
diff --git a/src/navtree_js.h b/src/navtree_js.h
deleted file mode 100644 (file)
index bd03629..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-"var SYNCONMSG = 'click to disable panel synchronisation';\n"
-"var SYNCOFFMSG = 'click to enable panel synchronisation';\n"
-"var navTreeSubIndices = new Array();\n"
-"\n"
-"function getData(varName)\n"
-"{\n"
-"  var i = varName.lastIndexOf('/');\n"
-"  var n = i>=0 ? varName.substring(i+1) : varName;\n"
-"  return eval(n.replace(/\\-/g,'_'));\n"
-"}\n"
-"\n"
-"function stripPath(uri)\n"
-"{\n"
-"  return uri.substring(uri.lastIndexOf('/')+1);\n"
-"}\n"
-"\n"
-"function stripPath2(uri)\n"
-"{\n"
-"  var i = uri.lastIndexOf('/');\n"
-"  var s = uri.substring(i+1);\n"
-"  var m = uri.substring(0,i+1).match(/\\/d\\w\\/d\\w\\w\\/$/);\n"
-"  return m ? uri.substring(i-6) : s;\n"
-"}\n"
-"\n"
-"function localStorageSupported()\n"
-"{\n"
-"  try {\n"
-"    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;\n"
-"  }\n"
-"  catch(e) {\n"
-"    return false;\n"
-"  }\n"
-"}\n"
-"\n"
-"\n"
-"function storeLink(link)\n"
-"{\n"
-"  if (!$(\"#nav-sync\").hasClass('sync') && localStorageSupported()) {\n"
-"      window.localStorage.setItem('navpath',link);\n"
-"  }\n"
-"}\n"
-"\n"
-"function deleteLink()\n"
-"{\n"
-"  if (localStorageSupported()) {\n"
-"    window.localStorage.setItem('navpath','');\n"
-"  } \n"
-"}\n"
-"\n"
-"function cachedLink()\n"
-"{\n"
-"  if (localStorageSupported()) {\n"
-"    return window.localStorage.getItem('navpath');\n"
-"  } else {\n"
-"    return '';\n"
-"  }\n"
-"}\n"
-"\n"
-"function getScript(scriptName,func,show)\n"
-"{\n"
-"  var head = document.getElementsByTagName(\"head\")[0]; \n"
-"  var script = document.createElement('script');\n"
-"  script.id = scriptName;\n"
-"  script.type = 'text/javascript';\n"
-"  script.onload = func; \n"
-"  script.src = scriptName+'.js'; \n"
-"  if ($.browser.msie && $.browser.version<=8) { \n"
-"    // script.onload does not work with older versions of IE\n"
-"    script.onreadystatechange = function() {\n"
-"      if (script.readyState=='complete' || script.readyState=='loaded') { \n"
-"        func(); if (show) showRoot(); \n"
-"      }\n"
-"    }\n"
-"  }\n"
-"  head.appendChild(script); \n"
-"}\n"
-"\n"
-"function createIndent(o,domNode,node,level)\n"
-"{\n"
-"  var level=-1;\n"
-"  var n = node;\n"
-"  while (n.parentNode) { level++; n=n.parentNode; }\n"
-"  if (node.childrenData) {\n"
-"    var imgNode = document.createElement(\"img\");\n"
-"    imgNode.style.paddingLeft=(16*level).toString()+'px';\n"
-"    imgNode.width  = 16;\n"
-"    imgNode.height = 22;\n"
-"    imgNode.border = 0;\n"
-"    node.plus_img = imgNode;\n"
-"    node.expandToggle = document.createElement(\"a\");\n"
-"    node.expandToggle.href = \"javascript:void(0)\";\n"
-"    node.expandToggle.onclick = function() {\n"
-"      if (node.expanded) {\n"
-"        $(node.getChildrenUL()).slideUp(\"fast\");\n"
-"        node.plus_img.src = node.relpath+\"ftv2pnode.png\";\n"
-"        node.expanded = false;\n"
-"      } else {\n"
-"        expandNode(o, node, false, false);\n"
-"      }\n"
-"    }\n"
-"    node.expandToggle.appendChild(imgNode);\n"
-"    domNode.appendChild(node.expandToggle);\n"
-"    imgNode.src = node.relpath+\"ftv2pnode.png\";\n"
-"  } else {\n"
-"    var span = document.createElement(\"span\");\n"
-"    span.style.display = 'inline-block';\n"
-"    span.style.width   = 16*(level+1)+'px';\n"
-"    span.style.height  = '22px';\n"
-"    span.innerHTML = '&nbsp;';\n"
-"    domNode.appendChild(span);\n"
-"  } \n"
-"}\n"
-"\n"
-"var animationInProgress = false;\n"
-"\n"
-"function gotoAnchor(anchor,aname,updateLocation)\n"
-"{\n"
-"  var pos, docContent = $('#doc-content');\n"
-"  if (anchor.parent().attr('class')=='memItemLeft' ||\n"
-"      anchor.parent().attr('class')=='fieldtype' ||\n"
-"      anchor.parent().is(':header')) \n"
-"  {\n"
-"    pos = anchor.parent().position().top;\n"
-"  } else if (anchor.position()) {\n"
-"    pos = anchor.position().top;\n"
-"  }\n"
-"  if (pos) {\n"
-"    var dist = Math.abs(Math.min(\n"
-"               pos-docContent.offset().top,\n"
-"               docContent[0].scrollHeight-\n"
-"               docContent.height()-docContent.scrollTop()));\n"
-"    animationInProgress=true;\n"
-"    docContent.animate({\n"
-"      scrollTop: pos + docContent.scrollTop() - docContent.offset().top\n"
-"    },Math.max(50,Math.min(500,dist)),function(){\n"
-"      if (updateLocation) window.location.href=aname;\n"
-"      animationInProgress=false;\n"
-"    });\n"
-"  }\n"
-"}\n"
-"\n"
-"function newNode(o, po, text, link, childrenData, lastNode)\n"
-"{\n"
-"  var node = new Object();\n"
-"  node.children = Array();\n"
-"  node.childrenData = childrenData;\n"
-"  node.depth = po.depth + 1;\n"
-"  node.relpath = po.relpath;\n"
-"  node.isLast = lastNode;\n"
-"\n"
-"  node.li = document.createElement(\"li\");\n"
-"  po.getChildrenUL().appendChild(node.li);\n"
-"  node.parentNode = po;\n"
-"\n"
-"  node.itemDiv = document.createElement(\"div\");\n"
-"  node.itemDiv.className = \"item\";\n"
-"\n"
-"  node.labelSpan = document.createElement(\"span\");\n"
-"  node.labelSpan.className = \"label\";\n"
-"\n"
-"  createIndent(o,node.itemDiv,node,0);\n"
-"  node.itemDiv.appendChild(node.labelSpan);\n"
-"  node.li.appendChild(node.itemDiv);\n"
-"\n"
-"  var a = document.createElement(\"a\");\n"
-"  node.labelSpan.appendChild(a);\n"
-"  node.label = document.createTextNode(text);\n"
-"  node.expanded = false;\n"
-"  a.appendChild(node.label);\n"
-"  if (link) {\n"
-"    var url;\n"
-"    if (link.substring(0,1)=='^') {\n"
-"      url = link.substring(1);\n"
-"      link = url;\n"
-"    } else {\n"
-"      url = node.relpath+link;\n"
-"    }\n"
-"    a.className = stripPath(link.replace('#',':'));\n"
-"    if (link.indexOf('#')!=-1) {\n"
-"      var aname = '#'+link.split('#')[1];\n"
-"      var srcPage = stripPath($(location).attr('pathname'));\n"
-"      var targetPage = stripPath(link.split('#')[0]);\n"
-"      a.href = srcPage!=targetPage ? url : \"javascript:void(0)\"; \n"
-"      a.onclick = function(){\n"
-"        storeLink(link);\n"
-"        if (!$(a).parent().parent().hasClass('selected'))\n"
-"        {\n"
-"          $('.item').removeClass('selected');\n"
-"          $('.item').removeAttr('id');\n"
-"          $(a).parent().parent().addClass('selected');\n"
-"          $(a).parent().parent().attr('id','selected');\n"
-"        }\n"
-"        var anchor = $(aname);\n"
-"        gotoAnchor(anchor,aname,true);\n"
-"      };\n"
-"    } else {\n"
-"      a.href = url;\n"
-"      a.onclick = function() { storeLink(link); }\n"
-"    }\n"
-"  } else {\n"
-"    if (childrenData != null) \n"
-"    {\n"
-"      a.className = \"nolink\";\n"
-"      a.href = \"javascript:void(0)\";\n"
-"      a.onclick = node.expandToggle.onclick;\n"
-"    }\n"
-"  }\n"
-"\n"
-"  node.childrenUL = null;\n"
-"  node.getChildrenUL = function() {\n"
-"    if (!node.childrenUL) {\n"
-"      node.childrenUL = document.createElement(\"ul\");\n"
-"      node.childrenUL.className = \"children_ul\";\n"
-"      node.childrenUL.style.display = \"none\";\n"
-"      node.li.appendChild(node.childrenUL);\n"
-"    }\n"
-"    return node.childrenUL;\n"
-"  };\n"
-"\n"
-"  return node;\n"
-"}\n"
-"\n"
-"function showRoot()\n"
-"{\n"
-"  var headerHeight = $(\"#top\").height();\n"
-"  var footerHeight = $(\"#nav-path\").height();\n"
-"  var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-"  (function (){ // retry until we can scroll to the selected item\n"
-"    try {\n"
-"      var navtree=$('#nav-tree');\n"
-"      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
-"    } catch (err) {\n"
-"      setTimeout(arguments.callee, 0);\n"
-"    }\n"
-"  })();\n"
-"}\n"
-"\n"
-"function expandNode(o, node, imm, showRoot)\n"
-"{\n"
-"  if (node.childrenData && !node.expanded) {\n"
-"    if (typeof(node.childrenData)==='string') {\n"
-"      var varName    = node.childrenData;\n"
-"      getScript(node.relpath+varName,function(){\n"
-"        node.childrenData = getData(varName);\n"
-"        expandNode(o, node, imm, showRoot);\n"
-"      }, showRoot);\n"
-"    } else {\n"
-"      if (!node.childrenVisited) {\n"
-"        getNode(o, node);\n"
-"      } if (imm || ($.browser.msie && $.browser.version>8)) { \n"
-"        // somehow slideDown jumps to the start of tree for IE9 :-(\n"
-"        $(node.getChildrenUL()).show();\n"
-"      } else {\n"
-"        $(node.getChildrenUL()).slideDown(\"fast\");\n"
-"      }\n"
-"      if (node.isLast) {\n"
-"        node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
-"      } else {\n"
-"        node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
-"      }\n"
-"      node.expanded = true;\n"
-"    }\n"
-"  }\n"
-"}\n"
-"\n"
-"function glowEffect(n,duration)\n"
-"{\n"
-"  n.addClass('glow').delay(duration).queue(function(next){\n"
-"    $(this).removeClass('glow');next();\n"
-"  });\n"
-"}\n"
-"\n"
-"function highlightAnchor()\n"
-"{\n"
-"  var aname = $(location).attr('hash');\n"
-"  var anchor = $(aname);\n"
-"  if (anchor.parent().attr('class')=='memItemLeft'){\n"
-"    var rows = $('.memberdecls tr[class$=\"'+\n"
-"               window.location.hash.substring(1)+'\"]');\n"
-"    glowEffect(rows.children(),300); // member without details\n"
-"  } else if (anchor.parents().slice(2).prop('tagName')=='TR') {\n"
-"    glowEffect(anchor.parents('div.memitem'),1000); // enum value\n"
-"  } else if (anchor.parent().attr('class')=='fieldtype'){\n"
-"    glowEffect(anchor.parent().parent(),1000); // struct field\n"
-"  } else if (anchor.parent().is(\":header\")) {\n"
-"    glowEffect(anchor.parent(),1000); // section header\n"
-"  } else {\n"
-"    glowEffect(anchor.next(),1000); // normal member\n"
-"  }\n"
-"  gotoAnchor(anchor,aname,false);\n"
-"}\n"
-"\n"
-"function selectAndHighlight(hash,n)\n"
-"{\n"
-"  var a;\n"
-"  if (hash) {\n"
-"    var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1);\n"
-"    a=$('.item a[class$=\"'+link+'\"]');\n"
-"  }\n"
-"  if (a && a.length) {\n"
-"    a.parent().parent().addClass('selected');\n"
-"    a.parent().parent().attr('id','selected');\n"
-"    highlightAnchor();\n"
-"  } else if (n) {\n"
-"    $(n.itemDiv).addClass('selected');\n"
-"    $(n.itemDiv).attr('id','selected');\n"
-"  }\n"
-"  if ($('#nav-tree-contents .item:first').hasClass('selected')) {\n"
-"    $('#nav-sync').css('top','30px');\n"
-"  } else {\n"
-"    $('#nav-sync').css('top','5px');\n"
-"  }\n"
-"  showRoot();\n"
-"}\n"
-"\n"
-"function showNode(o, node, index, hash)\n"
-"{\n"
-"  if (node && node.childrenData) {\n"
-"    if (typeof(node.childrenData)==='string') {\n"
-"      var varName    = node.childrenData;\n"
-"      getScript(node.relpath+varName,function(){\n"
-"        node.childrenData = getData(varName);\n"
-"        showNode(o,node,index,hash);\n"
-"      },true);\n"
-"    } else {\n"
-"      if (!node.childrenVisited) {\n"
-"        getNode(o, node);\n"
-"      }\n"
-"      $(node.getChildrenUL()).css({'display':'block'});\n"
-"      if (node.isLast) {\n"
-"        node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
-"      } else {\n"
-"        node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
-"      }\n"
-"      node.expanded = true;\n"
-"      var n = node.children[o.breadcrumbs[index]];\n"
-"      if (index+1<o.breadcrumbs.length) {\n"
-"        showNode(o,n,index+1,hash);\n"
-"      } else {\n"
-"        if (typeof(n.childrenData)==='string') {\n"
-"          var varName = n.childrenData;\n"
-"          getScript(n.relpath+varName,function(){\n"
-"            n.childrenData = getData(varName);\n"
-"            node.expanded=false;\n"
-"            showNode(o,node,index,hash); // retry with child node expanded\n"
-"          },true);\n"
-"        } else {\n"
-"          var rootBase = stripPath(o.toroot.replace(/\\..+$/, ''));\n"
-"          if (rootBase==\"index\" || rootBase==\"pages\" || rootBase==\"search\") {\n"
-"            expandNode(o, n, true, true);\n"
-"          }\n"
-"          selectAndHighlight(hash,n);\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"  } else {\n"
-"    selectAndHighlight(hash);\n"
-"  }\n"
-"}\n"
-"\n"
-"function removeToInsertLater(element) {\n"
-"  var parentNode = element.parentNode;\n"
-"  var nextSibling = element.nextSibling;\n"
-"  parentNode.removeChild(element);\n"
-"  return function() {\n"
-"    if (nextSibling) {\n"
-"      parentNode.insertBefore(element, nextSibling);\n"
-"    } else {\n"
-"      parentNode.appendChild(element);\n"
-"    }\n"
-"  };\n"
-"}\n"
-"\n"
-"function getNode(o, po)\n"
-"{\n"
-"  var insertFunction = removeToInsertLater(po.li);\n"
-"  po.childrenVisited = true;\n"
-"  var l = po.childrenData.length-1;\n"
-"  for (var i in po.childrenData) {\n"
-"    var nodeData = po.childrenData[i];\n"
-"    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],\n"
-"      i==l);\n"
-"  }\n"
-"  insertFunction();\n"
-"}\n"
-"\n"
-"function gotoNode(o,subIndex,root,hash,relpath)\n"
-"{\n"
-"  var nti = navTreeSubIndices[subIndex][root+hash];\n"
-"  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);\n"
-"  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index\n"
-"    navTo(o,NAVTREE[0][1],\"\",relpath);\n"
-"    $('.item').removeClass('selected');\n"
-"    $('.item').removeAttr('id');\n"
-"  }\n"
-"  if (o.breadcrumbs) {\n"
-"    o.breadcrumbs.unshift(0); // add 0 for root node\n"
-"    showNode(o, o.node, 0, hash);\n"
-"  }\n"
-"}\n"
-"\n"
-"function navTo(o,root,hash,relpath)\n"
-"{\n"
-"  var link = cachedLink();\n"
-"  if (link) {\n"
-"    var parts = link.split('#');\n"
-"    root = parts[0];\n"
-"    if (parts.length>1) hash = '#'+parts[1];\n"
-"    else hash='';\n"
-"  }\n"
-"  if (hash.match(/^#l\\d+$/)) {\n"
-"    var anchor=$('a[name='+hash.substring(1)+']');\n"
-"    glowEffect(anchor.parent(),1000); // line number\n"
-"    hash=''; // strip line number anchors\n"
-"    //root=root.replace(/_source\\./,'.'); // source link to doc link\n"
-"  }\n"
-"  var url=root+hash;\n"
-"  var i=-1;\n"
-"  while (NAVTREEINDEX[i+1]<=url) i++;\n"
-"  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index\n"
-"  if (navTreeSubIndices[i]) {\n"
-"    gotoNode(o,i,root,hash,relpath)\n"
-"  } else {\n"
-"    getScript(relpath+'navtreeindex'+i,function(){\n"
-"      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);\n"
-"      if (navTreeSubIndices[i]) {\n"
-"        gotoNode(o,i,root,hash,relpath);\n"
-"      }\n"
-"    },true);\n"
-"  }\n"
-"}\n"
-"\n"
-"function showSyncOff(n,relpath)\n"
-"{\n"
-"    n.html('<img src=\"'+relpath+'sync_off.png\" title=\"'+SYNCOFFMSG+'\"/>');\n"
-"}\n"
-"\n"
-"function showSyncOn(n,relpath)\n"
-"{\n"
-"    n.html('<img src=\"'+relpath+'sync_on.png\" title=\"'+SYNCONMSG+'\"/>');\n"
-"}\n"
-"\n"
-"function toggleSyncButton(relpath)\n"
-"{\n"
-"  var navSync = $('#nav-sync');\n"
-"  if (navSync.hasClass('sync')) {\n"
-"    navSync.removeClass('sync');\n"
-"    showSyncOff(navSync,relpath);\n"
-"    storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash'));\n"
-"  } else {\n"
-"    navSync.addClass('sync');\n"
-"    showSyncOn(navSync,relpath);\n"
-"    deleteLink();\n"
-"  }\n"
-"}\n"
-"\n"
-"function initNavTree(toroot,relpath)\n"
-"{\n"
-"  var o = new Object();\n"
-"  o.toroot = toroot;\n"
-"  o.node = new Object();\n"
-"  o.node.li = document.getElementById(\"nav-tree-contents\");\n"
-"  o.node.childrenData = NAVTREE;\n"
-"  o.node.children = new Array();\n"
-"  o.node.childrenUL = document.createElement(\"ul\");\n"
-"  o.node.getChildrenUL = function() { return o.node.childrenUL; };\n"
-"  o.node.li.appendChild(o.node.childrenUL);\n"
-"  o.node.depth = 0;\n"
-"  o.node.relpath = relpath;\n"
-"  o.node.expanded = false;\n"
-"  o.node.isLast = true;\n"
-"  o.node.plus_img = document.createElement(\"img\");\n"
-"  o.node.plus_img.src = relpath+\"ftv2pnode.png\";\n"
-"  o.node.plus_img.width = 16;\n"
-"  o.node.plus_img.height = 22;\n"
-"\n"
-"  if (localStorageSupported()) {\n"
-"    var navSync = $('#nav-sync');\n"
-"    if (cachedLink()) {\n"
-"      showSyncOff(navSync,relpath);\n"
-"      navSync.removeClass('sync');\n"
-"    } else {\n"
-"      showSyncOn(navSync,relpath);\n"
-"    }\n"
-"    navSync.click(function(){ toggleSyncButton(relpath); });\n"
-"  }\n"
-"\n"
-"  $(window).load(function(){\n"
-"    navTo(o,toroot,window.location.hash,relpath);\n"
-"    showRoot();\n"
-"  });\n"
-"\n"
-"  $(window).bind('hashchange', function(){\n"
-"     if (window.location.hash && window.location.hash.length>1){\n"
-"       var a;\n"
-"       if ($(location).attr('hash')){\n"
-"         var clslink=stripPath($(location).attr('pathname'))+':'+\n"
-"                               $(location).attr('hash').substring(1);\n"
-"         a=$('.item a[class$=\"'+clslink+'\"]');\n"
-"       }\n"
-"       if (a==null || !$(a).parent().parent().hasClass('selected')){\n"
-"         $('.item').removeClass('selected');\n"
-"         $('.item').removeAttr('id');\n"
-"       }\n"
-"       var link=stripPath2($(location).attr('pathname'));\n"
-"       navTo(o,link,$(location).attr('hash'),relpath);\n"
-"     } else if (!animationInProgress) {\n"
-"       $('#doc-content').scrollTop(0);\n"
-"       $('.item').removeClass('selected');\n"
-"       $('.item').removeAttr('id');\n"
-"       navTo(o,toroot,window.location.hash,relpath);\n"
-"     }\n"
-"  })\n"
-"}\n"
-"\n"
index 0133be1..3c9e1b6 100644 (file)
@@ -61,10 +61,10 @@ QCString PageDef::getOutputFileBase() const
     return m_fileName; 
 }
 
-void PageDef::setFileName(const char *name) 
+void PageDef::setFileName(const char *name,bool dontEscape
 { 
   static bool shortNames = Config_getBool("SHORT_NAMES");
-  if (shortNames)
+  if (shortNames && !dontEscape)
   {
     m_fileName = convertNameToFile(name);
   }
index f0e96c2..141c03b 100644 (file)
@@ -32,7 +32,7 @@ class PageDef : public Definition
    ~PageDef();
 
     // setters
-    void setFileName(const char *name);
+    void setFileName(const char *name,bool dontEscape);
     void setShowToc(bool b);
 
     // getters
@@ -70,7 +70,6 @@ class PageDef : public Definition
     void writePageDocumentation(OutputList &ol);
     QCString m_fileName;
     QCString m_title;
-    GroupDef *m_inGroup;
     PageSDict *m_subPageDict;                 // list of pages in the group
     Definition *m_pageScope;
     int m_nestingLevel;
index 40c82dc..d474d8f 100644 (file)
@@ -98,6 +98,7 @@ class ParserInterface
      *  @param[in] showLineNumbers if set to TRUE and also fileDef is not 0,
      *             line numbers will be added to the source fragement
      *  @param[in] searchCtx context under which search data has to be stored.
+     *  @param[in] collectXRefs collect cross-reference relations.
      */
     virtual void parseCode(CodeOutputInterface &codeOutIntf,
                            const char *scopeName,
@@ -111,7 +112,8 @@ class ParserInterface
                            bool inlineFragment=FALSE,
                            MemberDef *memberDef=0,
                            bool showLineNumbers=TRUE,
-                           Definition *searchCtx=0
+                           Definition *searchCtx=0,
+                           bool collectXRefs=TRUE
                           ) = 0;
 
     /** Resets the state of the code parser.
index 9257df0..5537438 100644 (file)
@@ -364,6 +364,8 @@ public:
   void visitPost(DocDotFile *);
   void visitPre(DocMscFile *);
   void visitPost(DocMscFile *);
+  void visitPre(DocDiaFile *);
+  void visitPost(DocDiaFile *);
   void visitPre(DocLink *);
   void visitPost(DocLink *);
   void visitPre(DocRef *);
@@ -390,6 +392,8 @@ public:
   void visitPost(DocHtmlBlockQuote *);
   void visitPre(DocVhdlFlow *);
   void visitPost(DocVhdlFlow *);
+  void visitPre(DocParBlock *);
+  void visitPost(DocParBlock *);
 
 private:
 
@@ -1207,6 +1211,20 @@ void PerlModDocVisitor::visitPost(DocMscFile *)
 #endif
 }
 
+void PerlModDocVisitor::visitPre(DocDiaFile *)
+{
+#if 0
+  m_output.add("<diafile name=\""); m_output.add(df->file()); m_output.add("\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocDiaFile *)
+{
+#if 0
+  m_output.add("</diafile>");
+#endif
+}
+
 
 void PerlModDocVisitor::visitPre(DocLink *lnk)
 {
@@ -1331,7 +1349,7 @@ void PerlModDocVisitor::visitPost(DocParamList *)
     .closeHash();
 }
 
-void PerlModDocVisitor::visitPre(DocXRefItem *)
+void PerlModDocVisitor::visitPre(DocXRefItem *x)
 {
 #if 0
   m_output.add("<xrefsect id=\"");
@@ -1342,12 +1360,14 @@ void PerlModDocVisitor::visitPre(DocXRefItem *)
   m_output.add("</xreftitle>");
   m_output.add("<xrefdescription>");
 #endif
+  if (x->title().isEmpty()) return;
   openItem("xrefitem");
   openSubBlock("content");
 }
 
-void PerlModDocVisitor::visitPost(DocXRefItem *)
+void PerlModDocVisitor::visitPost(DocXRefItem *x)
 {
+  if (x->title().isEmpty()) return;
   closeSubBlock();
   closeItem();
 #if 0
@@ -1405,6 +1425,15 @@ void PerlModDocVisitor::visitPost(DocVhdlFlow *)
 {
 }
 
+void PerlModDocVisitor::visitPre(DocParBlock *)
+{
+}
+
+void PerlModDocVisitor::visitPost(DocParBlock *)
+{
+}
+
+
 static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const char *)
 {
   QCString indentStr;
index 7b78439..258c50f 100644 (file)
@@ -84,7 +84,11 @@ int portable_system(const char *command,const char *args,bool commandHasConsole)
 #else  // Other Unices just use fork
 
   pid = fork();
-  if (pid==-1) return -1;
+  if (pid==-1)
+  {
+    perror("fork error");
+         return -1;
+  }
   if (pid==0)
   {
     const char * argv[4];
index a54db2c..775d448 100644 (file)
--- a/src/pre.l
+++ b/src/pre.l
@@ -510,6 +510,20 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude
 static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded)
 {
   //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
+  if (portable_isAbsolutePath(fileName))
+  {
+    FileState *fs = checkAndOpenFile(fileName,alreadyIncluded);
+    if (fs)
+    {
+      setFileName(fileName);
+      g_yyLineNr=1;
+      return fs;
+    }
+    else if (alreadyIncluded)
+    {
+      return 0;
+    }
+  }
   if (localInclude && !g_yyFileName.isEmpty())
   {
     QFileInfo fi(g_yyFileName);
@@ -1337,7 +1351,7 @@ bool computeExpression(const QCString &expr)
   e = removeIdsAndMarkers(e);
   if (e.isEmpty()) return FALSE;
   //printf("parsing `%s'\n",e.data());
-  return parseCppExpression(g_yyFileName,g_yyLineNr,e);
+  return parseconstexp(g_yyFileName,g_yyLineNr,e);
 }
 
 /*! expands the macro definition in \a name
@@ -1769,8 +1783,8 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
                                          }
                                          BEGIN(CopyLine);
                                         }
-<Start>^{B}*[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]+{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS
-<Start>^{B}*[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]+{B}*"("[^\)\n]*")"{B}*\n { // function like macro
+<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS
+<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\)\n]*")"{B}*\n { // function like macro
                                          static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
                                          QCString name(yytext);
                                          name=name.left(name.find('(')).stripWhiteSpace();
@@ -2955,6 +2969,7 @@ void cleanUpPreprocessor()
 
 void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
 {
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
   uint orgOffset=output.curPos();
   //printf("##########################\n%s\n####################\n",
   //    input.data());
@@ -3163,6 +3178,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
     }
   }
   DefineManager::instance().endContext();
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 void preFreeScanner()
index dc28d26..37929fc 100644 (file)
@@ -597,6 +597,16 @@ class PrintDocVisitor : public DocVisitor
       indent_post();
       printf("</mscfile>\n");
     }
+    void visitPre(DocDiaFile *df)
+    {
+      indent_pre();
+      printf("<diafile src=\"%s\">\n",df->name().data());
+    }
+    void visitPost(DocDiaFile *)
+    {
+      indent_post();
+      printf("</diafile>\n");
+    }
     void visitPre(DocLink *lnk)
     {
       indent_pre();
@@ -761,6 +771,16 @@ class PrintDocVisitor : public DocVisitor
       indent_post();
       printf("</vhdlflow>\n");
     }
+    void visitPre(DocParBlock *)
+    {
+      indent_pre();
+      printf("<parblock>\n");
+    }
+    void visitPost(DocParBlock *)
+    {
+      indent_post();
+      printf("</parblock>\n");
+    }
 
   private:
     // helper functions
index bdaef55..6382975 100644 (file)
@@ -36,7 +36,8 @@ class Definition;
 extern void parsePythonCode(CodeOutputInterface &,const char *,const QCString &,
              bool ,const char *,FileDef *fd,
             int startLine,int endLine,bool inlineFragment,
-             MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx);
+             MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx,
+             bool collectXRefs);
 extern void resetPythonCodeParserState();
 
 #endif
index 36d8d35..8512711 100644 (file)
@@ -62,6 +62,7 @@ static int         g_inputPosition;   //!< read offset during parsing
 static const char *  g_currentFontClass;
 static bool          g_needsTermination;
 static Definition   *g_searchCtx;
+static bool          g_collectXRefs;
 static int           g_inputLines;      //!< number of line in the code fragment
 static int          g_yyLineNr;        //!< current line number
 static FileDef *     g_sourceFileDef;
@@ -493,35 +494,6 @@ static void codifyLines(char *text)
   }
 }
 
-#if 0
-static QCString fileLocation() 
-{
-  QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
-  result+=":"+QCString().setNum(g_yyLineNr);
-  result+=":"+QCString().setNum(1);
-  return result;
-}
-
-static void addDocCrossReference(MemberDef *src,MemberDef *dst)
-{
-  static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
-  static bool callerGraph =  Config_getBool("CALLER_GRAPH");
-  static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
-  static bool callGraph = Config_getBool("CALL_GRAPH");
-  if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
-  //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
-  if ((referencedByRelation || callerGraph) && (src->isFunction() || src->isSlot()))
-  {
-    dst->addSourceReferencedBy(src,fileLocation());
-  }
-  if ((referencesRelation || callGraph) && (src->isFunction() || src->isSlot()))
-  {
-    src->addSourceReferences(dst,fileLocation());
-  }
-}
-#endif
-
-
 
 static bool getLinkInScope(const QCString &c,  // scope
                            const QCString &m,  // member
@@ -553,7 +525,7 @@ static bool getLinkInScope(const QCString &c,  // scope
       //        g_currentDefinition,g_currentMemberDef);
 
       if (g_currentDefinition && g_currentMemberDef &&
-         md!=g_currentMemberDef)
+         md!=g_currentMemberDef && g_collectXRefs)
       {
        addDocCrossReference(g_currentMemberDef,md);
       }
@@ -652,7 +624,8 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
       Definition *d = md->getOuterScope()==Doxygen::globalScope ?
                       md->getBodyDef() : md->getOuterScope();
       if (md->getGroupDef()) d = md->getGroupDef();
-      if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
+      if (d && d->isLinkable() && md->isLinkable() && 
+          g_currentMemberDef && g_collectXRefs)
       {
         addDocCrossReference(g_currentMemberDef,md);
       }
@@ -678,7 +651,8 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
          Definition *d = md->getOuterScope()==Doxygen::globalScope ?
                          md->getBodyDef() : md->getOuterScope();
          if (md->getGroupDef()) d = md->getGroupDef();
-         if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
+         if (d && d->isLinkable() && md->isLinkable() && 
+              g_currentMemberDef && g_collectXRefs)
          {
            addDocCrossReference(g_currentMemberDef,md);
          }
@@ -700,7 +674,8 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
            Definition *d = md->getOuterScope()==Doxygen::globalScope ?
                            md->getBodyDef() : md->getOuterScope();
            if (md->getGroupDef()) d = md->getGroupDef();
-           if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
+           if (d && d->isLinkable() && md->isLinkable() && 
+                g_currentMemberDef && g_collectXRefs)
            {
              addDocCrossReference(g_currentMemberDef,md);
            }
@@ -773,7 +748,7 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
     ClassDef *thisCd = (ClassDef *)g_currentDefinition;
     if (sym->definitionType()==Definition::TypeMember)
     {
-      if (g_currentMemberDef)
+      if (g_currentMemberDef && g_collectXRefs)
       {
        addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
       }
@@ -860,8 +835,8 @@ B                 [ \t]*
 NEWLINE           \n
 
 DIGIT             [0-9]
-LETTER            [A-Za-z]
-NONEMPTY          [A-Za-z0-9_]
+LETTER            [A-Za-z\x80-\xFF]
+NONEMPTY          [A-Za-z0-9_\x80-\xFF]
 EXPCHAR           [#(){}\[\],:.%/\\=`*~|&<>!;+-]
 NONEMPTYEXP       [^ \t\n:]
 PARAMNONEMPTY     [^ \t\n():]
@@ -1452,13 +1427,14 @@ static void adjustScopesAndSuites(unsigned indentLength)
 void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
                  const QCString &s,bool exBlock, const char *exName,
                 FileDef *fd,int startLine,int endLine,bool /*inlineFragment*/,
-                MemberDef *,bool,Definition *searchCtx) 
+                MemberDef *,bool,Definition *searchCtx,bool collectXRefs
 {
 
   //printf("***parseCode()\n");
   
   //--------------------------------------
   if (s.isEmpty()) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
   TooltipManager::instance()->clearTooltips();
   g_code = &od;
   g_inputString   = s;
@@ -1466,6 +1442,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
   g_currentFontClass = 0;
   g_needsTermination = FALSE;
   g_searchCtx=searchCtx;
+  g_collectXRefs=collectXRefs;
   if (endLine!=-1)
     g_inputLines  = endLine+1;
   else
@@ -1518,6 +1495,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
     delete g_sourceFileDef;
     g_sourceFileDef=0;
   }
+  printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
   return;
 }
 
index 5cc69d9..4b99706 100644 (file)
@@ -55,7 +55,8 @@ class PythonLanguageScanner : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXrefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index 69523d2..671d330 100644 (file)
@@ -461,8 +461,8 @@ OCTNUMBER         "0"[0-7]+[lL]?
 NUMBER            {DIGIT}+[lLjJ]?
 INTNUMBER         {HEXNUMBER}|{OCTNUMBER}|{NUMBER}
 FLOATNUMBER       {DIGIT}+"."{DIGIT}+([eE][+\-]?{DIGIT}+)?[jJ]?
-LETTER            [A-Za-z]
-NONEMPTY          [A-Za-z0-9_]
+LETTER            [A-Za-z\x80-\xFF]
+NONEMPTY          [A-Za-z0-9_\x80-\xFF]
 EXPCHAR           [#(){}\[\],:.%/\\=`*~|&<>!;+-]
 NONEMPTYEXP       [^ \t\n:]
 PARAMNONEMPTY     [^ \t\n():]
@@ -1510,7 +1510,7 @@ static void parseCompounds(Entry *rt)
       // init scanner state
       inputString = ce->program;
       inputPosition = 0;
-      pyscanYYrestart( pyscanYYin ) ;
+      pyscannerYYrestart( pyscannerYYin ) ;
       if (ce->section&Entry::COMPOUND_MASK)
       {
         current_root = ce ;
@@ -1531,7 +1531,7 @@ static void parseCompounds(Entry *rt)
 
       groupEnterCompound(yyFileName,yyLineNr,ce->name);
       
-      pyscanYYlex() ;
+      pyscannerYYlex() ;
       g_lexInit=TRUE;
       delete current; current=0;
       ce->program.resize(0);
@@ -1600,9 +1600,9 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
     
     current->reset();
     initEntry();
-    pyscanYYrestart( pyscanYYin );
+    pyscannerYYrestart( pyscannerYYin );
     BEGIN( Search );
-    pyscanYYlex();
+    pyscannerYYlex();
     g_lexInit=TRUE;
 
     groupLeaveFile(yyFileName,yyLineNr);
@@ -1637,18 +1637,18 @@ static void parsePrototype(const QCString &text)
   
   // save scanner state
   orgState = YY_CURRENT_BUFFER;
-  yy_switch_to_buffer(yy_create_buffer(pyscanYYin, YY_BUF_SIZE));
+  yy_switch_to_buffer(yy_create_buffer(pyscannerYYin, YY_BUF_SIZE));
   orgInputString = inputString; 
   orgInputPosition = inputPosition;
 
   // set new string
   inputString = text;
   inputPosition = 0;
-  pyscanYYrestart( pyscanYYin );
+  pyscannerYYrestart( pyscannerYYin );
 
   BEGIN( FunctionDec );
 
-  pyscanYYlex();
+  pyscannerYYlex();
   g_lexInit=TRUE;
 
   current->name = current->name.stripWhiteSpace();
@@ -1672,7 +1672,7 @@ void pyscanFreeScanner()
 #if defined(YY_FLEX_SUBMINOR_VERSION) 
   if (g_lexInit)
   {
-    pyscanYYlex_destroy();
+    pyscannerYYlex_destroy();
   }
 #endif
 }
@@ -1686,7 +1686,9 @@ void PythonLanguageScanner::parseInput(const char *fileName,
                                        QStrList & /*filesInSameTranslationUnit*/)
 {
   g_thisParser = this;
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
   ::parseMain(fileName,fileBuf,root);
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 
   // May print the AST for debugging purposes
   // printAST(global_root);
@@ -1709,12 +1711,13 @@ void PythonLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
     bool inlineFragment,
     MemberDef *memberDef,
     bool showLineNumbers,
-    Definition *searchCtx
+    Definition *searchCtx,
+    bool collectXRefs
     )
 {
   ::parsePythonCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
                     fileDef,startLine,endLine,inlineFragment,memberDef,
-                    showLineNumbers,searchCtx);
+                    showLineNumbers,searchCtx,collectXRefs);
 }
 
 void PythonLanguageScanner::parsePrototype(const char *text)
index a80dece..304fcb6 100644 (file)
@@ -77,15 +77,19 @@ function initResizable()
   var _preventDefault = function(evt) { evt.preventDefault(); };
   $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
   $(document).bind('touchmove',function(e){
-    try {
-      var target = e.target;
-      while (target) {
-        if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
-        target = target.parentNode;
+    var device = navigator.userAgent.toLowerCase();
+    var ios = device.match(/(iphone|ipod|ipad)/);
+    if (ios) {
+      try {
+        var target = e.target;
+        while (target) {
+          if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
+          target = target.parentNode;
+        }
+        e.preventDefault();
+      } catch(err) {
+        e.preventDefault();
       }
-      e.preventDefault();
-    } catch(err) {
-      e.preventDefault();
     }
   });
 }
index 9489145..7c2fef8 100644 (file)
@@ -29,6 +29,7 @@
 #include <qfileinfo.h> 
 #include "parserintf.h"
 #include "msc.h"
+#include "dia.h"
 #include "filedef.h"
 #include "config.h"
 
@@ -324,7 +325,7 @@ void RTFDocVisitor::visit(DocURL *u)
   {
     m_t << "{\\field "
              "{\\*\\fldinst "
-               "{ HYPERLINK  \\\\l \"";
+               "{ HYPERLINK \"";
     if (u->isEmail()) m_t << "mailto:";
     m_t << u->url();
     m_t <<  "\" }"
@@ -1129,7 +1130,7 @@ void RTFDocVisitor::visitPre(DocHRef *href)
   {
     m_t << "{\\field "
              "{\\*\\fldinst "
-               "{ HYPERLINK  \\\\l \"" << href->url() << "\" "
+               "{ HYPERLINK \"" << href->url() << "\" "
                "}{}"
              "}"
              "{\\fldrslt "
@@ -1245,6 +1246,22 @@ void RTFDocVisitor::visitPost(DocMscFile *)
   popEnabled();
 }
 
+void RTFDocVisitor::visitPre(DocDiaFile *df)
+{
+  DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDiaFile)}\n");
+  writeDiaFile(df->file());
+
+  // hide caption since it is not supported at the moment
+  pushEnabled();
+  m_hide=TRUE;
+}
+
+void RTFDocVisitor::visitPost(DocDiaFile *)
+{
+  DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDiaFile)}\n");
+  popEnabled();
+}
+
 void RTFDocVisitor::visitPre(DocLink *lnk)
 {
   if (m_hide) return;
@@ -1562,6 +1579,7 @@ void RTFDocVisitor::visitPost(DocParamList *pl)
 void RTFDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   bool anonymousEnum = x->file()=="@";
   DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocXRefItem)}\n");
   m_t << "{"; // start param list
@@ -1607,9 +1625,10 @@ void RTFDocVisitor::visitPre(DocXRefItem *x)
   m_lastIsPara=FALSE;
 }
 
-void RTFDocVisitor::visitPost(DocXRefItem *)
+void RTFDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocXRefItem)}\n");
   m_t << "\\par" << endl;
   decIndentLevel();
@@ -1686,6 +1705,16 @@ void RTFDocVisitor::visitPost(DocVhdlFlow *)
   if (m_hide) return;
 }
 
+void RTFDocVisitor::visitPre(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
+void RTFDocVisitor::visitPost(DocParBlock *)
+{
+  if (m_hide) return;
+}
+
 
 //static char* getMultiByte(int c)
 //{
@@ -1836,3 +1865,23 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName)
   m_lastIsPara=TRUE;
 }
 
+void RTFDocVisitor::writeDiaFile(const QCString &fileName)
+{
+  QCString baseName=fileName;
+  int i;
+  if ((i=baseName.findRev('/'))!=-1)
+  {
+    baseName=baseName.right(baseName.length()-i-1);
+  }
+  QCString outDir = Config_getString("RTF_OUTPUT");
+  writeDiaGraphFromFile(fileName+".dia",outDir,baseName,DIA_BITMAP);
+  if (!m_lastIsPara) m_t << "\\par" << endl;
+  m_t << "{" << endl;
+  m_t << rtf_Style_Reset;
+  m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
+  m_t << baseName << ".png";
+  m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
+  m_t << "}" << endl;
+  m_lastIsPara=TRUE;
+}
+
index eb841e5..9572b73 100644 (file)
@@ -107,6 +107,8 @@ class RTFDocVisitor : public DocVisitor
     void visitPost(DocDotFile *);
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *);
     void visitPost(DocLink *);
     void visitPre(DocRef *ref);
@@ -131,6 +133,8 @@ class RTFDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
 
   private:
 
@@ -150,6 +154,7 @@ class RTFDocVisitor : public DocVisitor
     void popEnabled();
     void writeDotFile(const QCString &fileName);
     void writeMscFile(const QCString &fileName);
+    void writeDiaFile(const QCString &fileName);
 
     //--------------------------------------
     // state variables
index 9a7dbee..d8c34ee 100644 (file)
@@ -1049,7 +1049,7 @@ void RTFGenerator::startHtmlLink(const char *url)
 
   if (Config_getBool("RTF_HYPERLINKS"))
   {
-    t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
+    t << "{\\field {\\*\\fldinst { HYPERLINK \"";
     t << url;
     t << "\" }{}";
     t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
index f26accb..767fea0 100644 (file)
@@ -50,7 +50,8 @@ class CLanguageScanner : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index 40f653a..bbe90a3 100644 (file)
@@ -191,6 +191,7 @@ static QCString         g_delimiter;
 static int              g_column;
 
 static int              g_fencedSize=0;
+static bool             g_nestedComment=0;
 
 //-----------------------------------------------------------------------------
 
@@ -1175,13 +1176,27 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                        }
    */
 <ObjCParams>"("                                {
-                                         BEGIN( ObjCParamType );
-                                       }
-<ObjCParamType>[^)]*                   {
-                                         current->argList->getLast()->type=QCString(yytext).stripWhiteSpace();
-                                       }
+                                         roundCount=0;
+                                         current->argList->getLast()->type.resize(0);
+                                         BEGIN( ObjCParamType );
+                                       }
+<ObjCParamType>"("                      {
+                                          roundCount++;
+                                         current->argList->getLast()->type+=yytext;
+                                        }
 <ObjCParamType>")"/{B}*                        {
-                                         BEGIN( ObjCParams );
+                                          if (roundCount<=0)
+                                          {
+                                            BEGIN( ObjCParams );
+                                          }
+                                          else
+                                          {
+                                            current->argList->getLast()->type+=yytext;
+                                            roundCount--;
+                                          }
+                                       }
+<ObjCParamType>[^()]*                  {
+                                         current->argList->getLast()->type+=QCString(yytext).stripWhiteSpace();
                                        }
 <ObjCMethod,ObjCParams>";"             { // end of method declaration
                                          if (current->argList->getLast() && current->argList->getLast()->type.isEmpty())
@@ -1192,7 +1207,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          //printf("argList=%s\n",current->args.data());
                                          unput(';');
                                          BEGIN( Function );
-                                       }
+                                        }
 <ObjCMethod,ObjCParams>(";"{BN}+)?"{"  { // start of a method body
                                          lineCount();
                                           //printf("Type=%s Name=%s args=%s\n",
@@ -1354,7 +1369,14 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                           if (!insidePHP) 
                                          {
                                            current->type += " abstract ";
-                                           current->virt = Pure;
+                                           if (!insideJava)
+                                           {
+                                              current->virt = Pure;
+                                           }
+                                           else
+                                           {
+                                              current->spec|=Entry::Abstract;
+                                           }
                                          }
                                          else
                                          {
@@ -1597,9 +1619,20 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 <FindMembers>"@class" | // for Objective C class declarations
 <FindMembers>{B}*{TYPEDEFPREFIX}"class{" |
 <FindMembers>{B}*{TYPEDEFPREFIX}"class"{BN}+ { 
-                                         isTypedef=((QCString)yytext).find("typedef")!=-1;
+                                          QCString decl = yytext;
+                                         isTypedef=decl.find("typedef")!=-1;
+                                          bool isConst=decl.find("const")!=-1;
+                                          bool isVolatile=decl.find("volatile")!=-1;
                                          current->section = Entry::CLASS_SEC;
                                          addType( current ) ;
+                                          if (isConst)
+                                          {
+                                            current->type += " const";
+                                          }
+                                          else if (isVolatile)
+                                          {
+                                            current->type += " volatile";
+                                          }
                                          current->type += " class" ;
                                          current->fileName  = yyFileName;
                                          current->startLine = yyLineNr;
@@ -1688,13 +1721,24 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                        }
 <FindMembers>{B}*{TYPEDEFPREFIX}"struct{" | 
 <FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ { 
-                                         isTypedef=((QCString)yytext).find("typedef")!=-1;
+                                          QCString decl = yytext;
+                                         isTypedef=decl.find("typedef")!=-1;
+                                          bool isConst=decl.find("const")!=-1;
+                                          bool isVolatile=decl.find("volatile")!=-1;
                                          current->section = Entry::CLASS_SEC ;
                                          current->spec    = Entry::Struct |
                                            (current->spec & Entry::Published); // preserve UNO IDL
                                          // bug 582676: can be a struct nested in an interface so keep insideObjC state
                                          //current->objc    = insideObjC = FALSE;
                                          addType( current ) ;
+                                          if (isConst)
+                                          {
+                                            current->type += " const";
+                                          }
+                                          else if (isVolatile)
+                                          {
+                                            current->type += " volatile";
+                                          }
                                          current->type += " struct" ;
                                          current->fileName  = yyFileName;
                                          current->startLine = yyLineNr;
@@ -1751,12 +1795,23 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                        }
 <FindMembers>{B}*{TYPEDEFPREFIX}"union{" |
 <FindMembers>{B}*{TYPEDEFPREFIX}"union"{BN}+ { 
-                                         isTypedef=((QCString)yytext).find("typedef")!=-1;
+                                          QCString decl=yytext;
+                                         isTypedef=decl.find("typedef")!=-1;
+                                          bool isConst=decl.find("const")!=-1;
+                                          bool isVolatile=decl.find("volatile")!=-1;
                                          current->section = Entry::CLASS_SEC;
                                           current->spec    = Entry::Union;
                                          // bug 582676: can be a struct nested in an interface so keep insideObjC state
                                          //current->objc    = insideObjC = FALSE;
                                          addType( current ) ;
+                                          if (isConst)
+                                          {
+                                            current->type += " const";
+                                          }
+                                          else if (isVolatile)
+                                          {
+                                            current->type += " volatile";
+                                          }
                                          current->type += " union" ;
                                          current->fileName  = yyFileName;
                                          current->startLine = yyLineNr;
@@ -2847,7 +2902,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                             BEGIN(lastRawStringContext);
                                           }
                                         }
-<RawGString>[^)]+                       {
+<RawGString>[^)\n]+                     {
                                           *pCopyRawGString+=yytext;
                                         }
 <RawGString>.                           {
@@ -3218,7 +3273,10 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                            *pCopyCurlyGString+=yytext; 
                                          }
                                         }
-<GCopyCurly>[^"'{}\/\n]+               {
+<GCopyCurly>[^"'{}\/\n,]+              {
+                                         *pCopyCurlyGString+=yytext;
+                                       }
+<GCopyCurly>[,]+                       {
                                          *pCopyCurlyGString+=yytext;
                                        }
 <GCopyCurly>"/"                                { *pCopyCurlyGString+=yytext; }
@@ -4403,6 +4461,13 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          else 
                                            BEGIN( lastCopyArgContext );
                                        }
+<CopyArgSharp>"("                       {
+                                         *copyArgString+=*yytext;
+                                         fullArgString+=*yytext;
+                                         argRoundCount=0; 
+                                         lastCopyArgContext = YY_START;
+                                         BEGIN( CopyArgRound ); 
+                                        }
 <CopyArgSharp>"<"                      {
                                          argSharpCount++;
                                          //printf("argSharpCount++=%d  copy\n",argSharpCount);
@@ -4921,6 +4986,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          //addToBody(yytext);
                                          ++curlyCount ; 
                                        }
+<SkipCurly>"}"/{BN}*("/*!"|"/**"|"//!"|"///")"<!--" | /* see bug710917 */
 <SkipCurly>"}"                         { 
                                          //addToBody(yytext);
                                          if( curlyCount )
@@ -4929,22 +4995,6 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          }
                                          else
                                          {
-#if 0
-                                           if (!Config_getBool("HIDE_IN_BODY_DOCS") && 
-                                               !current->doc.isEmpty())
-                                           {
-                                             // copy documentation found inside the body
-                                             // to the previous item
-                                             if (previous->inbodyLine==-1)
-                                             {
-                                               previous->inbodyLine = current->docLine;
-                                               previous->inbodyFile = current->docFile;
-                                             }
-                                             //printf("*** inbodyDocs+=%s\n",current->doc.data());
-                                             previous->inbodyDocs += current->doc;
-                                             current->doc.resize(0);
-                                           }
-#endif
                                            if (current->sli && previous) // copy special list items
                                            {
                                              QListIterator<ListItemInfo> li(*current->sli);
@@ -5742,21 +5792,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          *specName += *yytext;
                                          if (roundCount==0 && --sharpCount<=0)
                                          {
-                                           if (1 /*!insideCS*/) 
-                                           {
-                                             baseName+=*specName;
-                                           }
-                                           else
-                                           {
-                                             if (current->tArgLists==0)
-                                             {
-                                               current->tArgLists = new QList<ArgumentList>;
-                                               current->tArgLists->setAutoDelete(TRUE);
-                                             }
-                                             ArgumentList *al = new ArgumentList;
-                                             current->tArgLists->append(al);
-                                             stringToArgumentList(*specName,al);
-                                           }
+                                           baseName+=removeRedundantWhiteSpace(*specName);
                                            BEGIN(lastSkipSharpContext);
                                          }
                                        }
@@ -6155,23 +6191,27 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                            docBlockName.at(1)='}';
                                          }
                                           g_fencedSize=0;
+                                          g_nestedComment=FALSE;
                                          BEGIN(DocCopyBlock);
                                         }
 <DocBlock>"<"{PRE}">"                  {
                                           docBlock+=yytext;
                                          docBlockName="<pre>";
                                           g_fencedSize=0;
+                                          g_nestedComment=FALSE;
                                          BEGIN(DocCopyBlock);
                                        }
 <DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9]      { // verbatim command (which could contain nested comments!)
                                           docBlock+=yytext;
                                          docBlockName=&yytext[1];
                                           g_fencedSize=0;
+                                          g_nestedComment=FALSE;
                                          BEGIN(DocCopyBlock);
                                        }
 <DocBlock>"~~~"[~]*                     {
                                           docBlock+=yytext;
                                           g_fencedSize=yyleng;
+                                          g_nestedComment=FALSE;
                                           BEGIN(DocCopyBlock);
                                         }
 <DocBlock>{B}*"<code>"                  {
@@ -6179,6 +6219,7 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          {
                                            docBlock+=yytext;
                                            docBlockName="<code>";
+                                            g_nestedComment=FALSE;
                                            BEGIN(DocCopyBlock);
                                          }
                                          else
@@ -6240,12 +6281,32 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                             docBlock+=indent;
                                           }
                                        }
-<DocCopyBlock>^{B}*+"*"/{BN}*          { // start of a comment line
+<DocCopyBlock>^{B}*"*"+/{BN}+"*"{BN}*  { // start of a comment line with two *'s
+                                         if (docBlockName=="code")
+                                          {
+                                            QCString indent;
+                                            indent.fill(' ',computeIndent(yytext,0));
+                                            docBlock+=indent;
+                                          }
+                                          else
+                                         {
+                                           REJECT;
+                                         }
+                                       }
+<DocCopyBlock>^{B}*"*"+/{BN}*          { // start of a comment line with one *
                                          if (docBlockName=="code")
                                           {
                                             QCString indent;
-                                            indent.fill(' ',computeIndent(yytext,0)-1);
-                                            docBlock+=indent+"*";
+                                            if (g_nestedComment) // keep * it is part of the code
+                                            {
+                                              indent.fill(' ',computeIndent(yytext,-1));
+                                              docBlock+=indent+"*";
+                                            }
+                                            else // remove * it is part of the comment block
+                                            {
+                                              indent.fill(' ',computeIndent(yytext,0));
+                                              docBlock+=indent;
+                                            }
                                           }
                                           else
                                          {
@@ -6263,6 +6324,14 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
                                          docBlock+=yytext;
                                        }
 <DocCopyBlock>"/*"|"*/"|"//"           {
+                                          if (yytext[1]=='*')
+                                          {
+                                            g_nestedComment=TRUE;
+                                          }
+                                          else if (yytext[0]=='*')
+                                          {
+                                            g_nestedComment=FALSE;
+                                          }
                                          docBlock+=yytext;
                                        }
 <DocCopyBlock>\n                       { // newline
@@ -6563,7 +6632,7 @@ static void parseCompounds(Entry *rt)
       g_column=0;
       inputString = ce->program;
       inputPosition = 0;
-      scanYYrestart( scanYYin ) ;
+      scannerYYrestart( scannerYYin ) ;
       if (ce->section==Entry::ENUM_SEC || (ce->spec&Entry::Enum))
        BEGIN( FindFields ) ;
       else
@@ -6633,7 +6702,7 @@ static void parseCompounds(Entry *rt)
       //memberGroupInside.resize(0);
       groupEnterCompound(yyFileName,yyLineNr,ce->name);
       
-      scanYYlex() ;
+      scannerYYlex() ;
       g_lexInit=TRUE;
       //forceEndGroup();
 
@@ -6710,7 +6779,7 @@ static void parseMain(const char *fileName,
     }
     current->reset();
     initEntry();
-    scanYYrestart( scanYYin );
+    scannerYYrestart( scannerYYin );
     if ( insidePHP )
     {
       BEGIN( FindMembersPHP );
@@ -6720,7 +6789,7 @@ static void parseMain(const char *fileName,
       BEGIN( FindMembers );
     }
 
-    scanYYlex();
+    scannerYYlex();
     g_lexInit=TRUE;
 
     if (YY_START==Comment)
@@ -6774,7 +6843,7 @@ static void parsePrototype(const QCString &text)
   
   // save scanner state
   orgState = YY_CURRENT_BUFFER;
-  yy_switch_to_buffer(yy_create_buffer(scanYYin, YY_BUF_SIZE));
+  yy_switch_to_buffer(yy_create_buffer(scannerYYin, YY_BUF_SIZE));
   orgInputString = inputString; 
   orgInputPosition = inputPosition;
 
@@ -6782,9 +6851,9 @@ static void parsePrototype(const QCString &text)
   inputString = text;
   inputPosition = 0;
   g_column = 0;
-  scanYYrestart( scanYYin );
+  scannerYYrestart( scannerYYin );
   BEGIN(Prototype);
-  scanYYlex();
+  scannerYYlex();
   g_lexInit=TRUE;
 
   current->name = current->name.stripWhiteSpace();
@@ -6806,7 +6875,7 @@ void scanFreeScanner()
 #if defined(YY_FLEX_SUBMINOR_VERSION)
   if (g_lexInit)
   {
-    scanYYlex_destroy();
+    scannerYYlex_destroy();
   }
 #endif
 }
@@ -6845,8 +6914,13 @@ void CLanguageScanner::parseInput(const char *fileName,
                                   QStrList & filesInSameTranslationUnit)
 {
   g_thisParser = this;
+
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
+
   ::parseMain(fileName,fileBuf,root,
               sameTranslationUnit,filesInSameTranslationUnit);
+
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
@@ -6861,12 +6935,13 @@ void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
                    bool inlineFragment,
                   MemberDef *memberDef,
                   bool showLineNumbers,
-                   Definition *searchCtx
+                   Definition *searchCtx,
+                   bool collectXRefs
                   )
 {
   ::parseCCode(codeOutIntf,scopeName,input,lang,isExampleBlock,exampleName,
                fileDef,startLine,endLine,inlineFragment,memberDef,
-              showLineNumbers,searchCtx);
+              showLineNumbers,searchCtx,collectXRefs);
 }
 
 bool CLanguageScanner::needsPreprocessing(const QCString &extension)
index 3ed3f90..10cee88 100644 (file)
@@ -5,7 +5,7 @@ function convertToId(search)
   {
     var c = search.charAt(i);
     var cn = c.charCodeAt(0);
-    if (c.match(/[a-z0-9]/))
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
     {
       result+=c;
     }
@@ -310,22 +310,20 @@ function SearchBox(name, resultsPath, inFrame, label)
     var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
 
     var code = searchValue.toLowerCase().charCodeAt(0);
-    var hexCode;
-    if (code<16) 
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
     {
-      hexCode="0"+code.toString(16);
-    }
-    else 
-    {
-      hexCode=code.toString(16);
+      idxChar = searchValue.substr(0, 2);
     }
 
     var resultsPage;
     var resultsPageWithSearch;
     var hasResultsPage;
 
-    if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
     {
+       var hexCode=idx.toString(16);
        resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
        resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
        hasResultsPage = true;
diff --git a/src/search_css.h b/src/search_css.h
deleted file mode 100644 (file)
index 48c4df9..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-"/*---------------- Search Box */\n"
-"\n"
-"#FSearchBox {\n"
-"    float: left;\n"
-"}\n"
-"\n"
-"#MSearchBox {\n"
-"    white-space : nowrap;\n"
-"    position: absolute;\n"
-"    float: none;\n"
-"    display: inline;\n"
-"    margin-top: 8px;\n"
-"    right: 0px;\n"
-"    width: 170px;\n"
-"    z-index: 102;\n"
-"    background-color: white;\n"
-"}\n"
-"\n"
-"#MSearchBox .left\n"
-"{\n"
-"    display:block;\n"
-"    position:absolute;\n"
-"    left:10px;\n"
-"    width:20px;\n"
-"    height:19px;\n"
-"    background:url('search_l.png') no-repeat;\n"
-"    background-position:right;\n"
-"}\n"
-"\n"
-"#MSearchSelect {\n"
-"    display:block;\n"
-"    position:absolute;\n"
-"    width:20px;\n"
-"    height:19px;\n"
-"}\n"
-"\n"
-".left #MSearchSelect {\n"
-"    left:4px;\n"
-"}\n"
-"\n"
-".right #MSearchSelect {\n"
-"    right:5px;\n"
-"}\n"
-"\n"
-"#MSearchField {\n"
-"    display:block;\n"
-"    position:absolute;\n"
-"    height:19px;\n"
-"    background:url('search_m.png') repeat-x;\n"
-"    border:none;\n"
-"    width:111px;\n"
-"    margin-left:20px;\n"
-"    padding-left:4px;\n"
-"    color: #909090;\n"
-"    outline: none;\n"
-"    font: 9pt Arial, Verdana, sans-serif;\n"
-"}\n"
-"\n"
-"#FSearchBox #MSearchField {\n"
-"    margin-left:15px;\n"
-"}\n"
-"\n"
-"#MSearchBox .right {\n"
-"    display:block;\n"
-"    position:absolute;\n"
-"    right:10px;\n"
-"    top:0px;\n"
-"    width:20px;\n"
-"    height:19px;\n"
-"    background:url('search_r.png') no-repeat;\n"
-"    background-position:left;\n"
-"}\n"
-"\n"
-"#MSearchClose {\n"
-"    display: none;\n"
-"    position: absolute;\n"
-"    top: 4px;\n"
-"    background : none;\n"
-"    border: none;\n"
-"    margin: 0px 4px 0px 0px;\n"
-"    padding: 0px 0px;\n"
-"    outline: none;\n"
-"}\n"
-"\n"
-".left #MSearchClose {\n"
-"    left: 6px;\n"
-"}\n"
-"\n"
-".right #MSearchClose {\n"
-"    right: 2px;\n"
-"}\n"
-"\n"
-".MSearchBoxActive #MSearchField {\n"
-"    color: #000000;\n"
-"}\n"
-"\n"
-"/*---------------- Search filter selection */\n"
-"\n"
-"#MSearchSelectWindow {\n"
-"    display: none;\n"
-"    position: absolute;\n"
-"    left: 0; top: 0;\n"
-"    border: 1px solid ##A0;\n"
-"    background-color: ##FA;\n"
-"    z-index: 1;\n"
-"    padding-top: 4px;\n"
-"    padding-bottom: 4px;\n"
-"    -moz-border-radius: 4px;\n"
-"    -webkit-border-top-left-radius: 4px;\n"
-"    -webkit-border-top-right-radius: 4px;\n"
-"    -webkit-border-bottom-left-radius: 4px;\n"
-"    -webkit-border-bottom-right-radius: 4px;\n"
-"    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"}\n"
-"\n"
-".SelectItem {\n"
-"    font: 8pt Arial, Verdana, sans-serif;\n"
-"    padding-left:  2px;\n"
-"    padding-right: 12px;\n"
-"    border: 0px;\n"
-"}\n"
-"\n"
-"span.SelectionMark {\n"
-"    margin-right: 4px;\n"
-"    font-family: monospace;\n"
-"    outline-style: none;\n"
-"    text-decoration: none;\n"
-"}\n"
-"\n"
-"a.SelectItem {\n"
-"    display: block;\n"
-"    outline-style: none;\n"
-"    color: #000000; \n"
-"    text-decoration: none;\n"
-"    padding-left:   6px;\n"
-"    padding-right: 12px;\n"
-"}\n"
-"\n"
-"a.SelectItem:focus,\n"
-"a.SelectItem:active {\n"
-"    color: #000000; \n"
-"    outline-style: none;\n"
-"    text-decoration: none;\n"
-"}\n"
-"\n"
-"a.SelectItem:hover {\n"
-"    color: #FFFFFF;\n"
-"    background-color: ##50;\n"
-"    outline-style: none;\n"
-"    text-decoration: none;\n"
-"    cursor: pointer;\n"
-"    display: block;\n"
-"}\n"
-"\n"
-"/*---------------- Search results window */\n"
-"\n"
-"iframe#MSearchResults {\n"
-"    width: 60ex;\n"
-"    height: 15em;\n"
-"}\n"
-"\n"
-"#MSearchResultsWindow {\n"
-"    display: none;\n"
-"    position: absolute;\n"
-"    left: 0; top: 0;\n"
-"    border: 1px solid #000;\n"
-"    background-color: ##F0;\n"
-"}\n"
-"\n"
-"/* ----------------------------------- */\n"
-"\n"
-"\n"
-"#SRIndex {\n"
-"    clear:both; \n"
-"    padding-bottom: 15px;\n"
-"}\n"
-"\n"
-".SREntry {\n"
-"    font-size: 10pt;\n"
-"    padding-left: 1ex;\n"
-"}\n"
-"\n"
-".SRPage .SREntry {\n"
-"    font-size: 8pt;\n"
-"    padding: 1px 5px;\n"
-"}\n"
-"\n"
-"body.SRPage {\n"
-"    margin: 5px 2px;\n"
-"}\n"
-"\n"
-".SRChildren {\n"
-"    padding-left: 3ex; padding-bottom: .5em \n"
-"}\n"
-"\n"
-".SRPage .SRChildren {\n"
-"    display: none;\n"
-"}\n"
-"\n"
-".SRSymbol {\n"
-"    font-weight: bold; \n"
-"    color: ##58;\n"
-"    font-family: Arial, Verdana, sans-serif;\n"
-"    text-decoration: none;\n"
-"    outline: none;\n"
-"}\n"
-"\n"
-"a.SRScope {\n"
-"    display: block;\n"
-"    color: ##58; \n"
-"    font-family: Arial, Verdana, sans-serif;\n"
-"    text-decoration: none;\n"
-"    outline: none;\n"
-"}\n"
-"\n"
-"a.SRSymbol:focus, a.SRSymbol:active,\n"
-"a.SRScope:focus, a.SRScope:active {\n"
-"    text-decoration: underline;\n"
-"}\n"
-"\n"
-"span.SRScope {\n"
-"    padding-left: 4px;\n"
-"}\n"
-"\n"
-".SRPage .SRStatus {\n"
-"    padding: 2px 5px;\n"
-"    font-size: 8pt;\n"
-"    font-style: italic;\n"
-"}\n"
-"\n"
-".SRResult {\n"
-"    display: none;\n"
-"}\n"
-"\n"
-"DIV.searchresults {\n"
-"    margin-left: 10px;\n"
-"    margin-right: 10px;\n"
-"}\n"
-"\n"
-"/*---------------- External search page results */\n"
-"\n"
-".searchresult {\n"
-"    background-color: ##F2;\n"
-"}\n"
-"\n"
-".pages b {\n"
-"   color: white;\n"
-"   padding: 5px 5px 3px 5px;\n"
-"   background-image: url(\"../tab_a.png\");\n"
-"   background-repeat: repeat-x;\n"
-"   text-shadow: 0 1px 1px #000000;\n"
-"}\n"
-"\n"
-".pages {\n"
-"    line-height: 17px;\n"
-"    margin-left: 4px;\n"
-"    text-decoration: none;\n"
-"}\n"
-"\n"
-".hl {\n"
-"    font-weight: bold;\n"
-"}\n"
-"\n"
-"#searchresults {\n"
-"    margin-bottom: 20px;\n"
-"}\n"
-"\n"
-".searchpages {\n"
-"    margin-top: 10px;\n"
-"}\n"
-"\n"
index acd7f3c..5ad2e5d 100644 (file)
@@ -358,7 +358,7 @@ function main()
   $sorted = run_query($query);
   // Now output the HTML stuff...
   // End the HTML form
-  end_form(preg_replace("/[^a-zA-Z0-9\-\_\.]/i", " ", $query ));
+  end_form(preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query ));
   // report results to the user
   report_results($sorted);
   end_page();
diff --git a/src/search_functions_php.h b/src/search_functions_php.h
deleted file mode 100644 (file)
index b09c259..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-"<script language=\"PHP\">\n"
-"require_once \"search-config.php\";\n"
-"\n"
-"function end_form($value)\n"
-"{\n"
-"  global $config;\n"
-"  global $translator;\n"
-"  if ($config['DISABLE_INDEX'] == false)\n"
-"  {\n"
-"  echo \"            <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n            </form>\\n          </div><div class=\\\"right\\\"></div>\\n        </div>\\n      </li>\\n    </ul>\\n  </div>\\n</div>\\n\";\n"
-"  }\n"
-"  if ($config['GENERATE_TREEVIEW'])\n"
-"  {\n"
-"    echo $translator['split_bar'];\n"
-"  }\n"
-"}\n"
-"\n"
-"function end_page()\n"
-"{\n"
-"  echo \"</body></html>\";\n"
-"}\n"
-"\n"
-"function search_results()\n"
-"{\n"
-"  global $translator;\n"
-"  return $translator['search_results_title'];\n"
-"}\n"
-"\n"
-"function matches_text($num)\n"
-"{\n"
-"  global $translator;\n"
-"  $string = $translator['search_results'][($num>2)?2:$num];\n"
-"  // The eval is used so that translator strings can contain $num.\n"
-"  eval(\"\\$result = \\\"$string\\\";\");\n"
-"  return $result;\n"
-"}\n"
-"\n"
-"function report_matches()\n"
-"{\n"
-"  global $translator;\n"
-"  return $translator['search_matches'];\n"
-"}\n"
-"\n"
-"function readInt($file)\n"
-"{\n"
-"  $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));\n"
-"  $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));\n"
-"  return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;\n"
-"}\n"
-"\n"
-"function readString($file)\n"
-"{\n"
-"  $result=\"\";\n"
-"  while (ord($c=fgetc($file))) $result.=$c;\n"
-"  return $result;\n"
-"}\n"
-"\n"
-"function readHeader($file)\n"
-"{\n"
-"  $header =fgetc($file); $header.=fgetc($file);\n"
-"  $header.=fgetc($file); $header.=fgetc($file);\n"
-"  return $header;\n"
-"}\n"
-"\n"
-"function computeIndex($word)\n"
-"{\n"
-"  // Simple hashing that allows for substring search\n"
-"  if (strlen($word)<2) return -1;\n"
-"  // high char of the index\n"
-"  $hi = ord($word{0});\n"
-"  if ($hi==0) return -1;\n"
-"  // low char of the index\n"
-"  $lo = ord($word{1});\n"
-"  if ($lo==0) return -1;\n"
-"  // return index\n"
-"  return $hi*256+$lo;\n"
-"}\n"
-"\n"
-"function search($file,$word,&$statsList)\n"
-"{\n"
-"  $index = computeIndex($word);\n"
-"  if ($index!=-1) // found a valid index\n"
-"  {\n"
-"    fseek($file,$index*4+4); // 4 bytes per entry, skip header\n"
-"    $index = readInt($file);\n"
-"    if ($index) // found words matching the hash key\n"
-"    {\n"
-"      $start=sizeof($statsList);\n"
-"      $count=$start;\n"
-"      fseek($file,$index);\n"
-"      $w = readString($file);\n"
-"      while ($w)\n"
-"      {\n"
-"        $statIdx = readInt($file);\n"
-"        if ($word==substr($w,0,strlen($word)))\n"
-"        { // found word that matches (as substring)\n"
-"          $statsList[$count++]=array(\n"
-"              \"word\"=>$word,\n"
-"              \"match\"=>$w,\n"
-"              \"index\"=>$statIdx,\n"
-"              \"full\"=>strlen($w)==strlen($word),\n"
-"              \"docs\"=>array()\n"
-"              );\n"
-"        }\n"
-"        $w = readString($file);\n"
-"      }\n"
-"      $totalHi=0;\n"
-"      $totalFreqHi=0;\n"
-"      $totalFreqLo=0;\n"
-"      for ($count=$start;$count<sizeof($statsList);$count++)\n"
-"      {\n"
-"        $statInfo = &$statsList[$count];\n"
-"        $multiplier = 1;\n"
-"        // whole word matches have a double weight\n"
-"        if ($statInfo[\"full\"]) $multiplier=2;\n"
-"        fseek($file,$statInfo[\"index\"]); \n"
-"        $numDocs = readInt($file);\n"
-"        $docInfo = array();\n"
-"        // read docs info + occurrence frequency of the word\n"
-"        for ($i=0;$i<$numDocs;$i++)\n"
-"        {\n"
-"          $idx=readInt($file); \n"
-"          $freq=readInt($file); \n"
-"          $docInfo[$i]=array(\"idx\"  => $idx,\n"
-"                             \"freq\" => $freq>>1,\n"
-"                             \"rank\" => 0.0,\n"
-"                             \"hi\"   => $freq&1\n"
-"                            );\n"
-"          if ($freq&1) // word occurs in high priority doc\n"
-"          {\n"
-"            $totalHi++;\n"
-"            $totalFreqHi+=$freq*$multiplier;\n"
-"          }\n"
-"          else // word occurs in low priority doc\n"
-"          {\n"
-"            $totalFreqLo+=$freq*$multiplier;\n"
-"          }\n"
-"        }\n"
-"        // read name and url info for the doc\n"
-"        for ($i=0;$i<$numDocs;$i++)\n"
-"        {\n"
-"          fseek($file,$docInfo[$i][\"idx\"]);\n"
-"          $docInfo[$i][\"name\"]=readString($file);\n"
-"          $docInfo[$i][\"url\"]=readString($file);\n"
-"        }\n"
-"        $statInfo[\"docs\"]=$docInfo;\n"
-"      }\n"
-"      $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;\n"
-"      for ($count=$start;$count<sizeof($statsList);$count++)\n"
-"      {\n"
-"        $statInfo = &$statsList[$count];\n"
-"        $multiplier = 1;\n"
-"        // whole word matches have a double weight\n"
-"        if ($statInfo[\"full\"]) $multiplier=2;\n"
-"        for ($i=0;$i<sizeof($statInfo[\"docs\"]);$i++)\n"
-"        {\n"
-"          $docInfo = &$statInfo[\"docs\"];\n"
-"          // compute frequency rank of the word in each doc\n"
-"          $freq=$docInfo[$i][\"freq\"];\n"
-"          if ($docInfo[$i][\"hi\"])\n"
-"          {\n"
-"            $statInfo[\"docs\"][$i][\"rank\"]=\n"
-"              (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;\n"
-"          }\n"
-"          else\n"
-"          {\n"
-"            $statInfo[\"docs\"][$i][\"rank\"]=\n"
-"              (float)($freq*$multiplier)/$totalFreq;\n"
-"          }\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"  }\n"
-"  return $statsList;\n"
-"}\n"
-"\n"
-"function combine_results($results,&$docs)\n"
-"{\n"
-"  foreach ($results as $wordInfo)\n"
-"  {\n"
-"    $docsList = &$wordInfo[\"docs\"];\n"
-"    foreach ($docsList as $di)\n"
-"    {\n"
-"      $key=$di[\"url\"];\n"
-"      $rank=$di[\"rank\"];\n"
-"      if (isset($docs[$key]))\n"
-"      {\n"
-"        $docs[$key][\"rank\"]+=$rank;\n"
-"      }\n"
-"      else\n"
-"      {\n"
-"        $docs[$key] = array(\"url\"=>$key,\n"
-"            \"name\"=>$di[\"name\"],\n"
-"            \"rank\"=>$rank\n"
-"            );\n"
-"      }\n"
-"      $docs[$key][\"words\"][] = array(\n"
-"               \"word\"=>$wordInfo[\"word\"],\n"
-"               \"match\"=>$wordInfo[\"match\"],\n"
-"               \"freq\"=>$di[\"freq\"]\n"
-"               );\n"
-"    }\n"
-"  }\n"
-"  return $docs;\n"
-"}\n"
-"\n"
-"function filter_results($docs,&$requiredWords,&$forbiddenWords)\n"
-"{\n"
-"  $filteredDocs=array();\n"
-"  while (list ($key, $val) = each ($docs)) \n"
-"  {\n"
-"    $words = &$docs[$key][\"words\"];\n"
-"    $copy=1; // copy entry by default\n"
-"    if (sizeof($requiredWords)>0)\n"
-"    {\n"
-"      foreach ($requiredWords as $reqWord)\n"
-"      {\n"
-"        $found=0;\n"
-"        foreach ($words as $wordInfo)\n"
-"        { \n"
-"          $found = $wordInfo[\"word\"]==$reqWord;\n"
-"          if ($found) break;\n"
-"        }\n"
-"        if (!$found) \n"
-"        {\n"
-"          $copy=0; // document contains none of the required words\n"
-"          break;\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"    if (sizeof($forbiddenWords)>0)\n"
-"    {\n"
-"      foreach ($words as $wordInfo)\n"
-"      {\n"
-"        if (in_array($wordInfo[\"word\"],$forbiddenWords))\n"
-"        {\n"
-"          $copy=0; // document contains a forbidden word\n"
-"          break;\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"    if ($copy) $filteredDocs[$key]=$docs[$key];\n"
-"  }\n"
-"  return $filteredDocs;\n"
-"}\n"
-"\n"
-"function compare_rank($a,$b)\n"
-"{\n"
-"  if ($a[\"rank\"] == $b[\"rank\"]) \n"
-"  {\n"
-"    return 0;\n"
-"  }\n"
-"  return ($a[\"rank\"]>$b[\"rank\"]) ? -1 : 1; \n"
-"}\n"
-"\n"
-"function sort_results($docs,&$sorted)\n"
-"{\n"
-"  $sorted = $docs;\n"
-"  usort($sorted,\"compare_rank\");\n"
-"  return $sorted;\n"
-"}\n"
-"\n"
-"function report_results(&$docs)\n"
-"{\n"
-"  echo \"<div class=\\\"header\\\">\";\n"
-"  echo \"  <div class=\\\"headertitle\\\">\\n\";\n"
-"  echo \"    <h1>\".search_results().\"</h1>\\n\";\n"
-"  echo \"  </div>\\n\";\n"
-"  echo \"</div>\\n\";\n"
-"  echo \"<div class=\\\"searchresults\\\">\\n\";\n"
-"  echo \"<table cellspacing=\\\"2\\\">\\n\";\n"
-"  $numDocs = sizeof($docs);\n"
-"  if ($numDocs==0)\n"
-"  {\n"
-"    echo \"  <tr>\\n\";\n"
-"    echo \"    <td colspan=\\\"2\\\">\".matches_text(0).\"</td>\\n\";\n"
-"    echo \"  </tr>\\n\";\n"
-"  }\n"
-"  else\n"
-"  {\n"
-"    echo \"  <tr>\\n\";\n"
-"    echo \"    <td colspan=\\\"2\\\">\".matches_text($numDocs);\n"
-"    echo \"\\n\";\n"
-"    echo \"    </td>\\n\";\n"
-"    echo \"  </tr>\\n\";\n"
-"    $num=1;\n"
-"    foreach ($docs as $doc)\n"
-"    {\n"
-"      echo \"  <tr>\\n\";\n"
-"      echo \"    <td align=\\\"right\\\">$num.</td>\";\n"
-"      echo     \"<td><a class=\\\"el\\\" href=\\\"\".$doc[\"url\"].\"\\\">\".$doc[\"name\"].\"</a></td>\\n\";\n"
-"      echo \"  <tr>\\n\";\n"
-"      echo \"    <td></td><td class=\\\"tiny\\\">\".report_matches().\" \";\n"
-"      foreach ($doc[\"words\"] as $wordInfo)\n"
-"      {\n"
-"        $word = $wordInfo[\"word\"];\n"
-"        $matchRight = substr($wordInfo[\"match\"],strlen($word));\n"
-"        echo \"<b>$word</b>$matchRight(\".$wordInfo[\"freq\"].\") \";\n"
-"      }\n"
-"      echo \"    </td>\\n\";\n"
-"      echo \"  </tr>\\n\";\n"
-"      $num++;\n"
-"    }\n"
-"  }\n"
-"  echo \"</table>\\n\";\n"
-"  echo \"</div>\\n\";\n"
-"}\n"
-"\n"
-"function run_query($query)\n"
-"{\n"
-"  if(strcmp('4.1.0', phpversion()) > 0) \n"
-"  {\n"
-"    die(\"Error: PHP version 4.1.0 or above required!\");\n"
-"  }\n"
-"  if (!($file=fopen(\"search/search.idx\",\"rb\"))) \n"
-"  {\n"
-"    die(\"Error: Search index file could NOT be opened!\");\n"
-"  }\n"
-"  if (readHeader($file)!=\"DOXS\")\n"
-"  {\n"
-"    die(\"Error: Header of index file is invalid!\");\n"
-"  }\n"
-"  $results = array();\n"
-"  $requiredWords = array();\n"
-"  $forbiddenWords = array();\n"
-"  $foundWords = array();\n"
-"  $word=strtok($query,\" \");\n"
-"  while ($word) // for each word in the search query\n"
-"  {\n"
-"    if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }\n"
-"    if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }\n"
-"    if (!in_array($word,$foundWords))\n"
-"    {\n"
-"      $foundWords[]=$word;\n"
-"      search($file,strtolower($word),$results);\n"
-"    }\n"
-"    $word=strtok(\" \");\n"
-"  }\n"
-"  fclose($file);\n"
-"  $docs = array();\n"
-"  combine_results($results,$docs);\n"
-"  // filter out documents with forbidden word or that do not contain\n"
-"  // required words\n"
-"  $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);\n"
-"  // sort the results based on rank\n"
-"  $sorted = array();\n"
-"  sort_results($filteredDocs,$sorted);\n"
-"  return $sorted;\n"
-"}\n"
-"\n"
-"function main()\n"
-"{\n"
-"  $query = \"\";\n"
-"  if (array_key_exists(\"query\", $_GET))\n"
-"  {\n"
-"    $query=$_GET[\"query\"];\n"
-"  }\n"
-"  $sorted = run_query($query);\n"
-"  // Now output the HTML stuff...\n"
-"  // End the HTML form\n"
-"  end_form(preg_replace(\"/[^a-zA-Z0-9\\-\\_\\.]/i\", \" \", $query ));\n"
-"  // report results to the user\n"
-"  report_results($sorted);\n"
-"  end_page();\n"
-"}\n"
-"</script>\n"
diff --git a/src/search_js.h b/src/search_js.h
deleted file mode 100644 (file)
index 985d03c..0000000
+++ /dev/null
@@ -1,778 +0,0 @@
-"function convertToId(search)\n"
-"{\n"
-"  var result = '';\n"
-"  for (i=0;i<search.length;i++)\n"
-"  {\n"
-"    var c = search.charAt(i);\n"
-"    var cn = c.charCodeAt(0);\n"
-"    if (c.match(/[a-z0-9]/))\n"
-"    {\n"
-"      result+=c;\n"
-"    }\n"
-"    else if (cn<16) \n"
-"    {\n"
-"      result+=\"_0\"+cn.toString(16);\n"
-"    }\n"
-"    else \n"
-"    {\n"
-"      result+=\"_\"+cn.toString(16);\n"
-"    }\n"
-"  }\n"
-"  return result;\n"
-"}\n"
-"\n"
-"function getXPos(item)\n"
-"{\n"
-"  var x = 0;\n"
-"  if (item.offsetWidth)\n"
-"  {\n"
-"    while (item && item!=document.body)\n"
-"    {\n"
-"      x   += item.offsetLeft;\n"
-"      item = item.offsetParent;\n"
-"    }\n"
-"  }\n"
-"  return x;\n"
-"}\n"
-"\n"
-"function getYPos(item)\n"
-"{\n"
-"  var y = 0;\n"
-"  if (item.offsetWidth)\n"
-"  {\n"
-"     while (item && item!=document.body)\n"
-"     {\n"
-"       y   += item.offsetTop;\n"
-"       item = item.offsetParent;\n"
-"     }\n"
-"  }\n"
-"  return y;\n"
-"}\n"
-"\n"
-"/* A class handling everything associated with the search panel.\n"
-"\n"
-"   Parameters:\n"
-"   name - The name of the global variable that will be \n"
-"          storing this instance.  Is needed to be able to set timeouts.\n"
-"   resultPath - path to use for external files\n"
-"*/\n"
-"function SearchBox(name, resultsPath, inFrame, label)\n"
-"{\n"
-"  if (!name || !resultsPath) {  alert(\"Missing parameters to SearchBox.\"); }\n"
-"   \n"
-"  // ---------- Instance variables\n"
-"  this.name                  = name;\n"
-"  this.resultsPath           = resultsPath;\n"
-"  this.keyTimeout            = 0;\n"
-"  this.keyTimeoutLength      = 500;\n"
-"  this.closeSelectionTimeout = 300;\n"
-"  this.lastSearchValue       = \"\";\n"
-"  this.lastResultsPage       = \"\";\n"
-"  this.hideTimeout           = 0;\n"
-"  this.searchIndex           = 0;\n"
-"  this.searchActive          = false;\n"
-"  this.insideFrame           = inFrame;\n"
-"  this.searchLabel           = label;\n"
-"\n"
-"  // ----------- DOM Elements\n"
-"\n"
-"  this.DOMSearchField = function()\n"
-"  {  return document.getElementById(\"MSearchField\");  }\n"
-"\n"
-"  this.DOMSearchSelect = function()\n"
-"  {  return document.getElementById(\"MSearchSelect\");  }\n"
-"\n"
-"  this.DOMSearchSelectWindow = function()\n"
-"  {  return document.getElementById(\"MSearchSelectWindow\");  }\n"
-"\n"
-"  this.DOMPopupSearchResults = function()\n"
-"  {  return document.getElementById(\"MSearchResults\");  }\n"
-"\n"
-"  this.DOMPopupSearchResultsWindow = function()\n"
-"  {  return document.getElementById(\"MSearchResultsWindow\");  }\n"
-"\n"
-"  this.DOMSearchClose = function()\n"
-"  {  return document.getElementById(\"MSearchClose\"); }\n"
-"\n"
-"  this.DOMSearchBox = function()\n"
-"  {  return document.getElementById(\"MSearchBox\");  }\n"
-"\n"
-"  // ------------ Event Handlers\n"
-"\n"
-"  // Called when focus is added or removed from the search field.\n"
-"  this.OnSearchFieldFocus = function(isActive)\n"
-"  {\n"
-"    this.Activate(isActive);\n"
-"  }\n"
-"\n"
-"  this.OnSearchSelectShow = function()\n"
-"  {\n"
-"    var searchSelectWindow = this.DOMSearchSelectWindow();\n"
-"    var searchField        = this.DOMSearchSelect();\n"
-"\n"
-"    if (this.insideFrame)\n"
-"    {\n"
-"      var left = getXPos(searchField);\n"
-"      var top  = getYPos(searchField);\n"
-"      left += searchField.offsetWidth + 6;\n"
-"      top += searchField.offsetHeight;\n"
-"\n"
-"      // show search selection popup\n"
-"      searchSelectWindow.style.display='block';\n"
-"      left -= searchSelectWindow.offsetWidth;\n"
-"      searchSelectWindow.style.left =  left + 'px';\n"
-"      searchSelectWindow.style.top  =  top  + 'px';\n"
-"    }\n"
-"    else\n"
-"    {\n"
-"      var left = getXPos(searchField);\n"
-"      var top  = getYPos(searchField);\n"
-"      top += searchField.offsetHeight;\n"
-"\n"
-"      // show search selection popup\n"
-"      searchSelectWindow.style.display='block';\n"
-"      searchSelectWindow.style.left =  left + 'px';\n"
-"      searchSelectWindow.style.top  =  top  + 'px';\n"
-"    }\n"
-"\n"
-"    // stop selection hide timer\n"
-"    if (this.hideTimeout) \n"
-"    {\n"
-"      clearTimeout(this.hideTimeout);\n"
-"      this.hideTimeout=0;\n"
-"    }\n"
-"    return false; // to avoid \"image drag\" default event\n"
-"  }\n"
-"\n"
-"  this.OnSearchSelectHide = function()\n"
-"  {\n"
-"    this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n"
-"                                  this.closeSelectionTimeout);\n"
-"  }\n"
-"\n"
-"  // Called when the content of the search field is changed.\n"
-"  this.OnSearchFieldChange = function(evt)\n"
-"  {\n"
-"    if (this.keyTimeout) // kill running timer\n"
-"    {\n"
-"      clearTimeout(this.keyTimeout);\n"
-"      this.keyTimeout = 0;\n"
-"    }\n"
-"\n"
-"    var e  = (evt) ? evt : window.event; // for IE\n"
-"    if (e.keyCode==40 || e.keyCode==13)\n"
-"    {\n"
-"      if (e.shiftKey==1)\n"
-"      {\n"
-"        this.OnSearchSelectShow();\n"
-"        var win=this.DOMSearchSelectWindow(); \n"
-"        for (i=0;i<win.childNodes.length;i++)\n"
-"        {\n"
-"          var child = win.childNodes[i]; // get span within a\n"
-"          if (child.className=='SelectItem')\n"
-"          {\n"
-"            child.focus();\n"
-"            return;\n"
-"          }\n"
-"        }\n"
-"        return;\n"
-"      }\n"
-"      else if (window.frames.MSearchResults.searchResults)\n"
-"      {\n"
-"        var elem = window.frames.MSearchResults.searchResults.NavNext(0);\n"
-"        if (elem) elem.focus();\n"
-"      }\n"
-"    }\n"
-"    else if (e.keyCode==27) // Escape out of the search field\n"
-"    {\n"
-"      this.DOMSearchField().blur();\n"
-"      this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-"      this.DOMSearchClose().style.display = 'none';\n"
-"      this.lastSearchValue = '';\n"
-"      this.Activate(false);\n"
-"      return;\n"
-"    }\n"
-"\n"
-"    // strip whitespaces\n"
-"    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n"
-"\n"
-"    if (searchValue != this.lastSearchValue) // search value has changed\n"
-"    {\n"
-"      if (searchValue != \"\") // non-empty search\n"
-"      {\n"
-"        // set timer for search update\n"
-"        this.keyTimeout = setTimeout(this.name + '.Search()',\n"
-"                                     this.keyTimeoutLength);\n"
-"      }\n"
-"      else // empty search field\n"
-"      {\n"
-"        this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-"        this.DOMSearchClose().style.display = 'none';\n"
-"        this.lastSearchValue = '';\n"
-"      }\n"
-"    }\n"
-"  }\n"
-"\n"
-"  this.SelectItemCount = function(id)\n"
-"  {\n"
-"    var count=0;\n"
-"    var win=this.DOMSearchSelectWindow(); \n"
-"    for (i=0;i<win.childNodes.length;i++)\n"
-"    {\n"
-"      var child = win.childNodes[i]; // get span within a\n"
-"      if (child.className=='SelectItem')\n"
-"      {\n"
-"        count++;\n"
-"      }\n"
-"    }\n"
-"    return count;\n"
-"  }\n"
-"\n"
-"  this.SelectItemSet = function(id)\n"
-"  {\n"
-"    var i,j=0;\n"
-"    var win=this.DOMSearchSelectWindow(); \n"
-"    for (i=0;i<win.childNodes.length;i++)\n"
-"    {\n"
-"      var child = win.childNodes[i]; // get span within a\n"
-"      if (child.className=='SelectItem')\n"
-"      {\n"
-"        var node = child.firstChild;\n"
-"        if (j==id)\n"
-"        {\n"
-"          node.innerHTML='&#8226;';\n"
-"        }\n"
-"        else\n"
-"        {\n"
-"          node.innerHTML='&#160;';\n"
-"        }\n"
-"        j++;\n"
-"      }\n"
-"    }\n"
-"  }\n"
-"\n"
-"  // Called when an search filter selection is made.\n"
-"  // set item with index id as the active item\n"
-"  this.OnSelectItem = function(id)\n"
-"  {\n"
-"    this.searchIndex = id;\n"
-"    this.SelectItemSet(id);\n"
-"    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n"
-"    if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n"
-"    {\n"
-"      this.Search();\n"
-"    }\n"
-"  }\n"
-"\n"
-"  this.OnSearchSelectKey = function(evt)\n"
-"  {\n"
-"    var e = (evt) ? evt : window.event; // for IE\n"
-"    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n"
-"    {\n"
-"      this.searchIndex++;\n"
-"      this.OnSelectItem(this.searchIndex);\n"
-"    }\n"
-"    else if (e.keyCode==38 && this.searchIndex>0) // Up\n"
-"    {\n"
-"      this.searchIndex--;\n"
-"      this.OnSelectItem(this.searchIndex);\n"
-"    }\n"
-"    else if (e.keyCode==13 || e.keyCode==27)\n"
-"    {\n"
-"      this.OnSelectItem(this.searchIndex);\n"
-"      this.CloseSelectionWindow();\n"
-"      this.DOMSearchField().focus();\n"
-"    }\n"
-"    return false;\n"
-"  }\n"
-"\n"
-"  // --------- Actions\n"
-"\n"
-"  // Closes the results window.\n"
-"  this.CloseResultsWindow = function()\n"
-"  {\n"
-"    this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-"    this.DOMSearchClose().style.display = 'none';\n"
-"    this.Activate(false);\n"
-"  }\n"
-"\n"
-"  this.CloseSelectionWindow = function()\n"
-"  {\n"
-"    this.DOMSearchSelectWindow().style.display = 'none';\n"
-"  }\n"
-"\n"
-"  // Performs a search.\n"
-"  this.Search = function()\n"
-"  {\n"
-"    this.keyTimeout = 0;\n"
-"\n"
-"    // strip leading whitespace\n"
-"    var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n"
-"\n"
-"    var code = searchValue.toLowerCase().charCodeAt(0);\n"
-"    var hexCode;\n"
-"    if (code<16) \n"
-"    {\n"
-"      hexCode=\"0\"+code.toString(16);\n"
-"    }\n"
-"    else \n"
-"    {\n"
-"      hexCode=code.toString(16);\n"
-"    }\n"
-"\n"
-"    var resultsPage;\n"
-"    var resultsPageWithSearch;\n"
-"    var hasResultsPage;\n"
-"\n"
-"    if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')\n"
-"    {\n"
-"       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n"
-"       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n"
-"       hasResultsPage = true;\n"
-"    }\n"
-"    else // nothing available for this search term\n"
-"    {\n"
-"       resultsPage = this.resultsPath + '/nomatches.html';\n"
-"       resultsPageWithSearch = resultsPage;\n"
-"       hasResultsPage = false;\n"
-"    }\n"
-"\n"
-"    window.frames.MSearchResults.location = resultsPageWithSearch;  \n"
-"    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n"
-"\n"
-"    if (domPopupSearchResultsWindow.style.display!='block')\n"
-"    {\n"
-"       var domSearchBox = this.DOMSearchBox();\n"
-"       this.DOMSearchClose().style.display = 'inline';\n"
-"       if (this.insideFrame)\n"
-"       {\n"
-"         var domPopupSearchResults = this.DOMPopupSearchResults();\n"
-"         domPopupSearchResultsWindow.style.position = 'relative';\n"
-"         domPopupSearchResultsWindow.style.display  = 'block';\n"
-"         var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n"
-"         domPopupSearchResultsWindow.style.width    = width + 'px';\n"
-"         domPopupSearchResults.style.width          = width + 'px';\n"
-"       }\n"
-"       else\n"
-"       {\n"
-"         var domPopupSearchResults = this.DOMPopupSearchResults();\n"
-"         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n"
-"         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;\n"
-"         domPopupSearchResultsWindow.style.display = 'block';\n"
-"         left -= domPopupSearchResults.offsetWidth;\n"
-"         domPopupSearchResultsWindow.style.top     = top  + 'px';\n"
-"         domPopupSearchResultsWindow.style.left    = left + 'px';\n"
-"       }\n"
-"    }\n"
-"\n"
-"    this.lastSearchValue = searchValue;\n"
-"    this.lastResultsPage = resultsPage;\n"
-"  }\n"
-"\n"
-"  // -------- Activation Functions\n"
-"\n"
-"  // Activates or deactivates the search panel, resetting things to \n"
-"  // their default values if necessary. \n"
-"  this.Activate = function(isActive)\n"
-"  {\n"
-"    if (isActive || // open it\n"
-"        this.DOMPopupSearchResultsWindow().style.display == 'block' \n"
-"       )\n"
-"    {\n"
-"      this.DOMSearchBox().className = 'MSearchBoxActive';\n"
-"\n"
-"      var searchField = this.DOMSearchField();\n"
-"\n"
-"      if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n"
-"      {  \n"
-"        searchField.value = '';  \n"
-"        this.searchActive = true;\n"
-"      }\n"
-"    }\n"
-"    else if (!isActive) // directly remove the panel\n"
-"    {\n"
-"      this.DOMSearchBox().className = 'MSearchBoxInactive';\n"
-"      this.DOMSearchField().value   = this.searchLabel;\n"
-"      this.searchActive             = false;\n"
-"      this.lastSearchValue          = ''\n"
-"      this.lastResultsPage          = '';\n"
-"    }\n"
-"  }\n"
-"}\n"
-"\n"
-"// -----------------------------------------------------------------------\n"
-"\n"
-"// The class that handles everything on the search results page.\n"
-"function SearchResults(name)\n"
-"{\n"
-"    // The number of matches from the last run of <Search()>.\n"
-"    this.lastMatchCount = 0;\n"
-"    this.lastKey = 0;\n"
-"    this.repeatOn = false;\n"
-"\n"
-"    // Toggles the visibility of the passed element ID.\n"
-"    this.FindChildElement = function(id)\n"
-"    {\n"
-"      var parentElement = document.getElementById(id);\n"
-"      var element = parentElement.firstChild;\n"
-"\n"
-"      while (element && element!=parentElement)\n"
-"      {\n"
-"        if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n"
-"        {\n"
-"          return element;\n"
-"        }\n"
-"\n"
-"        if (element.nodeName == 'DIV' && element.hasChildNodes())\n"
-"        {  \n"
-"           element = element.firstChild;  \n"
-"        }\n"
-"        else if (element.nextSibling)\n"
-"        {  \n"
-"           element = element.nextSibling;  \n"
-"        }\n"
-"        else\n"
-"        {\n"
-"          do\n"
-"          {\n"
-"            element = element.parentNode;\n"
-"          }\n"
-"          while (element && element!=parentElement && !element.nextSibling);\n"
-"\n"
-"          if (element && element!=parentElement)\n"
-"          {  \n"
-"            element = element.nextSibling;  \n"
-"          }\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"\n"
-"    this.Toggle = function(id)\n"
-"    {\n"
-"      var element = this.FindChildElement(id);\n"
-"      if (element)\n"
-"      {\n"
-"        if (element.style.display == 'block')\n"
-"        {\n"
-"          element.style.display = 'none';\n"
-"        }\n"
-"        else\n"
-"        {\n"
-"          element.style.display = 'block';\n"
-"        }\n"
-"      }\n"
-"    }\n"
-"\n"
-"    // Searches for the passed string.  If there is no parameter,\n"
-"    // it takes it from the URL query.\n"
-"    //\n"
-"    // Always returns true, since other documents may try to call it\n"
-"    // and that may or may not be possible.\n"
-"    this.Search = function(search)\n"
-"    {\n"
-"      if (!search) // get search word from URL\n"
-"      {\n"
-"        search = window.location.search;\n"
-"        search = search.substring(1);  // Remove the leading '?'\n"
-"        search = unescape(search);\n"
-"      }\n"
-"\n"
-"      search = search.replace(/^ +/, \"\"); // strip leading spaces\n"
-"      search = search.replace(/ +$/, \"\"); // strip trailing spaces\n"
-"      search = search.toLowerCase();\n"
-"      search = convertToId(search);\n"
-"\n"
-"      var resultRows = document.getElementsByTagName(\"div\");\n"
-"      var matches = 0;\n"
-"\n"
-"      var i = 0;\n"
-"      while (i < resultRows.length)\n"
-"      {\n"
-"        var row = resultRows.item(i);\n"
-"        if (row.className == \"SRResult\")\n"
-"        {\n"
-"          var rowMatchName = row.id.toLowerCase();\n"
-"          rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n"
-"\n"
-"          if (search.length<=rowMatchName.length && \n"
-"             rowMatchName.substr(0, search.length)==search)\n"
-"          {\n"
-"            row.style.display = 'block';\n"
-"            matches++;\n"
-"          }\n"
-"          else\n"
-"          {\n"
-"            row.style.display = 'none';\n"
-"          }\n"
-"        }\n"
-"        i++;\n"
-"      }\n"
-"      document.getElementById(\"Searching\").style.display='none';\n"
-"      if (matches == 0) // no results\n"
-"      {\n"
-"        document.getElementById(\"NoMatches\").style.display='block';\n"
-"      }\n"
-"      else // at least one result\n"
-"      {\n"
-"        document.getElementById(\"NoMatches\").style.display='none';\n"
-"      }\n"
-"      this.lastMatchCount = matches;\n"
-"      return true;\n"
-"    }\n"
-"\n"
-"    // return the first item with index index or higher that is visible\n"
-"    this.NavNext = function(index)\n"
-"    {\n"
-"      var focusItem;\n"
-"      while (1)\n"
-"      {\n"
-"        var focusName = 'Item'+index;\n"
-"        focusItem = document.getElementById(focusName);\n"
-"        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n"
-"        {\n"
-"          break;\n"
-"        }\n"
-"        else if (!focusItem) // last element\n"
-"        {\n"
-"          break;\n"
-"        }\n"
-"        focusItem=null;\n"
-"        index++;\n"
-"      }\n"
-"      return focusItem;\n"
-"    }\n"
-"\n"
-"    this.NavPrev = function(index)\n"
-"    {\n"
-"      var focusItem;\n"
-"      while (1)\n"
-"      {\n"
-"        var focusName = 'Item'+index;\n"
-"        focusItem = document.getElementById(focusName);\n"
-"        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n"
-"        {\n"
-"          break;\n"
-"        }\n"
-"        else if (!focusItem) // last element\n"
-"        {\n"
-"          break;\n"
-"        }\n"
-"        focusItem=null;\n"
-"        index--;\n"
-"      }\n"
-"      return focusItem;\n"
-"    }\n"
-"\n"
-"    this.ProcessKeys = function(e)\n"
-"    {\n"
-"      if (e.type == \"keydown\") \n"
-"      {\n"
-"        this.repeatOn = false;\n"
-"        this.lastKey = e.keyCode;\n"
-"      }\n"
-"      else if (e.type == \"keypress\")\n"
-"      {\n"
-"        if (!this.repeatOn)\n"
-"        {\n"
-"          if (this.lastKey) this.repeatOn = true;\n"
-"          return false; // ignore first keypress after keydown\n"
-"        }\n"
-"      }\n"
-"      else if (e.type == \"keyup\")\n"
-"      {\n"
-"        this.lastKey = 0;\n"
-"        this.repeatOn = false;\n"
-"      }\n"
-"      return this.lastKey!=0;\n"
-"    }\n"
-"\n"
-"    this.Nav = function(evt,itemIndex) \n"
-"    {\n"
-"      var e  = (evt) ? evt : window.event; // for IE\n"
-"      if (e.keyCode==13) return true;\n"
-"      if (!this.ProcessKeys(e)) return false;\n"
-"\n"
-"      if (this.lastKey==38) // Up\n"
-"      {\n"
-"        var newIndex = itemIndex-1;\n"
-"        var focusItem = this.NavPrev(newIndex);\n"
-"        if (focusItem)\n"
-"        {\n"
-"          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n"
-"          if (child && child.style.display == 'block') // children visible\n"
-"          { \n"
-"            var n=0;\n"
-"            var tmpElem;\n"
-"            while (1) // search for last child\n"
-"            {\n"
-"              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n"
-"              if (tmpElem)\n"
-"              {\n"
-"                focusItem = tmpElem;\n"
-"              }\n"
-"              else // found it!\n"
-"              {\n"
-"                break;\n"
-"              }\n"
-"              n++;\n"
-"            }\n"
-"          }\n"
-"        }\n"
-"        if (focusItem)\n"
-"        {\n"
-"          focusItem.focus();\n"
-"        }\n"
-"        else // return focus to search field\n"
-"        {\n"
-"           parent.document.getElementById(\"MSearchField\").focus();\n"
-"        }\n"
-"      }\n"
-"      else if (this.lastKey==40) // Down\n"
-"      {\n"
-"        var newIndex = itemIndex+1;\n"
-"        var focusItem;\n"
-"        var item = document.getElementById('Item'+itemIndex);\n"
-"        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-"        if (elem && elem.style.display == 'block') // children visible\n"
-"        {\n"
-"          focusItem = document.getElementById('Item'+itemIndex+'_c0');\n"
-"        }\n"
-"        if (!focusItem) focusItem = this.NavNext(newIndex);\n"
-"        if (focusItem)  focusItem.focus();\n"
-"      }\n"
-"      else if (this.lastKey==39) // Right\n"
-"      {\n"
-"        var item = document.getElementById('Item'+itemIndex);\n"
-"        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-"        if (elem) elem.style.display = 'block';\n"
-"      }\n"
-"      else if (this.lastKey==37) // Left\n"
-"      {\n"
-"        var item = document.getElementById('Item'+itemIndex);\n"
-"        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-"        if (elem) elem.style.display = 'none';\n"
-"      }\n"
-"      else if (this.lastKey==27) // Escape\n"
-"      {\n"
-"        parent.searchBox.CloseResultsWindow();\n"
-"        parent.document.getElementById(\"MSearchField\").focus();\n"
-"      }\n"
-"      else if (this.lastKey==13) // Enter\n"
-"      {\n"
-"        return true;\n"
-"      }\n"
-"      return false;\n"
-"    }\n"
-"\n"
-"    this.NavChild = function(evt,itemIndex,childIndex)\n"
-"    {\n"
-"      var e  = (evt) ? evt : window.event; // for IE\n"
-"      if (e.keyCode==13) return true;\n"
-"      if (!this.ProcessKeys(e)) return false;\n"
-"\n"
-"      if (this.lastKey==38) // Up\n"
-"      {\n"
-"        if (childIndex>0)\n"
-"        {\n"
-"          var newIndex = childIndex-1;\n"
-"          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n"
-"        }\n"
-"        else // already at first child, jump to parent\n"
-"        {\n"
-"          document.getElementById('Item'+itemIndex).focus();\n"
-"        }\n"
-"      }\n"
-"      else if (this.lastKey==40) // Down\n"
-"      {\n"
-"        var newIndex = childIndex+1;\n"
-"        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n"
-"        if (!elem) // last child, jump to parent next parent\n"
-"        {\n"
-"          elem = this.NavNext(itemIndex+1);\n"
-"        }\n"
-"        if (elem)\n"
-"        {\n"
-"          elem.focus();\n"
-"        } \n"
-"      }\n"
-"      else if (this.lastKey==27) // Escape\n"
-"      {\n"
-"        parent.searchBox.CloseResultsWindow();\n"
-"        parent.document.getElementById(\"MSearchField\").focus();\n"
-"      }\n"
-"      else if (this.lastKey==13) // Enter\n"
-"      {\n"
-"        return true;\n"
-"      }\n"
-"      return false;\n"
-"    }\n"
-"}\n"
-"\n"
-"function setKeyActions(elem,action)\n"
-"{\n"
-"  elem.setAttribute('onkeydown',action);\n"
-"  elem.setAttribute('onkeypress',action);\n"
-"  elem.setAttribute('onkeyup',action);\n"
-"}\n"
-"\n"
-"function setClassAttr(elem,attr)\n"
-"{\n"
-"  elem.setAttribute('class',attr);\n"
-"  elem.setAttribute('className',attr);\n"
-"}\n"
-"\n"
-"function createResults()\n"
-"{\n"
-"  var results = document.getElementById(\"SRResults\");\n"
-"  for (var e=0; e<searchData.length; e++)\n"
-"  {\n"
-"    var id = searchData[e][0];\n"
-"    var srResult = document.createElement('div');\n"
-"    srResult.setAttribute('id','SR_'+id);\n"
-"    setClassAttr(srResult,'SRResult');\n"
-"    var srEntry = document.createElement('div');\n"
-"    setClassAttr(srEntry,'SREntry');\n"
-"    var srLink = document.createElement('a');\n"
-"    srLink.setAttribute('id','Item'+e);\n"
-"    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n"
-"    setClassAttr(srLink,'SRSymbol');\n"
-"    srLink.innerHTML = searchData[e][1][0];\n"
-"    srEntry.appendChild(srLink);\n"
-"    if (searchData[e][1].length==2) // single result\n"
-"    {\n"
-"      srLink.setAttribute('href',searchData[e][1][1][0]);\n"
-"      if (searchData[e][1][1][1])\n"
-"      {\n"
-"       srLink.setAttribute('target','_parent');\n"
-"      }\n"
-"      var srScope = document.createElement('span');\n"
-"      setClassAttr(srScope,'SRScope');\n"
-"      srScope.innerHTML = searchData[e][1][1][2];\n"
-"      srEntry.appendChild(srScope);\n"
-"    }\n"
-"    else // multiple results\n"
-"    {\n"
-"      srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n"
-"      var srChildren = document.createElement('div');\n"
-"      setClassAttr(srChildren,'SRChildren');\n"
-"      for (var c=0; c<searchData[e][1].length-1; c++)\n"
-"      {\n"
-"        var srChild = document.createElement('a');\n"
-"        srChild.setAttribute('id','Item'+e+'_c'+c);\n"
-"        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n"
-"        setClassAttr(srChild,'SRScope');\n"
-"        srChild.setAttribute('href',searchData[e][1][c+1][0]);\n"
-"        if (searchData[e][1][c+1][1])\n"
-"        {\n"
-"         srChild.setAttribute('target','_parent');\n"
-"        }\n"
-"        srChild.innerHTML = searchData[e][1][c+1][2];\n"
-"        srChildren.appendChild(srChild);\n"
-"      }\n"
-"      srEntry.appendChild(srChildren);\n"
-"    }\n"
-"    srResult.appendChild(srEntry);\n"
-"    results.appendChild(srResult);\n"
-"  }\n"
-"}\n"
-"\n"
diff --git a/src/search_opensearch_php.h b/src/search_opensearch_php.h
deleted file mode 100644 (file)
index b1e9529..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-"<script language=\"PHP\">\n"
-"require \"search-functions.php\";\n"
-"\n"
-"$mode = array_key_exists('v', $_GET)?$_GET['v']:\"\";\n"
-"$query = array_key_exists('query', $_GET)?$_GET['query']:\"\";\n"
-"\n"
-"$query_results = run_query($query);\n"
-"\n"
-"switch ($mode)\n"
-"{\n"
-"  case \"opensearch.xml\":\n"
-"    opensearch_description();\n"
-"    break;\n"
-"  case \"json\":\n"
-"    opensearch_json_results($query, $query_results);\n"
-"    break;\n"
-"  case \"xml\":\n"
-"    opensearch_xml_results($query, $query_results);\n"
-"    break;\n"
-"  default:\n"
-"    invalid_format($query, $query_results);\n"
-"    break;\n"
-"}\n"
-"\n"
-"function opensearch_description()\n"
-"{\n"
-"  global $config;\n"
-"  global $translator;\n"
-"\n"
-"  $shortname = $translator['search'].\" \".$config['PROJECT_NAME'];\n"
-"  $link = \"http://\".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);\n"
-"  header(\"Content-Type: application/xml\");\n"
-"  echo <<<END_OPENSEARCH\n"
-"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-"<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\">\n"
-"<ShortName>$shortname</ShortName>\n"
-"<Description>Doxygen Search</Description>\n"
-"<InputEncoding>UTF-8</InputEncoding>\n"
-"<!--\n"
-"<Image height=\"16\" width=\"16\" type=\"image/x-icon\">\n"
-"http://dev.squello.com/doc/html/favicon.ico</Image>\n"
-"-->\n"
-"<Url type=\"text/html\" method=\"GET\"\n"
-"template=\"$link/search.php?query={searchTerms}\" />\n"
-"<Url type=\"application/x-suggestions+json\" method=\"GET\"\n"
-"template=\"$link/search-opensearch.php?v=json&amp;query={searchTerms}\" />\n"
-"<Url type=\"application/x-suggestions+xml\" method=\"GET\"\n"
-"template=\"$link/search-opensearch.php?v=xml&amp;query={searchTerms}\" />\n"
-"</OpenSearchDescription>\n"
-"END_OPENSEARCH;\n"
-"}\n"
-"\n"
-"function opensearch_xml_results($query, array $results)\n"
-"{\n"
-"  // Much as I hate copy'n'paste code re-use, this is for testing;\n"
-"  // I expect a richer version to come soon.\n"
-"  // Although I hate that IE does this richer than FF more...\n"
-"  $qs_results = array();\n"
-"  foreach ($results as $i => $val)\n"
-"  {\n"
-"    foreach ($val['words'] as $j => $word)\n"
-"    {\n"
-"      if (array_key_exists($word, $qs_results))\n"
-"        $qs_results[$word['match']]++;\n"
-"      else\n"
-"        $qs_results[$word['match']] = 1;\n"
-"    }\n"
-"  }\n"
-"  $result = <<<END_FRAG\n"
-"<?xml version=\"1.0\"?>\n"
-"<SearchSuggestion xmlns=\"http://schemas.microsoft.com/Search/2008/suggestions\">\n"
-"<Query>$query</Query>\n"
-"<Section>\n"
-"END_FRAG;\n"
-"  foreach ($qs_results as $word => $count)\n"
-"  {\n"
-"    $result .= <<<END_FRAG\n"
-"<Item>\n"
-"<Text>$word</Text>\n"
-"<Description>$count results</Description>\n"
-"</Item>\n"
-"END_FRAG;\n"
-"  }\n"
-"  $result .= <<<END_FRAG\n"
-"</Section>\n"
-"</SearchSuggestion>\n"
-"END_FRAG;\n"
-"  echo $result;\n"
-"}\n"
-"\n"
-"function opensearch_json_results($query, array $results)\n"
-"{\n"
-"  $qs_results = array();\n"
-"  foreach ($results as $i => $val)\n"
-"  {\n"
-"    foreach ($val['words'] as $j => $word)\n"
-"    {\n"
-"      if (array_key_exists($word, $qs_results))\n"
-"        $qs_results[$word['match']]++;\n"
-"      else\n"
-"        $qs_results[$word['match']] = 1;\n"
-"    }\n"
-"  }\n"
-"  $result = '[\"'.$query.'\", [';\n"
-"  $json_words = \"\";\n"
-"  $json_descriptions = \"\";\n"
-"  $i = 0;\n"
-"  foreach ($qs_results as $word => $count)\n"
-"  {\n"
-"    if ($i != 0)\n"
-"    {\n"
-"      $json_words .= \", \";\n"
-"      $json_descriptions .= \", \";\n"
-"    }\n"
-"    $json_words .= '\"'.$word.'\"';\n"
-"    $json_descriptions .= '\"'.$count.' result'.($count==1?'':'s').'\"';\n"
-"    $i++;\n"
-"  }\n"
-"  print \"[\\\"$query\\\", [$json_words],[$json_descriptions]]\";\n"
-"}\n"
-"\n"
-"function invalid_format($query, array $results)\n"
-"{\n"
-"  print \"Search results for '$query':\\n\\n\";\n"
-"  print_r($results);\n"
-"}\n"
-"</script>\n"
index 0380b33..f023e4d 100644 (file)
@@ -584,11 +584,9 @@ void SearchIndexExternal::write(const char *fileName)
 #include "message.h"
 
 static const char search_script[]=
-#include "search_js.h"
+#include "search.js.h"
 ;
 
-#define MEMBER_INDEX_ENTRIES   256
-
 #define SEARCH_INDEX_ALL         0
 #define SEARCH_INDEX_CLASSES     1
 #define SEARCH_INDEX_NAMESPACES  2
@@ -606,21 +604,31 @@ static const char search_script[]=
 #define SEARCH_INDEX_PAGES      14
 #define NUM_SEARCH_INDICES      15
 
-class SearchIndexList : public SDict< QList<Definition> >
+class SearchDefinitionList : public QList<Definition>
+{
+  public:
+    SearchDefinitionList(uint letter) : m_letter(letter) {}
+    uint letter() const { return m_letter; }
+  private:
+    uint m_letter;
+};
+
+class SearchIndexList : public SDict< SearchDefinitionList >
 {
   public:
-    SearchIndexList(int size=17) : SDict< QList<Definition> >(size,FALSE) 
+    typedef Definition ElementType;
+    SearchIndexList(uint letter) : SDict<SearchDefinitionList>(17,FALSE), m_letter(letter)
     {
       setAutoDelete(TRUE);
     }
    ~SearchIndexList() {}
     void append(Definition *d)
     {
-      QList<Definition> *l = find(d->name());
+      SearchDefinitionList *l = find(d->name());
       if (l==0)
       {
-        l=new QList<Definition>;
-        SDict< QList<Definition> >::append(d->name(),l);
+        l=new SearchDefinitionList(m_letter);
+        SDict<SearchDefinitionList>::append(d->name(),l);
       }
       l->append(d);
     }
@@ -632,10 +640,13 @@ class SearchIndexList : public SDict< QList<Definition> >
       QCString n2 = md2->first()->localName();
       return qstricmp(n1.data(),n2.data());
     }
+    uint letter() const { return m_letter; }
+  private:
+    uint m_letter;
 };
 
 static void addMemberToSearchIndex(
-         SearchIndexList symbols[NUM_SEARCH_INDICES][MEMBER_INDEX_ENTRIES],
+         LetterToIndexMap<SearchIndexList> symbols[NUM_SEARCH_INDICES],
          int symbolCount[NUM_SEARCH_INDICES],
          MemberDef *md)
 {
@@ -653,58 +664,57 @@ static void addMemberToSearchIndex(
      )
   {
     QCString n = md->name();
-    uchar charCode = (uchar)n.at(0);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
     if (!n.isEmpty()) 
     {
+      uint letter = getUtf8CodeToLower(n,0);
       bool isFriendToHide = hideFriendCompounds &&
         (QCString(md->typeString())=="friend class" || 
          QCString(md->typeString())=="friend struct" ||
          QCString(md->typeString())=="friend union");
       if (!(md->isFriend() && isFriendToHide))
       {
-        symbols[SEARCH_INDEX_ALL][letter].append(md);
+        symbols[SEARCH_INDEX_ALL].append(letter,md);
         symbolCount[SEARCH_INDEX_ALL]++;
       }
       if (md->isFunction() || md->isSlot() || md->isSignal())
       {
-        symbols[SEARCH_INDEX_FUNCTIONS][letter].append(md);
+        symbols[SEARCH_INDEX_FUNCTIONS].append(letter,md);
         symbolCount[SEARCH_INDEX_FUNCTIONS]++;
       } 
       else if (md->isVariable())
       {
-        symbols[SEARCH_INDEX_VARIABLES][letter].append(md);
+        symbols[SEARCH_INDEX_VARIABLES].append(letter,md);
         symbolCount[SEARCH_INDEX_VARIABLES]++;
       }
       else if (md->isTypedef())
       {
-        symbols[SEARCH_INDEX_TYPEDEFS][letter].append(md);
+        symbols[SEARCH_INDEX_TYPEDEFS].append(letter,md);
         symbolCount[SEARCH_INDEX_TYPEDEFS]++;
       }
       else if (md->isEnumerate())
       {
-        symbols[SEARCH_INDEX_ENUMS][letter].append(md);
+        symbols[SEARCH_INDEX_ENUMS].append(letter,md);
         symbolCount[SEARCH_INDEX_ENUMS]++;
       }
       else if (md->isEnumValue())
       {
-        symbols[SEARCH_INDEX_ENUMVALUES][letter].append(md);
+        symbols[SEARCH_INDEX_ENUMVALUES].append(letter,md);
         symbolCount[SEARCH_INDEX_ENUMVALUES]++;
       }
       else if (md->isProperty())
       {
-        symbols[SEARCH_INDEX_PROPERTIES][letter].append(md);
+        symbols[SEARCH_INDEX_PROPERTIES].append(letter,md);
         symbolCount[SEARCH_INDEX_PROPERTIES]++;
       }
       else if (md->isEvent())
       {
-        symbols[SEARCH_INDEX_EVENTS][letter].append(md);
+        symbols[SEARCH_INDEX_EVENTS].append(letter,md);
         symbolCount[SEARCH_INDEX_EVENTS]++;
       }
       else if (md->isRelated() || md->isForeign() ||
                (md->isFriend() && !isFriendToHide))
       {
-        symbols[SEARCH_INDEX_RELATED][letter].append(md);
+        symbols[SEARCH_INDEX_RELATED].append(letter,md);
         symbolCount[SEARCH_INDEX_RELATED]++;
       }
     }
@@ -716,47 +726,48 @@ static void addMemberToSearchIndex(
      )
   {
     QCString n = md->name();
-    uchar charCode = (uchar)n.at(0);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
     if (!n.isEmpty()) 
     {
-      symbols[SEARCH_INDEX_ALL][letter].append(md);
+      uint letter = getUtf8CodeToLower(n,0);
+      symbols[SEARCH_INDEX_ALL].append(letter,md);
       symbolCount[SEARCH_INDEX_ALL]++;
 
       if (md->isFunction()) 
       {
-        symbols[SEARCH_INDEX_FUNCTIONS][letter].append(md);
+        symbols[SEARCH_INDEX_FUNCTIONS].append(letter,md);
         symbolCount[SEARCH_INDEX_FUNCTIONS]++;
       }
       else if (md->isVariable()) 
       {
-        symbols[SEARCH_INDEX_VARIABLES][letter].append(md);
+        symbols[SEARCH_INDEX_VARIABLES].append(letter,md);
         symbolCount[SEARCH_INDEX_VARIABLES]++;
       }
       else if (md->isTypedef())
       {
-        symbols[SEARCH_INDEX_TYPEDEFS][letter].append(md);
+        symbols[SEARCH_INDEX_TYPEDEFS].append(letter,md);
         symbolCount[SEARCH_INDEX_TYPEDEFS]++;
       }
       else if (md->isEnumerate())
       {
-        symbols[SEARCH_INDEX_ENUMS][letter].append(md);
+        symbols[SEARCH_INDEX_ENUMS].append(letter,md);
         symbolCount[SEARCH_INDEX_ENUMS]++;
       }
       else if (md->isEnumValue())
       {
-        symbols[SEARCH_INDEX_ENUMVALUES][letter].append(md);
+        symbols[SEARCH_INDEX_ENUMVALUES].append(letter,md);
         symbolCount[SEARCH_INDEX_ENUMVALUES]++;
       }
       else if (md->isDefine())
       {
-        symbols[SEARCH_INDEX_DEFINES][letter].append(md);
+        symbols[SEARCH_INDEX_DEFINES].append(letter,md);
         symbolCount[SEARCH_INDEX_DEFINES]++;
       }
     }
   }
 }
 
+// see also function convertToId() in search.js, which should match in
+// behaviour
 static QCString searchId(const QCString &s)
 {
   int c;
@@ -765,11 +776,15 @@ static QCString searchId(const QCString &s)
   for (i=0;i<s.length();i++)
   {
     c=s.at(i);
-    if ((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z'))
+    if (c>0x7f || c<0) // part of multibyte character
+    {
+      result+=(char)c;
+    }
+    else if (isalnum(c)) // simply alpha numerical character
     {
       result+=(char)tolower(c);
     }
-    else
+    else // other 'unprintable' characters
     {
       char val[4];
       sprintf(val,"_%02x",(uchar)c);
@@ -780,7 +795,7 @@ static QCString searchId(const QCString &s)
 }
 
 static int g_searchIndexCount[NUM_SEARCH_INDICES];
-static SearchIndexList g_searchIndexSymbols[NUM_SEARCH_INDICES][MEMBER_INDEX_ENTRIES];
+static LetterToIndexMap<SearchIndexList> g_searchIndexSymbols[NUM_SEARCH_INDICES];
 static const char *g_searchIndexName[NUM_SEARCH_INDICES] = 
 { 
     "all",
@@ -834,12 +849,11 @@ void writeJavascriptSearchIndex()
   ClassDef *cd;
   for (;(cd=cli.current());++cli)
   {
-    uchar charCode = (uchar)cd->localName().at(0);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
+    uint letter = getUtf8CodeToLower(cd->localName(),0);
     if (cd->isLinkable() && isId(letter))
     {
-      g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(cd);
-      g_searchIndexSymbols[SEARCH_INDEX_CLASSES][letter].append(cd);
+      g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,cd);
+      g_searchIndexSymbols[SEARCH_INDEX_CLASSES].append(letter,cd);
       g_searchIndexCount[SEARCH_INDEX_ALL]++;
       g_searchIndexCount[SEARCH_INDEX_CLASSES]++;
     }
@@ -850,12 +864,11 @@ void writeJavascriptSearchIndex()
   NamespaceDef *nd;
   for (;(nd=nli.current());++nli)
   {
-    uchar charCode = (uchar)nd->name().at(0);
-    uint letter = charCode<128 ? tolower(charCode) : charCode;
+    uint letter = getUtf8CodeToLower(nd->name(),0);
     if (nd->isLinkable() && isId(letter))
     {
-      g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(nd);
-      g_searchIndexSymbols[SEARCH_INDEX_NAMESPACES][letter].append(nd);
+      g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,nd);
+      g_searchIndexSymbols[SEARCH_INDEX_NAMESPACES].append(letter,nd);
       g_searchIndexCount[SEARCH_INDEX_ALL]++;
       g_searchIndexCount[SEARCH_INDEX_NAMESPACES]++;
     }
@@ -870,12 +883,11 @@ void writeJavascriptSearchIndex()
     FileDef *fd;
     for (;(fd=fni.current());++fni)
     {
-      uchar charCode = (uchar)fd->name().at(0);
-      uint letter = charCode<128 ? tolower(charCode) : charCode;
+      uint letter = getUtf8CodeToLower(fd->name(),0);
       if (fd->isLinkable() && isId(letter))
       {
-        g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(fd);
-        g_searchIndexSymbols[SEARCH_INDEX_FILES][letter].append(fd);
+        g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,fd);
+        g_searchIndexSymbols[SEARCH_INDEX_FILES].append(letter,fd);
         g_searchIndexCount[SEARCH_INDEX_ALL]++;
         g_searchIndexCount[SEARCH_INDEX_FILES]++;
       }
@@ -930,8 +942,8 @@ void writeJavascriptSearchIndex()
         uint letter = charCode<128 ? tolower(charCode) : charCode;
         if (isId(letter))
         {
-          g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(gd);
-          g_searchIndexSymbols[SEARCH_INDEX_GROUPS][letter].append(gd);
+          g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,gd);
+          g_searchIndexSymbols[SEARCH_INDEX_GROUPS].append(letter,gd);
           g_searchIndexCount[SEARCH_INDEX_ALL]++;
           g_searchIndexCount[SEARCH_INDEX_GROUPS]++;
         }
@@ -953,8 +965,8 @@ void writeJavascriptSearchIndex()
         uint letter = charCode<128 ? tolower(charCode) : charCode;
         if (isId(letter))
         {
-          g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(pd);
-          g_searchIndexSymbols[SEARCH_INDEX_PAGES][letter].append(pd);
+          g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,pd);
+          g_searchIndexSymbols[SEARCH_INDEX_PAGES].append(letter,pd);
           g_searchIndexCount[SEARCH_INDEX_ALL]++;
           g_searchIndexCount[SEARCH_INDEX_PAGES]++;
         }
@@ -970,8 +982,8 @@ void writeJavascriptSearchIndex()
       uint letter = charCode<128 ? tolower(charCode) : charCode;
       if (isId(letter))
       {
-        g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(Doxygen::mainPage);
-        g_searchIndexSymbols[SEARCH_INDEX_PAGES][letter].append(Doxygen::mainPage);
+        g_searchIndexSymbols[SEARCH_INDEX_ALL].append(letter,Doxygen::mainPage);
+        g_searchIndexSymbols[SEARCH_INDEX_PAGES].append(letter,Doxygen::mainPage);
         g_searchIndexCount[SEARCH_INDEX_ALL]++;
         g_searchIndexCount[SEARCH_INDEX_PAGES]++;
       }
@@ -979,122 +991,181 @@ void writeJavascriptSearchIndex()
   }
   
   // sort all lists
-  int i,p;
+  int i;
   for (i=0;i<NUM_SEARCH_INDICES;i++)
   {
-    for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
+    SIntDict<SearchIndexList>::Iterator it(g_searchIndexSymbols[i]);
+    SearchIndexList *sl;
+    for (it.toFirst();(sl=it.current());++it)
     {
-      if (g_searchIndexSymbols[i][p].count()>0)
-      {
-        g_searchIndexSymbols[i][p].sort();
-      }
+      sl->sort();
     }
   }
 
   // write index files
   QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
 
-  for (i=0;i<NUM_SEARCH_INDICES;i++)
+  for (i=0;i<NUM_SEARCH_INDICES;i++) // for each index
   {
-    for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
+    SIntDict<SearchIndexList>::Iterator it(g_searchIndexSymbols[i]);
+    SearchIndexList *sl;
+    int p=0;
+    for (it.toFirst();(sl=it.current());++it,++p) // for each letter
     {
-      if (g_searchIndexSymbols[i][p].count()>0)
-      {
-        QCString baseName;
-        baseName.sprintf("%s_%02x",g_searchIndexName[i],p);
+      QCString baseName;
+      baseName.sprintf("%s_%x",g_searchIndexName[i],p);
 
-        QCString fileName = searchDirName + "/"+baseName+".html";
-        QCString dataFileName = searchDirName + "/"+baseName+".js";
+      QCString fileName = searchDirName + "/"+baseName+".html";
+      QCString dataFileName = searchDirName + "/"+baseName+".js";
 
-        QFile outFile(fileName);
-        QFile dataOutFile(dataFileName);
-        if (outFile.open(IO_WriteOnly) && dataOutFile.open(IO_WriteOnly))
+      QFile outFile(fileName);
+      QFile dataOutFile(dataFileName);
+      if (outFile.open(IO_WriteOnly) && dataOutFile.open(IO_WriteOnly))
+      {
+        {
+          FTextStream t(&outFile);
+
+          t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
+            " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
+          t << "<html><head><title></title>" << endl;
+          t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
+          t << "<meta name=\"generator\" content=\"Doxygen " << versionString << "\">" << endl;
+          t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
+          t << "<script type=\"text/javascript\" src=\"" << baseName << ".js\"></script>" << endl;
+          t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
+          t << "</head>" << endl;
+          t << "<body class=\"SRPage\">" << endl;
+          t << "<div id=\"SRIndex\">" << endl;
+          t << "<div class=\"SRStatus\" id=\"Loading\">" << theTranslator->trLoading() << "</div>" << endl;
+          t << "<div id=\"SRResults\"></div>" << endl; // here the results will be inserted
+          t << "<script type=\"text/javascript\"><!--" << endl;
+          t << "createResults();" << endl; // this function will insert the results
+          t << "--></script>" << endl;
+          t << "<div class=\"SRStatus\" id=\"Searching\">" 
+            << theTranslator->trSearching() << "</div>" << endl;
+          t << "<div class=\"SRStatus\" id=\"NoMatches\">"
+            << theTranslator->trNoMatches() << "</div>" << endl;
+
+          t << "<script type=\"text/javascript\"><!--" << endl;
+          t << "document.getElementById(\"Loading\").style.display=\"none\";" << endl;
+          t << "document.getElementById(\"NoMatches\").style.display=\"none\";" << endl;
+          t << "var searchResults = new SearchResults(\"searchResults\");" << endl;
+          t << "searchResults.Search();" << endl;
+          t << "--></script>" << endl;
+          t << "</div>" << endl; // SRIndex
+          t << "</body>" << endl;
+          t << "</html>" << endl;
+        }
+        FTextStream ti(&dataOutFile);
+
+        ti << "var searchData=" << endl;
+        // format
+        // searchData[] = array of items
+        // searchData[x][0] = id
+        // searchData[x][1] = [ name + child1 + child2 + .. ]
+        // searchData[x][1][0] = name as shown
+        // searchData[x][1][y+1] = info for child y
+        // searchData[x][1][y+1][0] = url
+        // searchData[x][1][y+1][1] = 1 => target="_parent"
+        // searchData[x][1][y+1][2] = scope
+
+        ti << "[" << endl;
+        bool firstEntry=TRUE;
+
+        SDict<SearchDefinitionList>::Iterator li(*sl);
+        SearchDefinitionList *dl;
+        int itemCount=0;
+        for (li.toFirst();(dl=li.current());++li)
         {
+          Definition *d = dl->first();
+          QCString id = d->localName();
+
+          if (!firstEntry)
+          {
+            ti << "," << endl;
+          }
+          firstEntry=FALSE;
+
+          QCString dispName = d->localName();
+          if (d->definitionType()==Definition::TypeGroup)
           {
-            FTextStream t(&outFile);
-
-            t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
-              " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
-            t << "<html><head><title></title>" << endl;
-            t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
-            t << "<meta name=\"generator\" content=\"Doxygen " << versionString << "\">" << endl;
-            t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
-            t << "<script type=\"text/javascript\" src=\"" << baseName << ".js\"></script>" << endl;
-            t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
-            t << "</head>" << endl;
-            t << "<body class=\"SRPage\">" << endl;
-            t << "<div id=\"SRIndex\">" << endl;
-            t << "<div class=\"SRStatus\" id=\"Loading\">" << theTranslator->trLoading() << "</div>" << endl;
-            t << "<div id=\"SRResults\"></div>" << endl; // here the results will be inserted
-            t << "<script type=\"text/javascript\"><!--" << endl;
-            t << "createResults();" << endl; // this function will insert the results
-            t << "--></script>" << endl;
-            t << "<div class=\"SRStatus\" id=\"Searching\">" 
-              << theTranslator->trSearching() << "</div>" << endl;
-            t << "<div class=\"SRStatus\" id=\"NoMatches\">"
-              << theTranslator->trNoMatches() << "</div>" << endl;
-
-            t << "<script type=\"text/javascript\"><!--" << endl;
-            t << "document.getElementById(\"Loading\").style.display=\"none\";" << endl;
-            t << "document.getElementById(\"NoMatches\").style.display=\"none\";" << endl;
-            t << "var searchResults = new SearchResults(\"searchResults\");" << endl;
-            t << "searchResults.Search();" << endl;
-            t << "--></script>" << endl;
-            t << "</div>" << endl; // SRIndex
-            t << "</body>" << endl;
-            t << "</html>" << endl;
+            dispName = ((GroupDef*)d)->groupTitle();
           }
-          FTextStream ti(&dataOutFile);
-
-          ti << "var searchData=" << endl;
-          // format
-          // searchData[] = array of items
-          // searchData[x][0] = id
-          // searchData[x][1] = [ name + child1 + child2 + .. ]
-          // searchData[x][1][0] = name as shown
-          // searchData[x][1][y+1] = info for child y
-          // searchData[x][1][y+1][0] = url
-          // searchData[x][1][y+1][1] = 1 => target="_parent"
-          // searchData[x][1][y+1][2] = scope
-
-          ti << "[" << endl;
-          bool firstEntry=TRUE;
-
-          SDict<QList<Definition> >::Iterator li(g_searchIndexSymbols[i][p]);
-          QList<Definition> *dl;
-          int itemCount=0;
-          for (li.toFirst();(dl=li.current());++li)
+          else if (d->definitionType()==Definition::TypePage)
           {
-            Definition *d = dl->first();
-            QCString id = d->localName();
+            dispName = ((PageDef*)d)->title();
+          }
+          ti << "  ['" << searchId(dispName) << "',['" 
+            << convertToXML(dispName) << "',[";
 
-            if (!firstEntry)
+          if (dl->count()==1) // item with a unique name
+          {
+            MemberDef  *md   = 0;
+            bool isMemberDef = d->definitionType()==Definition::TypeMember;
+            if (isMemberDef) md = (MemberDef*)d;
+            QCString anchor = d->anchor();
+
+            ti << "'" << externalRef("../",d->getReference(),TRUE)
+              << d->getOutputFileBase() << Doxygen::htmlFileExtension;
+            if (!anchor.isEmpty())
             {
-              ti << "," << endl;
+              ti << "#" << anchor;
             }
-            firstEntry=FALSE;
+            ti << "',";
 
-            QCString dispName = d->localName();
-            if (d->definitionType()==Definition::TypeGroup)
+            static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
+            if (!extLinksInWindow || d->getReference().isEmpty())
             {
-              dispName = ((GroupDef*)d)->groupTitle();
+              ti << "1,";
             }
-            else if (d->definitionType()==Definition::TypePage)
+            else
             {
-              dispName = ((PageDef*)d)->title();
+              ti << "0,";
             }
-            ti << "  ['" << searchId(dispName) << "',['" 
-               << convertToXML(dispName) << "',[";
 
-            if (dl->count()==1) // item with a unique name
+            if (d->getOuterScope()!=Doxygen::globalScope)
+            {
+              ti << "'" << convertToXML(d->getOuterScope()->name()) << "'";
+            }
+            else if (md)
+            {
+              FileDef *fd = md->getBodyDef();
+              if (fd==0) fd = md->getFileDef();
+              if (fd)
+              {
+                ti << "'" << convertToXML(fd->localName()) << "'";
+              }
+            }
+            else
+            {
+              ti << "''";
+            }
+            ti << "]]";
+          }
+          else // multiple items with the same name
+          {
+            QListIterator<Definition> di(*dl);
+            bool overloadedFunction = FALSE;
+            Definition *prevScope = 0;
+            int childCount=0;
+            for (di.toFirst();(d=di.current());)
             {
-              MemberDef  *md   = 0;
+              ++di;
+              Definition *scope     = d->getOuterScope();
+              Definition *next      = di.current();
+              Definition *nextScope = 0;
+              MemberDef  *md        = 0;
               bool isMemberDef = d->definitionType()==Definition::TypeMember;
               if (isMemberDef) md = (MemberDef*)d;
+              if (next) nextScope = next->getOuterScope();
               QCString anchor = d->anchor();
 
+              if (childCount>0)
+              {
+                ti << "],[";
+              }
               ti << "'" << externalRef("../",d->getReference(),TRUE)
-                 << d->getOutputFileBase() << Doxygen::htmlFileExtension;
+                << d->getOutputFileBase() << Doxygen::htmlFileExtension;
               if (!anchor.isEmpty())
               {
                 ti << "#" << anchor;
@@ -1110,147 +1181,87 @@ void writeJavascriptSearchIndex()
               {
                 ti << "0,";
               }
-
-              if (d->getOuterScope()!=Doxygen::globalScope)
+              bool found=FALSE;
+              overloadedFunction = ((prevScope!=0 && scope==prevScope) ||
+                  (scope && scope==nextScope)
+                  ) && md && 
+                (md->isFunction() || md->isSlot());
+              QCString prefix;
+              if (md) prefix=convertToXML(md->localName());
+              if (overloadedFunction) // overloaded member function
               {
-                ti << "'" << convertToXML(d->getOuterScope()->name()) << "'";
+                prefix+=convertToXML(md->argsString()); 
+                // show argument list to disambiguate overloaded functions
               }
-              else if (md)
+              else if (md) // unique member function
               {
-                FileDef *fd = md->getBodyDef();
-                if (fd==0) fd = md->getFileDef();
-                if (fd)
-                {
-                  ti << "'" << convertToXML(fd->localName()) << "'";
-                }
+                prefix+="()"; // only to show it is a function
               }
-              else
+              QCString name;
+              if (d->definitionType()==Definition::TypeClass)
               {
-                ti << "''";
+                name = convertToXML(((ClassDef*)d)->displayName());
+                found = TRUE;
               }
-              ti << "]]";
-            }
-            else // multiple items with the same name
-            {
-              QListIterator<Definition> di(*dl);
-              bool overloadedFunction = FALSE;
-              Definition *prevScope = 0;
-              int childCount=0;
-              for (di.toFirst();(d=di.current());)
+              else if (d->definitionType()==Definition::TypeNamespace)
               {
-                ++di;
-                Definition *scope     = d->getOuterScope();
-                Definition *next      = di.current();
-                Definition *nextScope = 0;
-                MemberDef  *md        = 0;
-                bool isMemberDef = d->definitionType()==Definition::TypeMember;
-                if (isMemberDef) md = (MemberDef*)d;
-                if (next) nextScope = next->getOuterScope();
-                QCString anchor = d->anchor();
-
-                if (childCount>0)
-                {
-                  ti << "],[";
-                }
-                ti << "'" << externalRef("../",d->getReference(),TRUE)
-                   << d->getOutputFileBase() << Doxygen::htmlFileExtension;
-                if (!anchor.isEmpty())
-                {
-                  ti << "#" << anchor;
-                }
-                ti << "',";
-
-                static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
-                if (!extLinksInWindow || d->getReference().isEmpty())
-                {
-                  ti << "1,";
-                }
-                else
-                {
-                  ti << "0,";
-                }
-                bool found=FALSE;
-                overloadedFunction = ((prevScope!=0 && scope==prevScope) ||
-                                      (scope && scope==nextScope)
-                                     ) && md && 
-                                     (md->isFunction() || md->isSlot());
-                QCString prefix;
-                if (md) prefix=convertToXML(md->localName());
-                if (overloadedFunction) // overloaded member function
-                {
-                  prefix+=convertToXML(md->argsString()); 
-                  // show argument list to disambiguate overloaded functions
-                }
-                else if (md) // unique member function
-                {
-                  prefix+="()"; // only to show it is a function
-                }
-                QCString name;
-                if (d->definitionType()==Definition::TypeClass)
-                {
-                  name = convertToXML(((ClassDef*)d)->displayName());
-                  found = TRUE;
-                }
-                else if (d->definitionType()==Definition::TypeNamespace)
-                {
-                  name = convertToXML(((NamespaceDef*)d)->displayName());
-                  found = TRUE;
-                }
-                else if (scope==0 || scope==Doxygen::globalScope) // in global scope
+                name = convertToXML(((NamespaceDef*)d)->displayName());
+                found = TRUE;
+              }
+              else if (scope==0 || scope==Doxygen::globalScope) // in global scope
+              {
+                if (md)
                 {
-                  if (md)
+                  FileDef *fd = md->getBodyDef();
+                  if (fd==0) fd = md->getFileDef();
+                  if (fd)
                   {
-                    FileDef *fd = md->getBodyDef();
-                    if (fd==0) fd = md->getFileDef();
-                    if (fd)
-                    {
-                      if (!prefix.isEmpty()) prefix+=":&#160;";
-                      name = prefix + convertToXML(fd->localName());
-                      found = TRUE;
-                    }
+                    if (!prefix.isEmpty()) prefix+=":&#160;";
+                    name = prefix + convertToXML(fd->localName());
+                    found = TRUE;
                   }
                 }
-                else if (md && (md->getClassDef() || md->getNamespaceDef())) 
-                  // member in class or namespace scope
-                {
-                  SrcLangExt lang = md->getLanguage();
-                  name = convertToXML(d->getOuterScope()->qualifiedName()) 
-                       + getLanguageSpecificSeparator(lang) + prefix;
-                  found = TRUE;
-                }
-                else if (scope) // some thing else? -> show scope
-                {
-                  name = prefix + convertToXML(scope->name());
-                  found = TRUE;
-                }
-                if (!found) // fallback
-                {
-                  name = prefix + "("+theTranslator->trGlobalNamespace()+")";
-                }
-
-                ti << "'" << name << "'";
-
-                prevScope = scope;
-                childCount++;
+              }
+              else if (md && (md->getClassDef() || md->getNamespaceDef())) 
+                // member in class or namespace scope
+              {
+                SrcLangExt lang = md->getLanguage();
+                name = convertToXML(d->getOuterScope()->qualifiedName()) 
+                  + getLanguageSpecificSeparator(lang) + prefix;
+                found = TRUE;
+              }
+              else if (scope) // some thing else? -> show scope
+              {
+                name = prefix + convertToXML(scope->name());
+                found = TRUE;
+              }
+              if (!found) // fallback
+              {
+                name = prefix + "("+theTranslator->trGlobalNamespace()+")";
               }
 
-              ti << "]]";
-            }
-            ti << "]";
-            itemCount++;
-          }
-          if (!firstEntry)
-          {
-            ti << endl;
-          }
+              ti << "'" << name << "'";
 
-          ti << "];" << endl;
+              prevScope = scope;
+              childCount++;
+            }
 
+            ti << "]]";
+          }
+          ti << "]";
+          itemCount++;
         }
-        else
+        if (!firstEntry)
         {
-          err("Failed to open file '%s' for writing...\n",fileName.data());
+          ti << endl;
         }
+
+        ti << "];" << endl;
+
+      }
+      else
+      {
+        err("Failed to open file '%s' for writing...\n",fileName.data());
       }
     }
   }
@@ -1275,9 +1286,12 @@ void writeJavascriptSearchIndex()
         {
           if (!first) t << "," << endl;
           t << "  " << j << ": \"";
-          for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
+
+          SIntDict<SearchIndexList>::Iterator it(g_searchIndexSymbols[i]);
+          SearchIndexList *sl;
+          for (it.toFirst();(sl=it.current());++it) // for each letter
           {
-            t << (g_searchIndexSymbols[i][p].count()>0 ? "1" : "0");
+            t << QString( QChar( sl->letter() ) ).utf8();
           }
           t << "\"";
           first=FALSE;
diff --git a/src/settings.py b/src/settings.py
new file mode 100755 (executable)
index 0000000..af24e7b
--- /dev/null
@@ -0,0 +1,28 @@
+# 
+
+import sys
+
+f_sqlite3 = sys.argv[1]
+f_libclang = sys.argv[2]
+
+f1 = open('../src/settings.h','w')
+f1.write("#ifndef SETTINGS_H\n")
+f1.write("#define SETTINGS_H\n")
+f1.write("\n")
+if (f_sqlite3 != "NO"):
+  f1.write("#define USE_SQLITE3  1\n")
+else:
+  f1.write("#define USE_SQLITE3  0\n")
+
+if (f_libclang != "NO"):
+  f1.write("#define USE_LIBCLANG 1\n")
+else:
+  f1.write("#define USE_LIBCLANG 0\n")
+
+f1.write("\n")
+f1.write("#define IS_SUPPORTED(x) \\\n")
+f1.write("  ((USE_SQLITE3  && strcmp(\"USE_SQLITE3\",(x))==0)  || \\\n")
+f1.write("   (USE_LIBCLANG && strcmp(\"USE_LIBCLANG\",(x))==0) || \\\n")
+f1.write("  0)\n")
+f1.write("\n")
+f1.write("#endif\n")
index 14a221b..e111075 100644 (file)
@@ -108,7 +108,7 @@ class SDict
      *  \param caseSensitive indicated whether the keys should be sorted
      *         in a case sensitive way.
      */
-    SDict(int size,bool caseSensitive=TRUE) : m_sizeIndex(0)
+    SDict(int size=17,bool caseSensitive=TRUE) : m_sizeIndex(0)
     {
       m_list = new SList<T>(this);
 #if AUTORESIZE
@@ -454,7 +454,7 @@ class SIntDict
      *  \param size The size of the dictionary. Should be a prime number for
      *              best distribution of elements.
      */
-    SIntDict(int size) : m_sizeIndex(0)
+    SIntDict(int size=17) : m_sizeIndex(0)
     {
       m_list = new SIntList<T>(this);
 #if AUTORESIZE
@@ -636,7 +636,7 @@ class SIntDict
         {
           return m_li->current();
         }
-        
+
         /*! Moves the iterator to the next element.
          *  \return the new "current" element, or zero if the iterator was
          *          already pointing at the last element.
@@ -659,6 +659,76 @@ class SIntDict
         QListIterator<T> *m_li;
     };
 
+    class IteratorDict;         // first forward declare
+    friend class IteratorDict;  // then make it a friend
+    /*! Simple iterator for SDict. It iterates over the dictionary elements
+     *  in an unsorted way, but does provide information about the element's key.
+     */
+    class IteratorDict
+    {
+      public:
+        /*! Create an iterator given the dictionary. */
+        IteratorDict(const SIntDict<T> &dict)
+        {
+          m_di = new QIntDictIterator<T>(*dict.m_dict);
+        }
+
+        /*! Destroys the dictionary */
+        virtual ~IteratorDict()
+        {
+          delete m_di;
+        }
+
+        /*! Set the iterator to the first element in the list. 
+         *  \return The first compound, or zero if the list was empty. 
+         */
+        T *toFirst() const
+        {
+          return m_di->toFirst();
+        }
+
+        /*! Set the iterator to the last element in the list. 
+         *  \return The first compound, or zero if the list was empty. 
+         */
+        T *toLast() const
+        {
+          return m_di->toLast();
+        }
+
+        /*! Returns the current compound */
+        T *current() const
+        {
+          return m_di->current();
+        }
+        
+        /*! Returns the current key */
+        int currentKey() const
+        {
+          return m_di->currentKey();
+        }
+        
+        /*! Moves the iterator to the next element.
+         *  \return the new "current" element, or zero if the iterator was
+         *          already pointing at the last element.
+         */
+        T *operator++()
+        {
+          return m_di->operator++();
+        }
+
+        /*! Moves the iterator to the previous element.
+         *  \return the new "current" element, or zero if the iterator was
+         *          already pointing at the first element.
+         */
+        T *operator--()
+        {
+          return m_di->operator--();
+        }
+
+      private:
+        QDictIterator<T> *m_di;
+    };
+
 };
 
 #endif
diff --git a/src/svgpan_js.h b/src/svgpan_js.h
deleted file mode 100644 (file)
index ac996da..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-"/**\n"
-" * The code below is based on SVGPan Library 1.2 and was modified for doxygen\n"
-" * to support both zooming and panning via the mouse and via embedded bottons.\n"
-" *\n"
-" * This code is licensed under the following BSD license:\n"
-" *\n"
-" * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.\n"
-" * \n"
-" * Redistribution and use in source and binary forms, with or without modification, are\n"
-" * permitted provided that the following conditions are met:\n"
-" * \n"
-" *    1. Redistributions of source code must retain the above copyright notice, this list of\n"
-" *       conditions and the following disclaimer.\n"
-" * \n"
-" *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n"
-" *       of conditions and the following disclaimer in the documentation and/or other materials\n"
-" *       provided with the distribution.\n"
-" * \n"
-" * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED\n"
-" * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n"
-" * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR\n"
-" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
-" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n"
-" * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n"
-" * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
-" * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n"
-" * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
-" * \n"
-" * The views and conclusions contained in the software and documentation are those of the\n"
-" * authors and should not be interpreted as representing official policies, either expressed\n"
-" * or implied, of Andrea Leofreddi.\n"
-" */\n"
-"\n"
-"var root = document.documentElement;\n"
-"var state = 'none';\n"
-"var stateOrigin;\n"
-"var stateTf = root.createSVGMatrix();\n"
-"var cursorGrab = ' url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII=\"), move';\n"
-"var zoomSteps = 10;\n"
-"var zoomInFactor;\n"
-"var zoomOutFactor;\n"
-"var windowWidth;\n"
-"var windowHeight;\n"
-"var svgDoc;\n"
-"var minZoom;\n"
-"var maxZoom;\n"
-"if (!window) window=this;\n"
-"\n"
-"/**\n"
-" * Show the graph in the middle of the view, scaled to fit \n"
-" */\n"
-"function show()\n"
-"{\n"
-"  if (window.innerHeight) // Firefox\n"
-"  {\n"
-"    windowWidth = window.innerWidth;\n"
-"    windowHeight = window.innerHeight;\n"
-"  }\n"
-"  else if (document.documentElement.clientWidth) // Chrome/Safari\n"
-"  {\n"
-"    windowWidth = document.documentElement.clientWidth\n"
-"    windowHeight = document.documentElement.clientHeight\n"
-"  }\n"
-"  if (!windowWidth || !windowHeight) // failsafe\n"
-"  {\n"
-"    windowWidth = 800;\n"
-"    windowHeight = 600;\n"
-"  }\n"
-"  minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);\n"
-"  maxZoom = minZoom+1.5;\n"
-"  zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);\n"
-"  zoomOutFactor = 1.0/zoomInFactor;\n"
-"\n"
-"  var g = svgDoc.getElementById('viewport');\n"
-"  try\n"
-"  {\n"
-"    var bb = g.getBBox(); // this can throw an exception if css { display: none }\n"
-"    var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);\n"
-"    var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);\n"
-"    var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';\n"
-"    g.setAttribute('transform',a);\n"
-"  }\n"
-"  catch(e) {}\n"
-"}\n"
-"\n"
-"/**\n"
-" * Register handlers\n"
-" */\n"
-"function init(evt) \n"
-"{\n"
-"  svgDoc = evt.target.ownerDocument;\n"
-"  if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections\n"
-"  {\n"
-"    top.window.registerShow(sectionId,show);\n"
-"  }\n"
-"  show();\n"
-"\n"
-"  setAttributes(root, {\n"
-"     \"onmousedown\" : \"handleMouseDown(evt)\",\n"
-"     \"onmousemove\" : \"handleMouseMove(evt)\",\n"
-"     \"onmouseup\"   : \"handleMouseUp(evt)\"\n"
-"  });\n"
-"\n"
-"  if (window.addEventListener)\n"
-"  {\n"
-"    if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 || \n"
-"        navigator.userAgent.toLowerCase().indexOf(\"opera\") >= 0 || \n"
-"        navigator.appVersion.indexOf(\"MSIE\") != -1)\n"
-"    {\n"
-"      window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9\n"
-"    }\n"
-"    else\n"
-"    {\n"
-"      window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others\n"
-"    }\n"
-"  }\n"
-"}\n"
-"\n"
-"window.onresize=function()\n"
-"{\n"
-"  if (svgDoc) { show(); }\n"
-"}\n"
-"\n"
-"/**\n"
-" * Instance an SVGPoint object with given event coordinates.\n"
-" */\n"
-"function getEventPoint(evt) \n"
-"{\n"
-"  var p = root.createSVGPoint();\n"
-"  p.x = evt.clientX;\n"
-"  p.y = evt.clientY;\n"
-"  return p;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Sets the current transform matrix of an element.\n"
-" */\n"
-"function setCTM(element, matrix) \n"
-"{\n"
-"  var s = \"matrix(\" + matrix.a + \",\" + matrix.b + \",\" + matrix.c + \",\" + matrix.d + \",\" + matrix.e + \",\" + matrix.f + \")\";\n"
-"  element.setAttribute(\"transform\", s);\n"
-"}\n"
-"\n"
-"/**\n"
-" * Sets attributes of an element.\n"
-" */\n"
-"function setAttributes(element, attributes)\n"
-"{\n"
-"  for (i in attributes)\n"
-"    element.setAttributeNS(null, i, attributes[i]);\n"
-"}\n"
-"\n"
-"function doZoom(g,point,zoomFactor)\n"
-"{\n"
-"  var p = point.matrixTransform(g.getCTM().inverse());\n"
-"  var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);\n"
-"  var n = g.getCTM().multiply(k);\n"
-"  var s = Math.max(n.a,n.d);\n"
-"  if      (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);\n"
-"  else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);\n"
-"  setCTM(g, n);\n"
-"  stateTf = stateTf.multiply(n.inverse());\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse move event.\n"
-" */\n"
-"function handleMouseWheel(evt) \n"
-"{\n"
-"  if (!evt) evt = window.evt;\n"
-"  if (!evt.shiftKey) return; // only zoom when shift is pressed\n"
-"  if (evt.preventDefault) evt.preventDefault();\n"
-"  evt.returnValue = false;\n"
-"\n"
-"  if (state!='pan')\n"
-"  {\n"
-"    var delta;\n"
-"    if (evt.wheelDelta)\n"
-"    {\n"
-"      delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari\n"
-"    }\n"
-"    else\n"
-"    {\n"
-"      delta = evt.detail / -180; // Mozilla\n"
-"    }\n"
-"    var svgDoc = evt.target.ownerDocument;\n"
-"    var g = svgDoc.getElementById(\"viewport\");\n"
-"    var p = getEventPoint(evt);\n"
-"    doZoom(g,p,1+delta);\n"
-"  }\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse move event.\n"
-" */\n"
-"function handleMouseMove(evt) \n"
-"{\n"
-"  if(evt.preventDefault)\n"
-"    evt.preventDefault();\n"
-"\n"
-"  evt.returnValue = false;\n"
-"\n"
-"  var g = svgDoc.getElementById(\"viewport\");\n"
-"\n"
-"  if (state == 'pan') \n"
-"  {\n"
-"    // Pan mode\n"
-"    var p = getEventPoint(evt).matrixTransform(stateTf);\n"
-"    setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));\n"
-"  } \n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle click event.\n"
-" */\n"
-"function handleMouseDown(evt) \n"
-"{\n"
-"  if(evt.preventDefault)\n"
-"    evt.preventDefault();\n"
-"  evt.returnValue = false;\n"
-"  var g = svgDoc.getElementById(\"viewport\");\n"
-"  state = 'pan';\n"
-"  stateTf = g.getCTM().inverse();\n"
-"  stateOrigin = getEventPoint(evt).matrixTransform(stateTf);\n"
-"  g.style.cursor = cursorGrab;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse button release event.\n"
-" */\n"
-"function handleMouseUp(evt) \n"
-"{\n"
-"  if (evt.preventDefault) evt.preventDefault();\n"
-"  evt.returnValue = false;\n"
-"  var g = svgDoc.getElementById(\"viewport\");\n"
-"  g.style.cursor = \"default\";\n"
-"  // Quit pan mode\n"
-"  state = '';\n"
-"}\n"
-"\n"
-"/**\n"
-" * Dumps a matrix to a string (useful for debug).\n"
-" */\n"
-"function dumpMatrix(matrix) \n"
-"{\n"
-"  var s = \"[ \" + matrix.a + \", \" + matrix.c + \", \" + matrix.e + \"\\n  \" + matrix.b + \", \" + matrix.d + \", \" + matrix.f + \"\\n  0, 0, 1 ]\";\n"
-"  return s;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handler for pan buttons\n"
-" */\n"
-"function handlePan(x,y)\n"
-"{\n"
-"  var g = svgDoc.getElementById(\"viewport\");\n"
-"  setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle reset button\n"
-" */\n"
-"function handleReset()\n"
-"{\n"
-"  show();\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handler for zoom buttons\n"
-" */\n"
-"function handleZoom(evt,direction)\n"
-"{\n"
-"  var g = svgDoc.getElementById(\"viewport\");\n"
-"  var factor = direction=='in' ? zoomInFactor : zoomOutFactor;\n"
-"  var m = g.getCTM();\n"
-"  var p = root.createSVGPoint();\n"
-"  p.x = windowWidth/2;\n"
-"  p.y = windowHeight/2;\n"
-"  doZoom(g,p,factor);\n"
-"}\n"
-"\n"
-"function serializeXmlNode(xmlNode) \n"
-"{\n"
-"  if (typeof window.XMLSerializer != \"undefined\") {\n"
-"    return (new window.XMLSerializer()).serializeToString(xmlNode);\n"
-"  } else if (typeof xmlNode.xml != \"undefined\") {\n"
-"    return xmlNode.xml;\n"
-"  }\n"
-"  return \"\";\n"
-"}\n"
-"\n"
-"/** \n"
-" * Handler for print function\n"
-" */\n"
-"function handlePrint(evt)\n"
-"{\n"
-"  evt.returnValue = false;\n"
-"  var g = svgDoc.getElementById(\"graph\");\n"
-"  var xs = serializeXmlNode(g);\n"
-"  try {\n"
-"    var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+\n"
-"                        ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');\n"
-"    var d = w.document;\n"
-"    d.write('<html xmlns=\"http://www.w3.org/1999/xhtml\" '+\n"
-"            'xmlns:svg=\"http://www.w3.org/2000/svg\" '+\n"
-"            'xmlns:xlink=\"http://www.w3.org/1999/xlink\">');\n"
-"    d.write('<head><title>Print SVG</title></head>');\n"
-"    d.write('<body style=\"margin: 0px; padding: 0px;\" onload=\"window.print();\">');\n"
-"    d.write('<div id=\"svg\" style=\"width:'+windowWidth+'px; height:'+windowHeight+'px;\">'+xs+'</div>');\n"
-"    d.write('</body>');\n"
-"    d.write('</html>');\n"
-"    d.close();\n"
-"  } catch(e) {\n"
-"    alert('Failed to open popup window needed for printing!\\n'+e.message);\n"
-"  }\n"
-"}\n"
-"\n"
-"\n"
-"\n"
-"\n"
index 7cd93b9..02627b4 100644 (file)
@@ -49,7 +49,8 @@ class TclLanguageScanner : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index 2129bf0..1fd20cd 100644 (file)
@@ -127,7 +127,7 @@ int TclFindElement(
     goto done;
   }
 
-  if (*p == '{') 
+  if (*p == '{')   /* } to keep vi happy */
   {
     openBraces = 1;
     p++;
@@ -2503,7 +2503,7 @@ static void tcl_parse(const QCString ns, const QCString cls)
   tcl.ns.insert("::",myEntry);
   tcl.entry_current = tcl_entry_new();
 
-  tclscanYYrestart( tclscanYYin );
+  tclscannerYYrestart( tclscannerYYin );
   BEGIN( TOP );
   yylineno=1;
   myScan = new tcl_scan;
@@ -2518,7 +2518,7 @@ static void tcl_parse(const QCString ns, const QCString cls)
   tcl.entry_inside = tcl.entry_file;
   myScan->entry_scan = tcl.entry_inside;
   tcl.scan.insert(0,myScan);
-  tclscanYYlex();
+  tclscannerYYlex();
   tcl.scan.clear();
   tcl.ns.clear();
   tcl.cl.clear();
@@ -2541,6 +2541,7 @@ tcl_inf("%s\n",fileName);
 
   tcl.input_string = input;
   if (tcl.input_string.length()<1) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
 
   msg("Parsing %s...\n",fileName);
   groupEnterFile(fileName,yylineno);
@@ -2554,6 +2555,7 @@ tcl_inf("%s\n",fileName);
   groupLeaveFile(tcl.file_name,yylineno);
   root->program.resize(0);
   myFile.close();
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 //! Parse file and codify.
@@ -2569,7 +2571,8 @@ void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
                    bool inlineFragment,
                    MemberDef *memberDef,
                    bool showLineNumbers,
-                   Definition *searchCtx
+                   Definition *searchCtx,
+                   bool collectXRefs
                   )
 {
   (void)scopeName;
@@ -2579,8 +2582,10 @@ void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
   (void)endLine;
   (void)inlineFragment;
   (void)searchCtx;
+  (void)collectXRefs;
 
   if (input.length()<1) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fileDef ? fileDef->fileName().data(): NULL);
   tcl.input_string = input;
 
   QCString myNs="";
@@ -2653,6 +2658,7 @@ tcl_inf("%s (%d,%d) %d %d\n",myStr.ascii(),startLine,endLine,isExampleBlock,inli
   tcl.cl.clear();
   tcl.fn.clear();
   tcl.entry.clear();
+  printlex(yy_flex_debug, FALSE, __FILE__, fileDef ? fileDef->fileName().data(): NULL);
 }
 
 bool TclLanguageScanner::needsPreprocessing(const QCString &extension)
diff --git a/src/template.cpp b/src/template.cpp
new file mode 100644 (file)
index 0000000..8144afd
--- /dev/null
@@ -0,0 +1,3407 @@
+#include "template.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <qlist.h>
+#include <qarray.h>
+#include <qdict.h>
+#include <qstrlist.h>
+#include <qvaluelist.h>
+#include <qstack.h>
+#include <qfile.h>
+#include <qregexp.h>
+
+#include "sortdict.h"
+#include "ftextstream.h"
+#include "message.h"
+#include "util.h"
+
+#define ENABLE_TRACING 0
+
+#if ENABLE_TRACING
+#define TRACE(x) printf x
+#else
+#define TRACE(x)
+#endif
+
+class TemplateToken;
+
+//-------------------------------------------------------------------
+
+static QValueList<QCString> split(const QCString &str,const QCString &sep,bool allowEmptyEntries=FALSE,bool cleanup=TRUE)
+{
+  QValueList<QCString> lst;
+
+  int j = 0;
+  int i = str.find( sep, j );
+
+  while (i!=-1)
+  {
+    if ( str.mid(j,i-j).length() > 0 )
+    {
+      if (cleanup)
+      {
+        lst.append(str.mid(j,i-j).stripWhiteSpace());
+      }
+      else
+      {
+        lst.append(str.mid(j,i-j));
+      }
+    }
+    else if (allowEmptyEntries)
+    {
+      lst.append("");
+    }
+    j = i + sep.length();
+    i = str.find(sep,j);
+  }
+
+  int l = str.length() - 1;
+  if (str.mid(j,l-j+1).length()>0)
+  {
+    if (cleanup)
+    {
+      lst.append(str.mid(j,l-j+1).stripWhiteSpace());
+    }
+    else
+    {
+      lst.append(str.mid(j,l-j+1));
+    }
+  }
+  else if (allowEmptyEntries)
+  {
+    lst.append("");
+  }
+
+  return lst;
+}
+
+//----------------------------------------------------------------------------
+
+#if ENABLE_TRACING
+static QCString replace(const char *s,char csrc,char cdst)
+{
+  QCString result = s;
+  for (char *p=result.data();*p;p++)
+  {
+    if (*p==csrc) *p=cdst;
+  }
+  return result;
+}
+#endif
+
+//- TemplateVariant implementation -------------------------------------------
+
+/** @brief Private data of a template variant object */
+class TemplateVariant::Private
+{
+  public:
+    Private() : raw(FALSE) {}
+    Type                type;
+    int                 intVal;
+    QCString            strVal;
+    bool                boolVal;
+    const TemplateStructIntf *strukt;
+    const TemplateListIntf   *list;
+    Delegate            delegate;
+    bool                raw;
+};
+
+TemplateVariant::TemplateVariant()
+{
+  p = new Private;
+  p->type=None;
+}
+
+TemplateVariant::TemplateVariant(bool b)
+{
+  p = new Private;
+  p->type = Bool;
+  p->boolVal = b;
+}
+
+TemplateVariant::TemplateVariant(int v)
+{
+  p = new Private;
+  p->type = Integer;
+  p->intVal = v;
+}
+
+TemplateVariant::TemplateVariant(const char *s,bool raw)
+{
+  p = new Private;
+  p->type = String;
+  p->strVal = s;
+  p->raw = raw;
+}
+
+TemplateVariant::TemplateVariant(const QCString &s,bool raw)
+{
+  p = new Private;
+  p->type = String;
+  p->strVal = s;
+  p->raw = raw;
+}
+
+TemplateVariant::TemplateVariant(const TemplateStructIntf *s)
+{
+  p = new Private;
+  p->type = Struct;
+  p->strukt = s; }
+
+TemplateVariant::TemplateVariant(const TemplateListIntf *l)
+{
+  p = new Private;
+  p->type = List;
+  p->list = l;
+}
+
+TemplateVariant::TemplateVariant(const TemplateVariant::Delegate &delegate)
+{
+  p = new Private;
+  p->type = Function;
+  p->delegate = delegate;
+}
+
+TemplateVariant::~TemplateVariant()
+{
+  delete p;
+}
+
+TemplateVariant::TemplateVariant(const TemplateVariant &v)
+{
+  p = new Private;
+  p->type    = v.p->type;
+  p->raw     = v.p->raw;
+  switch (p->type)
+  {
+    case None: break;
+    case Bool:     p->boolVal = v.p->boolVal; break;
+    case Integer:  p->intVal  = v.p->intVal;  break;
+    case String:   p->strVal  = v.p->strVal;  break;
+    case Struct:   p->strukt  = v.p->strukt;  break;
+    case List:     p->list    = v.p->list;    break;
+    case Function: p->delegate= v.p->delegate;break;
+  }
+}
+
+TemplateVariant &TemplateVariant::operator=(const TemplateVariant &v)
+{
+  p->type    = v.p->type;
+  p->raw     = v.p->raw;
+  switch (p->type)
+  {
+    case None: break;
+    case Bool:     p->boolVal = v.p->boolVal; break;
+    case Integer:  p->intVal  = v.p->intVal;  break;
+    case String:   p->strVal  = v.p->strVal;  break;
+    case Struct:   p->strukt  = v.p->strukt;  break;
+    case List:     p->list    = v.p->list;    break;
+    case Function: p->delegate= v.p->delegate;break;
+  }
+  return *this;
+}
+
+QCString TemplateVariant::toString() const
+{
+  QCString result;
+  switch (p->type)
+  {
+    case None:
+      break;
+    case Bool:
+      result=p->boolVal ? "true" : "false";
+      break;
+    case Integer:
+      result=QCString().setNum(p->intVal);
+      break;
+    case String:
+      result=p->strVal;
+      break;
+    case Struct:
+      result="[struct]";
+      break;
+    case List:
+      result="[list]";
+      break;
+    case Function:
+      result="[function]";
+      break;
+  }
+  return result;
+}
+
+bool TemplateVariant::toBool() const
+{
+  bool result=FALSE;
+  switch (p->type)
+  {
+    case None:
+      break;
+    case Bool:
+      result = p->boolVal;
+      break;
+    case Integer:
+      result = p->intVal!=0;
+      break;
+    case String:
+      result = !p->strVal.isEmpty(); // && p->strVal!="false" && p->strVal!="0";
+      break;
+    case Struct:
+      result = TRUE;
+      break;
+    case List:
+      result = p->list->count()!=0;
+      break;
+    case Function:
+      result = FALSE;
+      break;
+  }
+  return result;
+}
+
+int TemplateVariant::toInt() const
+{
+  int result=0;
+  switch (p->type)
+  {
+    case None:
+      break;
+    case Bool:
+      result = p->boolVal ? 1 : 0;
+      break;
+    case Integer:
+      result = p->intVal;
+      break;
+    case String:
+      result = p->strVal.toInt();
+      break;
+    case Struct:
+      break;
+    case List:
+      result = p->list->count();
+      break;
+    case Function:
+      result = 0;
+      break;
+  }
+  return result;
+}
+
+const TemplateStructIntf *TemplateVariant::toStruct() const
+{
+  return p->type==Struct ? p->strukt : 0;
+}
+
+const TemplateListIntf *TemplateVariant::toList() const
+{
+  return p->type==List ? p->list : 0;
+}
+
+TemplateVariant TemplateVariant::call(const QValueList<TemplateVariant> &args)
+{
+  if (p->type==Function) return p->delegate(args);
+  return TemplateVariant();
+}
+
+bool TemplateVariant::operator==(TemplateVariant &other)
+{
+  if (p->type==None)
+  {
+    return FALSE;
+  }
+  if (p->type==TemplateVariant::List && other.p->type==TemplateVariant::List)
+  {
+    return p->list==other.p->list; // TODO: improve me
+  }
+  else if (p->type==TemplateVariant::Struct && other.p->type==TemplateVariant::Struct)
+  {
+    return p->strukt==other.p->strukt; // TODO: improve me
+  }
+  else
+  {
+    return toString()==other.toString();
+  }
+}
+
+TemplateVariant::Type TemplateVariant::type() const
+{
+  return p->type;
+}
+
+bool TemplateVariant::isValid() const
+{
+  return p->type!=None;
+}
+
+void TemplateVariant::setRaw(bool b)
+{
+  p->raw = b;
+}
+
+bool TemplateVariant::raw() const
+{
+  return p->raw;
+}
+
+//- Template struct implementation --------------------------------------------
+
+
+/** @brief Private data of a template struct object */
+class TemplateStruct::Private
+{
+  public:
+    Private() : fields(17)
+    { fields.setAutoDelete(TRUE); }
+    QDict<TemplateVariant> fields;
+};
+
+TemplateStruct::TemplateStruct()
+{
+  p = new Private;
+}
+
+TemplateStruct::~TemplateStruct()
+{
+  delete p;
+}
+
+void TemplateStruct::set(const char *name,const TemplateVariant &v)
+{
+  TemplateVariant *pv = p->fields.find(name);
+  if (pv) // change existing field
+  {
+    *pv = v;
+  }
+  else // insert new field
+  {
+    p->fields.insert(name,new TemplateVariant(v));
+  }
+}
+
+TemplateVariant TemplateStruct::get(const char *name) const
+{
+  TemplateVariant *v = p->fields.find(name);
+  return v ? *v : TemplateVariant();
+}
+
+//- Template list implementation ----------------------------------------------
+
+
+/** @brief Private data of a template list object */
+class TemplateList::Private
+{
+  public:
+    Private() : index(-1) {}
+    QValueList<TemplateVariant> elems;
+    int index;
+};
+
+
+TemplateList::TemplateList()
+{
+  p = new Private;
+}
+
+TemplateList::~TemplateList()
+{
+  delete p;
+}
+
+int TemplateList::count() const
+{
+  return p->elems.count();
+}
+
+void TemplateList::append(const TemplateVariant &v)
+{
+  p->elems.append(v);
+}
+
+// iterator support
+class TemplateListConstIterator : public TemplateListIntf::ConstIterator
+{
+  public:
+    TemplateListConstIterator(const TemplateList &l) : m_list(l) { m_index=-1; }
+    virtual ~TemplateListConstIterator() {}
+    virtual void toFirst()
+    {
+      m_it = m_list.p->elems.begin();
+      m_index=0;
+    }
+    virtual void toLast()
+    {
+      m_it = m_list.p->elems.fromLast();
+      m_index=m_list.count()-1;
+    }
+    virtual void toNext()
+    {
+      if (m_it!=m_list.p->elems.end())
+      {
+        ++m_it;
+        ++m_index;
+      }
+    }
+    virtual void toPrev()
+    {
+      if (m_index>0)
+      {
+        --m_it;
+        --m_index;
+      }
+      else
+      {
+        m_index=-1;
+      }
+    }
+    virtual bool current(TemplateVariant &v) const
+    {
+      if (m_index<0 || m_it==m_list.p->elems.end())
+      {
+        v = TemplateVariant();
+        return FALSE;
+      }
+      else
+      {
+        v = *m_it;
+        return TRUE;
+      }
+    }
+  private:
+    const TemplateList &m_list;
+    QValueList<TemplateVariant>::ConstIterator m_it;
+    int m_index;
+};
+
+TemplateListIntf::ConstIterator *TemplateList::createIterator() const
+{
+  return new TemplateListConstIterator(*this);
+}
+
+TemplateVariant TemplateList::at(int index) const
+{
+  if (index>=0 && index<(int)p->elems.count())
+  {
+    return p->elems[index];
+  }
+  else
+  {
+    return TemplateVariant();
+  }
+}
+
+//- Operator types ------------------------------------------------------------
+
+/** @brief Class representing operators that can appear in template expressions */
+class Operator
+{
+  public:
+      /* Operator precedence (low to high)
+         or
+         and
+         not
+         in
+         ==, !=, <, >, <=, >=
+         |
+         :
+         ,
+       */
+    enum Type
+    {
+      Or, And, Not, In, Equal, NotEqual, Less, Greater, LessEqual,
+      GreaterEqual, Filter, Colon, Comma, Last
+    };
+
+    static const char *toString(Type op)
+    {
+      switch(op)
+      {
+        case Or:           return "or";
+        case And:          return "and";
+        case Not:          return "not";
+        case In:           return "in";
+        case Equal:        return "==";
+        case NotEqual:     return "!=";
+        case Less:         return "<";
+        case Greater:      return ">";
+        case LessEqual:    return "<=";
+        case GreaterEqual: return ">=";
+        case Filter:       return "|";
+        case Colon:        return ":";
+        case Comma:        return ",";
+        case Last:         return "?";
+      }
+      return "?";
+    }
+};
+
+//-----------------------------------------------------------------------------
+
+class TemplateNodeBlock;
+
+/** @brief Class holding stacks of blocks available in the context */
+class TemplateBlockContext
+{
+  public:
+    TemplateBlockContext();
+    TemplateNodeBlock *get(const QCString &name) const;
+    TemplateNodeBlock *pop(const QCString &name) const;
+    void add(TemplateNodeBlock *block);
+    void add(TemplateBlockContext *ctx);
+    void push(TemplateNodeBlock *block);
+    void clear();
+  private:
+    QDict< QList<TemplateNodeBlock> > m_blocks;
+};
+
+
+/** @brief Internal class representing the implementation of a template
+ *  context */
+class TemplateContextImpl : public TemplateContext
+{
+  public:
+    TemplateContextImpl();
+    virtual ~TemplateContextImpl();
+
+    // TemplateContext methods
+    void push();
+    void pop();
+    void set(const char *name,const TemplateVariant &v);
+    TemplateVariant get(const QCString &name) const;
+    const TemplateVariant *getRef(const QCString &name) const;
+    void setOutputDirectory(const QCString &dir)
+    { m_outputDir = dir; }
+    void setEscapeIntf(TemplateEscapeIntf *intf)
+    { m_escapeIntf = intf; }
+    void setSpacelessIntf(TemplateSpacelessIntf *intf)
+    { m_spacelessIntf = intf; }
+
+    // internal methods
+    TemplateBlockContext *blockContext();
+    TemplateVariant getPrimary(const QCString &name) const;
+    void setLocation(const QCString &templateName,int line)
+    { m_templateName=templateName; m_line=line; }
+    QCString templateName() const { return m_templateName; }
+    int line() const { return m_line; }
+    QCString outputDirectory() const { return m_outputDir; }
+    TemplateEscapeIntf *escapeIntf() const { return m_escapeIntf; }
+    TemplateSpacelessIntf *spacelessIntf() const { return m_spacelessIntf; }
+    void enableSpaceless(bool b) { m_spacelessEnabled=b; }
+    bool spacelessEnabled() const { return m_spacelessEnabled && m_spacelessIntf; }
+
+  private:
+    QCString m_templateName;
+    int m_line;
+    QCString m_outputDir;
+    QList< QDict<TemplateVariant> > m_contextStack;
+    TemplateBlockContext m_blockContext;
+    TemplateEscapeIntf *m_escapeIntf;
+    TemplateSpacelessIntf *m_spacelessIntf;
+    bool m_spacelessEnabled;
+};
+
+//-----------------------------------------------------------------------------
+
+/** @brief The implementation of the "add" filter */
+class FilterAdd
+{
+  public:
+    static int variantIntValue(const TemplateVariant &v,bool &isInt)
+    {
+      isInt = v.type()==TemplateVariant::Integer;
+      if (!isInt && v.type()==TemplateVariant::String)
+      {
+        return v.toString().toInt(&isInt);
+      }
+      return isInt ? v.toInt() : 0;
+    }
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
+    {
+      if (!v.isValid())
+      {
+        return arg;
+      }
+      bool lhsIsInt;
+      int  lhsValue = variantIntValue(v,lhsIsInt);
+      bool rhsIsInt;
+      int  rhsValue = variantIntValue(arg,rhsIsInt);
+      if (lhsIsInt && rhsIsInt)
+      {
+        return lhsValue+rhsValue;
+      }
+      else if (v.type()==TemplateVariant::String && arg.type()==TemplateVariant::String)
+      {
+        return TemplateVariant(v.toString() + arg.toString());
+      }
+      else
+      {
+        return v;
+      }
+    }
+};
+
+//-----------------------------------------------------------------------------
+
+/** @brief The implementation of the "prepend" filter */
+class FilterPrepend
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
+    {
+      if (v.type()==TemplateVariant::String && arg.type()==TemplateVariant::String)
+      {
+        return TemplateVariant(arg.toString() + v.toString());
+      }
+      else
+      {
+        return v;
+      }
+    }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "length" filter */
+class FilterLength
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+    {
+      if (!v.isValid())
+      {
+        return TemplateVariant();
+      }
+      if (v.type()==TemplateVariant::List)
+      {
+        return TemplateVariant(v.toList()->count());
+      }
+      else if (v.type()==TemplateVariant::String)
+      {
+        return TemplateVariant((int)v.toString().length());
+      }
+      else
+      {
+        return TemplateVariant();
+      }
+    }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "default" filter */
+class FilterDefault
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &arg)
+    {
+      if (!v.isValid())
+      {
+        return arg;
+      }
+      else if (v.type()==TemplateVariant::String && v.toString().isEmpty())
+      {
+        return arg;
+      }
+      else
+      {
+        return v;
+      }
+    }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "default" filter */
+class FilterStripPath
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+    {
+      if (!v.isValid() || v.type()!=TemplateVariant::String)
+      {
+        return v;
+      }
+      QCString result = v.toString();
+      int i=result.findRev('/');
+      if (i!=-1)
+      {
+        result=result.mid(i+1);
+      }
+      i=result.findRev('\\');
+      if (i!=-1)
+      {
+        result=result.mid(i+1);
+      }
+      return result;
+    }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "default" filter */
+class FilterNoWrap
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+    {
+      if (!v.isValid() || v.type()!=TemplateVariant::String)
+      {
+        return v;
+      }
+      QCString s = v.toString();
+      return substitute(s," ","&#160;");
+    }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "divisibleby" filter */
+class FilterDivisibleBy
+{
+  public:
+    static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &n)
+    {
+      if (!v.isValid() || !n.isValid())
+      {
+        return TemplateVariant();
+      }
+      if (v.type()==TemplateVariant::Integer && n.type()==TemplateVariant::Integer)
+      {
+        return TemplateVariant((v.toInt()%n.toInt())==0);
+      }
+      else
+      {
+        return TemplateVariant();
+      }
+    }
+};
+
+
+//--------------------------------------------------------------------
+
+/** @brief Factory singleton for registering and creating filters */
+class TemplateFilterFactory
+{
+  public:
+    typedef TemplateVariant (FilterFunction)(const TemplateVariant &v,const TemplateVariant &arg);
+
+    static TemplateFilterFactory *instance()
+    {
+      static TemplateFilterFactory *instance = 0;
+      if (instance==0) instance = new TemplateFilterFactory;
+      return instance;
+    }
+
+    TemplateVariant apply(const QCString &name,const TemplateVariant &v,const TemplateVariant &arg, bool &ok)
+    {
+      FilterFunction *func = (FilterFunction*)m_registry.find(name);
+      if (func)
+      {
+        ok=TRUE;
+        return (*func)(v,arg);
+      }
+      else
+      {
+        ok=FALSE;
+        return v;
+      }
+    }
+
+    void registerFilter(const QCString &name,FilterFunction *func)
+    {
+      m_registry.insert(name,(void*)func);
+    }
+
+    /** @brief Helper class for registering a filter function */
+    template<class T> class AutoRegister
+    {
+      public:
+        AutoRegister<T>(const QCString &key)
+        {
+          TemplateFilterFactory::instance()->registerFilter(key,&T::apply);
+        }
+    };
+
+  private:
+    QDict<void> m_registry;
+};
+
+// register a handlers for each filter we support
+static TemplateFilterFactory::AutoRegister<FilterAdd>         fAdd("add");
+static TemplateFilterFactory::AutoRegister<FilterAdd>         fAppend("append");
+static TemplateFilterFactory::AutoRegister<FilterLength>      fLength("length");
+static TemplateFilterFactory::AutoRegister<FilterNoWrap>      fNoWrap("nowrap");
+static TemplateFilterFactory::AutoRegister<FilterDefault>     fDefault("default");
+static TemplateFilterFactory::AutoRegister<FilterPrepend>     fPrepend("prepend");
+static TemplateFilterFactory::AutoRegister<FilterStripPath>   fStripPath("stripPath");
+static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby");
+
+//--------------------------------------------------------------------
+
+/** @brief Base class for all nodes in the abstract syntax tree of an
+ *  expression.
+ */
+class ExprAst
+{
+  public:
+    virtual ~ExprAst() {}
+    virtual TemplateVariant resolve(TemplateContext *) { return TemplateVariant(); }
+};
+
+/** @brief Class representing a number in the AST */
+class ExprAstNumber : public ExprAst
+{
+  public:
+    ExprAstNumber(int num) : m_number(num)
+    { TRACE(("ExprAstNumber(%d)\n",num)); }
+    int number() const { return m_number; }
+    virtual TemplateVariant resolve(TemplateContext *) { return TemplateVariant(m_number); }
+  private:
+    int m_number;
+};
+
+/** @brief Class representing a variable in the AST */
+class ExprAstVariable : public ExprAst
+{
+  public:
+    ExprAstVariable(const char *name) : m_name(name)
+    { TRACE(("ExprAstVariable(%s)\n",name)); }
+    const QCString &name() const { return m_name; }
+    virtual TemplateVariant resolve(TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      TemplateVariant v = c->get(m_name);
+      if (!v.isValid())
+      {
+        warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
+      }
+      return v;
+    }
+  private:
+    QCString m_name;
+};
+
+class ExprAstFunctionVariable : public ExprAst
+{
+  public:
+    ExprAstFunctionVariable(ExprAst *var,const QList<ExprAst> &args)
+      : m_var(var), m_args(args)
+    { TRACE(("ExprAstFunctionVariable(%s)\n",var->name().data()));
+      m_args.setAutoDelete(TRUE);
+    }
+    virtual TemplateVariant resolve(TemplateContext *c)
+    {
+      QValueList<TemplateVariant> args;
+      for (uint i=0;i<m_args.count();i++)
+      {
+        TemplateVariant v = m_args.at(i)->resolve(c);
+        args.append(v);
+      }
+      TemplateVariant v = m_var->resolve(c);
+      if (v.type()==TemplateVariant::Function)
+      {
+        v = v.call(args);
+      }
+      return v;
+    }
+  private:
+    ExprAst *m_var;
+    QList<ExprAst> m_args;
+};
+
+/** @brief Class representing a filter in the AST */
+class ExprAstFilter : public ExprAst
+{
+  public:
+    ExprAstFilter(const char *name,ExprAst *arg) : m_name(name), m_arg(arg)
+    { TRACE(("ExprAstFilter(%s)\n",name)); }
+   ~ExprAstFilter() { delete m_arg; }
+    const QCString &name() const { return m_name; }
+    TemplateVariant apply(const TemplateVariant &v,TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      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);
+      bool ok;
+      TemplateVariant result = TemplateFilterFactory::instance()->apply(m_name,v,arg,ok);
+      if (!ok)
+      {
+        warn(ci->templateName(),ci->line(),"unknown filter '%s'",m_name.data());
+      }
+      return result;
+    }
+  private:
+    QCString m_name;
+    ExprAst *m_arg;
+};
+
+/** @brief Class representing a filter applied to an expression in the AST */
+class ExprAstFilterAppl : public ExprAst
+{
+  public:
+    ExprAstFilterAppl(ExprAst *expr,ExprAstFilter *filter)
+      : m_expr(expr), m_filter(filter)
+    { TRACE(("ExprAstFilterAppl\n")); }
+   ~ExprAstFilterAppl() { delete m_expr; delete m_filter; }
+    virtual TemplateVariant resolve(TemplateContext *c)
+    {
+      return m_filter->apply(m_expr->resolve(c),c);
+    }
+  private:
+    ExprAst *m_expr;
+    ExprAstFilter *m_filter;
+};
+
+/** @brief Class representing a string literal in the AST */
+class ExprAstLiteral : public ExprAst
+{
+  public:
+    ExprAstLiteral(const char *lit) : m_literal(lit)
+    { TRACE(("ExprAstLiteral(%s)\n",lit)); }
+    const QCString &literal() const { return m_literal; }
+    virtual TemplateVariant resolve(TemplateContext *) { return TemplateVariant(m_literal); }
+  private:
+    QCString m_literal;
+};
+
+/** @brief Class representing a negation (not) operator in the AST */
+class ExprAstNegate : public ExprAst
+{
+  public:
+    ExprAstNegate(ExprAst *expr) : m_expr(expr)
+    { TRACE(("ExprAstNegate\n")); }
+   ~ExprAstNegate() { delete m_expr; }
+    virtual TemplateVariant resolve(TemplateContext *c)
+    { return TemplateVariant(!m_expr->resolve(c).toBool()); }
+  private:
+    ExprAst *m_expr;
+};
+
+/** @brief Class representing a binary operator in the AST */
+class ExprAstBinary : public ExprAst
+{
+  public:
+    ExprAstBinary(Operator::Type op,ExprAst *lhs,ExprAst *rhs)
+      : m_operator(op), m_lhs(lhs), m_rhs(rhs)
+    { TRACE(("ExprAstBinary %s\n",Operator::toString(op))); }
+   ~ExprAstBinary() { delete m_lhs; delete m_rhs; }
+    virtual TemplateVariant resolve(TemplateContext *c)
+    {
+      TemplateVariant lhs = m_lhs->resolve(c);
+      TemplateVariant rhs = m_rhs ? m_rhs->resolve(c) : TemplateVariant();
+      switch(m_operator)
+      {
+        case Operator::Or:
+          return TemplateVariant(lhs.toBool() || rhs.toBool());
+        case Operator::And:
+          return TemplateVariant(lhs.toBool() && rhs.toBool());
+        case Operator::Equal:
+          return TemplateVariant(lhs == rhs);
+        case Operator::NotEqual:
+          return TemplateVariant(!(lhs == rhs));
+        case Operator::Less:
+          if (lhs.type()==TemplateVariant::String && rhs.type()==TemplateVariant::String)
+          {
+            return lhs.toString()<rhs.toString();
+          }
+          else
+          {
+            return lhs.toInt()<rhs.toInt();
+          }
+        case Operator::Greater:
+          if (lhs.type()==TemplateVariant::String && rhs.type()==TemplateVariant::String)
+          {
+            return !(lhs.toString()<rhs.toString());
+          }
+          else
+          {
+            return lhs.toInt()>rhs.toInt();
+          }
+        case Operator::LessEqual:
+          if (lhs.type()==TemplateVariant::String && rhs.type()==TemplateVariant::String)
+          {
+            return lhs.toString()==rhs.toString() || lhs.toString()<rhs.toString();
+          }
+          else
+          {
+            return lhs.toInt()<=rhs.toInt();
+          }
+        case Operator::GreaterEqual:
+          if (lhs.type()==TemplateVariant::String && rhs.type()==TemplateVariant::String)
+          {
+            return lhs.toString()==rhs.toString() || !(lhs.toString()<rhs.toString());
+          }
+          else
+          {
+            return lhs.toInt()>=rhs.toInt();
+          }
+        default:
+          return TemplateVariant();
+      }
+    }
+  private:
+    Operator::Type m_operator;
+    ExprAst *m_lhs;
+    ExprAst *m_rhs;
+};
+
+//--------------------------------------------------------------------
+
+/** @brief Recursive decent parser for Django style template expressions.
+ */
+class ExpressionParser
+{
+  public:
+    ExpressionParser(const QCString &templateName,int line)
+      : m_templateName(templateName), m_line(line), m_tokenStream(0)
+    {
+    }
+    virtual ~ExpressionParser()
+    {
+    }
+
+    ExprAst *parse(const char *expr)
+    {
+      if (expr==0) return 0;
+      m_tokenStream = expr;
+      getNextToken();
+      return parseOrExpression();
+    }
+
+    ExprAst *parsePrimary(const char *expr)
+    {
+      if (expr==0) return 0;
+      m_tokenStream = expr;
+      getNextToken();
+      return parsePrimaryExpression();
+    }
+
+    ExprAst *parseVariable(const char *varExpr)
+    {
+      if (varExpr==0) return 0;
+      m_tokenStream = varExpr;
+      getNextToken();
+      return parseFilteredVariable();
+    }
+
+  private:
+
+    /** @brief Class representing a token within an expression. */
+    class ExprToken
+    {
+      public:
+        ExprToken() : type(Unknown), num(-1), op(Operator::Or)
+        {
+        }
+        enum Type
+        {
+          Unknown, Operator, Number, Identifier, Literal
+        };
+
+        Type type;
+        int num;
+        QCString id;
+        Operator::Type op;
+    };
+
+    ExprAst *parseOrExpression()
+    {
+      TRACE(("{parseOrExpression(%s)\n",m_tokenStream));
+      ExprAst *lhs = parseAndExpression();
+      if (lhs)
+      {
+        while (m_curToken.type==ExprToken::Operator &&
+            m_curToken.op==Operator::Or)
+        {
+          getNextToken();
+          ExprAst *rhs = parseAndExpression();
+          lhs = new ExprAstBinary(Operator::Or,lhs,rhs);
+        }
+      }
+      TRACE(("}parseOrExpression(%s)\n",m_tokenStream));
+      return lhs;
+    }
+
+    ExprAst *parseAndExpression()
+    {
+      TRACE(("{parseAndExpression(%s)\n",m_tokenStream));
+      ExprAst *lhs = parseNotExpression();
+      if (lhs)
+      {
+        while (m_curToken.type==ExprToken::Operator &&
+               m_curToken.op==Operator::And)
+        {
+          getNextToken();
+          ExprAst *rhs = parseNotExpression();
+          lhs = new ExprAstBinary(Operator::And,lhs,rhs);
+        }
+      }
+      TRACE(("}parseAndExpression(%s)\n",m_tokenStream));
+      return lhs;
+    }
+
+    ExprAst *parseNotExpression()
+    {
+      TRACE(("{parseNotExpression(%s)\n",m_tokenStream));
+      ExprAst *result=0;
+      if (m_curToken.type==ExprToken::Operator &&
+          m_curToken.op==Operator::Not)
+      {
+        getNextToken();
+        ExprAst *expr = parseCompareExpression();
+        if (expr==0)
+        {
+          warn(m_templateName,m_line,"argument missing for not operator");
+          return 0;
+        }
+        result = new ExprAstNegate(expr);
+      }
+      else
+      {
+        result = parseCompareExpression();
+      }
+      TRACE(("}parseNotExpression(%s)\n",m_tokenStream));
+      return result;
+    }
+
+    ExprAst *parseCompareExpression()
+    {
+      TRACE(("{parseCompareExpression(%s)\n",m_tokenStream));
+      ExprAst *lhs = parsePrimaryExpression();
+      if (lhs)
+      {
+        Operator::Type op = m_curToken.op;
+        if (m_curToken.type==ExprToken::Operator &&
+            (op==Operator::Less      ||
+             op==Operator::Greater   ||
+             op==Operator::Equal     ||
+             op==Operator::NotEqual  ||
+             op==Operator::LessEqual ||
+             op==Operator::GreaterEqual
+            )
+           )
+        {
+          getNextToken();
+          ExprAst *rhs = parseNotExpression();
+          lhs = new ExprAstBinary(op,lhs,rhs);
+        }
+      }
+      TRACE(("}parseCompareExpression(%s)\n",m_tokenStream));
+      return lhs;
+    }
+
+    ExprAst *parsePrimaryExpression()
+    {
+      TRACE(("{parsePrimary(%s)\n",m_tokenStream));
+      ExprAst *result=0;
+      switch (m_curToken.type)
+      {
+        case ExprToken::Number:
+          result = parseNumber();
+          break;
+        case ExprToken::Identifier:
+          result = parseFilteredVariable();
+          break;
+        case ExprToken::Literal:
+          result = parseLiteral();
+          break;
+        default:
+          if (m_curToken.type==ExprToken::Operator)
+          {
+            warn(m_templateName,m_line,"unexpected operator '%s' in expression",
+                Operator::toString(m_curToken.op));
+          }
+          else
+          {
+            warn(m_templateName,m_line,"unexpected token in expression");
+          }
+      }
+      TRACE(("}parsePrimary(%s)\n",m_tokenStream));
+      return result;
+    }
+
+    ExprAst *parseNumber()
+    {
+      TRACE(("{parseNumber(%d)\n",m_curToken.num));
+      ExprAst *num = new ExprAstNumber(m_curToken.num);
+      getNextToken();
+      TRACE(("}parseNumber()\n"));
+      return num;
+    }
+
+    ExprAst *parseIdentifier()
+    {
+      TRACE(("{parseIdentifier(%s)\n",m_curToken.id.data()));
+      ExprAst *id = new ExprAstVariable(m_curToken.id);
+      getNextToken();
+      TRACE(("}parseIdentifier()\n"));
+      return id;
+    }
+
+    ExprAst *parseLiteral()
+    {
+      TRACE(("{parseLiteral(%s)\n",m_curToken.id.data()));
+      ExprAst *lit = new ExprAstLiteral(m_curToken.id);
+      getNextToken();
+      TRACE(("}parseLiteral()\n"));
+      return lit;
+    }
+
+    ExprAst *parseIdentifierOptionalArgs()
+    {
+      TRACE(("{parseIdentifierOptionalArgs(%s)\n",m_curToken.id.data()));
+      ExprAst *expr = parseIdentifier();
+      if (expr)
+      {
+        if (m_curToken.type==ExprToken::Operator &&
+            m_curToken.op==Operator::Colon)
+        {
+          getNextToken();
+          ExprAst *argExpr = parsePrimaryExpression();
+          QList<ExprAst> args;
+          args.append(argExpr);
+          while (m_curToken.type==ExprToken::Operator &&
+                 m_curToken.op==Operator::Comma)
+          {
+            getNextToken();
+            argExpr = parsePrimaryExpression();
+            args.append(argExpr);
+          }
+          expr = new ExprAstFunctionVariable(expr,args);
+        }
+      }
+      TRACE(("}parseIdentifierOptionalArgs()\n"));
+      return expr;
+    }
+
+    ExprAst *parseFilteredVariable()
+    {
+      TRACE(("{parseFilteredVariable()\n"));
+      ExprAst *expr = parseIdentifierOptionalArgs();
+      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(("}parseFilteredVariable()\n"));
+      return expr;
+    }
+
+    ExprAstFilter *parseFilter()
+    {
+      TRACE(("{parseFilter(%s)\n",m_curToken.id.data()));
+      QCString filterName = m_curToken.id;
+      getNextToken();
+      ExprAst *argExpr=0;
+      if (m_curToken.type==ExprToken::Operator &&
+          m_curToken.op==Operator::Colon)
+      {
+        getNextToken();
+        argExpr = parsePrimaryExpression();
+      }
+      ExprAstFilter *filter = new ExprAstFilter(filterName,argExpr);
+      TRACE(("}parseFilter()\n"));
+      return filter;
+    }
+
+
+    bool getNextToken()
+    {
+      const char *p = m_tokenStream;
+      char s[2];
+      s[1]=0;
+      if (p==0 || *p=='\0') return FALSE;
+      while (*p==' ') p++; // skip over spaces
+      char c=*p;
+      if (strncmp(p,"not ",4)==0)
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Not;
+        p+=4;
+      }
+      else if (strncmp(p,"and ",4)==0)
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::And;
+        p+=4;
+      }
+      else if (strncmp(p,"or ",3)==0)
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Or;
+        p+=3;
+      }
+      else if (c=='=' && *(p+1)=='=')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Equal;
+        p+=2;
+      }
+      else if (c=='!' && *(p+1)=='=')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::NotEqual;
+        p+=2;
+      }
+      else if (c=='<' && *(p+1)=='=')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::LessEqual;
+        p+=2;
+      }
+      else if (c=='>' && *(p+1)=='=')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::GreaterEqual;
+        p+=2;
+      }
+      else if (c=='<')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Less;
+        p++;
+      }
+      else if (c=='>')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Greater;
+        p++;
+      }
+      else if (c=='|')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Filter;
+        p++;
+      }
+      else if (c==':')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Colon;
+        p++;
+      }
+      else if (c==',')
+      {
+        m_curToken.type = ExprToken::Operator;
+        m_curToken.op = Operator::Comma;
+        p++;
+      }
+      else if ((c=='-' && *(p+1)>='0' && *(p+1)<='9') || (c>='0' && c<='9'))
+      {
+        m_curToken.type = ExprToken::Number;
+        const char *np = p;
+        if (c=='-') np++;
+        m_curToken.num = 0;
+        while (*np>='0' && *np<='9')
+        {
+          m_curToken.num*=10;
+          m_curToken.num+=*np-'0';
+          np++;
+        }
+        if (c=='-') m_curToken.num=-m_curToken.num;
+        p=np;
+      }
+      else if (c=='_' || (c>='a' && c<='z') || (c>='A' && c<='Z'))
+      {
+        m_curToken.type = ExprToken::Identifier;
+        s[0]=c;
+        m_curToken.id = s;
+        p++;
+        while ((c=*p) &&
+            (c=='_' || c=='.' ||
+             (c>='a' && c<='z') ||
+             (c>='A' && c<='Z') ||
+             (c>='0' && c<='9'))
+            )
+        {
+          s[0]=c;
+          m_curToken.id+=s;
+          p++;
+        }
+        if (m_curToken.id=="True") // treat true literal as numerical 1
+        {
+          m_curToken.type = ExprToken::Number;
+          m_curToken.num = 1;
+        }
+        else if (m_curToken.id=="False") // treat false literal as numerical 0
+        {
+          m_curToken.type = ExprToken::Number;
+          m_curToken.num = 0;
+        }
+      }
+      else if (c=='"' || c=='\'')
+      {
+        m_curToken.type = ExprToken::Literal;
+        m_curToken.id.resize(0);
+        p++;
+        char tokenChar = c;
+        char cp=0;
+        while ((c=*p) && (c!=tokenChar || (c==tokenChar && cp=='\\')))
+        {
+          s[0]=c;
+          if (c!='\\' || cp=='\\') // don't add escapes
+          {
+            m_curToken.id+=s;
+          }
+          cp=c;
+          p++;
+        }
+        if (*p==tokenChar) p++;
+      }
+      else
+      {
+        m_curToken.type = ExprToken::Unknown;
+        char s[2];
+        s[0]=c;
+        s[1]=0;
+        warn(m_templateName,m_line,"Found unknown token %s while parsing %s",s,m_tokenStream);
+        m_curToken.id = s;
+        p++;
+      }
+      //TRACE(("token type=%d op=%d num=%d id=%s\n",
+      //    m_curToken.type,m_curToken.op,m_curToken.num,m_curToken.id.data()));
+
+      m_tokenStream = p;
+      return TRUE;
+    }
+
+    ExprToken m_curToken;
+    QCString m_templateName;
+    int m_line;
+    const char *m_tokenStream;
+};
+
+//----------------------------------------------------------
+
+/** @brief Base class of all nodes in a template's AST */
+class TemplateNode
+{
+  public:
+    TemplateNode(TemplateNode *parent) : m_parent(parent) {}
+    virtual ~TemplateNode() {}
+
+    virtual void render(FTextStream &ts, TemplateContext *c) = 0;
+
+    TemplateNode *parent() { return m_parent; }
+
+  private:
+    TemplateNode *m_parent;
+};
+
+//----------------------------------------------------------
+
+/** @brief Parser for templates */
+class TemplateParser
+{
+  public:
+    TemplateParser(const QCString &templateName,QList<TemplateToken> &tokens);
+    void parse(TemplateNode *parent,int line,const QStrList &stopAt,
+               QList<TemplateNode> &nodes);
+    bool hasNextToken() const;
+    TemplateToken *takeNextToken();
+    void removeNextToken();
+    void prependToken(const TemplateToken *token);
+    const TemplateToken *currentToken() const;
+    QCString templateName() const { return m_templateName; }
+  private:
+    QCString m_templateName;
+    QList<TemplateToken> &m_tokens;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing a lexical token in a template */
+class TemplateToken
+{
+  public:
+    enum Type { Text, Variable, Block };
+    TemplateToken(Type t,const char *d,int l) : type(t), data(d), line(l) {}
+    Type type;
+    QCString data;
+    int line;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing a list of AST nodes in a template */
+class TemplateNodeList : public QList<TemplateNode>
+{
+  public:
+    TemplateNodeList()
+    {
+      setAutoDelete(TRUE);
+    }
+    void render(FTextStream &ts,TemplateContext *c)
+    {
+      TRACE(("{TemplateNodeList::render\n"));
+      QListIterator<TemplateNode> it(*this);
+      TemplateNode *tn=0;
+      for (it.toFirst();(tn=it.current());++it)
+      {
+        tn->render(ts,c);
+      }
+      TRACE(("}TemplateNodeList::render\n"));
+    }
+};
+
+//----------------------------------------------------------
+
+/** @brief Internal class representing the implementation of a template */
+class TemplateImpl : public TemplateNode, public Template
+{
+  public:
+    TemplateImpl(TemplateEngine *e,const QCString &name,const QCString &data);
+    ~TemplateImpl() {}
+    void render(FTextStream &ts, TemplateContext *c);
+
+    TemplateEngine *engine() const { return m_engine; }
+    TemplateBlockContext *blockContext() { return &m_blockContext; }
+
+  private:
+    QCString m_name;
+    TemplateNodeList m_nodes;
+    TemplateEngine *m_engine;
+    TemplateBlockContext m_blockContext;
+};
+
+//----------------------------------------------------------
+
+
+TemplateContextImpl::TemplateContextImpl()
+  : m_templateName("<unknown>"), m_line(1), m_escapeIntf(0),
+    m_spacelessIntf(0), m_spacelessEnabled(FALSE)
+{
+  m_contextStack.setAutoDelete(TRUE);
+  push();
+}
+
+TemplateContextImpl::~TemplateContextImpl()
+{
+  pop();
+}
+
+void TemplateContextImpl::set(const char *name,const TemplateVariant &v)
+{
+  TemplateVariant *pv = m_contextStack.first()->find(name);
+  if (pv)
+  {
+    m_contextStack.first()->remove(name);
+  }
+  m_contextStack.first()->insert(name,new TemplateVariant(v));
+}
+
+TemplateVariant TemplateContextImpl::get(const QCString &name) const
+{
+  int i=name.find('.');
+  if (i==-1) // simple name
+  {
+    return getPrimary(name);
+  }
+  else // obj.prop
+  {
+    TemplateVariant v;
+    QCString objName = name.left(i);
+    v = getPrimary(objName);
+    QCString propName = name.mid(i+1);
+    while (!propName.isEmpty())
+    {
+      //printf("getPrimary(%s) type=%d:%s\n",objName.data(),v.type(),v.toString().data());
+      if (v.type()==TemplateVariant::Struct)
+      {
+        i = propName.find(".");
+        int l = i==-1 ? propName.length() : i;
+        v = v.toStruct()->get(propName.left(l));
+        if (!v.isValid())
+        {
+          warn(m_templateName,m_line,"requesting non-existing property '%s' for object '%s'",propName.left(l).data(),objName.data());
+        }
+        if (i!=-1)
+        {
+          objName = propName.left(i);
+          propName = propName.mid(i+1);
+        }
+        else
+        {
+          propName.resize(0);
+        }
+      }
+      else if (v.type()==TemplateVariant::List)
+      {
+        i = propName.find(".");
+        int l = i==-1 ? propName.length() : i;
+        bool b;
+        int index = propName.left(l).toInt(&b);
+        if (b)
+        {
+          v = v.toList()->at(index);
+        }
+        else
+        {
+          warn(m_templateName,m_line,"list index '%s' is not valid",propName.data());
+          break;
+        }
+        if (i!=-1)
+        {
+          propName = propName.mid(i+1);
+        }
+        else
+        {
+          propName.resize(0);
+        }
+      }
+      else
+      {
+        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;
+  }
+}
+
+const TemplateVariant *TemplateContextImpl::getRef(const QCString &name) const
+{
+  QListIterator< QDict<TemplateVariant> > it(m_contextStack);
+  QDict<TemplateVariant> *dict;
+  for (it.toFirst();(dict=it.current());++it)
+  {
+    TemplateVariant *v = dict->find(name);
+    if (v) return v;
+  }
+  return 0; // not found
+}
+
+TemplateVariant TemplateContextImpl::getPrimary(const QCString &name) const
+{
+  const TemplateVariant *v = getRef(name);
+  return v ? *v : TemplateVariant();
+}
+
+void TemplateContextImpl::push()
+{
+  QDict<TemplateVariant> *dict = new QDict<TemplateVariant>;
+  dict->setAutoDelete(TRUE);
+  m_contextStack.prepend(dict);
+}
+
+void TemplateContextImpl::pop()
+{
+  if (!m_contextStack.removeFirst())
+  {
+    warn(m_templateName,m_line,"pop() called on empty context stack!\n");
+  }
+}
+
+TemplateBlockContext *TemplateContextImpl::blockContext()
+{
+  return &m_blockContext;
+}
+
+//----------------------------------------------------------
+
+/** @brief Class representing a piece of plain text in a template */
+class TemplateNodeText : public TemplateNode
+{
+  public:
+    TemplateNodeText(TemplateParser *,TemplateNode *parent,int,const QCString &data)
+      : TemplateNode(parent), m_data(data)
+    {
+      TRACE(("TemplateNodeText('%s')\n",replace(data,'\n',' ').data()));
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      //printf("TemplateNodeText::render(%s)\n",m_data.data());
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (ci->spacelessEnabled())
+      {
+        ts << ci->spacelessIntf()->remove(m_data);
+      }
+      else
+      {
+        ts << m_data;
+      }
+    }
+  private:
+    QCString m_data;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing a variable in a template */
+class TemplateNodeVariable : public TemplateNode
+{
+  public:
+    TemplateNodeVariable(TemplateParser *parser,TemplateNode *parent,int line,const QCString &var)
+      : TemplateNode(parent), m_templateName(parser->templateName()), m_line(line)
+    {
+      TRACE(("TemplateNodeVariable(%s)\n",var.data()));
+      ExpressionParser expParser(m_templateName,line);
+      m_var = expParser.parseVariable(var);
+    }
+    ~TemplateNodeVariable()
+    {
+      delete m_var;
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      TemplateVariant v = m_var->resolve(c);
+      if (v.type()==TemplateVariant::Function)
+      {
+        v = v.call(QValueList<TemplateVariant>());
+      }
+      //printf("TemplateNodeVariable::render(%s) raw=%d\n",value.data(),v.raw());
+      if (ci->escapeIntf() && !v.raw())
+      {
+        ts << ci->escapeIntf()->escape(v.toString());
+      }
+      else
+      {
+        ts << v.toString();
+      }
+    }
+
+  private:
+    QCString m_templateName;
+    int m_line;
+    ExprAst *m_var;
+    QList<ExprAst> m_args;
+};
+
+//----------------------------------------------------------
+
+/** @brief Helper class for creating template AST tag nodes and returning
+  * the template for a given node.
+ */
+template<class T> class TemplateNodeCreator : public TemplateNode
+{
+  public:
+    TemplateNodeCreator(TemplateParser *parser,TemplateNode *parent,int line)
+      : TemplateNode(parent), m_templateName(parser->templateName()), m_line(line) {}
+    static TemplateNode *createInstance(TemplateParser *parser,
+                                        TemplateNode *parent,
+                                        int line,
+                                        const QCString &data)
+    {
+      return new T(parser,parent,line,data);
+    }
+    TemplateImpl *getTemplate()
+    {
+      TemplateNode *root = this;
+      while (root && root->parent())
+      {
+        root = root->parent();
+      }
+      return dynamic_cast<TemplateImpl*>(root);
+    }
+  protected:
+    QCString m_templateName;
+    int m_line;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'if' tag in a template */
+class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
+{
+  public:
+    TemplateNodeIf(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) :
+      TemplateNodeCreator<TemplateNodeIf>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeIf(%s)\n",data.data()));
+      if (data.isEmpty())
+      {
+        warn(m_templateName,line,"missing argument for if tag");
+      }
+      QStrList stopAt;
+      stopAt.append("endif");
+      stopAt.append("else");
+      parser->parse(this,line,stopAt,m_trueNodes);
+      TemplateToken *tok = parser->takeNextToken();
+      ExpressionParser ex(parser->templateName(),line);
+      m_guardAst = ex.parse(data);
+
+      if (tok && tok->data=="else")
+      {
+        stopAt.removeLast();
+        parser->parse(this,line,stopAt,m_falseNodes);
+        parser->removeNextToken(); // skip over endif
+      }
+      delete tok;
+      TRACE(("}TemplateNodeIf(%s)\n",data.data()));
+    }
+    ~TemplateNodeIf()
+    {
+      delete m_guardAst;
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      dynamic_cast<TemplateContextImpl*>(c)->setLocation(m_templateName,m_line);
+      //printf("TemplateNodeIf::render #trueNodes=%d #falseNodes=%d\n",m_trueNodes.count(),m_falseNodes.count());
+      if (m_guardAst)
+      {
+        TemplateVariant guardValue = m_guardAst->resolve(c);
+        if (guardValue.toBool()) // guard is true, render corresponding nodes
+        {
+          m_trueNodes.render(ts,c);
+        }
+        else // guard is false, render corresponding nodes
+        {
+          m_falseNodes.render(ts,c);
+        }
+      }
+    }
+  private:
+    ExprAst *m_guardAst;
+    TemplateNodeList m_trueNodes;
+    TemplateNodeList m_falseNodes;
+};
+
+//----------------------------------------------------------
+/** @brief Class representing a 'for' tag in a template */
+class TemplateNodeRepeat : public TemplateNodeCreator<TemplateNodeRepeat>
+{
+  public:
+    TemplateNodeRepeat(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeRepeat>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeRepeat(%s)\n",data.data()));
+      ExpressionParser expParser(parser->templateName(),line);
+      m_expr = expParser.parseVariable(data);
+      QStrList stopAt;
+      stopAt.append("endrepeat");
+      parser->parse(this,line,stopAt,m_repeatNodes);
+      parser->removeNextToken(); // skip over endrepeat
+      TRACE(("}TemplateNodeRepeat(%s)\n",data.data()));
+    }
+    ~TemplateNodeRepeat()
+    {
+      delete m_expr;
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      dynamic_cast<TemplateContextImpl*>(c)->setLocation(m_templateName,m_line);
+      TemplateVariant v;
+      if (m_expr && (v=m_expr->resolve(c)).type()==TemplateVariant::Integer)
+      {
+        int i, n = v.toInt();
+        for (i=0;i<n;i++)
+        {
+          TemplateStruct s;
+          s.set("counter0",    (int)i);
+          s.set("counter",     (int)(i+1));
+          s.set("revcounter",  (int)(n-i));
+          s.set("revcounter0", (int)(n-i-1));
+          s.set("first",i==0);
+          s.set("last", i==n-1);
+          c->set("repeatloop",&s);
+          // render all items for this iteration of the loop
+          m_repeatNodes.render(ts,c);
+        }
+      }
+      else // simple type...
+      {
+        warn(m_templateName,m_line,"for requires a variable of list type!");
+      }
+    }
+  private:
+    TemplateNodeList m_repeatNodes;
+    ExprAst *m_expr;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing a 'for' tag in a template */
+class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
+{
+  public:
+    TemplateNodeFor(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeFor>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeFor(%s)\n",data.data()));
+      QCString exprStr;
+      int i = data.find(" in ");
+      if (i==-1)
+      {
+        if (data.right(3)==" in")
+        {
+          warn(m_templateName,line,"for is missing container after 'in' keyword");
+        }
+        else if (data=="in")
+        {
+          warn(m_templateName,line,"for needs at least one iterator variable");
+        }
+        else
+        {
+          warn(m_templateName,line,"for is missing 'in' keyword");
+        }
+      }
+      else
+      {
+        m_vars = split(data.left(i),",");
+        if (m_vars.count()==0)
+        {
+          warn(m_templateName,line,"for needs at least one iterator variable");
+        }
+
+        int j = data.find(" reversed",i);
+        m_reversed = (j!=-1);
+
+        if (j==-1) j=data.length();
+        if (j>i+4)
+        {
+          exprStr = data.mid(i+4,j-i-4); // skip over " in " part
+        }
+        if (exprStr.isEmpty())
+        {
+          warn(m_templateName,line,"for is missing container after 'in' keyword");
+        }
+      }
+      ExpressionParser expParser(parser->templateName(),line);
+      m_expr = expParser.parseVariable(exprStr);
+
+      QStrList stopAt;
+      stopAt.append("endfor");
+      stopAt.append("empty");
+      parser->parse(this,line,stopAt,m_loopNodes);
+      TemplateToken *tok = parser->takeNextToken();
+      if (tok && tok->data=="empty")
+      {
+        stopAt.removeLast();
+        parser->parse(this,line,stopAt,m_emptyNodes);
+        parser->removeNextToken(); // skip over endfor
+      }
+      delete tok;
+      TRACE(("}TemplateNodeFor(%s)\n",data.data()));
+    }
+
+    ~TemplateNodeFor()
+    {
+      delete m_expr;
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      dynamic_cast<TemplateContextImpl*>(c)->setLocation(m_templateName,m_line);
+      //printf("TemplateNodeFor::render #loopNodes=%d #emptyNodes=%d\n",
+      //    m_loopNodes.count(),m_emptyNodes.count());
+      if (m_expr)
+      {
+        TemplateVariant v = m_expr->resolve(c);
+        const TemplateListIntf *list = v.toList();
+        if (list)
+        {
+          uint listSize = list->count();
+          if (listSize==0) // empty for loop
+          {
+            m_emptyNodes.render(ts,c);
+            return;
+          }
+          c->push();
+          //int index = m_reversed ? list.count() : 0;
+          TemplateVariant v;
+          const TemplateVariant *parentLoop = c->getRef("forloop");
+          uint index = m_reversed ? listSize-1 : 0;
+          TemplateListIntf::ConstIterator *it = list->createIterator();
+          for (m_reversed ? it->toLast() : it->toFirst();
+              (it->current(v));
+              m_reversed ? it->toPrev() : it->toNext())
+          {
+            TemplateStruct s;
+            s.set("counter0",    (int)index);
+            s.set("counter",     (int)(index+1));
+            s.set("revcounter",  (int)(listSize-index));
+            s.set("revcounter0", (int)(listSize-index-1));
+            s.set("first",index==0);
+            s.set("last", index==listSize-1);
+            s.set("parentloop",parentLoop ? *parentLoop : TemplateVariant());
+            c->set("forloop",&s);
+
+            // add variables for this loop to the context
+            //obj->addVariableToContext(index,m_vars,c);
+            uint vi=0;
+            if (m_vars.count()==1) // loop variable represents an item
+            {
+              c->set(m_vars[vi++],v);
+            }
+            else if (m_vars.count()>1 && v.type()==TemplateVariant::Struct)
+              // loop variables represent elements in a list item
+            {
+              for (uint i=0;i<m_vars.count();i++,vi++)
+              {
+                c->set(m_vars[vi],v.toStruct()->get(m_vars[vi]));
+              }
+            }
+            for (;vi<m_vars.count();vi++)
+            {
+              c->set(m_vars[vi],TemplateVariant());
+            }
+
+            // render all items for this iteration of the loop
+            m_loopNodes.render(ts,c);
+
+            if (m_reversed) index--; else index++;
+          }
+          c->pop();
+          delete it;
+        }
+        else // simple type...
+        {
+          warn(m_templateName,m_line,"for requires a variable of list type!");
+        }
+      }
+    }
+
+  private:
+    bool m_reversed;
+    ExprAst *m_expr;
+    QValueList<QCString> m_vars;
+    TemplateNodeList m_loopNodes;
+    TemplateNodeList m_emptyNodes;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'markers' tag in a template */
+class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
+{
+  public:
+    TemplateNodeMsg(TemplateParser *parser,TemplateNode *parent,int line,const QCString &)
+      : TemplateNodeCreator<TemplateNodeMsg>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeMsg()\n"));
+      QStrList stopAt;
+      stopAt.append("endmsg");
+      parser->parse(this,line,stopAt,m_nodes);
+      parser->removeNextToken(); // skip over endmarkers
+      TRACE(("}TemplateNodeMsg()\n"));
+    }
+    void render(FTextStream &, TemplateContext *c)
+    {
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      TemplateEscapeIntf *escIntf = ci->escapeIntf();
+      ci->setEscapeIntf(0); // avoid escaping things we send to standard out
+      bool enable = ci->spacelessEnabled();
+      ci->enableSpaceless(FALSE);
+      FTextStream ts(stdout);
+      m_nodes.render(ts,c);
+      ts << endl;
+      ci->setEscapeIntf(escIntf);
+      ci->enableSpaceless(enable);
+    }
+  private:
+    TemplateNodeList m_nodes;
+};
+
+
+//----------------------------------------------------------
+
+/** @brief Class representing a 'block' tag in a template */
+class TemplateNodeBlock : public TemplateNodeCreator<TemplateNodeBlock>
+{
+  public:
+    TemplateNodeBlock(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeBlock>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeBlock(%s)\n",data.data()));
+      m_blockName = data;
+      if (m_blockName.isEmpty())
+      {
+        warn(parser->templateName(),line,"block tag without name");
+      }
+      QStrList stopAt;
+      stopAt.append("endblock");
+      parser->parse(this,line,stopAt,m_nodes);
+      parser->removeNextToken(); // skip over endblock
+      TRACE(("}TemplateNodeBlock(%s)\n",data.data()));
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      TemplateImpl *t = getTemplate();
+      if (t)
+      {
+        // remove block from the context, so block.super can work
+        TemplateNodeBlock *nb = ci->blockContext()->pop(m_blockName);
+        if (nb) // block is overruled
+        {
+          ci->push();
+          QGString super;
+          FTextStream ss(&super);
+          // get super block of block nb
+          TemplateNodeBlock *sb = ci->blockContext()->get(m_blockName);
+          if (sb && sb!=nb && sb!=this) // nb and sb both overrule this block
+          {
+            sb->render(ss,c); // render parent of nb to string
+          }
+          else if (nb!=this) // only nb overrules this block
+          {
+            m_nodes.render(ss,c); // render parent of nb to string
+          }
+          // add 'block.super' variable to allow access to parent block content
+          TemplateStruct superBlock;
+          superBlock.set("super",TemplateVariant(super.data(),TRUE));
+          ci->set("block",&superBlock);
+          // render the overruled block contents
+          nb->m_nodes.render(ts,c);
+          ci->pop();
+          // re-add block to the context
+          ci->blockContext()->push(nb);
+        }
+        else // block has no overrule
+        {
+          m_nodes.render(ts,c);
+        }
+      }
+    }
+
+    QCString name() const
+    {
+      return m_blockName;
+    }
+
+  private:
+    QCString m_blockName;
+    TemplateNodeList m_nodes;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing a 'extend' tag in a template */
+class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
+{
+  public:
+    TemplateNodeExtend(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeExtend>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeExtend(%s)\n",data.data()));
+      ExpressionParser ep(m_templateName,line);
+      if (data.isEmpty())
+      {
+        warn(m_templateName,line,"extend tag is missing template file argument");
+      }
+      m_extendExpr = ep.parsePrimary(data);
+      QStrList stopAt;
+      parser->parse(this,line,stopAt,m_nodes);
+      TRACE(("}TemplateNodeExtend(%s)\n",data.data()));
+    }
+   ~TemplateNodeExtend()
+    {
+      delete m_extendExpr;
+    }
+
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      dynamic_cast<TemplateContextImpl*>(c)->setLocation(m_templateName,m_line);
+      if (m_extendExpr==0) return;
+
+      QCString extendFile = m_extendExpr->resolve(c).toString();
+      if (extendFile.isEmpty())
+      {
+        warn(m_templateName,m_line,"invalid parameter for extend command");
+      }
+
+      // goto root of tree (template node)
+      TemplateImpl *t = getTemplate();
+      if (t)
+      {
+        Template *bt = t->engine()->loadByName(extendFile);
+        TemplateImpl *baseTemplate = bt ? dynamic_cast<TemplateImpl*>(bt) : 0;
+        if (baseTemplate)
+        {
+          // fill block context
+          TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+          TemplateBlockContext *bc = ci->blockContext();
+
+          // add overruling blocks to the context
+          QListIterator<TemplateNode> li(m_nodes);
+          TemplateNode *n;
+          for (li.toFirst();(n=li.current());++li)
+          {
+            TemplateNodeBlock *nb = dynamic_cast<TemplateNodeBlock*>(n);
+            if (nb)
+            {
+              bc->add(nb);
+            }
+            TemplateNodeMsg *msg = dynamic_cast<TemplateNodeMsg*>(n);
+            if (msg)
+            {
+              msg->render(ts,c);
+            }
+          }
+
+          // render the base template with the given context
+          baseTemplate->render(ts,c);
+
+          // clean up
+          bc->clear();
+          //delete baseTemplate;
+        }
+        else
+        {
+          warn(m_templateName,m_line,"failed to load template %s for extend",extendFile.data());
+        }
+      }
+    }
+
+  private:
+    ExprAst *m_extendExpr;
+    TemplateNodeList m_nodes;
+};
+
+/** @brief Class representing an 'include' tag in a template */
+class TemplateNodeInclude : public TemplateNodeCreator<TemplateNodeInclude>
+{
+  public:
+    TemplateNodeInclude(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeInclude>(parser,parent,line)
+    {
+      TRACE(("TemplateNodeInclude(%s)\n",data.data()));
+      ExpressionParser ep(m_templateName,line);
+      if (data.isEmpty())
+      {
+        warn(m_templateName,line,"include tag is missing template file argument");
+      }
+      m_includeExpr = ep.parsePrimary(data);
+    }
+   ~TemplateNodeInclude()
+    {
+      delete m_includeExpr;
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      dynamic_cast<TemplateContextImpl*>(c)->setLocation(m_templateName,m_line);
+      if (m_includeExpr)
+      {
+        QCString includeFile = m_includeExpr->resolve(c).toString();
+        if (includeFile.isEmpty())
+        {
+          warn(m_templateName,m_line,"invalid parameter for include command\n");
+        }
+        else
+        {
+          TemplateImpl *t = getTemplate();
+          if (t)
+          {
+            Template *it = t->engine()->loadByName(includeFile);
+            TemplateImpl *incTemplate = it ? dynamic_cast<TemplateImpl*>(it) : 0;
+            if (incTemplate)
+            {
+              incTemplate->render(ts,c);
+            }
+            else
+            {
+              warn(m_templateName,m_line,"failed to load template '%s' for include",includeFile.data()?includeFile.data():"");
+            }
+          }
+        }
+      }
+    }
+
+  private:
+    ExprAst *m_includeExpr;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'create' tag in a template */
+class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
+{
+  public:
+    TemplateNodeCreate(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeCreate>(parser,parent,line)
+    {
+      TRACE(("TemplateNodeCreate(%s)\n",data.data()));
+      ExpressionParser ep(m_templateName,line);
+      if (data.isEmpty())
+      {
+        warn(m_templateName,line,"create tag is missing arguments");
+      }
+      int i = data.find(" from ");
+      if (i==-1)
+      {
+        if (data.right(3)==" from")
+        {
+          warn(m_templateName,line,"create is missing template name after 'from' keyword");
+        }
+        else if (data=="from")
+        {
+          warn(m_templateName,line,"create needs a file name and a template name");
+        }
+        else
+        {
+          warn(m_templateName,line,"create is missing 'from' keyword");
+        }
+      }
+      else
+      {
+        ExpressionParser ep(m_templateName,line);
+        m_fileExpr = ep.parsePrimary(data.left(i).stripWhiteSpace());
+        m_templateExpr = ep.parsePrimary(data.mid(i+6).stripWhiteSpace());
+      }
+    }
+   ~TemplateNodeCreate()
+    {
+      delete m_templateExpr;
+      delete m_fileExpr;
+    }
+    void render(FTextStream &, TemplateContext *c)
+    {
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      if (m_templateExpr && m_fileExpr)
+      {
+        QCString templateFile = m_templateExpr->resolve(c).toString();
+        QCString outputFile = m_fileExpr->resolve(c).toString();
+        if (templateFile.isEmpty())
+        {
+          warn(m_templateName,m_line,"empty template name parameter for create command\n");
+        }
+        else if (outputFile.isEmpty())
+        {
+          warn(m_templateName,m_line,"empty file name parameter for create command\n");
+        }
+        else
+        {
+          TemplateImpl *t = getTemplate();
+          if (t)
+          {
+            Template *ct = t->engine()->loadByName(templateFile);
+            TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
+            if (createTemplate)
+            {
+              if (!ci->outputDirectory().isEmpty())
+              {
+                outputFile.prepend(ci->outputDirectory()+"/");
+              }
+              QFile f(outputFile);
+              if (f.open(IO_WriteOnly))
+              {
+                FTextStream ts(&f);
+                createTemplate->render(ts,c);
+                //delete createTemplate;
+              }
+              else
+              {
+                warn(m_templateName,m_line,"failed to open output file '%s' for create command",outputFile.data());
+              }
+            }
+            else
+            {
+              warn(m_templateName,m_line,"failed to load template '%s' for include",templateFile.data());
+            }
+          }
+        }
+      }
+    }
+
+  private:
+    ExprAst *m_templateExpr;
+    ExprAst *m_fileExpr;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'tree' tag in a template */
+class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
+{
+    struct TreeContext
+    {
+      TreeContext(TemplateNodeTree *o,const TemplateListIntf *l,TemplateContext *c)
+        : object(o), list(l), templateCtx(c) {}
+      TemplateNodeTree *object;
+      const TemplateListIntf *list;
+      TemplateContext  *templateCtx;
+    };
+  public:
+    TemplateNodeTree(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeTree>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeTree(%s)\n",data.data()));
+      ExpressionParser ep(m_templateName,line);
+      if (data.isEmpty())
+      {
+        warn(m_templateName,line,"recursetree tag is missing data argument");
+      }
+      m_treeExpr = ep.parsePrimary(data);
+      QStrList stopAt;
+      stopAt.append("endrecursetree");
+      parser->parse(this,line,stopAt,m_treeNodes);
+      parser->removeNextToken(); // skip over endrecursetree
+      TRACE(("}TemplateNodeTree(%s)\n",data.data()));
+    }
+    ~TemplateNodeTree()
+    {
+      delete m_treeExpr;
+    }
+    static TemplateVariant renderChildrenStub(const void *ctx, const QValueList<TemplateVariant> &)
+    {
+      return TemplateVariant(((TreeContext*)ctx)->object->
+                             renderChildren((const TreeContext*)ctx),TRUE);
+    }
+    QCString renderChildren(const TreeContext *ctx)
+    {
+      //printf("TemplateNodeTree::renderChildren(%d)\n",ctx->list->count());
+      // render all children of node to a string and return it
+      QGString result;
+      FTextStream ss(&result);
+      TemplateContext *c = ctx->templateCtx;
+      c->push();
+      TemplateVariant node;
+      TemplateListIntf::ConstIterator *it = ctx->list->createIterator();
+      for (it->toFirst();(it->current(node));it->toNext())
+      {
+        c->set("node",node);
+        bool hasChildren=FALSE;
+        const TemplateStructIntf *ns = node.toStruct();
+        if (ns) // node is a struct
+        {
+          TemplateVariant v = ns->get("children");
+          if (v.isValid()) // with a field 'children'
+          {
+            const TemplateListIntf *list = v.toList();
+            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;
+            }
+          }
+        }
+        if (!hasChildren)
+        {
+          c->set("children",TemplateVariant("")); // provide default
+          m_treeNodes.render(ss,c);
+        }
+      }
+      c->pop();
+      return result.data();
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      //printf("TemplateNodeTree::render()\n");
+      TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      TemplateVariant v = m_treeExpr->resolve(c);
+      const TemplateListIntf *list = v.toList();
+      if (list)
+      {
+        TreeContext ctx(this,list,c);
+        ts << renderChildren(&ctx);
+      }
+      else
+      {
+        warn(m_templateName,m_line,"recursetree's argument should be a list type");
+      }
+    }
+
+  private:
+    ExprAst         *m_treeExpr;
+    TemplateNodeList m_treeNodes;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'with' tag in a template */
+class TemplateNodeWith : public TemplateNodeCreator<TemplateNodeWith>
+{
+    struct Mapping
+    {
+      Mapping(const QCString &n,ExprAst *e) : name(n), value(e) {}
+     ~Mapping() { delete value; }
+      QCString name;
+      ExprAst *value;
+    };
+  public:
+    TemplateNodeWith(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeWith>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeWith(%s)\n",data.data()));
+      m_args.setAutoDelete(TRUE);
+      ExpressionParser expParser(parser->templateName(),line);
+      QValueList<QCString> args = split(data," ");
+      QValueListIterator<QCString> it = args.begin();
+      while (it!=args.end())
+      {
+        QCString arg = *it;
+        int j=arg.find('=');
+        if (j>0)
+        {
+          ExprAst *expr = expParser.parsePrimary(arg.mid(j+1));
+          if (expr)
+          {
+            m_args.append(new Mapping(arg.left(j),expr));
+          }
+        }
+        else
+        {
+          warn(parser->templateName(),line,"invalid argument '%s' for with tag",arg.data());
+        }
+        ++it;
+      }
+      QStrList stopAt;
+      stopAt.append("endwith");
+      parser->parse(this,line,stopAt,m_nodes);
+      parser->removeNextToken(); // skip over endwith
+      TRACE(("}TemplateNodeWith(%s)\n",data.data()));
+    }
+    ~TemplateNodeWith()
+    {
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      c->push();
+      QListIterator<Mapping> it(m_args);
+      Mapping *mapping;
+      for (it.toFirst();(mapping=it.current());++it)
+      {
+        TemplateVariant value = mapping->value->resolve(c);
+        ci->set(mapping->name,value);
+      }
+      m_nodes.render(ts,c);
+      c->pop();
+    }
+  private:
+    TemplateNodeList m_nodes;
+    QList<Mapping> m_args;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'set' tag in a template */
+class TemplateNodeCycle : public TemplateNodeCreator<TemplateNodeCycle>
+{
+  public:
+    TemplateNodeCycle(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeCycle>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeCycle(%s)\n",data.data()));
+      m_args.setAutoDelete(TRUE);
+      m_index=0;
+      ExpressionParser expParser(parser->templateName(),line);
+      QValueList<QCString> args = split(data," ");
+      QValueListIterator<QCString> it = args.begin();
+      while (it!=args.end())
+      {
+        ExprAst *expr = expParser.parsePrimary(*it);
+        if (expr)
+        {
+          m_args.append(expr);
+        }
+        ++it;
+      }
+      if (m_args.count()<2)
+      {
+          warn(parser->templateName(),line,"expected at least two arguments for cycle command, got %d",m_args.count());
+      }
+      TRACE(("}TemplateNodeCycle(%s)\n",data.data()));
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      if (m_index<m_args.count())
+      {
+        TemplateVariant v = m_args.at(m_index)->resolve(c);
+        if (v.type()==TemplateVariant::Function)
+        {
+          v = v.call(QValueList<TemplateVariant>());
+        }
+        if (ci->escapeIntf() && !v.raw())
+        {
+          ts << ci->escapeIntf()->escape(v.toString());
+        }
+        else
+        {
+          ts << v.toString();
+        }
+      }
+      if (++m_index==m_args.count()) // wrap around
+      {
+        m_index=0;
+      }
+    }
+  private:
+    uint m_index;
+    QList<ExprAst> m_args;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'set' tag in a template */
+class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
+{
+    struct Mapping
+    {
+      Mapping(const QCString &n,ExprAst *e) : name(n), value(e) {}
+     ~Mapping() { delete value; }
+      QCString name;
+      ExprAst *value;
+    };
+  public:
+    TemplateNodeSet(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeSet>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeSet(%s)\n",data.data()));
+      m_args.setAutoDelete(TRUE);
+      ExpressionParser expParser(parser->templateName(),line);
+      QValueList<QCString> args = split(data," ");
+      QValueListIterator<QCString> it = args.begin();
+      while (it!=args.end())
+      {
+        QCString arg = *it;
+        int j=arg.find('=');
+        if (j>0)
+        {
+          ExprAst *expr = expParser.parsePrimary(arg.mid(j+1));
+          if (expr)
+          {
+            m_args.append(new Mapping(arg.left(j),expr));
+          }
+        }
+        else
+        {
+          warn(parser->templateName(),line,"invalid argument '%s' for with tag",arg.data());
+        }
+        ++it;
+      }
+      TRACE(("}TemplateNodeSet(%s)\n",data.data()));
+    }
+    void render(FTextStream &, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      QListIterator<Mapping> it(m_args);
+      Mapping *mapping;
+      for (it.toFirst();(mapping=it.current());++it)
+      {
+        TemplateVariant value = mapping->value->resolve(c);
+        ci->set(mapping->name,value);
+      }
+    }
+  private:
+    QList<Mapping> m_args;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'spaceless' tag in a template */
+class TemplateNodeSpaceless : public TemplateNodeCreator<TemplateNodeSpaceless>
+{
+  public:
+    TemplateNodeSpaceless(TemplateParser *parser,TemplateNode *parent,int line,const QCString &)
+      : TemplateNodeCreator<TemplateNodeSpaceless>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeSpaceless()\n"));
+      QStrList stopAt;
+      stopAt.append("endspaceless");
+      parser->parse(this,line,stopAt,m_nodes);
+      parser->removeNextToken(); // skip over endwith
+      TRACE(("}TemplateNodeSpaceless()\n"));
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      bool wasSpaceless = ci->spacelessEnabled();
+      ci->enableSpaceless(TRUE);
+      m_nodes.render(ts,c);
+      ci->enableSpaceless(wasSpaceless);
+    }
+  private:
+    TemplateNodeList m_nodes;
+};
+
+//----------------------------------------------------------
+
+/** @brief Class representing an 'markers' tag in a template */
+class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
+{
+  public:
+    TemplateNodeMarkers(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeMarkers>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeMarkers(%s)\n",data.data()));
+      int i = data.find(" in ");
+      int w = data.find(" with ");
+      if (i==-1 || w==-1 || w<i)
+      {
+        warn(m_templateName,line,"markers tag as wrong format. Expected: markers <var> in <list> with <string_with_markers>");
+      }
+      else
+      {
+        ExpressionParser expParser(parser->templateName(),line);
+        m_var = data.left(i);
+        m_listExpr = expParser.parseVariable(data.mid(i+4,w-i-4));
+        m_patternExpr = expParser.parseVariable(data.right(data.length()-w-6));
+      }
+      QStrList stopAt;
+      stopAt.append("endmarkers");
+      parser->parse(this,line,stopAt,m_nodes);
+      parser->removeNextToken(); // skip over endmarkers
+      TRACE(("}TemplateNodeMarkers(%s)\n",data.data()));
+    }
+    void render(FTextStream &ts, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      if (!m_var.isEmpty() && m_listExpr && m_patternExpr)
+      {
+        TemplateVariant v = m_listExpr->resolve(c);
+        const TemplateListIntf *list = v.toList();
+        TemplateVariant patternStr = m_patternExpr->resolve(c);
+        if (list)
+        {
+          if (patternStr.type()==TemplateVariant::String)
+          {
+            TemplateListIntf::ConstIterator *it = list->createIterator();
+            c->push();
+            QCString str = patternStr.toString();
+            QRegExp marker("@[0-9]+"); // pattern for a marker, i.e. @0, @1 ... @12, etc
+            int index=0,newIndex,matchLen;
+            while ((newIndex=marker.match(str,index,&matchLen))!=-1)
+            {
+              ts << str.mid(index,newIndex-index); // write text before marker
+              bool ok;
+              uint entryIndex = str.mid(newIndex+1,matchLen-1).toUInt(&ok); // get marker id
+              TemplateVariant var;
+              uint i=0;
+              // search for list element at position id
+              for (it->toFirst(); (it->current(var)) && i<entryIndex; it->toNext(),i++) {}
+              if (ok && i==entryIndex) // found element
+              {
+                TemplateStruct s;
+                s.set("id",(int)i);
+                c->set("markers",&s);
+                c->set(m_var,var); // define local variable to hold element of list type
+                bool wasSpaceless = ci->spacelessEnabled();
+                ci->enableSpaceless(TRUE);
+                m_nodes.render(ts,c);
+                ci->enableSpaceless(wasSpaceless);
+              }
+              else if (!ok)
+              {
+                warn(m_templateName,m_line,"markers pattern string has invalid markers '%s'",str.data());
+              }
+              else if (i<entryIndex)
+              {
+                warn(m_templateName,m_line,"markers list does not an element for marker position %d",i);
+              }
+              index=newIndex+matchLen; // set index just after marker
+            }
+            ts << str.right(str.length()-index); // write text after last marker
+            c->pop();
+          }
+          else
+          {
+            warn(m_templateName,m_line,"markers requires a parameter of string type after 'with'!");
+          }
+        }
+        else
+        {
+          warn(m_templateName,m_line,"markers requires a parameter of list type after 'in'!");
+        }
+      }
+    }
+  private:
+    TemplateNodeList m_nodes;
+    QCString m_var;
+    ExprAst *m_listExpr;
+    ExprAst *m_patternExpr;
+};
+
+//----------------------------------------------------------
+
+/** @brief Factory class for creating tag AST nodes found in a template */
+class TemplateNodeFactory
+{
+  public:
+    typedef TemplateNode *(*CreateFunc)(TemplateParser *parser,
+                                        TemplateNode *parent,
+                                        int line,
+                                        const QCString &data);
+
+    static TemplateNodeFactory *instance()
+    {
+      static TemplateNodeFactory *instance = 0;
+      if (instance==0) instance = new TemplateNodeFactory;
+      return instance;
+    }
+
+    TemplateNode *create(const QCString &name,
+                         TemplateParser *parser,
+                         TemplateNode *parent,
+                         int line,
+                         const QCString &data)
+    {
+      if (m_registry.find(name)==0) return 0;
+      return ((CreateFunc)m_registry[name])(parser,parent,line,data);
+    }
+
+    void registerTemplateNode(const QCString &name,CreateFunc func)
+    {
+      m_registry.insert(name,(void*)func);
+    }
+
+    /** @brief Helper class for registering a template AST node */
+    template<class T> class AutoRegister
+    {
+      public:
+        AutoRegister<T>(const QCString &key)
+        {
+          TemplateNodeFactory::instance()->registerTemplateNode(key,T::createInstance);
+        }
+    };
+
+  private:
+    QDict<void> m_registry;
+};
+
+// 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<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");
+
+//----------------------------------------------------------
+
+TemplateBlockContext::TemplateBlockContext() : m_blocks(257)
+{
+  m_blocks.setAutoDelete(TRUE);
+}
+
+TemplateNodeBlock *TemplateBlockContext::get(const QCString &name) const
+{
+  QList<TemplateNodeBlock> *list = m_blocks.find(name);
+  if (list==0 || list->count()==0)
+  {
+    return 0;
+  }
+  else
+  {
+    return list->getLast();
+  }
+}
+
+TemplateNodeBlock *TemplateBlockContext::pop(const QCString &name) const
+{
+  QList<TemplateNodeBlock> *list = m_blocks.find(name);
+  if (list==0 || list->count()==0)
+  {
+    return 0;
+  }
+  else
+  {
+    return list->take(list->count()-1);
+  }
+}
+
+void TemplateBlockContext::add(TemplateNodeBlock *block)
+{
+  QList<TemplateNodeBlock> *list = m_blocks.find(block->name());
+  if (list==0)
+  {
+    list = new QList<TemplateNodeBlock>;
+    m_blocks.insert(block->name(),list);
+  }
+  list->prepend(block);
+}
+
+void TemplateBlockContext::add(TemplateBlockContext *ctx)
+{
+  QDictIterator< QList<TemplateNodeBlock> > di(ctx->m_blocks);
+  QList<TemplateNodeBlock> *list;
+  for (di.toFirst();(list=di.current());++di)
+  {
+    QListIterator<TemplateNodeBlock> li(*list);
+    TemplateNodeBlock *nb;
+    for (li.toFirst();(nb=li.current());++li)
+    {
+      add(nb);
+    }
+  }
+}
+
+void TemplateBlockContext::clear()
+{
+  m_blocks.clear();
+}
+
+void TemplateBlockContext::push(TemplateNodeBlock *block)
+{
+  QList<TemplateNodeBlock> *list = m_blocks.find(block->name());
+  if (list==0)
+  {
+    list = new QList<TemplateNodeBlock>;
+    m_blocks.insert(block->name(),list);
+  }
+  list->append(block);
+}
+
+
+//----------------------------------------------------------
+
+/** @brief Lexer class for turning a template into a list of tokens */
+class TemplateLexer
+{
+  public:
+    TemplateLexer(const QCString &fileName,const QCString &data);
+    void tokenize(QList<TemplateToken> &tokens);
+  private:
+    void addToken(QList<TemplateToken> &tokens,
+                  const char *data,int line,int startPos,int endPos,
+                  TemplateToken::Type type);
+    void reset();
+    QCString m_fileName;
+    QCString m_data;
+};
+
+TemplateLexer::TemplateLexer(const QCString &fileName,const QCString &data) :
+  m_fileName(fileName), m_data(data)
+{
+}
+
+void TemplateLexer::tokenize(QList<TemplateToken> &tokens)
+{
+  enum LexerStates
+  {
+    StateText,
+    StateBeginTemplate,
+    StateTag,
+    StateEndTag,
+    StateComment,
+    StateEndComment,
+    StateMaybeVar,
+    StateVariable,
+    StateEndVariable
+  };
+
+  const char *p=m_data.data();
+  int  state=StateText;
+  int  pos=0;
+  int  lastTokenPos=0;
+  int  startLinePos=0;
+  bool emptyOutputLine=TRUE;
+  int  line=1;
+  char c;
+  int  markStartPos=-1;
+  for (;(c=*p);p++,pos++)
+  {
+    switch (state)
+    {
+      case StateText:
+        if (c=='{') // {{ or {% or {# or something else
+        {
+          state=StateBeginTemplate;
+        }
+        else if (c!=' ' && c!='\t' && c!='\n') // non-whitepace text
+        {
+          emptyOutputLine=FALSE;
+        }
+        break;
+      case StateBeginTemplate:
+        switch (c)
+        {
+          case '%': // {%
+            state=StateTag;
+            markStartPos=pos-1;
+            break;
+          case '#': // {#
+            state=StateComment;
+            markStartPos=pos-1;
+            break;
+          case '{': // {{
+            state=StateMaybeVar;
+            markStartPos=pos-1;
+            break;
+          default:
+            state=StateText;
+            emptyOutputLine=FALSE;
+            break;
+        }
+        break;
+      case StateTag:
+        if (c=='\n')
+        {
+          warn(m_fileName,line,"unexpected new line inside {%%...%%} block");
+        }
+        else if (c=='%') // %} or something else
+        {
+          state=StateEndTag;
+        }
+        break;
+      case StateEndTag:
+        if (c=='}') // %}
+        {
+          // found tag!
+          state=StateText;
+          addToken(tokens,m_data.data(),line,lastTokenPos,
+                   emptyOutputLine ? startLinePos : markStartPos,
+                   TemplateToken::Text);
+          addToken(tokens,m_data.data(),line,markStartPos+2,
+                   pos-1,TemplateToken::Block);
+          lastTokenPos = pos+1;
+        }
+        else // something else
+        {
+          if (c=='\n')
+          {
+            warn(m_fileName,line,"unexpected new line inside {%%...%%} block");
+          }
+          state=StateTag;
+        }
+        break;
+      case StateComment:
+        if (c=='\n')
+        {
+          warn(m_fileName,line,"unexpected new line inside {#...#} block");
+        }
+        else if (c=='#') // #} or something else
+        {
+          state=StateEndComment;
+        }
+        break;
+      case StateEndComment:
+        if (c=='}') // #}
+        {
+          // found comment tag!
+          state=StateText;
+          addToken(tokens,m_data.data(),line,lastTokenPos,
+                   emptyOutputLine ? startLinePos : markStartPos,
+                   TemplateToken::Text);
+          lastTokenPos = pos+1;
+        }
+        else // something else
+        {
+          if (c=='\n')
+          {
+            warn(m_fileName,line,"unexpected new line inside {#...#} block");
+          }
+          state=StateComment;
+        }
+        break;
+      case StateMaybeVar:
+        switch (c)
+        {
+          case '#': // {{#
+            state=StateComment;
+            markStartPos=pos-1;
+            break;
+          case '%': // {{%
+            state=StateTag;
+            markStartPos=pos-1;
+            break;
+          default:  // {{
+            state=StateVariable;
+            break;
+        }
+        break;
+      case StateVariable:
+        if (c=='\n')
+        {
+          warn(m_fileName,line,"unexpected new line inside {{...}} block");
+        }
+        else if (c=='}') // }} or something else
+        {
+          state=StateEndVariable;
+        }
+        break;
+      case StateEndVariable:
+        if (c=='}') // }}
+        {
+          // found variable tag!
+          state=StateText;
+          addToken(tokens,m_data.data(),line,lastTokenPos,
+                   emptyOutputLine ? startLinePos : markStartPos,
+                   TemplateToken::Text);
+          addToken(tokens,m_data.data(),line,markStartPos+2,
+                   pos-1,TemplateToken::Variable);
+          lastTokenPos = pos+1;
+        }
+        else // something else
+        {
+          if (c=='\n')
+          {
+            warn(m_fileName,line,"unexpected new line inside {{...}} block");
+          }
+          state=StateVariable;
+        }
+        break;
+    }
+    if (c=='\n') // new line
+    {
+      state=StateText;
+      startLinePos=pos+1;
+      // if the current line only contain commands and whitespace,
+      // then skip it in the output by moving lastTokenPos
+      if (markStartPos!=-1 && emptyOutputLine) lastTokenPos = startLinePos;
+      // reset markers
+      markStartPos=-1;
+      line++;
+      emptyOutputLine=TRUE;
+    }
+  }
+  if (lastTokenPos<pos)
+  {
+    addToken(tokens,m_data.data(),line,
+             lastTokenPos,pos,
+             TemplateToken::Text);
+  }
+}
+
+void TemplateLexer::addToken(QList<TemplateToken> &tokens,
+                             const char *data,int line,
+                             int startPos,int endPos,
+                             TemplateToken::Type type)
+{
+  if (startPos<endPos)
+  {
+    int len = endPos-startPos+1;
+    QCString text(len+1);
+    qstrncpy(text.data(),data+startPos,len);
+    text[len]='\0';
+    if (type!=TemplateToken::Text) text = text.stripWhiteSpace();
+    tokens.append(new TemplateToken(type,text,line));
+  }
+}
+
+//----------------------------------------------------------
+
+TemplateParser::TemplateParser(const QCString &templateName,
+                               QList<TemplateToken> &tokens) :
+   m_templateName(templateName), m_tokens(tokens)
+{
+}
+
+void TemplateParser::parse(
+                     TemplateNode *parent,int line,const QStrList &stopAt,
+                     QList<TemplateNode> &nodes)
+{
+  TRACE(("{TemplateParser::parse\n"));
+  // process the tokens. Build node list
+  while (hasNextToken())
+  {
+    TemplateToken *tok = takeNextToken();
+    //printf("%p:Token type=%d data='%s' line=%d\n",
+    //       parent,tok->type,tok->data.data(),tok->line);
+    switch(tok->type)
+    {
+      case TemplateToken::Text:
+        nodes.append(new TemplateNodeText(this,parent,tok->line,tok->data));
+        break;
+      case TemplateToken::Variable:
+        nodes.append(new TemplateNodeVariable(this,parent,tok->line,tok->data));
+        break;
+      case TemplateToken::Block:
+        {
+          QCString command = tok->data;
+          int sep = command.find(' ');
+          if (sep!=-1)
+          {
+            command=command.left(sep);
+          }
+          if (stopAt.contains(command))
+          {
+            prependToken(tok);
+            TRACE(("}TemplateParser::parse: stop\n"));
+            return;
+          }
+          QCString arg;
+          if (sep!=-1)
+          {
+            arg = tok->data.mid(sep+1);
+          }
+          TemplateNode *node = TemplateNodeFactory::instance()->
+                               create(command,this,parent,tok->line,arg);
+          if (node)
+          {
+            nodes.append(node);
+          }
+          else if (command=="empty"          || command=="else"         ||
+                   command=="endif"          || command=="endfor"       ||
+                   command=="endblock"       || command=="endwith"      ||
+                   command=="endrecursetree" || command=="endspaceless" ||
+                   command=="endmarkers"     || command=="endmsg"       ||
+                   command=="endrepeat")
+          {
+            warn(m_templateName,tok->line,"Found tag '%s' without matching start tag",command.data());
+          }
+          else
+          {
+            warn(m_templateName,tok->line,"Unknown tag '%s'",command.data());
+          }
+        }
+        break;
+    }
+    delete tok;
+  }
+  if (!stopAt.isEmpty())
+  {
+    QStrListIterator it(stopAt);
+    const char *s;
+    QCString options;
+    for (it.toFirst();(s=it.current());++it)
+    {
+      if (!options.isEmpty()) options+=", ";
+      options+=s;
+    }
+    warn(m_templateName,line,"Unclosed tag in template, expected one of: %s",
+        options.data());
+  }
+  TRACE(("}TemplateParser::parse: last token\n"));
+}
+
+bool TemplateParser::hasNextToken() const
+{
+  return !m_tokens.isEmpty();
+}
+
+TemplateToken *TemplateParser::takeNextToken()
+{
+  return m_tokens.take(0);
+}
+
+const TemplateToken *TemplateParser::currentToken() const
+{
+  return m_tokens.first();
+};
+
+void TemplateParser::removeNextToken()
+{
+  m_tokens.removeFirst();
+}
+
+void TemplateParser::prependToken(const TemplateToken *token)
+{
+  m_tokens.prepend(token);
+}
+
+
+
+//----------------------------------------------------------
+
+
+TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCString &data)
+  : TemplateNode(0)
+{
+  m_name = name;
+  m_engine = engine;
+  TemplateLexer lexer(name,data);
+  QList<TemplateToken> tokens;
+  tokens.setAutoDelete(TRUE);
+  lexer.tokenize(tokens);
+  TemplateParser parser(name,tokens);
+  parser.parse(this,1,QStrList(),m_nodes);
+}
+
+void TemplateImpl::render(FTextStream &ts, TemplateContext *c)
+{
+  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;
+      for (li.toFirst();(n=li.current());++li)
+      {
+        TemplateNodeBlock *nb = dynamic_cast<TemplateNodeBlock*>(n);
+        if (nb)
+        {
+          bc->add(nb);
+        }
+      }
+    }
+    m_nodes.render(ts,c);
+  }
+}
+
+//----------------------------------------------------------
+
+/** @brief Private data of the template engine */
+class TemplateEngine::Private
+{
+  public:
+    Private(TemplateEngine *engine) : m_templateCache(17), m_engine(engine)
+    { m_templateCache.setAutoDelete(TRUE); }
+    Template *loadByName(const QCString &fileName) const
+    {
+      Template *templ = m_templateCache.find(fileName);
+      if (templ==0)
+      {
+        QFile f(fileName);
+        if (f.open(IO_ReadOnly))
+        {
+          uint size=f.size();
+          char *data = new char[size+1];
+          if (data)
+          {
+            data[size]=0;
+            if (f.readBlock(data,f.size()))
+            {
+              templ = new TemplateImpl(m_engine,fileName,data);
+              m_templateCache.insert(fileName,templ);
+            }
+            delete[] data;
+          }
+        }
+        else
+        {
+          err("Cound not open template file %s\n",fileName.data());
+        }
+      }
+      return templ;
+    }
+
+  private:
+    mutable QDict<Template> m_templateCache;
+    TemplateEngine *m_engine;
+};
+
+TemplateEngine::TemplateEngine()
+{
+  p = new Private(this);
+}
+
+TemplateEngine::~TemplateEngine()
+{
+  delete p;
+}
+
+TemplateContext *TemplateEngine::createContext() const
+{
+  return new TemplateContextImpl;
+}
+
+Template *TemplateEngine::loadByName(const QCString &fileName)
+{
+  return p->loadByName(fileName);
+}
+
diff --git a/src/template.h b/src/template.h
new file mode 100644 (file)
index 0000000..9e3b106
--- /dev/null
@@ -0,0 +1,460 @@
+#ifndef TEMPLATE_H
+#define TEMPLATE_H
+
+#include <qcstring.h>
+#include <qvaluelist.h>
+
+class FTextStream;
+
+class TemplateListIntf;
+class TemplateStructIntf;
+class TemplateEngine;
+
+/** @defgroup template_api Template API 
+ *
+ *  This is the API for a 
+ *  <a href="https://docs.djangoproject.com/en/1.6/topics/templates/">Django</a> 
+ *  compatible template system written in C++.
+ *  It is somewhat inspired by Stephen Kelly's 
+ *  <a href="http://www.gitorious.org/grantlee/pages/Home">Grantlee</a>.
+ *
+ *  A template is simply a text file. 
+ *  A template contains \b variables, which get replaced with values when the 
+ *  template is evaluated, and \b tags, which control the logic of the template.
+ *
+ *  Variables look like this: `{{ variable }}`
+ *  When the template engine encounters a variable, it evaluates that variable and 
+ *  replaces it with the result. Variable names consist of any combination of 
+ *  alphanumeric characters and the underscore ("_").
+ *  Use a dot (.) to access attributes of a structured variable.
+ *  
+ *  One can modify variables for display by using \b filters, for example:
+ *  `{{ value|default:"nothing" }}`
+ *
+ *  Tags look like this: `{% tag %}`. Tags are more complex than variables: 
+ *  Some create text in the output, some control flow by performing loops or logic, 
+ *  and some load external information into the template to be used by later variables.
+ *
+ *  To comment-out part of a line in a template, use the comment syntax: 
+ *  `{# comment text #}`.
+ *
+ *  Supported Django tags:
+ *  - `for ... empty ... endfor`
+ *  - `if ... else ... endif`
+ *  - `block ... endblock`
+ *  - `extend`
+ *  - `include`
+ *  - `with ... endwith`
+ *  - `spaceless ... endspaceless`
+ *  - `cycle`
+ *
+ *  Extension tags:
+ *  - `create` which instantiates a template and writes the result to a file.
+ *     The syntax is `{% create 'filename' from 'template' %}`.
+ *  - `recursetree`
+ *  - `markers`
+ *  - `msg` ... `endmsg`
+ *  - `set`
+ *
+ *  Supported Django filters:
+ *  - `default`
+ *  - `length`
+ *  - `add`
+ *  - `divisibleby`
+ *
+ *  Extension filters:
+ *  - `stripPath`
+ *  - `nowrap`
+ *  - `prepend`
+ *  - `append`
+ *
+ *  @{
+ */
+
+/** @brief Variant type which can hold one value of a fixed set of types. */
+class TemplateVariant
+{
+  public:
+    /** @brief Helper class to create a delegate that can store a function/method call. */
+    class Delegate
+    {
+      public:
+        /** Callback type to use when creating a delegate from a function. */
+        typedef TemplateVariant (*StubType)(const void *obj, const QValueList<TemplateVariant> &args);
+
+        Delegate() : m_objectPtr(0) , m_stubPtr(0) {}
+
+        /** Creates a delegate given an object. The method to call is passed as a template parameter */
+        template <class T, TemplateVariant (T::*TMethod)(const QValueList<TemplateVariant> &) const>
+        static Delegate fromMethod(const T* objectPtr)
+        {
+          Delegate d;
+          d.m_objectPtr = objectPtr;
+          d.m_stubPtr   = &methodStub<T, TMethod>;
+          return d;
+        }
+        /** Creates a delegate given an object, and a plain function. */
+        static Delegate fromFunction(const void *obj,StubType func)
+        {
+          Delegate d;
+          d.m_objectPtr = obj;
+          d.m_stubPtr = func;
+          return d;
+        }
+
+        /** Invokes the function/method stored in the delegate */
+        TemplateVariant operator()(const QValueList<TemplateVariant> &args) const
+        {
+          return (*m_stubPtr)(m_objectPtr, args);
+        }
+
+      private:
+        const void* m_objectPtr;
+        StubType    m_stubPtr;
+
+        template <class T, TemplateVariant (T::*TMethod)(const QValueList<TemplateVariant> &) const>
+        static TemplateVariant methodStub(const void* objectPtr, const QValueList<TemplateVariant> &args)
+        {
+          T* p = (T*)(objectPtr);
+          return (p->*TMethod)(args);
+        }
+    };
+
+    /** Types of data that can be stored in a TemplateVariant */
+    enum Type { None, Bool, Integer, String, Struct, List, Function };
+
+    /** Returns the type of the value stored in the variant */
+    Type type() const;
+
+    /** Returns TRUE if the variant holds a valid value, or FALSE otherwise */
+    bool isValid() const;
+
+    /** Constructs an invalid variant. */
+    TemplateVariant();
+
+    /** Constructs a new variant with a boolean value \a b. */
+    explicit TemplateVariant(bool b);
+
+    /** Constructs a new variant with a integer value \a v. */
+    TemplateVariant(int v);
+
+    /** Constructs a new variant with a string value \a s. */
+    TemplateVariant(const char *s,bool raw=FALSE);
+
+    /** Constructs a new variant with a string value \a s. */
+    TemplateVariant(const QCString &s,bool raw=FALSE);
+
+    /** Constructs a new variant with a struct value \a s. 
+     *  @note. Only a pointer to the struct is stored. The caller
+     *  is responsible to manage the memory for the struct object.
+     */
+    TemplateVariant(const TemplateStructIntf *s);
+
+    /** Constructs a new variant with a list value \a l. 
+     *  @note. Only a pointer to the struct is stored. The caller
+     *  is responsible to manage the memory for the list object.
+     */
+    TemplateVariant(const TemplateListIntf *l);
+
+    /** Constructs a new variant which represents a method call
+     *  @param[in] delegate Delegate object to invoke when
+     *             calling call() on this variant.
+     *  @note Use TemplateVariant::Delegate::fromMethod() and
+     *  TemplateVariant::Delegate::fromFunction() to create
+     *  Delegate objects.
+     */
+    TemplateVariant(const Delegate &delegate);
+
+    /** Destroys the Variant object */
+    ~TemplateVariant();
+
+    /** Constructs a copy of the variant, \a v, 
+     *  passed as the argument to this constructor.
+     */
+    TemplateVariant(const TemplateVariant &v);
+
+    /** Assigns the value of the variant \a v to this variant. */
+    TemplateVariant &operator=(const TemplateVariant &v);
+
+    /** Compares this QVariant with v and returns true if they are equal; 
+     *  otherwise returns false.
+     */
+    bool operator==(TemplateVariant &other);
+
+    /** Returns the variant as a string. */
+    QCString            toString() const;
+
+    /** Returns the variant as a boolean. */
+    bool                toBool() const;
+
+    /** Returns the variant as an integer. */
+    int                 toInt() const;
+
+    /** Returns the pointer to list referenced by this variant 
+     *  or 0 if this variant does not have list type. 
+     */
+    const TemplateListIntf   *toList() const;
+
+    /** Returns the pointer to struct referenced by this variant 
+     *  or 0 if this variant does not have struct type. 
+     */
+    const TemplateStructIntf *toStruct() const;
+
+    /** Return the result of apply this function with \a args.
+     *  Returns an empty string if the variant type is not a function.
+     */
+    TemplateVariant call(const QValueList<TemplateVariant> &args);
+
+    /** Sets whether or not the value of the Variant should be 
+     *  escaped or written as-is (raw).
+     *  @param[in] b TRUE means write as-is, FALSE means apply escaping.
+     */
+    void setRaw(bool b);
+
+    /** Returns whether or not the value of the Value is raw.
+     *  @see setRaw()
+     */
+    bool raw() const;
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Abstract read-only interface for a context value of type list. 
+ *  @note The values of the list are TemplateVariants.
+ */
+class TemplateListIntf
+{
+  public:
+    /** @brief Abstract interface for a iterator of a list. */
+    class ConstIterator
+    {
+      public:
+        /** Destructor for the iterator */
+        virtual ~ConstIterator() {}
+        /** Moves iterator to the first element in the list */
+        virtual void toFirst() = 0;
+        /** Moves iterator to the last element in the list */
+        virtual void toLast() = 0;
+        /** Moves iterator to the next element in the list */
+        virtual void toNext() = 0;
+        /** Moves iterator to the previous element in the list */
+        virtual void toPrev() = 0;
+        /* Returns TRUE if the iterator points to a valid element
+         * in the list, or FALSE otherwise.
+         * If TRUE is returned, the value pointed to be the 
+         * iterator is assigned to \a v.
+         */
+        virtual bool current(TemplateVariant &v) const = 0;
+    };
+
+    /** Destroys the list */
+    virtual ~TemplateListIntf() {}
+
+    /** Returns the number of elements in the list */
+    virtual int count() const = 0;
+
+    /** Returns the element at index position \a index. */
+    virtual TemplateVariant  at(int index) const = 0;
+
+    /** Creates a new iterator for this list. 
+     *  @note the user should call delete on the returned pointer.
+     */
+    virtual TemplateListIntf::ConstIterator *createIterator() const = 0;
+};
+
+/** @brief Default implementation of a context value of type list. */
+class TemplateList : public TemplateListIntf
+{
+  public:
+    /** Creates a list */
+    TemplateList();
+    /** Destroys the list */
+   ~TemplateList();
+
+    // TemplateListIntf methods
+    virtual int  count() const;
+    virtual TemplateVariant at(int index) const;
+    virtual TemplateListIntf::ConstIterator *createIterator() const;
+    
+    /** Appends element \a v to the end of the list */
+    virtual void append(const TemplateVariant &v);
+
+  private:
+    friend class TemplateListConstIterator;
+    class Private;
+    Private *p;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Abstract interface for a context value of type struct. */
+class TemplateStructIntf
+{
+  public:
+    /** Destroys the struct */
+    virtual ~TemplateStructIntf() {}
+
+    /** Gets the value for a field name.
+     *  @param[in] name The name of the field.
+     */
+    virtual TemplateVariant get(const char *name) const = 0;
+};
+
+
+/** @brief Default implementation of a context value of type struct. */
+class TemplateStruct : public TemplateStructIntf
+{
+  public:
+    /** Creates a struct */
+    TemplateStruct();
+    /** Destroys the struct */
+    virtual ~TemplateStruct();
+
+    // TemplateStructIntf methods
+    virtual TemplateVariant get(const char *name) const;
+
+    /** Sets the value the field of a struct
+     *  @param[in] name The name of the field.
+     *  @param[in] v The value to set.
+     */
+    virtual void set(const char *name,const TemplateVariant &v);
+
+  private:
+    class Private;
+    Private *p;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Interface used to escape characters in a string */
+class TemplateEscapeIntf
+{
+  public:
+    /** Returns the \a input after escaping certain characters */
+    virtual QCString escape(const QCString &input) = 0;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Interface used to remove redundant spaces inside a spaceless block */
+class TemplateSpacelessIntf
+{
+  public:
+    /** Returns the \a input after removing redundant whitespace */
+    virtual QCString remove(const QCString &input) = 0;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Abstract interface for a template context. 
+ *  
+ *  A Context consists of a stack of dictionaries.
+ *  A dictionary consists of a mapping of string keys onto TemplateVariant values.
+ *  A key is searched starting with the dictionary at the top of the stack
+ *  and searching downwards until it is found. The stack is used to create
+ *  local scopes.
+ *  @note This object must be created by TemplateEngine
+ */
+class TemplateContext
+{
+  public:
+    virtual ~TemplateContext() {}
+
+    /** Push a new scope on the stack. */
+    virtual void push() = 0;
+
+    /** Pop the current scope from the stack. */
+    virtual void pop() = 0;
+
+    /** Sets a value in the current scope. 
+     *  @param[in] name The name of the value; the key in the dictionary.
+     *  @param[in] v The value associated with the key.
+     *  @note When a given key is already present, 
+     *  its value will be replaced by \a v
+     */
+    virtual void set(const char *name,const TemplateVariant &v) = 0;
+
+    /** Gets the value for a given key
+     *  @param[in] name The name of key.
+     *  @returns The value, which can be an invalid variant in case the
+     *  key was not found.
+     */
+    virtual TemplateVariant get(const QCString &name) const = 0;
+
+    /** Returns a pointer to the value corresponding to a given key.
+     *  @param[in] name The name of key.
+     *  @returns A pointer to the value, or 0 in case the key was not found.
+     */
+    virtual const TemplateVariant *getRef(const QCString &name) const = 0;
+
+    /** When files are create (i.e. by {% create ... %}) they written
+     *  to the directory \a dir.
+     */
+    virtual void setOutputDirectory(const QCString &dir) = 0;
+
+    /** Sets the interface that will be used for escaping the result
+     *  of variable expansion before writing it to the output.
+     */
+    virtual void setEscapeIntf(TemplateEscapeIntf *intf) = 0;
+
+    /** Sets the interface that will be used inside a spaceless block
+     *  to remove any redundant whitespace.
+     */
+    virtual void setSpacelessIntf(TemplateSpacelessIntf *intf) = 0;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Abstract interface for a template. 
+ *  @note Must be created by TemplateEngine
+ */
+class Template
+{
+  public:
+    /** Destructor */
+    virtual ~Template() {}
+
+    /** Renders a template instance to a stream. 
+     *  @param[in] ts The text stream to write the results to.
+     *  @param[in] c The context containing data that can be used
+     *  when instantiating the template.
+     */
+    virtual void render(FTextStream &ts,TemplateContext *c) = 0;
+};
+
+//------------------------------------------------------------------------
+
+/** @brief Engine to create templates and template contexts. */
+class TemplateEngine
+{
+  public:
+    /** Create a template engine. */
+    TemplateEngine();
+
+    /** Destroys the template engine. */
+   ~TemplateEngine();
+
+    /** Creates a new context that can be using to render a template.
+     *  @see Template::render()
+     */
+    TemplateContext *createContext() const;
+
+    /** Creates a new template whole contents are in a file.
+     *  @param[in] fileName The name of the file containing the 
+     *             template data
+     *  @return the new template, the caller will be the owner.
+     */
+    Template *loadByName(const QCString &fileName);
+
+  private:
+    class Private;
+    Private *p;
+};
+
+/** @} */
+
+#endif
index 81fd9e8..9045d21 100644 (file)
@@ -106,6 +106,8 @@ class TextDocVisitor : public DocVisitor
 
     void visitPre(DocMscFile *) {}
     void visitPost(DocMscFile *) {}
+    void visitPre(DocDiaFile *) {}
+    void visitPost(DocDiaFile *) {}
     void visitPre(DocLink *) {}
     void visitPost(DocLink *) {}
     void visitPre(DocRef *) {}
@@ -130,6 +132,8 @@ class TextDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *) {}
     void visitPre(DocVhdlFlow *) {}
     void visitPost(DocVhdlFlow *) {}
+    void visitPre(DocParBlock *) {}
+    void visitPost(DocParBlock *) {}
 
   private:
 
diff --git a/src/to_c_cmd.py b/src/to_c_cmd.py
new file mode 100755 (executable)
index 0000000..52785f1
--- /dev/null
@@ -0,0 +1,8 @@
+# place " at begin of each line
+# escape existing '\' and '"'
+# remove \n at the end of the line (sometimes the last line does not have a \n
+#   so we cannot do a replacement with some other text)
+# place an escaped \n and " at the end of each line
+import sys
+for line in sys.stdin:
+    sys.stdout.write('"' + line.replace('\\','\\\\').replace('"','\\"').replace('\n','') + '\\n"\n')
index b136f59..f9dba84 100644 (file)
@@ -49,7 +49,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0
      */
     virtual QCString idLanguage()
     {
-      return "brazil";
+      return "brazilian";
     }
 
     /*! Used to get the command(s) for the language support. This method
index cb933df..0535b6b 100644 (file)
@@ -1825,7 +1825,7 @@ class TranslatorEnglish : public Translator
 
     /*! Header for the page with bibliographic citations */
     virtual QCString trCiteReferences()
-    { return "Bibliographic References"; }
+    { return "Bibliography"; }
 
     /*! Text for copyright paragraph */
     virtual QCString trCopyright()
index b9bbe14..bcc0572 100644 (file)
@@ -35,7 +35,7 @@
 #define TRANSLATOR_FA_H
 
 #define HtmlRightToLeft     QCString("<div dir=\"rtl\">")
-#define HtmlLeftToRight     QCString("<div dir=\"rtl\">")
+#define HtmlLeftToRight     QCString("<div dir=\"ltr\">")
 #define HtmlDivEnd          QCString("</div>")
 
 
index 45ff252..28468e7 100644 (file)
@@ -1076,9 +1076,8 @@ class TranslatorFrench : public Translator
             "    Used *m_usedClass;\n"
             "};\n"
             "\\endcode\n"
-            "Si la valeur 240 est attribuée au tag \\c MAX_DOT_GRAPH_HEIGHT "
-            "du fichier de configuration, cela génèrera le graphe suivant :"
-            "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+            "Cela aboutira au graphe suivant :"
+            "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
             "<p>\n"
             "Les rectangles du graphe ci-dessus ont la signification suivante :\n"
             "<ul>\n"
@@ -1870,7 +1869,7 @@ class TranslatorFrench : public Translator
       static const char *days[]   = { "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche" };
       static const char *months[] = { "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre" };
       QCString sdate;
-      sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
+      sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
       if (includeTime)
       {
         QCString stime;
@@ -1903,37 +1902,37 @@ class TranslatorFrench : public Translator
 
     /*! Detail level selector shown for hierarchical indices */
     virtual QCString trDetailLevel()
-    { return "detail level"; }
+    { return "Niveau de détails"; }
 
     /*! Section header for list of template parameters */
     virtual QCString trTemplateParameters()
-    { return "Template Parameters"; }
+    { return "Paramètres du template"; }
 
     /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
     virtual QCString trAndMore(const QCString &number)
-    { return "and "+number+" more..."; }
+    { return "et "+number+" de plus..."; }
 
     /*! Used file list for a Java enum */
     virtual QCString trEnumGeneratedFromFiles(bool single)
-    { QCString result = "The documentation for this enum was generated from the following file";
-      if (!single) result += "s";
-      result+=":";
+    { QCString result = "La documentation pour cette énumération a été générée à partir ";
+      if (!single) result += "du fichier suivant"; else result += "des fichiers suivants";
+      result+=" :";
       return result;
     }
 
     /*! Header of a Java enum page (Java enums are represented as classes). */
     virtual QCString trEnumReference(const char *name)
-    { return QCString(name)+" Enum Reference"; }
+    { return QCString(name)+" Référence de l'énumération"; }
 
     /*! Used for a section containing inherited members */
     virtual QCString trInheritedFrom(const char *members,const char *what)
-    { return QCString(members)+" inherited from "+what; }
+    { return QCString(members)+" hérités de "+what; }
 
     /*! Header of the sections with inherited members specific for the
      *  base class(es)
      */
     virtual QCString trAdditionalInheritedMembers()
-    { return "Additional Inherited Members"; }
+    { return "Membres hérités additionnels"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.8.2
@@ -1945,8 +1944,8 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trPanelSynchronisationTooltip(bool enable)
     {
-      QCString opt = enable ? "enable" : "disable";
-      return "click to "+opt+" panel synchronisation";
+      QCString opt = enable ? "activer" : "désactiver";
+      return "cliquez pour "+opt+" la synchronisation du panel";
     }
 
     /*! Used in a method of an Objective-C class that is declared in a
@@ -1955,7 +1954,7 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trProvidedByCategory()
     {
-      return "Provided by category @1.";
+      return "Déclarée dans la catégorie @1.";
     }
 
     /*! Used in a method of an Objective-C category that extends a class.
@@ -1964,7 +1963,7 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trExtendsClass()
     {
-      return "Extends class @1.";
+      return "Dérive la classe @1.";
     }
 
     /*! Used as the header of a list of class methods in Objective-C.
@@ -1972,7 +1971,7 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trClassMethods()
     {
-      return "Class Methods";
+      return "Méthodes de classe";
     }
 
     /*! Used as the header of a list of instance methods in Objective-C.
@@ -1980,14 +1979,14 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trInstanceMethods()
     {
-      return "Instance Methods";
+      return "Méthodes d'instance";
     }
 
     /*! Used as the header of the member functions of an Objective-C class.
      */
     virtual QCString trMethodDocumentation()
     {
-      return "Method Documentation";
+      return "Documentation des méthodes";
     }
 
     /*! Used as the title of the design overview picture created for the
@@ -1995,7 +1994,7 @@ class TranslatorFrench : public Translator
      */
     virtual QCString trDesignOverview()
     {
-      return "Design Overview";
+      return "Vue d'ensemble";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -2004,53 +2003,53 @@ class TranslatorFrench : public Translator
 
     /** old style UNO IDL services: implemented interfaces */
     virtual QCString trInterfaces()
-    { return "Exported Interfaces"; }
+    { return "Interfaces exportées"; }
 
     /** old style UNO IDL services: inherited services */
     virtual QCString trServices()
-    { return "Included Services"; }
+    { return "Services inclus"; }
 
     /** UNO IDL constant groups */
     virtual QCString trConstantGroups()
-    { return "Constant Groups"; }
+    { return "Groupes constants"; }
 
     /** UNO IDL constant groups */
     virtual QCString trConstantGroupReference(const char *namespaceName)
     {
-      QCString result=namespaceName;
-      result+=" Constant Group Reference";
+      QCString result="Référence du groupe constant ";
+      result+=namespaceName;
       return result;
     }
     /** UNO IDL service page title */
     virtual QCString trServiceReference(const char *sName)
     {
-      QCString result=(QCString)sName;
-      result+=" Service Reference";
+      QCString result="Référence du service ";
+      result+=(QCString)sName;
       return result;
     }
     /** UNO IDL singleton page title */
     virtual QCString trSingletonReference(const char *sName)
     {
-      QCString result=(QCString)sName;
-      result+=" Singleton Reference";
+      QCString result="Référence du singleton ";
+      result+=(QCString)sName;
       return result;
     }
     /** UNO IDL service page */
     virtual QCString trServiceGeneratedFromFiles(bool single)
     {
       // single is true implies a single file
-      QCString result=(QCString)"The documentation for this service "
-                                "was generated from the following file";
-      if (single) result+=":"; else result+="s:";
+      QCString result=(QCString)"La documentation pour ce service "
+                                "a été générée par ";
+      if (single) result+="le fichier suivant :"; else result+="les fichiers suivants :";
       return result;
     }
     /** UNO IDL singleton page */
     virtual QCString trSingletonGeneratedFromFiles(bool single)
     {
       // single is true implies a single file
-      QCString result=(QCString)"The documentation for this singleton "
-                                "was generated from the following file";
-      if (single) result+=":"; else result+="s:";
+      QCString result=(QCString)"La documentation pour ce singleton "
+                                "a été générée par ";
+      if (single) result+="le fichier suivant :"; else result+="les fichiers suivants :";
       return result;
     }
 
@@ -2058,4 +2057,4 @@ class TranslatorFrench : public Translator
 
 };
 
-#endif
+#endif
\ No newline at end of file
index 22b9cd7..febf353 100644 (file)
  * First Translation
  *      by Kenji Nagamatsu
  * 1.2.12)
- * Update and Shift-Jis(_WIN32)
+ * Update and Shift-Jis(_WIN32) -> converted UTF-8 at version 1.8.5
  *      by Ryunosuke Sato (30-Dec-2001)
  * 1.5.8)
  * Translation for 1.5.8.
  *      by Hiroki Iseri (18-Feb-2009)
+ * 1.8.5)
+ * Translation Added for 1.8.4 and revised
+ *      by Suzumizaki-Kimitaka (30-Aug-2013)
  */
-
+/*
+Messages for translators written in Japanese:
+1.8.5 への追加にあたって過去の翻訳者三名への連絡を試みたところ、
+井芹さん(Hiroki Iseri)さんからメールのお返事をいただけました。
+その際教えていただいた過去の経緯によりますと当時連絡可能だった方々は
+揃って従来訳から改変追加して構わない旨を表明されていたとのことです。
+Doxygen の開発の方でもそれはそれでいーんじゃん?みたいな感じだったようで。
+
+井芹さんも同様の見解で、私(鈴見咲=Suzumizaki-Kimitaka)も
+今後この翻訳に関わり続けられるかは非常に怪しいところですので
+将来の追加訳・既存訳改良は臆することなく進めていってよいのでは
+ないかと思います。無論作業の衝突があるのは不経済ですので現在進行形で
+活発に更新している方がいないかの簡単な確認(MLとかGitとか)をやるのも
+いいでしょうし、それでも偶然衝突したら不運を諦めて相互に調整しましょう。
+
+当面なさそうですが訳語の選択で喧嘩になることもあるかもしれません。
+そのときは gettext を利用するようなパッチを作って doxygen の開発に
+適用を求めるのが一番ではないかなと思います。
+
+1.6.0以前の既存の訳についても多少弄りました。
+特に structure を構造体ではなく構成としていたのはあんまりでしたので。
+ほか、C++ での利用前提で改変したところもありますが、それが他の言語で
+問題のようでしたらお手数掛けて申し訳ないですが相応に再修正しちゃって
+構いません。
+
+その際 doc/maintainers.txt を修正してから python doc/translator.py を
+実行する点にご注意下さい。私のところに search 鈴見咲君高 と書いたのは
+同姓同名がまず考えられないというのが大前提ですのでこちらもご注意。
+
+"詳解"の語が厳しすぎると思う向きはありましょうが、その程度には書けと。
+明記されてないけど使われてる動作や戻り値が想定内なのか想定外なのか
+わからんのはメンテで困るじゃないですか。
+
+(2013-08-30, 鈴見咲君高)
+*/
 #ifndef TRANSLATOR_JP_H
 #define TRANSLATOR_JP_H
 
-class TranslatorJapanese : public TranslatorAdapter_1_6_0
+class TranslatorJapanese : public Translator
 {
   public:
     virtual QCString idLanguage()
@@ -45,57 +82,57 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! used in the compound documentation before a list of related functions. */
     virtual QCString trRelatedFunctions()
-    { return "関連する関数"; }
+    { return "関連関数"; }
 
     /*! subscript for the related functions. */
     virtual QCString trRelatedSubscript()
-    { return "ï¼\88ã\81\93ã\82\8cã\82\89ã\81¯ã\83¡ã\82½ã\83\83ã\83\89ã\81§ã\81ªã\81\84ã\81\93ã\81¨ã\81«æ³¨æ\84\8f)"; }
+    { return "ï¼\88ã\81\93ã\82\8cã\82\89ã\81¯ã\83¡ã\82½ã\83\83ã\83\89ã\81§ã\81¯ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93)"; }
 
     /*! header that is put before the detailed description of files, classes and namespaces. */
     virtual QCString trDetailedDescription()
-    { return "説æ\98\8e"; }
+    { return "詳解"; }
 
     /*! header that is put before the list of typedefs. */
     virtual QCString trMemberTypedefDocumentation()
-    { return "型定義"; }
+    { return "型定義メンバ詳解"; }
 
     /*! header that is put before the list of enumerations. */
     virtual QCString trMemberEnumerationDocumentation()
-    { return "列挙型"; }
+    { return "列挙型メンバ詳解"; }
 
     /*! header that is put before the list of member functions. */
     virtual QCString trMemberFunctionDocumentation()
     {
-         if( Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
-         {
-               return "メソッド";
-         }
-         else
-         {
-               return "関数";
-         }
-       }
+      if( Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
+      {
+        return "メソッド詳解";
+      }
+      else
+      {
+        return "関数詳解";
+      }
+    }
 
     /*! header that is put before the list of member attributes. */
     virtual QCString trMemberDataDocumentation()
     {
       if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-         {
-           return "構造体";
-         }
+      {
+        return "フィールド詳解";
+      }
       else
-         {
-           return "変数";
-         }
+      {
+        return "メンバ詳解";
+      }
     }
 
     /*! this is the text of a link put after brief descriptions. */
-       virtual QCString trMore()
-    { return "[詳]"; }
+    virtual QCString trMore()
+    { return "[詳]"; }
 
     /*! put in the class documentation */
     virtual QCString trListOfAllMembers()
-    { return "すべてのメンバ一覧"; }
+    { return "メンバ一覧"; }
 
     /*! used as the title of the "list of all members" page of a class */
     virtual QCString trMemberList()
@@ -103,33 +140,35 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! this is the first part of a sentence that is followed by a class name */
     virtual QCString trThisIsTheListOfAllMembers()
-    { return "これは全メンバの一覧です。"; }
+    { return "継承メンバを含む "; }
+    /* trIncludingInheritedMembers に続くように定義すること */
 
     /*! this is the remainder of the sentence after the class name */
     virtual QCString trIncludingInheritedMembers()
-    { return "継承メンバも含んでいます。"; }
+    { return " の全メンバ一覧です。"; }
+    /* trThisIsTheListOfAllMembers から続くように定義すること */    
 
     /*! this is put at the author sections at the bottom of man pages.
      *  parameter s is name of the project name.
      */
     virtual QCString trGeneratedAutomatically(const char *s)
-    { QCString result;
-      if (s) result=(QCString)s+"の";
-      result+="ã\82½ã\83¼ã\82¹ã\81\8bã\82\89 Doxygen ã\81«ã\82\88ã\82\8aç\94\9fæ\88\90しました。";
+    { QCString result = "Doxygen により";
+      if (s) result=(QCString)" "+s+"の";
+      result+="ã\82½ã\83¼ã\82¹ã\82³ã\83¼ã\83\89ã\81\8bã\82\89æ\8a½å\87ºしました。";
       return result;
     }
 
     /*! put after an enum name in the list of all members */
     virtual QCString trEnumName()
-    { return "Enum"; }
+    { return "列挙名"; }
 
     /*! put after an enum value in the list of all members */
     virtual QCString trEnumValue()
-    { return "Enum 値"; }
+    { return "列挙値"; }
 
     /*! put after an undocumented member in the list of all members */
     virtual QCString trDefinedIn()
-    { return "次で定義されています。"; }
+    { return "定義場所: "; }
 
     // quick reference sections
 
@@ -147,55 +186,51 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     virtual QCString trCompoundList()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造";
-       }
+      {
+        return "データ構造";
+      }
       else
-       {
-         return "構成";
-       }
+      {
+        return "クラス一覧";
+      }
     }
 
     /*! This is put above each page as a link to the list of documented files */
     virtual QCString trFileList()
     { return "ファイル一覧"; }
 
-    /*! This is put above each page as a link to the list of all verbatim headers */
-    virtual QCString trHeaderFiles()
-    { return "ヘッダファイル"; }
-
     /*! This is put above each page as a link to all members of compounds. */
     virtual QCString trCompoundMembers()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データフィールド";
-       }
+      {
+        return "データフィールド";
+      }
       else
-       {
-         return "構成メンバ";
-       }
+      {
+        return "クラスメンバ";
+      }
     }
 
     /*! 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 "グローバル";
-       }
+      {
+        return "大域各種";
+      }
       else
-       {
-         return "ファイルメンバ";
-       }
+      {
+        return "ファイルメンバ";
+      }
     }
     /*! This is put above each page as a link to all related pages. */
     virtual QCString trRelatedPages()
-    { return "関連ページ"; }
+    { return "諸情報"; }
 
     /*! This is put above each page as a link to all examples. */
     virtual QCString trExamples()
-    { return "例"; }
+    { return "各種例"; }
 
     /*! This is put above each page as a link to the search engine. */
     virtual QCString trSearch()
@@ -203,93 +238,127 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! This is an introduction to the class hierarchy. */
     virtual QCString trClassHierarchyDescription()
-    { return "この継承一覧はおおまかにはソートされていますが、"
-             "完全にアルファベット順でソートされてはいません。";
+    {
+      return "クラス階層一覧です。大雑把に文字符号順で並べられています。";
     }
 
     /*! This is an introduction to the list with all files. */
-    virtual QCString trFileListDescription(bool /*extractAll*/)
+    virtual QCString trFileListDescription(bool extractAll)
     {
-      QCString result="これは";
-      result+="ファイル一覧です。";
-      return result;
+      /* 概要がついているのは見ればわかるので省略 */
+      /* extractAll こと EXTRACT_ALL はすべての詳解が存在することを
+         実際の有無を度外視してユーザーが保証する設定なので
+         詳解がなければこの関数が返す文字列は当然に矛盾を起こす。
+      */
+      if (extractAll)
+      {
+        return "ファイル一覧です。";
+      }
+      return "詳解が付けられているファイルの一覧です。";
     }
+    
 
     /*! This is an introduction to the annotated compound list. */
     virtual QCString trCompoundListDescription()
     {
+      /* 概要がついているのは見ればわかるので省略 */
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造の説明です。";
-       }
+      {
+        return "データ構造一覧です。";
+      }
       else
-       {
-         return "クラス、構造体、共用体、インタフェースの説明です。";
-       }
+      {
+        return "クラス・構造体・共用体・インターフェースの一覧です。";
+      }
     }
 
     /*! This is an introduction to the page with all class members. */
     virtual QCString trCompoundMembersDescription(bool extractAll)
     {
-      QCString result="これは";
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-         {
-           result+="フィールドの一覧でそれぞれ";
-           if (extractAll) result+="が属している構造体/共用体";
-         }
+      const bool forC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
+      QCString result;
+      if (forC)
+      {
+        result = "構造体・共用体の";
+      }
+      if (extractAll)
+      {
+        result += "全";
+      }
+      else
+      {
+        result += "詳解あり";
+      }
+      if (forC)
+      {
+        result += "フィールド";
+      }
+      else
+      {
+        result += "クラスメンバ";
+      }
+      if (!extractAll && !forC)
+      {
+        result += "の";
+      }
+      result += "一覧です。";
+      if (!extractAll)
+      {
+        if (forC)
+        {
+          result+="各フィールド詳解";
+        }
+        else
+        {
+          result+="各クラスメンバ詳解";
+        }
+      }
       else
-         {
-           result+="クラスメンバの一覧で、それぞれ";
-           if (extractAll) result+="が属しているクラス";
-         }
-      result+="の説明へリンクしています。";
+      {
+        if (forC)
+        {
+          result+="各フィールドが属する構造体・共用体";
+        }
+        else
+        {
+          result+="各メンバが属するクラス";
+        }
+      }
+      result += "へのリンクがあります。";
       return result;
     }
 
     /*! This is an introduction to the page with all file members. */
     virtual QCString trFileMembersDescription(bool /*extractAll*/)
     {
-      QCString result="これは";
+      QCString result;
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         result+="関数、変数、マクロ、Enum、Typedef の";
-       }
+      {
+        result+="関数・変数・マクロ・列挙・型定義";
+      }
       else
-       {
-         result+="ファイルメンバの";
-       }
-      result+="一覧です。それぞれが属しているファイルの説明へリンクしています。";
+      {
+        result+="ファイル直下のメンバ";
+      }
+      result+="一覧です。各々詳解があればそこへリンクしています。";
       return result;
     }
 
-    /*! This is an introduction to the page with the list of all header files. */
-    virtual QCString trHeaderFilesDescription()
-    { return "APIを構成するヘッダファイルです。"; }
-
     /*! This is an introduction to the page with the list of all examples */
     virtual QCString trExamplesDescription()
-    { return "ã\81\99ã\81¹ã\81¦ã\81®ä¾\8bã\81®ä¸\80覧ã\81§ã\81\99ã\80\82"; }
+    { return "å\90\84種ä¾\8bã\81®ä¸\80覧ã\81§ã\81\99ã\80\82"; }
 
     /*! This is an introduction to the page with the list of related pages */
     virtual QCString trRelatedPagesDescription()
-    { return "関連ページの一覧です。"; }
+    { return "諸情報の一覧です。"; }
 
     /*! This is an introduction to the page with the list of class/file groups */
     virtual QCString trModulesDescription()
-    { return "すべてのモジュールの一覧です。"; }
-
-    /*! This sentences is used in the annotated class/file lists if no brief
-     * description is given.
-     */
-    virtual QCString trNoDescriptionAvailable()
-    { return "ドキュメントが記述されていません。"; }
-
-    // index titles (the project name is prepended for these)
-
+    { return "全モジュールの一覧です。"; }
 
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
-    { return "ドキュメント"; }
+    { return "詳解"; }
 
     /*! This is used in LaTeX as the title of the chapter with the
      * index of all groups.
@@ -309,13 +378,13 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     virtual QCString trCompoundIndex()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造索引";
-       }
+      {
+        return "データ構造索引";
+      }
       else
-       {
-         return "構成索引";
-       }
+      {
+        return "クラス索引";
+      }
     }
 
     /*! This is used in LaTeX as the title of the chapter with the
@@ -328,7 +397,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  the documentation of all groups.
      */
     virtual QCString trModuleDocumentation()
-    { return "モジュール"; }
+    { return "モジュール詳解"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all classes, structs and unions.
@@ -336,32 +405,32 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     virtual QCString trClassDocumentation()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造";
-       }
+      {
+        return "データ構造詳解";
+      }
       else
-       {
-         return "クラス";
-       }
+      {
+        return "クラス詳解";
+      }
     }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all files.
      */
     virtual QCString trFileDocumentation()
-    { return "ファイル"; }
+    { return "ファイル詳解"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all examples.
      */
     virtual QCString trExampleDocumentation()
-    { return ""; }
+    { return "各例詳解"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all related pages.
      */
     virtual QCString trPageDocumentation()
-    { return "ページ"; }
+    { return "ページ詳解"; }
 
     /*! This is used in LaTeX as the title of the document */
     virtual QCString trReferenceManual()
@@ -401,36 +470,36 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  list of (global) variables
      */
     virtual QCString trEnumerationValues()
-      { return "列挙型の値"; }
+    { return "列挙値"; }
     /*! This is used in the documentation of a file before the list of
      *  documentation blocks for defines
      */
     virtual QCString trDefineDocumentation()
-    { return "マクロ定義"; }
+    { return "マクロ定義詳解"; }
 
     /*! This is used in the documentation of a file/namespace before the list
      *  of documentation blocks for typedefs
      */
     virtual QCString trTypedefDocumentation()
-    { return "型定義"; }
+    { return "型定義詳解"; }
 
     /*! This is used in the documentation of a file/namespace before the list
      *  of documentation blocks for enumeration types
      */
     virtual QCString trEnumerationTypeDocumentation()
-    { return "列挙型"; }
+    { return "列挙型詳解"; }
 
     /*! This is used in the documentation of a file/namespace before the list
      *  of documentation blocks for functions
      */
     virtual QCString trFunctionDocumentation()
-    { return "関数"; }
+    { return "関数詳解"; }
 
     /*! This is used in the documentation of a file/namespace before the list
      *  of documentation blocks for variables
      */
     virtual QCString trVariableDocumentation()
-    { return "変数"; }
+    { return "変数詳解"; }
 
     /*! This is used in the documentation of a file/namespace/group before
      *  the list of links to documented compounds
@@ -438,48 +507,39 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     virtual QCString trCompounds()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造";
-       }
+      {
+        return "データ構造";
+      }
       else
-       {
-         return "構成";
-       }
+      {
+        return "クラス";
+      }
     }
     /*! This is used in the standard footer of each page and indicates when
      *  the page was generated
      */
     virtual QCString trGeneratedAt(const char *date,const char *projName)
     {
-      QCString result;
-      if (projName) result+=(QCString)projName+"に対して";
-      result+=(QCString)date+"に生成されました。";
+      QCString result = (QCString)date+"作成";
+      if (projName) result+=(QCString)" - " + projName;
+      result+=" / 構成: ";
       return result;
     }
 
     /*! this text is put before a class diagram */
     virtual QCString trClassDiagram(const char *clName)
     {
-      return (QCString)clName+"に対する継承グラフ";
+      return (QCString)clName+" の継承関係図";
     }
 
     /*! this text is generated when the \\internal command is used. */
     virtual QCString trForInternalUseOnly()
-    { return "内部使用のみ。"; }
-
-    /*! this text is generated when the \\reimp command is used. */
-    virtual QCString trReimplementedForInternalReasons()
-    { return "内部的な理由により再実装されましたが、APIには影響しません。";
-    }
+    { return "内部処理用です。"; }
 
     /*! this text is generated when the \\warning command is used. */
     virtual QCString trWarning()
     { return "警告"; }
 
-    /*! this text is generated when the \\bug command is used. */
-    virtual QCString trBugsAndLimitations()
-    { return "バグと制限"; }
-
     /*! this text is generated when the \\version command is used. */
     virtual QCString trVersion()
     { return "バージョン"; }
@@ -506,7 +566,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! this text is used in the title page of a LaTeX document. */
     virtual QCString trGeneratedBy()
-    { return "作成:"; }
+    { return "構築:"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990307
@@ -514,12 +574,16 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! used as the title of page containing all the index of all namespaces. */
     virtual QCString trNamespaceList()
-    { return "ネームスペース一覧"; }
+    { return "名前空間一覧"; }
 
     /*! used as an introduction to the namespace list */
-    virtual QCString trNamespaceListDescription(bool /*extractAll*/)
+    virtual QCString trNamespaceListDescription(bool extractAll)
     {
-      return "ネームスペースの一覧です。";
+      if (extractAll)
+      {
+        return "全名前空間の一覧です。";
+      }
+      return "詳解が付いた名前空間の一覧です。";
     }
 
     /*! used in the class documentation as a header before the list of all
@@ -536,7 +600,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      * related classes
      */
     virtual QCString trRelatedFunctionDocumentation()
-    { return "フレンドと関連する関数"; }
+    { return "フレンドと関連関数の詳解"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990425
@@ -547,58 +611,57 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
                                  ClassDef::CompoundType compType,
                                  bool isTemplate)
     {
-      QCString result="";
+      QCString result=(QCString)clName+" ";
       switch(compType)
       {
-        case ClassDef::Class:      result+="クラス "; break;
-        case ClassDef::Struct:     result+="構造体 "; break;
-        case ClassDef::Union:      result+="共用体 "; break;
-        case ClassDef::Interface:  result+="インタフェース "; break;
-        case ClassDef::Protocol:   result+="プロトコル "; break;
-        case ClassDef::Category:   result+="カテゴリ "; break;
-        case ClassDef::Exception:  result+="例外 "; break;
+        case ClassDef::Class:      result+="クラス"; break;
+        case ClassDef::Struct:     result+="構造体"; break;
+        case ClassDef::Union:      result+="共用体"; break;
+        case ClassDef::Interface:  result+="インタフェース"; break;
+        case ClassDef::Protocol:   result+="プロトコル"; break;
+        case ClassDef::Category:   result+="カテゴリ"; break;
+        case ClassDef::Exception:  result+="例外"; break;
         default: break;
       }
-      if (isTemplate) result+="テンプレート ";
-      result+=(QCString)clName;
+      if (isTemplate) result+="テンプレート";
       return result;
     }
 
     /*! used as the title of the HTML page of a file */
     virtual QCString trFileReference(const char *fileName)
     {
-      QCString result=""+(QCString)fileName;
+      QCString result=(QCString)fileName+" ファイル";
       return result;
     }
 
     /*! used as the title of the HTML page of a namespace */
     virtual QCString trNamespaceReference(const char *namespaceName)
     {
-      QCString result="ネームスペース "+(QCString)namespaceName;
+      QCString result=(QCString)namespaceName+" 名前空間";
       return result;
     }
 
     /* these are for the member sections of a class, struct or union */
     virtual QCString trPublicMembers()
-    { return "Public メソッド"; }
+    { return "公開メンバ関数"; }
     virtual QCString trPublicSlots()
-    { return "Public スロット"; }
+    { return "公開スロット"; }
     virtual QCString trSignals()
     { return "シグナル"; }
     virtual QCString trStaticPublicMembers()
-    { return "Static Public メソッド"; }
+    { return "静的公開メンバ関数"; }
     virtual QCString trProtectedMembers()
-    { return "Protected メソッド"; }
+    { return "限定公開メンバ関数"; }
     virtual QCString trProtectedSlots()
-    { return "Protected スロット"; }
+    { return "限定公開スロット"; }
     virtual QCString trStaticProtectedMembers()
-    { return "Static Protected メソッド"; }
+    { return "静的限定公開メンバ関数"; }
     virtual QCString trPrivateMembers()
-    { return "Private メソッド"; }
+    { return "非公開メンバ関数"; }
     virtual QCString trPrivateSlots()
-    { return "Private スロット"; }
+    { return "非公開スロット"; }
     virtual QCString trStaticPrivateMembers()
-    { return "Static Private メソッド"; }
+    { return "静的非公開メンバ関数"; }
 
     /*! this function is used to produce a comma-separated list of items.
      *  use generateMarker(i) to indicate where item i should be put.
@@ -616,12 +679,15 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
         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
-            result+=", と ";
+          result+=", ";
         }
       }
+      if ( result.length() > 60 )
+      {
+        QCString countStr;
+        countStr.sprintf(" (計%d項目)", numEntries);
+        result += countStr;
+      }
       return result;
     }
 
@@ -646,7 +712,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trReimplementedFromList(int numEntries)
     {
-      return trWriteList(numEntries)+"ã\82\92å\86\8då®\9a義しています。";
+      return trWriteList(numEntries)+"ã\82\92å\86\8då®\9fè£\85しています。";
     }
 
     /*! used in member documentation blocks to produce a list of
@@ -654,22 +720,26 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trReimplementedInList(int numEntries)
     {
-      return trWriteList(numEntries)+"ã\81§å\86\8då®\9a義されています。";
+      return trWriteList(numEntries)+"ã\81§å\86\8då®\9fè£\85されています。";
     }
 
     /*! This is put above each page as a link to all members of namespaces. */
     virtual QCString trNamespaceMembers()
-    { return "ネームスペースメンバ"; }
+    { return "名前空間メンバ"; }
 
     /*! This is an introduction to the page with all namespace members */
     virtual QCString trNamespaceMemberDescription(bool extractAll)
     {
-       QCString result="これは";
-      result+="ネームスペースの一覧です。それぞれ";
+      QCString result="これは";
+      result+="名前空間の一覧です。それぞれ";
       if (extractAll)
-         result+="のネームスペース";
+      {
+        result+="の名前空間";
+      }
       else
-         result+="が属しているネームスペース";
+      {
+        result+="が属している名前空間";
+      }
       result+="へリンクしています。";
       return result;
     }
@@ -677,13 +747,13 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  index of all namespaces.
      */
     virtual QCString trNamespaceIndex()
-    { return "ネームスペース索引"; }
+    { return "名前空間索引"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all namespaces.
      */
     virtual QCString trNamespaceDocumentation()
-    { return "ネームスペース"; }
+    { return "名前空間詳解"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990522
@@ -693,7 +763,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  namespaces in a file.
      */
     virtual QCString trNamespaces()
-    { return "ネームスペース"; }
+    { return "名前空間"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990728
@@ -703,7 +773,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  followed by a list of files that were used to generate the page.
      */
     virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
-        bool)
+        bool /*single*/)
     { // here s is one of " Class", " Struct" or " Union"
       // single is true implies a single file
       QCString result=(QCString)"この";
@@ -718,7 +788,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
         case ClassDef::Exception:  result+="例外"; break;
         default: break;
       }
-      result+="の説明は次のファイルから生成されました:";
+      result+="詳解は次のファイルから抽出されました:";
       return result;
     }
 
@@ -733,7 +803,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! This is in the (quick) index as a link to the main page (index.html)
      */
     virtual QCString trMainPage()
-    { return "メインページ"; }
+    { return "総合概要"; }
 
     /*! This is used in references to page that are put in the LaTeX
      *  documentation. It should be an abbreviation of the word page.
@@ -745,17 +815,13 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 // new since 0.49-991003
 //////////////////////////////////////////////////////////////////////////
 
-    virtual QCString trSources()
-    {
-      return "ソース";
-    }
     virtual QCString trDefinedAtLineInSourceFile()
     {
-      return " @1 の @0 行で定義されています。";
+      return " @1 の @0 行目に定義があります。";
     }
     virtual QCString trDefinedInSourceFile()
     {
-      return " @0 ã\81§å®\9a義ã\81\95ã\82\8cã\81¦ã\81\84ます。";
+      return " @0 ã\81«å®\9a義ã\81\8cã\81\82ã\82\8aます。";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -766,35 +832,31 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     {
       return "非推奨";
     }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
+    
     /*! this text is put before a collaboration diagram */
     virtual QCString trCollaborationDiagram(const char *clName)
     {
-      return (QCString)clName+"のコラボレーション図";
+      return (QCString)clName+" 連携図";
     }
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-       return (QCString)fName+"のインクルード依存関係図";
+    return (QCString)fName+" の依存先関係図:";
     }
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
     {
-      return "コンストラクタとデストラクタ";
+      return "構築子と解体子";
     }
     /*! Used in the file documentation to point to the corresponding sources. */
     virtual QCString trGotoSourceCode()
     {
-      return "ソースコードを見る。";
+      return "[ソースコード]";
     }
     /*! Used in the file sources to point to the corresponding documentation. */
     virtual QCString trGotoDocumentation()
     {
-      return "説明を見る。";
+      return "[詳解]";
     }
     /*! Text for the \\pre command */
     virtual QCString trPrecondition()
@@ -827,17 +889,16 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     }
     virtual QCString trGotoGraphicalHierarchy()
     {
-      return "クラス階層図を見る。";
+      return "[クラス階層図]";
     }
     virtual QCString trGotoTextualHierarchy()
     {
-      return "クラス階層図を見る。";
+      return "[クラス階層表]";
     }
     virtual QCString trPageIndex()
     {
       return "ページ索引";
     }
-
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.0
 //////////////////////////////////////////////////////////////////////////
@@ -848,46 +909,46 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     }
     virtual QCString trPublicTypes()
     {
-      return "Public 型";
+      return "公開型";
     }
     virtual QCString trPublicAttribs()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "変数";
-       }
+      {
+        return "フィールド";
+      }
       else
-       {
-         return "Public 変数";
-       }
+      {
+        return "公開変数類";
+      }
     }
     virtual QCString trStaticPublicAttribs()
     {
-      return "Static Public 変数";
+      return "静的公開変数類";
     }
     virtual QCString trProtectedTypes()
     {
-      return "Protected 型";
+      return "限定公開型";
     }
     virtual QCString trProtectedAttribs()
     {
-      return "Protected 変数";
+      return "限定公開変数類";
     }
     virtual QCString trStaticProtectedAttribs()
     {
-      return "Static Protected 変数";
+      return "静的限定公開変数類";
     }
     virtual QCString trPrivateTypes()
     {
-      return "Private 型";
+      return "非公開型";
     }
     virtual QCString trPrivateAttribs()
     {
-      return "Private 変数";
+      return "非公開変数類";
     }
     virtual QCString trStaticPrivateAttribs()
     {
-      return "Static Private 変数";
+      return "静的非公開変数類";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -897,12 +958,12 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! Used as a marker that is put before a todo item */
     virtual QCString trTodo()
     {
-      return "TODO";
+      return "todo";
     }
     /*! Used as the header of the todo list */
     virtual QCString trTodoList()
     {
-      return "TODO一覧";
+      return "todo一覧";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -915,7 +976,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     }
     virtual QCString trRemarks()
     {
-      return "æ\84\8fè¦\8b";
+      return "注é\87\88";
     }
     virtual QCString trAttention()
     {
@@ -923,8 +984,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     }
     virtual QCString trInclByDepGraph()
     {
-       return "このグラフは、どのファイルから直接、間接的に"
-               "インクルードされているかを示しています。";
+      return "被依存関係図:";
     }
     virtual QCString trSince()
     {
@@ -944,25 +1004,24 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     virtual QCString trLegendDocs()
     {
       return
-        "このページでは、doxygen で生成されたグラフをどのようにみたらよいかを"
-        "説明します。<p>\n"
-        "次の例を考えてみます。\n"
+        "Doxygen が生成したグラフを読み方について。<p>\n"
+        "次のコード例をご覧ください。\n"
         "\\code\n"
-        "/*! 省略されて見えないクラス */\n"
+        "/*! 全体の大きさの関係で見えなくなるクラスです。 */\n"
         "class Invisible { };\n\n"
-        "/*! 省略されたクラス(継承関係は隠されている) */\n"
+        "/*! 表示を切り捨てられたクラス(Invisibleクラスの分が見えません) */\n"
         "class Truncated : public Invisible { };\n\n"
-        "/* doxygen コメントによるドキュメントがないクラス */\n"
+        "/* Doxygen 用のコメントコードがないクラス */\n"
         "class Undocumented { };\n\n"
-        "/*! public で継承されたクラス */\n"
+        "/*! 公開継承されているクラス */\n"
         "class PublicBase : public Truncated { };\n\n"
         "/*! A template class */\n"
         "template<class T> class Templ { };\n\n"
-        "/*! protected で継承されたクラス */\n"
+        "/*! 限定公開で継承されているクラス */\n"
         "class ProtectedBase { };\n\n"
-        "/*! private で継承されたクラス */\n"
+        "/*! 非公開継承されているクラス */\n"
         "class PrivateBase { };\n\n"
-        "/*! 継承されたクラスで使われているクラス */\n"
+        "/*! Inherited クラス内で使われているクラス */\n"
         "class Used { };\n\n"
         "/*! 複数のクラスを継承している上位クラス */\n"
         "class Inherited : public PublicBase,\n"
@@ -975,28 +1034,28 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
         "    Used *m_usedClass;\n"
         "};\n"
         "\\endcode\n"
-        "設定ファイル中で、タグ \\c MAX_DOT_GRAPH_HEIGHT が 200 にセットされた"
-        "場合、次のようなグラフとなります。"
+        "\\c MAX_DOT_GRAPH_" /* わざわざちょん切っているのは doc/translator.py の検出回避のため */
+        "HEIGHT タグに 200 を与えた設定ファイル"
+        "を使うと、次のようなグラフとなります。"
         "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
         "<p>\n"
-        "上のグラフ内のボックスには次のような意味があります。\n"
+        "グラフ内の矩形は構造体やクラスを表しています。色の意味は次の通りです。\n"
         "<ul>\n"
-        "<li>黒く塗りつぶされたボックスは、このグラフに対応する構造体やクラスを"
-        "表します。\n"
-        "<li>黒枠のボックスはドキュメントがある構造体やクラスを表します。\n"
-        "<li>灰色の枠のボックスはドキュメントがない構造体やクラスを表します。\n"
-        "<li>赤枠のボックスはドキュメントがある構造体やクラスを表しますが、"
-         "指定されたサイズに収まらないために継承・包含関係をすべて図示する"
-         "ことができなかったことを示します。"
+        "<li>中を黒く塗られた四角は、図が注目している起点です。</li>\n"
+        "<li>黒枠は詳解があることを示しています。</li>\n"
+        "<li>灰色枠で示されたクラス等には詳解がありません。</li>\n"
+        "<li>赤枠で示されたものは詳解を持つクラスですが、"
+        "指定された大きさに収まらないことから一部の継承・包含関係が"
+        "省略されていることを表します。</li>\n"
         "</ul>\n"
-        "矢印には次のような意味があります。\n"
+        "<p>矢印の意味は次の通りです。</p>\n"
         "<ul>\n"
-        "<li>青い矢印は二つのクラス間の public 継承関係を示します。\n"
-        "<li>緑の矢印は protected 継承関係を示します。\n"
-        "<li>赤の矢印は private 継承関係を示します。\n"
-        "<li>ç´«ã\81®ç ´ç·\9aç\9f¢å\8d°ã\81¯ã\80\81ã\81\9dã\81®ã\82¯ã\83©ã\82¹ã\81\8cä»\96ã\81®ã\82¯ã\83©ã\82¹ã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81\9fã\82\8a、"
-         "利用されていることを示します。また、矢印が指しているクラスや構造体を"
-         "どの変数でアクセスできるかを矢印のラベルとして示しています。\n"
+        "<li>青い矢印は二つのクラス間の公開継承関係を示します。</li>\n"
+        "<li>緑の矢印は限定公開の継承関係を示します。</li>\n"
+        "<li>赤の矢印は非公開の継承関係を示します。</li>\n"
+        "<li>ç´«ã\81®ç ´ç·\9aç\9f¢å\8d°ã\81¯ã\80\81ã\81\9dã\81®ã\82¯ã\83©ã\82¹ã\81\8cä»\96ã\81®ã\82¯ã\83©ã\82¹ã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bã\81\8b、"
+      "利用されていることを示します。また、矢印のラベルは矢の先にあるクラス等を"
+      "アクセスしている矢の根本のメンバを表しています。</li>\n"
         "</ul>\n";
     }
     /*! text for the link to the legend page */
@@ -1032,7 +1091,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! Used as a section header for IDL property documentation */
     virtual QCString trPropertyDocumentation()
     {
-      return "プロパティ";
+      return "プロパティ詳解";
     }
 
 
@@ -1040,27 +1099,22 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 // new since 1.2.4
 //////////////////////////////////////////////////////////////////////////
 
-    /*! Used for Java interfaces in the summary section of Java packages */
-    virtual QCString trInterfaces()
-    {
-      return "インターフェース";
-    }
     /*! Used for Java classes in the summary section of Java packages */
     virtual QCString trClasses()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-       {
-         return "データ構造";
-       }
+    {
+      return "データ構造";
+    }
       else
-       {
-         return "クラス";
-       }
+    {
+      return "クラス";
+    }
     }
     /*! Used as the title of a Java package */
     virtual QCString trPackage(const char *name)
     {
-      return (QCString)"パッケージ "+name;
+      return (QCString)name+" パッケージ";
     }
     /*! Title of the package index page */
     virtual QCString trPackageList()
@@ -1070,19 +1124,15 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! The description of the package index page */
     virtual QCString trPackageListDescription()
     {
-      return "ã\81\93ã\82\8cã\81¯ã\83\91ã\83\83ã\82±ã\83¼ã\82¸ä¸\80覧ã\81§ã\81\99ã\80\82";
+      return "パッケージ一覧です。";
     }
     /*! The link name in the Quick links header for each page */
     virtual QCString trPackages()
     {
       return "パッケージ";
     }
-    /*! Used as a chapter title for Latex & RTF output */
-    virtual QCString trPackageDocumentation()
-    {
-      return "パッケージ";
-    }
-    /*! Text shown before a multi-line define */
+
+           /*! Text shown before a multi-line define */
     virtual QCString trDefineValue()
     {
       return "値:";
@@ -1177,7 +1227,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trNamespace(bool /*first_capital*/, bool /*singular*/)
     {
-      return "ネームスペース";
+      return "名前空間";
     }
 
     /*! This is used for translation of the word that will possibly
@@ -1211,18 +1261,9 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  be followed by a single name or by a list of names
      *  of the category.
      */
-    virtual QCString trField(bool /*first_capital*/, bool /*singular*/)
-    {
-      return "フィールド";
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names
-     *  of the category.
-     */
     virtual QCString trGlobal(bool /*first_capital*/, bool /*singular*/)
     {
-      return "グローバル";
+      return "大域各種";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1233,7 +1274,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  for the author section in man pages. */
     virtual QCString trAuthor(bool /*first_capital*/, bool /*singular*/)
     {
-      return "者";
+      return "者";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1304,7 +1345,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! Header used for the documentation section of a class' events. */
     virtual QCString trEventDocumentation()
     {
-      return "イベント";
+      return "イベント詳解";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1329,7 +1370,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trStaticPackageMembers()
     {
-      return "スタティック関数";
+      return "静的関数";
     }
     /*! Used as a heading for a list of Java class variables with package
      * scope.
@@ -1343,7 +1384,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trStaticPackageAttribs()
     {
-      return "スタティック変数";
+      return "静的変数";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1360,7 +1401,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! Put in front of the call graph for a function. */
     virtual QCString trCallGraph()
     {
-      return "関数の呼び出しグラフ:";
+      return "呼び出し関係図:";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1386,16 +1427,16 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     {
       if (numDocuments==0)
       {
-        return "入力された条件にマッチするドキュメントがありませんでした.";
+        return "入力条件を満たす文書がありません。";
       }
       else if (numDocuments==1)
       {
-        return "入力された条件にマッチするドキュメントが <b>1</b> 件みつかりました.";
+        return "入力条件を満たす文書が <b>1</b> 件ありました.";
       }
       else
       {
-        return "入力された条件にマッチするドキュメントが <b>$num</b> 件みつかりました. "
-               "最も一致しているものから表示されます.";
+        return "入力条件を満たす文書が <b>$num</b> 件ありました. "
+               "一致度の高いものから表示されます.";
       }
     }
     /*! This string is put before the list of matched words, for each search
@@ -1403,7 +1444,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trSearchMatches()
     {
-      return "マッチした単語:";
+      return "照合語:";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1431,7 +1472,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  of the directories.
      */
     virtual QCString trDirDocumentation()
-    { return "ディレクトリ構成"; }
+    { return "ディレクトリ詳解"; }
 
     /*! This is used as the title of the directory index and also in the
      *  Quick links of an HTML page, to link to the directory hierarchy.
@@ -1482,15 +1523,14 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! This is used to introduce a caller (or called-by) graph */
     virtual QCString trCallerGraph()
     {
-      // return "Here is the caller graph for this function:";
-      return "呼出しグラフ:";
+      return "被呼び出し関係図:";
     }
 
     /*! This is used in the documentation of a file/namespace before the list
      *  of documentation blocks for enumeration values
      */
     virtual QCString trEnumerationValueDocumentation()
-    { return "列挙型"; }
+    { return "列挙型詳解"; }
 
 
 //////////////////////////////////////////////////////////////////////////
@@ -1499,11 +1539,11 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! header that is put before the list of member subprograms (Fortran). */
     virtual QCString trMemberFunctionDocumentationFortran()
-    { return "関数/サブルーチン"; }
+    { return "メンバ関数/サブルーチン詳解"; }
 
     /*! This is put above each page as a link to the list of annotated data types (Fortran). */
     virtual QCString trCompoundListFortran()
-    { return "データ型"; }
+    { return "データ型一覧"; }
 
     /*! This is put above each page as a link to all members of compounds (Fortran). */
     virtual QCString trCompoundMembersFortran()
@@ -1511,19 +1551,19 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
 
     /*! This is an introduction to the annotated compound list (Fortran). */
     virtual QCString trCompoundListDescriptionFortran()
-    { return "これはデータ型の一覧です"; }
+    { return "これはデータ型の一覧です:"; }
 
     /*! This is an introduction to the page with all data types (Fortran). */
     virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
     {
-         QCString result="これは";
-         result+="フィールドの一覧です。それぞれ";
-         if (extractAll)
-         {
-               result+="が属しているデータ型";
-         }
-         result+="の説明へリンクしています。";
-         return result;
+      QCString result="これは";
+      result+="フィールドの一覧です。それぞれ";
+      if (extractAll)
+      {
+          result+="が属しているデータ型";
+      }
+      result+="の詳解へリンクしています。";
+      return result;
     }
 
     /*! This is used in LaTeX as the title of the chapter with the
@@ -1536,7 +1576,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  the documentation of all data types (Fortran).
      */
     virtual QCString trTypeDocumentation()
-    { return "データ型"; }
+    { return "データ型詳解"; }
 
     /*! This is used in the documentation of a file as a header before the
      *  list of (global) subprograms (Fortran).
@@ -1549,7 +1589,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      *  of documentation blocks for subprograms (Fortran)
      */
     virtual QCString trSubprogramDocumentation()
-    { return "関数/サブルーチン"; }
+    { return "関数/サブルーチン詳解"; }
 
     /*! This is used in the documentation of a file/namespace/group before
      *  the list of links to documented compounds (Fortran)
@@ -1564,9 +1604,16 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
     /*! used as an introduction to the modules list (Fortran) */
     virtual QCString trModulesListDescription(bool extractAll)
     {
-      QCString result="これは";
-      if (!extractAll) result+="生成された";
-      result+="モジュール一覧です";
+      QCString result;
+      if (!extractAll)
+      {
+        result+="詳解が記されている";
+      }
+      else
+      {
+        result+="全";
+      }
+      result+="モジュールの一覧です";
       return result;
     }
 
@@ -1611,7 +1658,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
       {
         result+="属しているモジュール";
       }
-      result+="ã\81®èª¬æ\98\8eへリンクしています。";
+      result+="ã\81®è©³è§£へリンクしています。";
       return result;
     }
 
@@ -1636,11 +1683,11 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
         bool /*single*/)
     { // here s is one of " Module", " Struct" or " Union"
       // single is true implies a single file
-      QCString result="";
+      QCString result="次のファイルから";
       switch(compType)
       {
         case ClassDef::Class:      result+="モジュール"; break;
-        case ClassDef::Struct:     result+="TYPE"; break;
+        case ClassDef::Struct:     result+=""; break;
         case ClassDef::Union:      result+="共用体"; break;
         case ClassDef::Interface:  result+="インターフェース"; break;
         case ClassDef::Protocol:   result+="プロトコル"; break;
@@ -1648,7 +1695,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
         case ClassDef::Exception:  result+="例外"; break;
         default: break;
       }
-      result+="ã\81®èª¬æ\98\8eã\81¯æ¬¡ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81\8bã\82\89ç\94\9fæ\88\90されました:";
+      result+="ã\81®è©³è§£ã\81\8cæ\8a½å\87ºされました:";
       return result;
     }
     /*! This is used for translation of the word that will possibly
@@ -1657,7 +1704,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
      */
     virtual QCString trType(bool /*first_capital*/, bool /*singular*/)
     {
-      QCString result = "TYPE";
+      QCString result = "";
       return result;
     }
     /*! This is used for translation of the word that will possibly
@@ -1676,6 +1723,258 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0
       return "型制約";
     }
 
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! directory relation for \a name */
+    virtual QCString trDirRelation(const char *name)
+    {
+      return QCString(name)+" 関係";
+    }
+
+    /*! Loading message shown when loading search results */
+    virtual QCString trLoading()
+    {
+      return "読み取り中…";
+    }
+
+    /*! Label used for search results in the global namespace */
+    virtual QCString trGlobalNamespace()
+    {
+      return "大域名前空間";
+    }
+
+    /*! Message shown while searching */
+    virtual QCString trSearching()
+    {
+      return "検索中…";
+    }
+
+    /*! Text shown when no search results are found */
+    virtual QCString trNoMatches()
+    {
+      return "一致する文字列を見つけられません";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the first column mentions the
+     *  source file that has a relation to another file.
+     */
+    virtual QCString trFileIn(const char *name)
+    {
+      return (QCString)name+"にあるファイル";
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the second column mentions the
+     *  destination file that is included.
+     */
+    virtual QCString trIncludesFileIn(const char *name)
+    {
+      return (QCString)name+"にあるファイルを include している";
+    }
+
+    /** Compiles a date string.
+     *  @param year Year in 4 digits
+     *  @param month Month of the year: 1=January
+     *  @param day Day of the Month: 1..31
+     *  @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+     *  @param hour Hour of the day: 0..23
+     *  @param minutes Minutes in the hour: 0..59
+     *  @param seconds Seconds within the minute: 0..59
+     *  @param includeTime Include time in the result string?
+     */
+    virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+                                int hour,int minutes,int seconds,
+                                bool includeTime)
+    {
+      static const char *days[]   = { "月", "火", "水", "木", "金", "土", "日" };
+      QCString sdate;
+      sdate.sprintf("%.4d年%.2d月%.2d日(%s)",year,month,day,days[dayOfWeek-1]);
+      if (includeTime)
+      {
+        QCString stime;
+        stime.sprintf(" %.2d時%.2d分%.2d秒",hour,minutes,seconds);
+        sdate+=stime;
+      }
+      return sdate;
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.7.5
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Header for the page with bibliographic citations */
+    virtual QCString trCiteReferences()
+    { return "書誌参照"; }
+
+    /*! Text for copyright paragraph */
+    virtual QCString trCopyright()
+    { return "著作権所有"; }
+
+    /*! Header for the graph showing the directory dependencies */
+    virtual QCString trDirDepGraph(const char *name)
+    { return QCString(name)+" のディレクトリ依存関係図"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.0
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Detail level selector shown for hierarchical indices */
+    virtual QCString trDetailLevel()
+    { return "表示階層"; }
+
+    /*! Section header for list of template parameters */
+    virtual QCString trTemplateParameters()
+    { return "テンプレート引数"; }
+
+    /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
+    virtual QCString trAndMore(const QCString &number)
+    { return "ほか "+number+" 件…"; }
+
+    /*! Used file list for a Java enum */
+    virtual QCString trEnumGeneratedFromFiles(bool)
+    { 
+      return "次のファイルからこの列挙についての詳解を抽出しました:";
+    }
+
+    /*! Header of a Java enum page (Java enums are represented as classes). */
+    virtual QCString trEnumReference(const char *name)
+    { return QCString("列挙 ")+name+" 詳解"; }
+
+    /*! Used for a section containing inherited members */
+    virtual QCString trInheritedFrom(const char *members,const char *what)
+    { return QCString("基底クラス ")+what+" に属する継承"+members; }
+
+    /*! Header of the sections with inherited members specific for the
+     *  base class(es)
+     */
+    virtual QCString trAdditionalInheritedMembers()
+    { return "その他の継承メンバ"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a tooltip for the toggle button that appears in the
+     *  navigation tree in the HTML output when GENERATE_TREEVIEW is
+     *  enabled. This tooltip explains the meaning of the button.
+     */
+    virtual QCString trPanelSynchronisationTooltip(bool enable)
+    {
+      
+      QCString opt = enable ? "有効" : "無効";
+      return "クリックで同期表示が"+opt+"になります";
+    }
+
+    /*! Used in a method of an Objective-C class that is declared in a
+     *  a category. Note that the @1 marker is required and is replaced
+     *  by a link.
+     */
+    virtual QCString trProvidedByCategory()
+    {
+      return "@1 カテゴリーから提供されています。";
+    }
+
+    /*! Used in a method of an Objective-C category that extends a class.
+     *  Note that the @1 marker is required and is replaced by a link to
+     *  the class method.
+     */
+    virtual QCString trExtendsClass()
+    {
+      return "@1 を拡張しています。";
+    }
+
+    /*! Used as the header of a list of class methods in Objective-C.
+     *  These are similar to static public member functions in C++.
+     */
+    virtual QCString trClassMethods()
+    {
+      return "クラスメソッド";
+    }
+
+    /*! Used as the header of a list of instance methods in Objective-C.
+     *  These are similar to public member functions in C++.
+     */
+    virtual QCString trInstanceMethods()
+    {
+      return "実体メソッド";
+    }
+
+    /*! Used as the header of the member functions of an Objective-C class.
+     */
+    virtual QCString trMethodDocumentation()
+    {
+      return "メソッド詳解";
+    }
+
+    /*! Used as the title of the design overview picture created for the
+     *  VHDL output.
+     */
+    virtual QCString trDesignOverview()
+    {
+      return "デザイン概観";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+    /** old style UNO IDL services: implemented interfaces */
+    virtual QCString trInterfaces()
+    { return "実装されたインターフォース"; }
+
+    /** old style UNO IDL services: inherited services */
+    virtual QCString trServices()
+    { return "継承されたサービス"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroups()
+    { return "定数グループ"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroupReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" 定数グループ詳解";
+      return result;
+    }
+    /** UNO IDL service page title */
+    virtual QCString trServiceReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" サービス詳解";
+      return result;
+    }
+    /** UNO IDL singleton page title */
+    virtual QCString trSingletonReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" Singleton 詳解";
+      return result;
+    }
+    /** UNO IDL service page */
+    virtual QCString trServiceGeneratedFromFiles(bool /*single*/)
+    {
+      // single is true implies a single file
+      return "次のファイルからこのサービスについて"
+             "の詳解を抽出しました:";
+    }
+    /** UNO IDL singleton page */
+    virtual QCString trSingletonGeneratedFromFiles(bool /*single*/)
+    {
+      // single is true implies a single file
+      return "次のファイルからこの Singleton について"
+             "の詳解を抽出しました:";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+
 };
 
 #endif
index 4460946..054310c 100644 (file)
@@ -48,7 +48,7 @@
  *  Last Doxygen version covered   : 1.8.2
  */
 
-class TranslatorLatvian : public Translator
+class TranslatorLatvian : public TranslatorAdapter_1_8_4
 {
   public:
 
@@ -602,6 +602,7 @@ class TranslatorLatvian : public Translator
         case ClassDef::Protocol:   result+=" protokola"; break;
         case ClassDef::Category:   result+=" kategorijas"; break;
         case ClassDef::Exception:  result+=" izņēmuma"; break;
+        default: break;
       }
       if (isTemplate) result+=" veidnes";
       result+=" apraksts";
@@ -760,6 +761,7 @@ class TranslatorLatvian : public Translator
         case ClassDef::Protocol:   result+=" protokola"; break;
         case ClassDef::Category:   result+="s kategorijas"; break;
         case ClassDef::Exception:  result+=" izņēmuma"; break;
+        default: break;
       }
       result+=" dokumentācijas tika ģenerēta no šāda fail";
       if (single) result+="a:"; else result+="iem:";
@@ -1636,6 +1638,7 @@ class TranslatorLatvian : public Translator
         case ClassDef::Protocol:   result+=" protokola"; break;
         case ClassDef::Category:   result+=" kategorijas"; break;
         case ClassDef::Exception:  result+=" izņēmuma"; break;
+        default: break;
       }
       if (isTemplate) result+=" sagataves";
       result+=" atsauce";
@@ -1704,6 +1707,7 @@ class TranslatorLatvian : public Translator
         case ClassDef::Protocol:   result+="im protokolam"; break;
         case ClassDef::Category:   result+="ai kategorijai"; break;
         case ClassDef::Exception:  result+="im izņēmumam"; break;
+        default: break;
       }
       result+=" tika ģenerēta no fail";
       if (single) result+="a:"; else result+="iem:";
index 15da8e1..b753756 100644 (file)
@@ -16,7 +16,7 @@
  */
 // Тranslated by Slave Jovanovski <slavejovanovski@yahoo.com>
 //
-// The cyrilic strings were entered using Macedonian language support in
+// The cyrillic strings were entered using Macedonian language support in
 // Windows. The editor used was Eclipse 3.2. The file was saved in UTF-8.
 //
 // Updates:
index 86240c1..9bbadeb 100644 (file)
@@ -1899,7 +1899,7 @@ class TranslatorRomanian : public Translator
     virtual QCString trPanelSynchronisationTooltip(bool enable)
     {
       QCString opt = enable ? "activa" : "dezactiva";
-      return "apasă 'click' pentru a "+opt+" sincronizarea panourilor";
+      return "apasă click pentru a "+opt+" sincronizarea panourilor";
     }
 
     /*! Used in a method of an Objective-C class that is declared in a
index 7bd40f1..07aa63b 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef TRANSLATOR_RU_H
 #define TRANSLATOR_RU_H
 
-class TranslatorRussian : public TranslatorAdapter_1_7_5
+class TranslatorRussian : public Translator
 {
   public:
     /*! Used for identification of the language. */
@@ -1794,6 +1794,181 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5
       }
       return sdate;
     }
+
+///////////////////////////////////////////////////////////////////////
+// new since 1.7.5
+///////////////////////////////////////////////////////////////////////
+
+    /*! Header for the page with bibliographic citations */
+    virtual QCString trCiteReferences()
+    { return "Библиографические ссылки"; }
+
+    /*! Text for copyright paragraph */
+    virtual QCString trCopyright()
+    { return "Авторство"; }
+
+    /*! Header for the graph showing the directory dependencies */
+    virtual QCString trDirDepGraph(const char *name)
+    { return QCString("Директория графа зависимостей ")+name+":"; }
+
+///////////////////////////////////////////////////////////////////////
+// new since 1.8.0
+///////////////////////////////////////////////////////////////////////
+
+    /*! Detail level selector shown for hierarchical indices */
+    virtual QCString trDetailLevel()
+    { return "уровень детализации"; }
+
+    /*! Section header for list of template parameters */
+    virtual QCString trTemplateParameters()
+    { return "Параметры шаблона"; }
+
+    /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
+    virtual QCString trAndMore(const QCString &number)
+    { return "и "+number+" больше..."; }
+
+    /*! Used file list for a Java enum */
+    virtual QCString trEnumGeneratedFromFiles(bool single)
+    { QCString result = "Документация для этого перечисления сгенерерирована из файл";
+      if (!single) result += "ов";
+      result+="а:";
+      return result;
+    }
+
+    /*! Header of a Java enum page (Java enums are represented as classes). */
+    virtual QCString trEnumReference(const char *name)
+    { return QCString(name)+" Ссылки на перечисление"; }
+
+    /*! Used for a section containing inherited members */
+    virtual QCString trInheritedFrom(const char *members,const char *what)
+    { return QCString(members)+" унаследованные от "+what; }
+
+    /*! Header of the sections with inherited members specific for the
+     *  base class(es)
+     */
+    virtual QCString trAdditionalInheritedMembers()
+    { return "Дополнительные унаследованные члены"; }
+
+///////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+///////////////////////////////////////////////////////////////////////
+
+    /*! Used as a tooltip for the toggle button that appears in the
+     *  navigation tree in the HTML output when GENERATE_TREEVIEW is
+     *  enabled. This tooltip explains the meaning of the button.
+     */
+    virtual QCString trPanelSynchronisationTooltip(bool enable)
+    {
+      QCString opt = enable ? "включить" : "выключить";
+      return "нажмите на "+opt+" для синхронизации панелей";
+    }
+
+    /*! Used in a method of an Objective-C class that is declared in a
+     *  a category. Note that the @1 marker is required and is replaced
+     *  by a link.
+     */
+    virtual QCString trProvidedByCategory()
+    {
+      return "По группам @1.";
+    }
+
+    /*! Used in a method of an Objective-C category that extends a class.
+     *  Note that the @1 marker is required and is replaced by a link to
+     *  the class method.
+     */
+    virtual QCString trExtendsClass()
+    {
+      return "Расширяет класс @1.";
+    }
+
+    /*! Used as the header of a list of class methods in Objective-C.
+     *  These are similar to static public member functions in C++.
+     */
+    virtual QCString trClassMethods()
+    {
+      return "Методы класса";
+    }
+
+    /*! Used as the header of a list of instance methods in Objective-C.
+     *  These are similar to public member functions in C++.
+     */
+    virtual QCString trInstanceMethods()
+    {
+      return "Методы экземпляра";
+    }
+
+    /*! Used as the header of the member functions of an Objective-C class.
+     */
+    virtual QCString trMethodDocumentation()
+    {
+      return "Документация метода";
+    }
+
+    /*! Used as the title of the design overview picture created for the
+     *  VHDL output.
+     */
+    virtual QCString trDesignOverview()
+    {
+      return "Обзор дизайна";
+    }
+
+///////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+///////////////////////////////////////////////////////////////////////
+
+    /** old style UNO IDL services: implemented interfaces */
+    virtual QCString trInterfaces()
+    { return "Экспортируемые интерфейсы"; }
+
+    /** old style UNO IDL services: inherited services */
+    virtual QCString trServices()
+    { return "Включённые сервисы"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroups()
+    { return "Постоянные группы"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroupReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" Ссылка на постоянную группу";
+      return result;
+    }
+    /** UNO IDL service page title */
+    virtual QCString trServiceReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" Ссылка на сервис";
+      return result;
+    }
+    /** UNO IDL singleton page title */
+    virtual QCString trSingletonReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" Ссылка на одиночку";
+      return result;
+    }
+    /** UNO IDL service page */
+    virtual QCString trServiceGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"Документация для этого сервиса "
+                                "сгенерированна из следующего файл";
+      if (single) result+="а:"; else result+="ов:";
+      return result;
+    }
+    /** UNO IDL singleton page */
+    virtual QCString trSingletonGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"Документация по этому одиночке "
+                                "сгенерированна из следующего файл";
+      if (single) result+="а:"; else result+="ов:";
+      return result;
+    }
+
+///////////////////////////////////////////////////////////////////////
 };
 
 #endif
index 37519d2..af2d7df 100644 (file)
@@ -40,7 +40,7 @@
  Translator class (by the local maintainer) when the localized
  translator is made up-to-date again.
 */
-class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0
+class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0
 {
   public:
 
@@ -53,7 +53,7 @@ class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0
      * the identification used in language.cpp.
      */
     virtual QCString idLanguage()
-    { return "serbiancyr"; }
+    { return "serbian-cyrillic"; }
 
     /*! Used to get the LaTeX command(s) for the language support.
      *  This method should return string with commands that switch
index 58214bd..545cd43 100644 (file)
@@ -218,6 +218,7 @@ QCString stripAnonymousNamespaceScope(const QCString &s)
 {
   int i,p=0,l;
   QCString newScope;
+  int sl = s.length();
   while ((i=getScopeFragment(s,p,&l))!=-1)
   {
     //printf("Scope fragment %s\n",s.mid(i,l).data());
@@ -229,10 +230,10 @@ QCString stripAnonymousNamespaceScope(const QCString &s)
         newScope+=s.mid(i,l);
       }
     }
-    else
+    else if (i<sl)
     {
       if (!newScope.isEmpty()) newScope+="::";
-      newScope+=s.right(s.length()-i);
+      newScope+=s.right(sl-i);
       goto done;
     }
     p=i+l;
@@ -1652,7 +1653,9 @@ static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
 QCString removeRedundantWhiteSpace(const QCString &s)
 {
   static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
-  if (s.isEmpty()) return s;
+  static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+   
+  if (s.isEmpty() || vhdl) return s;
   static GrowBuf growBuf;
   //int resultLen = 1024;
   //int resultPos = 0;
@@ -1870,7 +1873,8 @@ int findParameterList(const QString &name)
       }
       else
       {
-        return bracePos;
+        int bp = bracePos>0 ? name.findRev('(',bracePos-1) : -1;
+        return bp==-1 ? bracePos : bp;
       }
     }
   } while (pos!=-1);
@@ -4304,7 +4308,27 @@ bool getDefs(const QCString &scName,
       //printf("found %d candidate members\n",members.count());
       if (members.count()>0) // at least one match
       {
-        md=members.last();
+        if (currentFile)
+        {
+          //printf("multiple results; pick one from file:%s\n", currentFile->name().data());
+          md = members.first();
+          while (md) 
+          {
+            if (md->getFileDef() && md->getFileDef()->name() == currentFile->name()) 
+            {
+              break; // found match in the current file
+            }
+            md=members.next();
+          }
+          if (!md) // member not in the current file
+          {
+            md=members.last();
+          }
+        } 
+        else 
+        {
+          md=members.last();
+        }
       }
       if (md && (md->getEnumScope()==0 || !md->getEnumScope()->isStrong())) 
            // found a matching global member, that is not a scoped enum value (or uniquely matches)
@@ -4410,7 +4434,7 @@ bool resolveRef(/* in */  const char *scName,
   QCString tsName = name;
   //bool memberScopeFirst = tsName.find('#')!=-1;
   QCString fullName = substitute(tsName,"#","::");
-  if (fullName.find("anonymous_namespace{")==-1 && fullName.find('<')==-1)
+  if (fullName.find("anonymous_namespace{")==-1)
   {
     fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
   }
@@ -5053,6 +5077,34 @@ static void initBaseClassHierarchy(BaseClassList *bcl)
     cd->visited=FALSE;
   }
 }
+//----------------------------------------------------------------------------
+
+bool classHasVisibleChildren(ClassDef *cd)
+{
+  BaseClassList *bcl;
+
+  if (cd->getLanguage()==SrcLangExt_VHDL) // reverse baseClass/subClass relation
+  {
+    if (cd->baseClasses()==0) return FALSE;
+    bcl=cd->baseClasses();
+  }
+  else 
+  {
+    if (cd->subClasses()==0) return FALSE;
+    bcl=cd->subClasses();
+  }
+
+  BaseClassListIterator bcli(*bcl);
+  for ( ; bcli.current() ; ++bcli)
+  {
+    if (bcli.current()->classDef->isVisibleInHierarchy())
+    {
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
 
 //----------------------------------------------------------------------------
 
@@ -5860,29 +5912,29 @@ int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStri
   static const QRegExp re_ftn("[a-z_A-Z\\x80-\\xFF][()=_a-z_A-Z0-9:\\x80-\\xFF]*");
   QRegExp re;
 
-  if (lang == SrcLangExt_Fortran)
+  name.resize(0);
+  templSpec.resize(0);
+  int i,l;
+  int typeLen=type.length();
+  if (typeLen>0)
   {
-    if (type.at(pos)==',') return -1;
-    if (type.left(4).lower()=="type")
+    if (lang == SrcLangExt_Fortran)
     {
-      re = re_norm;
+      if (type.at(pos)==',') return -1;
+      if (type.left(4).lower()=="type")
+      {
+        re = re_norm;
+      }
+      else
+      {
+        re = re_ftn;
+      }
     }
     else
     {
-      re = re_ftn;
+      re = re_norm;
     }
-  }
-  else
-  {
-    re = re_norm;
-  }
 
-  name.resize(0);
-  templSpec.resize(0);
-  int i,l;
-  int typeLen=type.length();
-  if (typeLen>0)
-  {
     if ((i=re.match(type,pos,&l))!=-1) // for each class name in the type
     {
       int ts=i+l;
@@ -6293,11 +6345,11 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
     if (tagInfo)
     {
       pd->setReference(tagInfo->tagName);
-      pd->setFileName(tagInfo->fileName);
+      pd->setFileName(tagInfo->fileName,TRUE);
     }
     else
     {
-      pd->setFileName(convertNameToFile(pd->name(),FALSE,TRUE));
+      pd->setFileName(convertNameToFile(pd->name(),FALSE,TRUE),FALSE);
     }
 
     //printf("Appending page `%s'\n",baseName.data());
@@ -6437,7 +6489,7 @@ void filterLatexString(FTextStream &t,const char *str,
         case '}':  t << "\\}";           break;
         case '<':  t << "$<$";           break;
         case '>':  t << "$>$";           break;
-        case '|':  t << "$|$";           break;
+        case '|':  t << "$\\vert$";      break;
         case '~':  t << "$\\sim$";       break;
         case '[':  if (Config_getBool("PDF_HYPERLINKS") || insideItem) 
                      t << "\\mbox{[}"; 
@@ -6963,7 +7015,7 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
 
 static QDict<void> aliasesProcessed;
 
-static QCString expandAliasRec(const QCString s);
+static QCString expandAliasRec(const QCString s,bool allowRecursion=FALSE);
 
 struct Marker
 {
@@ -7085,7 +7137,7 @@ static QCString replaceAliasArguments(const QCString &aliasValue,const QCString
     //printf("part before marker %d: '%s'\n",i,aliasValue.mid(p,m->pos-p).data());
     if (m->number>0 && m->number<=(int)args.count()) // valid number
     {
-      result+=*args.at(m->number-1);
+      result+=expandAliasRec(*args.at(m->number-1),TRUE);
       //printf("marker index=%d pos=%d number=%d size=%d replacement %s\n",i,m->pos,m->number,m->size,
       //    args.at(m->number-1)->data());
     }
@@ -7093,7 +7145,7 @@ static QCString replaceAliasArguments(const QCString &aliasValue,const QCString
   }
   result+=aliasValue.right(l-p); // append remainder
   //printf("string after replacement of markers: '%s'\n",result.data());
-  
+
   // expand the result again
   result = substitute(result,"\\{","{");
   result = substitute(result,"\\}","}");
@@ -7124,7 +7176,7 @@ static QCString escapeCommas(const QCString &s)
   return result.data();
 }
 
-static QCString expandAliasRec(const QCString s)
+static QCString expandAliasRec(const QCString s,bool allowRecursion)
 {
   QCString result;
   static QRegExp cmdPat("[\\\\@][a-z_A-Z][a-z_A-Z0-9]*");
@@ -7157,10 +7209,10 @@ static QCString expandAliasRec(const QCString s)
     }
     //printf("Found command s='%s' cmd='%s' numArgs=%d args='%s' aliasText=%s\n",
     //    s.data(),cmd.data(),numArgs,args.data(),aliasText?aliasText->data():"<none>");
-    if (aliasesProcessed.find(cmd)==0 && aliasText) // expand the alias
+    if ((allowRecursion || aliasesProcessed.find(cmd)==0) && aliasText) // expand the alias
     {
       //printf("is an alias!\n");
-      aliasesProcessed.insert(cmd,(void *)0x8);
+      if (!allowRecursion) aliasesProcessed.insert(cmd,(void *)0x8);
       QCString val = *aliasText;
       if (hasArgs)
       {
@@ -7169,7 +7221,7 @@ static QCString expandAliasRec(const QCString s)
         //       aliasText->data(),val.data(),args.data());
       }
       result+=expandAliasRec(val);
-      aliasesProcessed.remove(cmd);
+      if (!allowRecursion) aliasesProcessed.remove(cmd);
       p=i+l;
       if (hasArgs) p+=argsLen+2;
     }
@@ -7682,6 +7734,7 @@ QCString extractBlock(const QCString text,const QCString marker)
     p=i+1;
   }
   l1=p;
+  int lp=i;
   if (found)
   {
     while ((i=text.find('\n',p))!=-1)
@@ -7692,10 +7745,15 @@ QCString extractBlock(const QCString text,const QCString marker)
         break;
       }
       p=i+1;
+      lp=i;
     }
   }
+  if (l2==-1) // marker at last line without newline (see bug706874)
+  {
+    l2=lp;
+  }
   //printf("text=[%s]\n",text.mid(l1,l2-l1).data());
-  return text.mid(l1,l2-l1);
+  return l2>l1 ? text.mid(l1,l2-l1) : QCString();
 }
 
 /** Returns a string representation of \a lang. */
@@ -7890,3 +7948,326 @@ void addDocCrossReference(MemberDef *src,MemberDef *dst)
   }
 }
 
+//--------------------------------------------------------------------------------------
+
+/*! @brief Get one unicode character as an unsigned integer from utf-8 string
+ *
+ * @param s utf-8 encoded string
+ * @param idx byte position of given string \a s.
+ * @return the unicode codepoint, 0 - MAX_UNICODE_CODEPOINT
+ * @see getNextUtf8OrToLower()
+ * @see getNextUtf8OrToUpper()
+ */
+uint getUtf8Code( const QCString& s, int idx )
+{
+  const int length = s.length();
+  if (idx >= length) { return 0; }
+  const uint c0 = (uchar)s.at(idx);
+  if ( c0 < 0xC2 || c0 >= 0xF8 ) // 1 byte character
+  {
+    return c0;
+  }
+  if (idx+1 >= length) { return 0; }
+  const uint c1 = ((uchar)s.at(idx+1)) & 0x3f;
+  if ( c0 < 0xE0 ) // 2 byte character
+  {
+    return ((c0 & 0x1f) << 6) | c1;
+  }
+  if (idx+2 >= length) { return 0; }
+  const uint c2 = ((uchar)s.at(idx+2)) & 0x3f;
+  if ( c0 < 0xF0 ) // 3 byte character
+  {
+    return ((c0 & 0x0f) << 12) | (c1 << 6) | c2;
+  }
+  if (idx+3 >= length) { return 0; }
+  // 4 byte character
+  const uint c3 = ((uchar)s.at(idx+3)) & 0x3f;
+  return ((c0 & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
+}
+
+
+/*! @brief Returns one unicode character as an unsigned integer 
+ *  from utf-8 string, making the character lower case if it was upper case.
+ *
+ * @param s utf-8 encoded string
+ * @param idx byte position of given string \a s.
+ * @return the unicode codepoint, 0 - MAX_UNICODE_CODEPOINT, excludes 'A'-'Z'
+ * @see getNextUtf8Code()
+*/
+uint getUtf8CodeToLower( const QCString& s, int idx )
+{
+  const uint v = getUtf8Code( s, idx );
+  return v < 0x7f ? tolower( v ) : v;
+}
+
+
+/*! @brief Returns one unicode character as ian unsigned interger 
+ *  from utf-8 string, making the character upper case if it was lower case.
+ *
+ * @param s utf-8 encoded string
+ * @param idx byte position of given string \a s.
+ * @return the unicode codepoint, 0 - MAX_UNICODE_CODEPOINT, excludes 'A'-'Z'
+ * @see getNextUtf8Code()
+ */
+uint getUtf8CodeToUpper( const QCString& s, int idx )
+{
+  const uint v = getUtf8Code( s, idx );
+  return v < 0x7f ? toupper( v ) : v;
+}
+
+//--------------------------------------------------------------------------------------
+
+bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses)
+{
+  if (nd->getNamespaceSDict())
+  {
+    NamespaceSDict::Iterator cnli(*nd->getNamespaceSDict());
+    NamespaceDef *cnd;
+    for (cnli.toFirst();(cnd=cnli.current());++cnli)
+    {
+      if (cnd->isLinkable() && cnd->localName().find('@')==-1)
+      {
+        return TRUE;
+      }
+      else if (namespaceHasVisibleChild(cnd,includeClasses))
+      {
+        return TRUE;
+      }
+    }
+  }
+  if (includeClasses && nd->getClassSDict())
+  {
+    ClassSDict::Iterator cli(*nd->getClassSDict());
+    ClassDef *cd;
+    for (;(cd=cli.current());++cli)
+    {
+      if (cd->isLinkableInProject() && cd->templateMaster()==0) 
+      { 
+        return TRUE;
+      }
+    }
+  }
+  return FALSE;
+}
+
+//----------------------------------------------------------------------------
+
+bool classVisibleInIndex(ClassDef *cd)
+{
+  static bool allExternals = Config_getBool("ALLEXTERNALS");
+  return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
+}
+
+//----------------------------------------------------------------------------
+
+QCString extractDirection(QCString &docs)
+{
+  QRegExp re("\\[[^\\]]+\\]"); // [...]
+  int l=0;
+  if (re.match(docs,0,&l)==0)
+  {
+    int  inPos  = docs.find("in", 1,FALSE);
+    int outPos  = docs.find("out",1,FALSE);
+    bool input  =  inPos!=-1 &&  inPos<l;
+    bool output = outPos!=-1 && outPos<l;
+    if (input || output) // in,out attributes
+    {
+      docs = docs.mid(l); // strip attributes
+      if (input && output) return "[in,out]";
+      else if (input)      return "[in]";
+      else if (output)     return "[out]";
+    }
+  }
+  return QCString();
+}
+
+//-----------------------------------------------------------
+
+/** Computes for a given list type \a inListType, which are the
+ *  the corresponding list type(s) in the base class that are to be
+ *  added to this list.
+ *
+ *  So for public inheritance, the mapping is 1-1, so outListType1=inListType
+ *  Private members are to be hidden completely.
+ *
+ *  For protected inheritance, both protected and public members of the
+ *  base class should be joined in the protected member section.
+ *
+ *  For private inheritance, both protected and public members of the
+ *  base class should be joined in the private member section.
+ */
+void convertProtectionLevel(
+                   MemberListType inListType,
+                   Protection inProt,
+                   int *outListType1,
+                   int *outListType2
+                  )
+{
+  static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
+  // default representing 1-1 mapping
+  *outListType1=inListType;
+  *outListType2=-1;
+  if (inProt==Public)
+  {
+    switch (inListType) // in the private section of the derived class,
+                        // the private section of the base class should not
+                        // be visible
+    {
+      case MemberListType_priMethods:
+      case MemberListType_priStaticMethods:
+      case MemberListType_priSlots:
+      case MemberListType_priAttribs:
+      case MemberListType_priStaticAttribs:
+      case MemberListType_priTypes:
+        *outListType1=-1;
+        *outListType2=-1;
+        break;
+      default:
+        break;
+    }
+  }
+  else if (inProt==Protected) // Protected inheritance
+  {
+    switch (inListType) // in the protected section of the derived class,
+                        // both the public and protected members are shown
+                        // as protected
+    {
+      case MemberListType_pubMethods:
+      case MemberListType_pubStaticMethods:
+      case MemberListType_pubSlots:
+      case MemberListType_pubAttribs:
+      case MemberListType_pubStaticAttribs:
+      case MemberListType_pubTypes:
+      case MemberListType_priMethods:
+      case MemberListType_priStaticMethods:
+      case MemberListType_priSlots:
+      case MemberListType_priAttribs:
+      case MemberListType_priStaticAttribs:
+      case MemberListType_priTypes:
+        *outListType1=-1;
+        *outListType2=-1;
+        break;
+
+      case MemberListType_proMethods:
+        *outListType2=MemberListType_pubMethods;
+        break;
+      case MemberListType_proStaticMethods:
+        *outListType2=MemberListType_pubStaticMethods;
+        break;
+      case MemberListType_proSlots:
+        *outListType2=MemberListType_pubSlots;
+        break;
+      case MemberListType_proAttribs:
+        *outListType2=MemberListType_pubAttribs;
+        break;
+      case MemberListType_proStaticAttribs:
+        *outListType2=MemberListType_pubStaticAttribs;
+        break;
+      case MemberListType_proTypes:
+        *outListType2=MemberListType_pubTypes;
+        break;
+      default:
+        break;
+    }
+  }
+  else if (inProt==Private)
+  {
+    switch (inListType) // in the private section of the derived class,
+                        // both the public and protected members are shown
+                        // as private
+    {
+      case MemberListType_pubMethods:
+      case MemberListType_pubStaticMethods:
+      case MemberListType_pubSlots:
+      case MemberListType_pubAttribs:
+      case MemberListType_pubStaticAttribs:
+      case MemberListType_pubTypes:
+      case MemberListType_proMethods:
+      case MemberListType_proStaticMethods:
+      case MemberListType_proSlots:
+      case MemberListType_proAttribs:
+      case MemberListType_proStaticAttribs:
+      case MemberListType_proTypes:
+        *outListType1=-1;
+        *outListType2=-1;
+        break;
+
+      case MemberListType_priMethods:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubMethods;
+          *outListType2=MemberListType_proMethods;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      case MemberListType_priStaticMethods:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubStaticMethods;
+          *outListType2=MemberListType_proStaticMethods;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      case MemberListType_priSlots:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubSlots;
+          *outListType1=MemberListType_proSlots;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      case MemberListType_priAttribs:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubAttribs;
+          *outListType2=MemberListType_proAttribs;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      case MemberListType_priStaticAttribs:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubStaticAttribs;
+          *outListType2=MemberListType_proStaticAttribs;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      case MemberListType_priTypes:
+        if (extractPrivate)
+        {
+          *outListType1=MemberListType_pubTypes;
+          *outListType2=MemberListType_proTypes;
+        }
+        else
+        {
+          *outListType1=-1;
+          *outListType2=-1;
+        }
+        break;
+      default:
+        break;
+    }
+  }
+  //printf("convertProtectionLevel(type=%d prot=%d): %d,%d\n",
+  //    inListType,inProt,*outListType1,*outListType2);
+}
index 1aba005..a36a769 100644 (file)
@@ -25,6 +25,7 @@
 #include <qlist.h>
 #include <ctype.h>
 #include "types.h"
+#include "sortdict.h"
 
 //--------------------------------------------------------------------
 
@@ -87,6 +88,33 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
 
 //--------------------------------------------------------------------
 
+/** @brief maps a unicode character code to a list of T::ElementType's
+ */
+template<class T>
+class LetterToIndexMap : public SIntDict<T>
+{
+  public:
+    LetterToIndexMap() { SIntDict<T>::setAutoDelete(TRUE); }
+    int compareItems(QCollection::Item item1, QCollection::Item item2)
+    {
+      T *l1=(T *)item1;
+      T *l2=(T *)item2;
+      return (int)l1->letter()-(int)l2->letter();
+    }
+    void append(uint letter,typename T::ElementType *elem)
+    {
+      T *l = SIntDict<T>::find((int)letter);
+      if (l==0)
+      {
+        l = new T(letter);
+        SIntDict<T>::inSort((int)letter,l);
+      }
+      l->append(elem);
+    }
+};
+
+//--------------------------------------------------------------------
+
 QCString langToString(SrcLangExt lang);
 QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope=FALSE);
 
@@ -229,6 +257,9 @@ QCString replaceAnonymousScopes(const QCString &s,const char *replacement=0);
 void initClassHierarchy(ClassSDict *cl);
 
 bool hasVisibleRoot(BaseClassList *bcl);
+bool classHasVisibleChildren(ClassDef *cd);
+bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses);
+bool classVisibleInIndex(ClassDef *cd);
 
 int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level=0);
 Protection classInheritedProtectionLevel(ClassDef *cd,ClassDef *bcd,Protection prot=Public,int level=0);
@@ -411,5 +442,18 @@ bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile);
 
 void addDocCrossReference(MemberDef *src,MemberDef *dst);
 
+uint getUtf8Code( const QCString& s, int idx );
+uint getUtf8CodeToLower( const QCString& s, int idx );
+uint getUtf8CodeToUpper( const QCString& s, int idx );
+
+QCString extractDirection(QCString &docs);
+
+void convertProtectionLevel(
+                   MemberListType inListType,
+                   Protection inProt,
+                   int *outListType1,
+                   int *outListType2
+                  );
+
 #endif
 
diff --git a/src/version.py b/src/version.py
new file mode 100755 (executable)
index 0000000..c53303d
--- /dev/null
@@ -0,0 +1,57 @@
+# 
+
+# script to read the version information from `../configure`
+# relevant lines are starting with:
+#   `doxygen_version_major`
+#   `doxygen_version_minor`
+#   `doxygen_version_revision`
+#   `doxygen_version_mmn`
+# the collected information is written to: `../VERSION` and `../src/version.cpp`
+#
+import sys
+#
+# set 'default' values
+#
+major = 0
+minor = 0
+revision = 0
+mnt = 'NO'
+#
+# open input file
+#  read file and get relevant information
+# close
+#
+f = open('../configure', 'r')
+for line in f:
+    # check if line can match (saves 3 comparisons)
+    if (line.startswith('doxygen_version')):
+        if (line.startswith('doxygen_version_major')):
+            major = line.replace('doxygen_version_major=','')
+        elif (line.startswith('doxygen_version_minor')):
+            minor = line.replace('doxygen_version_minor=','')
+        elif (line.startswith('doxygen_version_revision')):
+            revision = line.replace('doxygen_version_revision=','')
+        elif (line.startswith('doxygen_version_mmn')):
+            mnt = line.replace('doxygen_version_mmn=','')
+f.close()
+
+# strip superfluous '\n`
+major = major.replace('\n','')
+minor = minor.replace('\n','')
+revision = revision.replace('\n','')
+mnt = mnt.replace('\n','')
+#
+# open output files
+# write relevant infomation
+# close files
+#
+f1 = open('../VERSION','w')
+f2 = open('../src/version.cpp','w')
+if (mnt == 'NO'):
+    f1.write(major + '.' + minor + '.' + revision)
+    f2.write('char versionString[]="' + major + '.' + minor + '.' + revision + '";')
+else:
+    f1.write(major + '.' + minor + '.' + revision + '-' + mnt)
+    f2.write('char versionString[]="' + major + '.' + minor + '.' + revision + '-' + mnt + '";')
+f1.close()
+f2.close()
index dab2624..e21ddea 100644 (file)
@@ -8,7 +8,8 @@ class MemberDef;
 void parseVhdlCode(CodeOutputInterface &,const char *,const QCString &, 
             bool ,const char *,FileDef *fd,
             int startLine,int endLine,bool inlineFragment,
-            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx);
+            MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx,
+            bool collectXRefs);
 void resetVhdlCodeParserState();
 void codeFreeVhdlScanner();
 
index 11da962..94ba3c0 100644 (file)
@@ -1512,10 +1512,12 @@ void resetVhdlCodeParserState()
 void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s, 
                   bool /*exBlock*/, const char *exName,FileDef *fd,
                   int startLine,int endLine,bool inlineFragment,
-                  MemberDef *memberDef,bool,Definition *searchCtx)
+                  MemberDef *memberDef,bool,Definition *searchCtx,
+                  bool /* collectXRefs */)
 {
   //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
   if (s.isEmpty()) return;
+  printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
   TooltipManager::instance()->clearTooltips();
   if (memberDef)
   {
@@ -1598,6 +1600,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
     g_sourceFileDef=0;
   }
   g_startCode=FALSE;
+  printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
 }
 
 void codeFreeVhdlScanner()
index a9af81a..aa0207a 100644 (file)
@@ -2019,9 +2019,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
   /*VHDL CHANGE */
   bool bRec,bUnit;
   QCString ltype(mdef->typeString());
-  ltype=ltype.replace(reg," ");
// ltype=ltype.replace(reg," ");
   QCString largs(mdef->argsString());
-  largs=largs.replace(reg," ");
// largs=largs.replace(reg," ");
   mdef->setType(ltype.data());
   mdef->setArgsString(largs.data());
   //ClassDef * plo=mdef->getClassDef();
index 3d3cc64..4e4e675 100644 (file)
@@ -121,8 +121,8 @@ static int parse_sec=0;
 
 //---------------------------- functions --------------------------------------------------------------------------------
 
-int vhdlScanYYlex ();
-void vhdlScanYYerror (char const *);
+int vhdlscannerYYlex ();
+void vhdlscannerYYerror (char const *);
 
 static void addVhdlType(const QCString &name,int startLine,
                         int section,uint64 spec,
@@ -382,14 +382,14 @@ t_ToolDir
 %type<qstr>  sel_wavefrms_1 sel_wavefrms_2 gen_stat1 block_declarative_part end_stats inout_stat
 %type<qstr> selected_signal_assignment comp_inst_stat                                             
  %type<qstr> conditional_signal_assignment selected_variable_assignment conditional_variable_assignment 
- %type<qstr> subprog_decltve_item subprog_body_3 subprog_body_1 procs_stat1_2
+ %type<qstr> subprog_decltve_item subprog_body_3 subprog_body_1 procs_stat1_2 gen_assoc
 
 %debug
 
 // for debugging set yydebug=1
 %initial-action { yydebug=0; }
 
-%expect 2
+%expect 3
 
 // minimum bison version
 //%required "2.2"
@@ -875,13 +875,18 @@ association_list:   t_LeftParen association_element association_list_1 t_RightPa
 association_list_1:  /* empty */                           { $$=""; }
 association_list_1: association_list_1 association_list_2  { $$=$1+" "+$2; }
 association_list_2: t_Comma association_element            { $$=", "+$2; }
+// VHDL '93 range_constraint ::= range range
+gen_association_list : gen_assoc gen_assoc { $$=$1+$2;}
+                                
+gen_association_list : gen_assoc { $$=$1; }
 
-gen_association_list : t_LeftParen gen_association_element gen_association_list_1 t_RightParen
+gen_assoc: t_LeftParen gen_association_element gen_association_list_1 t_RightParen 
     {
-      QCString str="( "+$2+$3;
-      str.append(" )");
+      QCString str="("+$2+$3;
+      str.append(")");
       $$=str;
     }
+
 gen_association_list: t_LeftParen  error t_RightParen { $$=""; }
 gen_association_list: t_LeftParen t_OPEN t_RightParen { $$=" ( open ) "; }
 
@@ -1073,7 +1078,7 @@ type_decl: t_TYPE t_Identifier type_decl_1 t_Semicolon
 type_decl: t_TYPE error t_Semicolon { $$=""; }
 
 type_decl_1:  /* empty */           { $$=""; }
-type_decl_1: t_IS type_definition   { $$=" is "+$2; }
+type_decl_1: t_IS type_definition   { $$="  "+$2; }
 
 type_definition: enumeration_type_definition    { $$=$1; }
 type_definition: range_constraint               { $$=$1; }
@@ -1443,7 +1448,7 @@ mark_comp: dot_name              { $$=$1; }
 
 comp_1: t_LeftParen t_Identifier  t_RightParen  { $$="("+$2+")"; }
 
-vcomp_stat: t_CONFIGURATION      { $$="configurátion";yyLineNr=s_str.iLine; }
+vcomp_stat: t_CONFIGURATION      { $$="configuration";yyLineNr=s_str.iLine; }
 vcomp_stat: t_ENTITY             { $$="entity";yyLineNr=s_str.iLine; }
 vcomp_stat: t_COMPONENT          { $$="component";yyLineNr=s_str.iLine; }
 
@@ -2261,9 +2266,9 @@ tool_directive: t_ToolDir
 
 %%
 extern FILE* yyout;
-extern YYSTYPE vhdlScanYYlval;
+extern YYSTYPE vhdlscannerYYlval;
 
-void vhdlScanYYerror(const char* /*str*/)
+void vhdlscannerYYerror(const char* /*str*/)
 {
   // fprintf(stderr,"\n<---error at line %d  : [ %s]   in file : %s ---->",s_str.yyLineNr,s_str.qstr.data(),s_str.fileName);
   //  exit(0);
@@ -2271,7 +2276,7 @@ void vhdlScanYYerror(const char* /*str*/)
 
 void vhdlParse()
 {
-  vhdlScanYYparse();
+  vhdlscannerYYparse();
 }
 
 struct VhdlContainer*  getVhdlCont()
@@ -2541,10 +2546,10 @@ static void addVhdlType(const QCString &name,int startLine,int section,
     if (current->args.isEmpty())
     {
       current->args=args;
-      current->args.replace(reg,"%"); // insert dummy chars because wihte spaces are removed
+//    current->args.replace(reg,"%"); // insert dummy chars because wihte spaces are removed
     }
     current->type=type;
-    current->type.replace(reg,"%"); // insert dummy chars because white spaces are removed
+//  current->type.replace(reg,"%"); // insert dummy chars because white spaces are removed
     current->protection=prot;
  
        if (!lastCompound && (section==Entry::VARIABLE_SEC) &&  (spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) )
index 6ad8316..1d799d0 100644 (file)
@@ -68,7 +68,8 @@ class VHDLLanguageScanner : public ParserInterface
                    bool inlineFragment=FALSE,
                    MemberDef *memberDef=0,
                    bool showLineNumbers=TRUE,
-                   Definition *searchCtx=0
+                   Definition *searchCtx=0,
+                   bool collectXRefs=TRUE
                   );
     void resetCodeParserState();
     void parsePrototype(const char *text);
index fb0dcb7..716c0c0 100644 (file)
@@ -112,7 +112,7 @@ static struct
 } str_doc;
 
 #define YY_NEVER_INTERACTIVE 1
-#define YY_USER_ACTION num_chars += (int)vhdlScanYYleng;
+#define YY_USER_ACTION num_chars += (int)vhdlscannerYYleng;
 
 #define MAX_KEYWORD_LEN 20
 
@@ -280,7 +280,7 @@ static int find_keyword(char *s)
 // update current line
 static void lineCount()
 {
-  for (const char* c=vhdlScanYYtext ; *c ; ++c )
+  for (const char* c=vhdlscannerYYtext ; *c ; ++c )
   {
     yyLineNr += (*c == '\n') ;
   }
@@ -344,10 +344,10 @@ static bool isConstraintFile(const QCString &fileName,const QCString &ext)
 //static void resetScanner(const char* s,MyParserVhdl* parse);
 
 #undef  YY_INPUT
-#define        YY_INPUT(buf,result,max_size) result=vhdlScanYYread(buf,max_size);
+#define        YY_INPUT(buf,result,max_size) result=vhdlscannerYYread(buf,max_size);
 
 
-static int vhdlScanYYread(char *buf,int max_size)
+static int vhdlscannerYYread(char *buf,int max_size)
 {
   int c=0;
   while ( c < max_size && inputVhdlString.at(inputPosition) )
@@ -437,14 +437,14 @@ BR                         [ \t\n\r]
 
 
 {letter}(_?{letter_or_digit})*|{extended_character}    {
-          int itoken=find_keyword(vhdlScanYYtext);
+          int itoken=find_keyword(vhdlscannerYYtext);
         
-          //   fprintf(stderr,"\n <<<< search tok:  %s %d %d>>>\n",vhdlScanYYtext,itoken,yyLineNr);
+          //   fprintf(stderr,"\n <<<< search tok:  %s %d %d>>>\n",vhdlscannerYYtext,itoken,yyLineNr);
         
           // tokens in vhdlparser.hpp 258..412
          if (itoken>200  && itoken<500 && prevToken!=t_END)
          {
-           //          printf("\n <<<< insert tok:  %s %d %d>>>\n",vhdlScanYYtext,itoken,yyLineNr);
+           //          printf("\n <<<< insert tok:  %s %d %d>>>\n",vhdlscannerYYtext,itoken,yyLineNr);
            lineIndex[itoken]=yyLineNr;
          }
         
@@ -462,7 +462,7 @@ BR                         [ \t\n\r]
         
          prevToken=itoken;
         
-          yycont->qstr=vhdlScanYYtext;
+          yycont->qstr=vhdlscannerYYtext;
           yycont->yyLineNr=yyLineNr;
           if (itoken== -1)  
           {
@@ -476,13 +476,13 @@ BR                         [ \t\n\r]
         }
 
 ({decimal_literal})|({base}#{based_integer}(\.{based_integer})?#({exponent})?)|({base}:{based_integer}(\.{based_integer})?:({exponent})?) {
-          yycont->qstr=vhdlScanYYtext;
+          yycont->qstr=vhdlscannerYYtext;
           return ( t_ABSTRLIST );
         }
 
 '({graphic_character}|\"|\%)'  {
-          QCString q(vhdlScanYYtext);         
-          yycont->qstr=vhdlScanYYtext; 
+          QCString q(vhdlscannerYYtext);              
+          yycont->qstr=vhdlscannerYYtext; 
         
           if (q=="'('") // std_logic'('1') ?
           {
@@ -502,19 +502,19 @@ BR                         [ \t\n\r]
         }
 
 (\"({graphic_character}|(\"\")|\%)*\")|(\%({graphic_character}|(\%\%)|\")*\%) {
-          yycont->qstr=vhdlScanYYtext;
+          yycont->qstr=vhdlscannerYYtext;
           yycont->iLine=yyLineNr;
          return ( t_STRING );
         } 
 
 {base_specifier}(\"{extended_digit}(_?{extended_digit})*\"|\%{extended_digit}(_?{extended_digit})*\%)                                                  {
-         yycont->qstr=vhdlScanYYtext;
+         yycont->qstr=vhdlscannerYYtext;
          yycont->iLine=yyLineNr;
          return ( t_DIGIT );
         }
 
 {vhdl2008tooldir} {
-         yycont->qstr=vhdlScanYYtext;
+         yycont->qstr=vhdlscannerYYtext;
          yycont->iLine=yyLineNr;
          return(t_ToolDir);
         }      
@@ -526,7 +526,7 @@ BR                         [ \t\n\r]
 
 <*>"--"[^\n]* {
           /* comment */
-         QCString qcs(vhdlScanYYtext);
+         QCString qcs(vhdlscannerYYtext);
          //  vhdl comment ?
          if (qcs.stripPrefix("--!"))
          {
@@ -545,7 +545,7 @@ BR                         [ \t\n\r]
 
 <*>{BR}*"--!"[^{}\n]*[^\n]*\n/{B}*"--!" { // multi line comment
   if (iDocLine==-1) iDocLine=yyLineNr;
-  QCString qc(vhdlScanYYtext);
+  QCString qc(vhdlscannerYYtext);
   int len=qc.contains('\n')+yyLineNr-1;
   if (YY_START!=Comment) // Start of the comment block
   {
@@ -555,7 +555,7 @@ BR                         [ \t\n\r]
   
    if(!checkMultiComment(qc,len))
   {
-    strComment+=vhdlScanYYtext;
+    strComment+=vhdlscannerYYtext;
   }
   lineCount();
   BEGIN(Comment);
@@ -563,7 +563,7 @@ BR                         [ \t\n\r]
 
 <Comment>^{B}*"--!"[^\n]* {
   if (iDocLine==-1) iDocLine=yyLineNr;
-  strComment+=vhdlScanYYtext;
+  strComment+=vhdlscannerYYtext;
   int index=strComment.find("\\code");
   if (index>0)
   {
@@ -591,14 +591,14 @@ BR                         [ \t\n\r]
             handleCommentBlock(strComment,FALSE);
           }
           strComment.resize(0);;
-          unput(*vhdlScanYYtext);
+          unput(*vhdlscannerYYtext);
           doxComment=FALSE;
           BEGIN(g_lastCommentContext);
         }
         
 <*>"--!"[^\n]* { // one line comment
           if (iDocLine==-1) iDocLine=yyLineNr;
-          QCString qcs(vhdlScanYYtext);
+          QCString qcs(vhdlscannerYYtext);
 
          bool isEndCode=qcs.contains("\\endcode");
 
@@ -630,7 +630,7 @@ BR                         [ \t\n\r]
        }
 
 <*>"/*" {
-         strComment+=vhdlScanYYtext;
+         strComment+=vhdlscannerYYtext;
          if (yy_hold_char=='!') // found  comment starting with "/*!"
          {
            doxComment=TRUE;
@@ -639,7 +639,7 @@ BR                         [ \t\n\r]
         }
 
 <Vhdl2008Comment>[^*]*[*]+    {
-         QCString tt(vhdlScanYYtext);
+         QCString tt(vhdlscannerYYtext);
          int len=tt.length();
          yyLineNr+=tt.contains('\n');
 
@@ -712,7 +712,7 @@ void vhdlscanFreeScanner()
 #if defined(YY_FLEX_SUBMINOR_VERSION)
   if (g_lexInit)
   {
-    vhdlScanYYlex_destroy();
+    vhdlscannerYYlex_destroy();
   }
 #endif
 }
@@ -735,7 +735,7 @@ void VHDLLanguageScanner::parsePrototype(const char *text)
 // do parsing
 //int VhdlParser::doLex()
 //{
-//  int token=vhdlScanYYlex();
+//  int token=vhdlscannerYYlex();
 //  //fprintf(stderr,"\ntoken: %d at line: %d",token,yyLineNr);
 //  return token;
 //}
@@ -763,6 +763,7 @@ void VHDLLanguageScanner::parseInput(const char *fileName,
     VhdlDocGen::parseUCF(fileBuf,root,yyFileName,TRUE); 
     return; 
   }
+  printlex(yy_flex_debug, TRUE, __FILE__, fileName);
 
   ::parserInit();
   yycont=getVhdlCont();
@@ -775,7 +776,7 @@ void VHDLLanguageScanner::parseInput(const char *fileName,
   inputFile.setName(fileName);
   if (g_lexInit)
   {
-    vhdlScanYYrestart( vhdlScanYYin );
+    vhdlscannerYYrestart( vhdlscannerYYin );
   }
   g_lexInit=TRUE;
   g_thisParser=this;
@@ -791,6 +792,7 @@ void VHDLLanguageScanner::parseInput(const char *fileName,
   free(lineIndex);
   inputFile.close();
   mapLibPackage(root);
+  printlex(yy_flex_debug, FALSE, __FILE__, fileName);
 }
 
 void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
@@ -805,12 +807,13 @@ void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
     bool inlineFragment,
     MemberDef *memberDef,
     bool showLineNumbers,
-    Definition *searchCtx
+    Definition *searchCtx,
+    bool collectXRefs
     )
 {
   ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
                   fileDef,startLine,endLine,inlineFragment,memberDef,
-                  showLineNumbers,searchCtx);
+                  showLineNumbers,searchCtx,collectXRefs);
 }
 
 /*
index d9b5df9..8df1acf 100644 (file)
@@ -836,6 +836,19 @@ void XmlDocVisitor::visitPost(DocMscFile *)
   if (m_hide) return;
   m_t << "</mscfile>" << endl;
 }
+
+void XmlDocVisitor::visitPre(DocDiaFile *df)
+{
+  if (m_hide) return;
+  m_t << "<diafile name=\"" << df->file() << "\">";
+}
+
+void XmlDocVisitor::visitPost(DocDiaFile *)
+{
+  if (m_hide) return;
+  m_t << "</diafile>" << endl;
+}
+
 void XmlDocVisitor::visitPre(DocLink *lnk)
 {
   if (m_hide) return;
@@ -999,6 +1012,7 @@ void XmlDocVisitor::visitPost(DocParamList *)
 void XmlDocVisitor::visitPre(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "<xrefsect id=\"";
   m_t << x->file() << "_1" << x->anchor();
   m_t << "\">";
@@ -1008,9 +1022,10 @@ void XmlDocVisitor::visitPre(DocXRefItem *x)
   m_t << "<xrefdescription>";
 }
 
-void XmlDocVisitor::visitPost(DocXRefItem *)
+void XmlDocVisitor::visitPost(DocXRefItem *x)
 {
   if (m_hide) return;
+  if (x->title().isEmpty()) return;
   m_t << "</xrefdescription>";
   m_t << "</xrefsect>";
 }
@@ -1068,6 +1083,19 @@ void XmlDocVisitor::visitPost(DocVhdlFlow *)
 {
 }
 
+void XmlDocVisitor::visitPre(DocParBlock *)
+{
+  if (m_hide) return;
+  m_t << "<parblock>";
+}
+
+void XmlDocVisitor::visitPost(DocParBlock *)
+{
+  if (m_hide) return;
+  m_t << "</parblock>";
+}
+
+
 void XmlDocVisitor::filter(const char *str)
 { 
   m_t << convertToXML(str);
index 42290cc..6dc189c 100644 (file)
@@ -109,6 +109,8 @@ class XmlDocVisitor : public DocVisitor
 
     void visitPre(DocMscFile *);
     void visitPost(DocMscFile *);
+    void visitPre(DocDiaFile *);
+    void visitPost(DocDiaFile *);
     void visitPre(DocLink *);
     void visitPost(DocLink *);
     void visitPre(DocRef *);
@@ -135,6 +137,8 @@ class XmlDocVisitor : public DocVisitor
     void visitPost(DocHtmlBlockQuote *);
     void visitPre(DocVhdlFlow *);
     void visitPost(DocVhdlFlow *);
+    void visitPre(DocParBlock *);
+    void visitPost(DocParBlock *);
 
   private:
 
index 9caa935..570901f 100644 (file)
 //------------------
 
 static const char index_xsd[] =
-#include "index_xsd.h"
+#include "index.xsd.h"
 ;
 
 //------------------
 //
 static const char compound_xsd[] =
-#include "compound_xsd.h"
+#include "compound.xsd.h"
 ;
 
 //------------------
index 29e7dcd..6b11c4f 100644 (file)
@@ -2,7 +2,7 @@
 <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
   <compounddef id="citelist" kind="page">
     <compoundname>citelist</compoundname>
-    <title>Bibliographic References</title>
+    <title>Bibliography</title>
     <detaileddescription>
       <para>
         <variablelist>
index 9662b9c..c2fe57a 100644 (file)
@@ -7,40 +7,34 @@
       <para>
         <programlisting>
           <codeline lineno="1">
-            <highlight class="normal">*<sp/></highlight>
             <highlight class="comment">#<sp/>comment<sp/>in<sp/>Python</highlight>
             <highlight class="normal"/>
           </codeline>
           <codeline lineno="2">
-            <highlight class="normal">*<sp/></highlight>
+            <highlight class="normal"/>
             <highlight class="keyword">class<sp/></highlight>
             <highlight class="normal">Python:</highlight>
           </codeline>
           <codeline lineno="3">
-            <highlight class="normal">*<sp/><sp/><sp/></highlight>
+            <highlight class="normal">
+              <sp/>
+              <sp/>
+            </highlight>
             <highlight class="keywordflow">pass</highlight>
-            <highlight class="normal"/>
-          </codeline>
-          <codeline lineno="4">
-            <highlight class="normal">*<sp/></highlight>
           </codeline>
         </programlisting>
       </para>
       <para>
         <programlisting>
           <codeline>
-            <highlight class="normal">*<sp/></highlight>
             <highlight class="comment">//<sp/>comment<sp/>in<sp/>a<sp/>code<sp/>block</highlight>
             <highlight class="normal"/>
           </codeline>
           <codeline>
-            <highlight class="normal">*<sp/></highlight>
+            <highlight class="normal"/>
             <highlight class="keyword">class<sp/></highlight>
             <highlight class="normal">Cpp<sp/>{};</highlight>
           </codeline>
-          <codeline>
-            <highlight class="normal">*<sp/></highlight>
-          </codeline>
         </programlisting>
       </para>
     </detaileddescription>
index 0378239..193fadd 100644 (file)
@@ -8,7 +8,7 @@ TEMPLATE                = app
 CONFIG                 = qt warn_on release
 
 TMAKE_CC               = gcc
-TMAKE_CFLAGS           = -pipe 
+TMAKE_CFLAGS           = -pipe -fsigned-char
 TMAKE_CFLAGS_WARN_ON   = -Wall -W 
 TMAKE_CFLAGS_WARN_OFF  =
 TMAKE_CFLAGS_RELEASE   = -O2
index 04f7b97..2852b36 100644 (file)
@@ -213,7 +213,7 @@ TARGET1     =       #$ Expand("TARGET_x");
 #$ Project("TMAKE_APP_FLAG") || DisableOutput();
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
        $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
 #$ Project("TMAKE_APP_FLAG") || EnableOutput();
 #$ (Config("staticlib") || Project("TMAKE_APP_FLAG")) && DisableOutput();
index 0cf8711..aa7f53b 100644 (file)
@@ -192,7 +192,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        $(LINK) @&&|
            $(LFLAGS) $(OBJECTS) $(OBJMOC), $(TARGET),,$(LIBS)
index edc7a47..83fc890 100644 (file)
            $project{"TARGET_EXT"} = ".dll";
        }
     } else {
-       Project('TMAKE_LFLAGS_CONSOLE_ANY = $$TMAKE_LFLAGS_CONSOLE');
-       Project('TMAKE_LFLAGS_WINDOWS_ANY = $$TMAKE_LFLAGS_WINDOWS');
-       if ( Project("TMAKE_APP_FLAG") ) {
-           $project{"TARGET_EXT"} = ".exe";
-       } else {
-           $project{"TARGET_EXT"} = ".a";
-       }
+        if ( Config("cgi") ) {
+           Project('TMAKE_LFLAGS_CONSOLE_ANY = $$TMAKE_LFLAGS_CONSOLE');
+           Project('TMAKE_LFLAGS_WINDOWS_ANY = $$TMAKE_LFLAGS_WINDOWS');
+           $project{"TARGET_EXT"} = "";
+        } else {
+           if ( Project("TMAKE_APP_FLAG") ) {
+               $project{"TARGET_EXT"} = ".exe";
+           } else {
+               $project{"TARGET_EXT"} = ".a";
+           }
+        }
     }
     if ( Config("windows") ) {
        if ( Config("console") ) {
@@ -203,7 +207,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
 #$ Project("TMAKE_APP_OR_DLL") || EnableOutput();
index 4d333c1..ba8e762 100644 (file)
@@ -203,7 +203,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
 #$ Project("TMAKE_APP_OR_DLL") || EnableOutput();
index 388db4b..3344236 100644 (file)
@@ -188,7 +188,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        $(LINK) $(LFLAGS) /OUT:$(TARGET) @<<
            $(OBJECTS) $(OBJMOC) $(LIBS)
index 78e1d77..ab39654 100644 (file)
@@ -169,7 +169,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        $(LINK) $(LFLAGS) $(OBJECTS) $(OBJMOC), $(TARGET),, $(LIBS)
 #$ Project("TMAKE_APP_OR_DLL") || EnableOutput();
index aeec8db..b5b1fb6 100644 (file)
@@ -169,7 +169,7 @@ TARGET      =       #$ ExpandGlue("TARGET",$project{"DESTDIR"},"",$project{"TARGET_EXT"});
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
 $(TARGET): $(OBJECTS) $(LIBS) #$ Expand("TARGETDEPS");
        $(LINK) -B"$(LFLAGS)" $(OBJECTS) $(LIBS) -Fe$(TARGET)
index 0cc47bb..883c794 100644 (file)
@@ -157,7 +157,7 @@ TMPLIST =   #$ ExpandGlue("TARGET","","",".lst");
 
 all: #$ ExpandGlue("ALL_DEPS",""," "," "); $text .= '$(TARGET)';
 
-$(TARGET): $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
+$(TARGET): $(HEADERS) $(OBJECTS) $(OBJMOC) #$ Expand("TARGETDEPS");
        @%create $(TMPLIST)
 #$ Project("TMAKE_APP_OR_DLL") || DisableOutput();
        @%append $(TMPLIST) NAME #$ Expand("TARGET");
diff --git a/winbuild/Config.rules b/winbuild/Config.rules
new file mode 100644 (file)
index 0000000..3b6baf5
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+       Name="config"
+       Version="8.00"
+       >
+       <Rules>
+               <CustomBuildRule
+                       Name="Config"
+                       DisplayName="Config"
+                       CommandLine="python $(ProjectDir)..\src\configgen.py -cpp [AllOptions] [AdditionalOptions] [inputs] &gt; $(InputDir)../src/$(InputName)options.cpp"
+                       Outputs="$(InputDir)../src/$(InputName)options.cpp"
+                       FileExtensions="*.xml"
+                       AdditionalDependencies="$(ProjectDir)..\src\configgen.py"
+                       ExecutionDescription="Executing configgen for doxygen..."
+                       ShowOnlyRuleProperties="false"
+                       >
+               </CustomBuildRule>
+               <CustomBuildRule
+                       Name="Config_dw"
+                       DisplayName="Config"
+                       CommandLine="python $(ProjectDir)..\src\configgen.py -wiz [AllOptions] [AdditionalOptions] [inputs]  &gt; $(InputDir)../addon/doxywizard/$(InputName)doc.cpp"
+                       Outputs="$(InputDir)../addon/doxywizard/$(InputName)doc.cpp"
+                       FileExtensions="*.xml"
+                       AdditionalDependencies="$(ProjectDir)..\src\configgen.py"
+                       ExecutionDescription="Executing configgen for doxywizard ..."
+                       ShowOnlyRuleProperties="false"
+                       >
+               </CustomBuildRule>
+       </Rules>
+</VisualStudioToolFile>
index 8f2fba5..fa8c577 100644 (file)
@@ -1,6 +1,6 @@
 
 Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
+# Visual C++ Express 2008
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Doxygen", "Doxygen.vcproj", "{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}"
        ProjectSection(ProjectDependencies) = postProject
                {B6BB4771-8A4E-4656-AC08-1EF8AC182F64} = {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}
@@ -9,6 +9,9 @@ EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtools", "qtools.vcproj", "{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxywizard", "Doxywizard.vcproj", "{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}"
+       ProjectSection(ProjectDependencies) = postProject
+               {309C9A4A-94D2-4837-9A11-45B0A6CF35C3} = {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}
+       EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxysearch", "doxysearch.vcproj", "{F3F3408F-F6F7-46C7-BF1E-1FA056E0AE20}"
 EndProject
@@ -28,6 +31,7 @@ Global
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|Win32.ActiveCfg = Debug|Win32
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|Win32.Build.0 = Debug|Win32
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|x64.ActiveCfg = Debug|x64
+               {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|x64.Build.0 = Debug|x64
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|Win32.ActiveCfg = Release|Win32
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|Win32.Build.0 = Release|Win32
                {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|x64.ActiveCfg = Release|x64
index 1822438..760ad50 100644 (file)
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-       ProjectType="Visual C++"
-       Version="9,00"
-       Name="Doxygen"
-       ProjectGUID="{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}"
-       RootNamespace="Doxygen"
-       TargetFrameworkVersion="131072"
-       >
-       <Platforms>
-               <Platform
-                       Name="Win32"
-               />
-               <Platform
-                       Name="x64"
-               />
-       </Platforms>
-       <ToolFiles>
-               <ToolFile
-                       RelativePath=".\Lex.rules"
-               />
-       </ToolFiles>
-       <Configurations>
-               <Configuration
-                       Name="Debug|Win32"
-                       OutputDirectory="..\bin\Debug"
-                       IntermediateDirectory=".\Debug"
-                       ConfigurationType="1"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-                       UseOfMFC="0"
-                       ATLMinimizesCRunTimeLibraryUsage="false"
-                       CharacterSet="2"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                               CommandLine="version.bat"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="Lex"
-                               CommandLine="flex [AllOptions] [AdditionalOptions] [inputs]"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                               TypeLibraryName=".\Debug\Doxygen.tlb"
-                               HeaderFileName=""
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200 "
-                               Optimization="0"
-                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
-                               PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
-                               MinimalRebuild="true"
-                               BasicRuntimeChecks="3"
-                               RuntimeLibrary="1"
-                               PrecompiledHeaderFile=".\Debug/Doxygen.pch"
-                               AssemblerListingLocation=".\Debug/"
-                               ObjectFile=".\Debug/"
-                               ProgramDataBaseFileName=".\Debug/"
-                               WarningLevel="3"
-                               SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="_DEBUG"
-                               Culture="1033"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               AdditionalDependencies="qtools.lib ws2_32.lib iconv.lib shell32.lib"
-                               OutputFile="..\bin\Debug\doxygen.exe"
-                               LinkIncremental="2"
-                               SuppressStartupBanner="true"
-                               AdditionalLibraryDirectories="Debug"
-                               GenerateManifest="false"
-                               IgnoreDefaultLibraryNames="libcmt.lib"
-                               GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\Debug/Doxygen.pdb"
-                               SubSystem="1"
-                               LargeAddressAware="2"
-                               RandomizedBaseAddress="1"
-                               DataExecutionPrevention="0"
-                               TargetMachine="1"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                               SuppressStartupBanner="true"
-                               OutputFile=".\Debug/Doxygen.bsc"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-               <Configuration
-                       Name="Debug|x64"
-                       OutputDirectory="..\bin\Debug64"
-                       IntermediateDirectory=".\Debug64"
-                       ConfigurationType="1"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-                       UseOfMFC="0"
-                       ATLMinimizesCRunTimeLibraryUsage="false"
-                       CharacterSet="2"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                               CommandLine="version.bat"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="Lex"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                               TargetEnvironment="3"
-                               TypeLibraryName=".\Debug64\Doxygen.tlb"
-                               HeaderFileName=""
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200 /bigobj"
-                               Optimization="0"
-                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
-                               PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
-                               MinimalRebuild="true"
-                               BasicRuntimeChecks="3"
-                               RuntimeLibrary="1"
-                               PrecompiledHeaderFile=".\Debug64/Doxygen.pch"
-                               AssemblerListingLocation=".\Debug64/"
-                               ObjectFile=".\Debug64/"
-                               ProgramDataBaseFileName=".\Debug64/"
-                               WarningLevel="3"
-                               SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="_DEBUG"
-                               Culture="1033"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               AdditionalDependencies="qtools.lib ws2_32.lib iconv64.lib shell32.lib"
-                               OutputFile="..\bin\Debug64\doxygen.exe"
-                               LinkIncremental="2"
-                               SuppressStartupBanner="true"
-                               AdditionalLibraryDirectories="Debug64"
-                               GenerateManifest="false"
-                               GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\Debug64/Doxygen.pdb"
-                               SubSystem="1"
-                               LargeAddressAware="2"
-                               RandomizedBaseAddress="1"
-                               DataExecutionPrevention="0"
-                               TargetMachine="17"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                               SuppressStartupBanner="true"
-                               OutputFile=".\Debug64/Doxygen.bsc"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-               <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory="..\bin\Release"
-                       IntermediateDirectory=".\Release"
-                       ConfigurationType="1"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-                       UseOfMFC="0"
-                       ATLMinimizesCRunTimeLibraryUsage="false"
-                       CharacterSet="2"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                               CommandLine="version.bat"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="Lex"
-                               CommandLine="flex [AllOptions] [AdditionalOptions] [inputs]"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                               TypeLibraryName=".\Release\Doxygen.tlb"
-                               HeaderFileName=""
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200 "
-                               Optimization="2"
-                               InlineFunctionExpansion="2"
-                               OmitFramePointers="true"
-                               WholeProgramOptimization="true"
-                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
-                               StringPooling="true"
-                               RuntimeLibrary="0"
-                               EnableFunctionLevelLinking="true"
-                               PrecompiledHeaderFile=".\Release/Doxygen.pch"
-                               AssemblerListingLocation=".\Release/"
-                               ObjectFile=".\Release/"
-                               ProgramDataBaseFileName=".\Release/"
-                               WarningLevel="3"
-                               SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
-                               Culture="1033"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               AdditionalOptions="/LTCG"
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="9,00"\r
+       Name="Doxygen"\r
+       ProjectGUID="{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}"\r
+       RootNamespace="Doxygen"\r
+       TargetFrameworkVersion="131072"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+               <Platform\r
+                       Name="x64"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+               <ToolFile\r
+                       RelativePath=".\Lex.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Settings.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Version.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Config.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Gen_head.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Languages.rules"\r
+               />\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="..\bin\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
+                               Name="Gen_head"\r
+                       />\r
+                       <Tool\r
+                               Name="Languages"\r
+                       />\r
+                       <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug\Doxygen.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/Zm200 "\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."\r
+                               PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               PrecompiledHeaderFile=".\Debug/Doxygen.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug\$(TargetName).pdb"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="qtools.lib ws2_32.lib iconv.lib shell32.lib"\r
+                               OutputFile="..\bin\Debug\doxygen.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="Debug"\r
+                               GenerateManifest="false"\r
+                               IgnoreDefaultLibraryNames="libcmtd.lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile=".\Debug\$(TargetName).pdb"\r
+                               SubSystem="1"\r
+                               LargeAddressAware="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Debug/Doxygen.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|x64"\r
+                       OutputDirectory="..\bin\Debug64"\r
+                       IntermediateDirectory=".\Debug64"\r
+                       ConfigurationType="1"\r
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
+                               Name="Gen_head"\r
+                       />\r
+                       <Tool\r
+                               Name="Languages"\r
+                       />\r
+                       <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TargetEnvironment="3"\r
+                               TypeLibraryName=".\Debug64\Doxygen.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/Zm200 /bigobj"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."\r
+                               PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               PrecompiledHeaderFile=".\Debug64/Doxygen.pch"\r
+                               AssemblerListingLocation=".\Debug64/"\r
+                               ObjectFile=".\Debug64/"\r
+                               ProgramDataBaseFileName=".\Debug64\$(TargetName).pdb"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="qtools.lib ws2_32.lib iconv64.lib shell32.lib"\r
+                               OutputFile="..\bin\Debug64\doxygen.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="Debug64"\r
+                               GenerateManifest="false"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile=".\Debug64\$(TargetName).pdb"\r
+                               SubSystem="1"\r
+                               LargeAddressAware="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="17"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Debug64/Doxygen.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="..\bin\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
+                               Name="Gen_head"\r
+                       />\r
+                       <Tool\r
+                               Name="Languages"\r
+                       />\r
+                       <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release\Doxygen.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/Zm200 "\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="2"\r
+                               OmitFramePointers="true"\r
+                               WholeProgramOptimization="true"\r
+                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."\r
+                               PreprocessorDefinitions="WIN32;_CINDEX_LIB_;_CINDEX_LIB_;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"\r
+                               StringPooling="true"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="true"\r
+                               PrecompiledHeaderFile=".\Release/Doxygen.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release\$(TargetName).pdb"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/LTCG"\r
                                AdditionalDependencies="qtools.lib iconv.lib shell32.lib"
-                               OutputFile="..\bin\Release\doxygen.exe"
-                               LinkIncremental="1"
-                               SuppressStartupBanner="true"
-                               AdditionalLibraryDirectories="Release"
-                               ProgramDatabaseFile=".\Release/Doxygen.pdb"
-                               SubSystem="1"
-                               LargeAddressAware="2"
-                               RandomizedBaseAddress="1"
-                               DataExecutionPrevention="0"
-                               TargetMachine="1"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                               SuppressStartupBanner="true"
-                               OutputFile=".\Release/Doxygen.bsc"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-               <Configuration
-                       Name="Release|x64"
-                       OutputDirectory="..\bin\Release64"
-                       IntermediateDirectory=".\Release64"
-                       ConfigurationType="1"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-                       UseOfMFC="0"
-                       ATLMinimizesCRunTimeLibraryUsage="false"
-                       CharacterSet="2"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                               CommandLine="version.bat"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="Lex"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                               TargetEnvironment="3"
-                               TypeLibraryName=".\Release64\Doxygen.tlb"
-                               HeaderFileName=""
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200 "
-                               Optimization="2"
-                               InlineFunctionExpansion="2"
-                               OmitFramePointers="true"
-                               WholeProgramOptimization="true"
-                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
-                               StringPooling="true"
-                               RuntimeLibrary="0"
-                               EnableFunctionLevelLinking="true"
-                               PrecompiledHeaderFile=".\Release64/Doxygen.pch"
-                               AssemblerListingLocation=".\Release64/"
-                               ObjectFile=".\Release64/"
-                               ProgramDataBaseFileName=".\Release64/"
-                               WarningLevel="3"
-                               SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
-                               Culture="1033"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               AdditionalOptions="/LTCG"
+                               OutputFile="..\bin\Release\doxygen.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="Release"\r
+                               ProgramDatabaseFile=".\Release\$(TargetName).pdb"\r
+                               SubSystem="1"\r
+                               LargeAddressAware="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Release/Doxygen.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|x64"\r
+                       OutputDirectory="..\bin\Release64"\r
+                       IntermediateDirectory=".\Release64"\r
+                       ConfigurationType="1"\r
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
+                               Name="Gen_head"\r
+                       />\r
+                       <Tool\r
+                               Name="Languages"\r
+                       />\r
+                       <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TargetEnvironment="3"\r
+                               TypeLibraryName=".\Release64\Doxygen.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/Zm200 "\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="2"\r
+                               OmitFramePointers="true"\r
+                               WholeProgramOptimization="true"\r
+                               AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."\r
+                               PreprocessorDefinitions="WIN32;_CINDEX_LIB_;_CINDEX_LIB_;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"\r
+                               StringPooling="true"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="true"\r
+                               PrecompiledHeaderFile=".\Release64/Doxygen.pch"\r
+                               AssemblerListingLocation=".\Release64/"\r
+                               ObjectFile=".\Release64/"\r
+                               ProgramDataBaseFileName=".\Release64\$(TargetName).pdb"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/LTCG"\r
                                AdditionalDependencies="qtools.lib iconv64.lib shell32.lib"
-                               OutputFile="..\bin\Release64\doxygen.exe"
-                               LinkIncremental="1"
-                               SuppressStartupBanner="true"
-                               AdditionalLibraryDirectories="Release64"
-                               ProgramDatabaseFile=".\Release64/Doxygen.pdb"
-                               SubSystem="1"
-                               LargeAddressAware="2"
-                               RandomizedBaseAddress="1"
-                               DataExecutionPrevention="0"
-                               TargetMachine="17"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                               SuppressStartupBanner="true"
-                               OutputFile=".\Release64/Doxygen.bsc"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-       </Configurations>
-       <References>
-       </References>
-       <Files>
-               <Filter
-                       Name="Source Files"
-                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-                       >
-                       <File
-                               RelativePath="..\src\arguments.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ce_lex.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ce_parse.cpp"
-                               >
+                               OutputFile="..\bin\Release64\doxygen.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="Release64"\r
+                               ProgramDatabaseFile=".\Release64\$(TargetName).pdb"\r
+                               SubSystem="1"\r
+                               LargeAddressAware="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="17"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Release64/Doxygen.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\arguments.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ce_parse.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cite.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\clangparser.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\classdef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\classlist.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cmdmapper.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\code.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentcnv.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentscan.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\condparser.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\config.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\configoptions.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\constexp.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\context.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cppvalue.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dbusxmlscanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\debug.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\declinfo.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\defargs.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\defgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\define.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\definition.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dia.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\diagram.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dirdef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docbookgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docbookvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docparser.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docsets.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doctokenizer.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dot.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\eclipsehelp.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\entry.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\filedef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\filename.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\formula.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortrancode.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortranscanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ftextstream.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ftvhelp.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\groupdef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htags.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmldocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmlgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmlhelp.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\image.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\index.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\language.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\latexdocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\latexgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\layout.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\lodepng.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\logos.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\main.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\mandocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\mangen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\markdown.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\marshal.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\libmd5\md5.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\memberdef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\membergroup.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\memberlist.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\membername.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\message.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\msc.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\namespacedef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\objcache.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\outputgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\outputlist.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pagedef.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\perlmodgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\portable.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\portable_c.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pre.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pycode.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pyscanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\qhp.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\qhpxmlwriter.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\reflist.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfdocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfstyle.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\scanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\searchindex.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\sqlite3gen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\store.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tagreader.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tclscanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\template.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\textdocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\textdocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tooltip.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\util.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\version.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdldocgen.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlparser.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlparser.hpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\xmldocvisitor.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\xmlgen.cpp"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Yacc Files"\r
+                       Filter="y"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\constexp.y"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on constexp.y"\r
+                                               CommandLine="bison -l -d -p ce_parseexpYY $(InputPath) -o $(InputDir)\..\src\ce_parse.c&#x0D;&#x0A;bison -l -p constexpYY $(InputPath) -o $(InputDir)..\src\ce_parse.cpp&#x0D;&#x0A;del $(InputDir)..\src\ce_parse.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on constexp.y"\r
+                                               CommandLine="bison -l -d -p ce_parseexpYY $(InputPath) -o $(InputDir)\..\src\ce_parse.c&#x0D;&#x0A;bison -l -p constexpYY $(InputPath) -o $(InputDir)..\src\ce_parse.cpp&#x0D;&#x0A;del $(InputDir)..\src\ce_parse.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on constexp.y"\r
+                                               CommandLine="bison -l -d -p ce_parseexpYY $(InputPath) -o $(InputDir)\..\src\ce_parse.c&#x0D;&#x0A;bison -l -p constexpYY $(InputPath) -o $(InputDir)..\src\ce_parse.cpp&#x0D;&#x0A;del $(InputDir)..\src\ce_parse.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on constexp.y"\r
+                                               CommandLine="bison -l -d -p ce_parseexpYY $(InputPath) -o $(InputDir)\..\src\ce_parse.c&#x0D;&#x0A;bison -l -p constexpYY $(InputPath) -o $(InputDir)..\src\ce_parse.cpp&#x0D;&#x0A;del $(InputDir)..\src\ce_parse.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlparser.y"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on vhdlparser.y"\r
+                                               CommandLine="bison -l -d -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;bison -l -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.cpp&#x0D;&#x0A;del $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)$(InputName).cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on vhdlparser.y"\r
+                                               CommandLine="bison -l -d -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;bison -l -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.cpp&#x0D;&#x0A;del $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)$(InputName).cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on vhdlparser.y"\r
+                                               CommandLine="bison -l -d -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;bison -l -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.cpp&#x0D;&#x0A;del $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)$(InputName).cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Running bison on vhdlparser.y"\r
+                                               CommandLine="bison -l -d -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;bison -l -p vhdlscannerYY $(InputPath) -o $(InputDir)\..\src\vhdlparser.cpp&#x0D;&#x0A;del $(InputDir)\..\src\vhdlparser.c&#x0D;&#x0A;"\r
+                                               Outputs="$(InputDir)$(InputName).cpp"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Lex Files"\r
+                       Filter="l"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\code.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentcnv.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentscan.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\config.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\constexp.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\declinfo.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\defargs.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doctokenizer.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortrancode.l"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortranscanner.l"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pre.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pycode.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pyscanner.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\scanner.l"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tclscanner.l"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlcode.l"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlscanner.l"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Lex"\r
+                                               Case="true"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Python Files"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\lang_cfg.py"\r
+                               >\r
                                <FileConfiguration
-                                       Name="Debug|Win32"
+                                       Name="Debug|win32"
                                        >
                                        <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
+                                               Name="Languages"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\cite.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\clangparser.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\classdef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\classlist.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\cmdmapper.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\code.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\code.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\commentcnv.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\commentcnv.l"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\commentscan.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\commentscan.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\condparser.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\config.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\config.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\configoptions.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\constexp.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
-                                               AdditionalDependencies="$(InputDir)constexp.l"
-                                               Output="$(InputDir)ce_lex.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
-                                               AdditionalDependencies="$(InputDir)constexp.l"
-                                               Output="$(InputDir)ce_lex.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
-                                               AdditionalDependencies="$(InputDir)constexp.l"
-                                               Output="$(InputDir)ce_lex.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
-                                               AdditionalDependencies="$(InputDir)constexp.l"
-                                               Output="$(InputDir)ce_lex.cpp"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\constexp.y"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on constexp.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on constexp.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on constexp.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on constexp.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\ce_parse.cpp"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\cppvalue.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\dbusxmlscanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\debug.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\declinfo.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\declinfo.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\defargs.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\defargs.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\defgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\define.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\definition.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\diagram.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\dirdef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\docbookgen.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docbookvisitor.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docparser.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\docsets.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\doctokenizer.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\doctokenizer.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\dot.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\doxygen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\eclipsehelp.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\entry.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\filedef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\filename.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\formula.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\fortrancode.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\fortrancode.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\fortranscanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\fortranscanner.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\ftextstream.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ftvhelp.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\groupdef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\htags.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\htmldocvisitor.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\htmlgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\htmlhelp.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\image.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\index.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\language.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\latexdocvisitor.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\latexgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\layout.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\lodepng.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\logos.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\main.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\mandocvisitor.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\mangen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\markdown.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\marshal.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\libmd5\md5.c"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\memberdef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\membergroup.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\memberlist.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\membername.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\message.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\msc.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\namespacedef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\objcache.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\outputgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\outputlist.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\pagedef.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\perlmodgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\portable.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\portable_c.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pre.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pre.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex  -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\pycode.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pycode.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\pyscanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pyscanner.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\qhp.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\qhpxmlwriter.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\reflist.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfdocvisitor.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfstyle.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\scanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\scanner.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\searchindex.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\sqlite3gen.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\store.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tagreader.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\tclscanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tclscanner.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\textdocvisitor.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tooltip.cpp"
-                               >
-                       </File>                 
-                       <File
-                               RelativePath="..\src\util.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\version.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlcode.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdldocgen.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlparser.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlparser.hpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlparser.y"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
+                                       Name="Release|win32"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on vhdlparser.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\vhdlparser.cpp"
+                                               Name="Languages"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Debug|x64"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on vhdlparser.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\vhdlparser.cpp"
+                                               Name="Languages"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Release|x64"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               Description="Running bison on vhdlparser.y"
-                                               CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
-                                               Outputs="$(InputDir)\..\src\vhdlparser.cpp"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlscanner.l"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
+                                               Name="Languages"
                                        />
                                </FileConfiguration>
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\settings.py"\r
+                               >\r
                                <FileConfiguration
-                                       Name="Release|x64"
+                                       Name="Debug|win32"
                                        >
                                        <Tool
-                                               Name="Lex"
-                                               CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
+                                               Name="Settings"
                                        />
                                </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\xmldocvisitor.cpp"
-                               >
                                <FileConfiguration
-                                       Name="Debug|Win32"
+                                       Name="Release|win32"
                                        >
                                        <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
+                                               Name="Settings"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Debug|x64"
                                        >
                                        <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
+                                               Name="Settings"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Release|x64"
                                        >
                                        <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\xmlgen.cpp"
-                               >
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|x64"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
+                                               Name="Settings"
                                        />
                                </FileConfiguration>
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\version.py"\r
+                               >\r
                                <FileConfiguration
-                                       Name="Release|x64"
+                                       Name="Debug|win32"
                                        >
                                        <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories=""
-                                               PreprocessorDefinitions=""
+                                               Name="Version"
                                        />
                                </FileConfiguration>
-                       </File>
-               </Filter>
-               <Filter
-                       Name="Header Files"
-                       Filter="h;hpp;hxx;hm;inl"
-                       >
-                       <File
-                               RelativePath="..\src\arguments.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\bib2xhtml.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\bufstr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ce_parse.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"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\code.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\commentcnv.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\commentscan.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\compound_xsd.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\condparser.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\config.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\constexp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\cppvalue.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\dbusxmlscanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\debug.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\declinfo.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\defargs.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\defgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\define.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\definition.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\diagram.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\dirdef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docbookgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docbookvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docparser.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docsets.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\doctokenizer.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\docvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\dot.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\doxygen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\doxygen_bst.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\doxygen_css.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\eclipsehelp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\entry.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\example.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\filedef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\filename.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\formula.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\fortrancode.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\fortranscanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ftextstream.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\ftvhelp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\groupdef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\htags.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\htmlattrib.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\htmldocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\htmlgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\htmlhelp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath=".\iconv.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\image.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\index.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\index_xsd.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\instdox.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\lang_cfg.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\language.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\latexdocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\latexgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\layout.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\lockingptr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\lodepng.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\logos.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\mandocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\mangen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\marshal.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\libmd5\md5.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\libmd5\md5_loc.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\memberdef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\membergroup.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\memberlist.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\membername.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\message.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\msc.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\namespacedef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\navtree_css.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\navtree_js.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\objcache.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\outputgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\outputlist.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pagedef.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\parserintf.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\perlmodgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\portable.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pre.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\printdocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pycode.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\pyscanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\qhp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\qhpxmlwriter.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\qtbc.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\reflist.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfdocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\rtfstyle.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\scanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\search_css.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\search_js.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\search_php.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\searchindex.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\section.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\sortdict.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\store.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tagreader.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tclscanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\textdocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\tooltip.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_adapter.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ar.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_br.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ca.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_cn.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_cz.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_de.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_dk.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_en.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_eo.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_es.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_fa.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_fi.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_fr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_gr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_hr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_hu.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_id.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_it.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_je.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_jp.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ke.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_kr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_lt.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_mk.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_nl.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_no.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_pl.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_pt.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ro.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ru.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_sc.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_se.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_si.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_sk.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_sr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_tr.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_tw.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_ua.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_vi.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\translator_za.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\unistd.h"
-                               >
                                <FileConfiguration
-                                       Name="Debug|Win32"
+                                       Name="Release|win32"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
-                                               AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
-                                               Outputs="$(InputPath)"
+                                               Name="Version"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Debug|x64"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
-                                               AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
-                                               Outputs="$(InputPath)"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCustomBuildTool"
-                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
-                                               AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
-                                               Outputs="$(InputPath)"
+                                               Name="Version"
                                        />
                                </FileConfiguration>
                                <FileConfiguration
                                        Name="Release|x64"
                                        >
                                        <Tool
-                                               Name="VCCustomBuildTool"
-                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
-                                               AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
-                                               Outputs="$(InputPath)"
+                                               Name="Version"
                                        />
                                </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\src\util.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\version.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlcode.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlcode.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdldocgen.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlscanner.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\vhdlscanner.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\xmldocvisitor.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\src\xmlgen.h"
-                               >
-                       </File>
-               </Filter>
-       </Files>
-       <Globals>
-       </Globals>
-</VisualStudioProject>
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="XML Files"\r
+                       Filter="xml"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\config.xml"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Generating header Files"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\bib2xhtml.pl"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\compound.xsd"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen.bst"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen.css"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen.sty"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dynsections.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\extsearch.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\footer.html"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\header.html"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\index.xsd"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_fx.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_p1.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_p2.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_p3.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_pt.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\jquery_ui.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\layout_default.xml"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\navtree.css"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\navtree.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\resize.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search.css"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search_functions.php"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search_opensearch.php"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\svgpan.js"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Gen_head"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\arguments.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\bib2xhtml.pl.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\bufstr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ce_parse.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cite.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\clangparser.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\classdef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\classlist.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cmdmapper.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\code.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentcnv.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\commentscan.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\compound_xsd.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\condparser.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\config.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\constexp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\context.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\cppvalue.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dbusxmlscanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\debug.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\declinfo.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\defargs.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\defgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\define.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\definition.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dia.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\diagram.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dirdef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docbookgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docbookvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docparser.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docsets.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doctokenizer.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\docvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\dot.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen_bst.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\doxygen_css.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\eclipsehelp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\entry.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\example.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\filedef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\filename.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\formula.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortrancode.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\fortranscanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ftextstream.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\ftvhelp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\groupdef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htags.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmlattrib.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmldocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmlgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\htmlhelp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\iconv.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\image.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\index.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\index_xsd.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\instdox.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\lang_cfg.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\language.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\latexdocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\latexgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\layout.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\lockingptr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\lodepng.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\logos.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\mandocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\mangen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\marshal.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\libmd5\md5.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\libmd5\md5_loc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\memberdef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\membergroup.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\memberlist.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\membername.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\message.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\msc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\namespacedef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\navtree_css.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\navtree_js.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\objcache.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\outputgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\outputlist.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pagedef.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\parserintf.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\perlmodgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\portable.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pre.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\printdocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pycode.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\pyscanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\qhp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\qhpxmlwriter.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\qtbc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\reflist.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfdocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\rtfstyle.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\scanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search_css.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search_js.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\search_php.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\searchindex.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\section.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\settings.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\sortdict.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\store.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tagreader.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tclscanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\template.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\tooltip.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_adapter.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_am.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ar.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_br.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ca.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_cn.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_cz.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_de.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_dk.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_en.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_eo.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_es.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_fa.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_fi.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_fr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_gr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_hr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_hu.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_id.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_it.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_je.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_jp.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ke.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_kr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_lt.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_lv.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_mk.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_nl.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_no.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_pl.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_pt.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ro.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ru.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_sc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_si.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_sk.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_sr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_sv.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_tr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_tw.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_ua.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_vi.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\translator_za.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\winbuild\unistd.h"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"\r
+                                               AdditionalDependencies="..\src\constexp.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"\r
+                                               Outputs="$(InputPath)"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"\r
+                                               AdditionalDependencies="..\src\constexp.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"\r
+                                               Outputs="$(InputPath)"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"\r
+                                               AdditionalDependencies="..\src\constexp.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"\r
+                                               Outputs="$(InputPath)"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo  * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo  */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"\r
+                                               AdditionalDependencies="..\src\constexp.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"\r
+                                               Outputs="$(InputPath)"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\util.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\version.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlcode.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlcode.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdldocgen.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlscanner.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\vhdlscanner.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\xmldocvisitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\xmlgen.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
old mode 100644 (file)
new mode 100755 (executable)
index 228dccc..939a167
                />\r
        </Platforms>\r
        <ToolFiles>\r
+               <ToolFile\r
+                       RelativePath=".\Lex.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Version.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Settings.rules"\r
+               />\r
+               <ToolFile\r
+                       RelativePath=".\Config.rules"\r
+               />\r
        </ToolFiles>\r
        <Configurations>\r
                <Configuration\r
                        Name="Debug|Win32"\r
-                       OutputDirectory="."\r
-                       IntermediateDirectory="obj\"\r
+                       OutputDirectory="..\bin\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
                        ConfigurationType="1"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                        />\r
                        <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
                                Name="VCCustomBuildTool"\r
                        />\r
                        <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
                                Name="VCXMLDataGeneratorTool"\r
                        />\r
                        <Tool\r
@@ -45,7 +73,7 @@
                                Name="VCCLCompilerTool"\r
                                AdditionalOptions="-Zm200 -w34100 -w34189 -Zm200 -w34100 -w34189 -w34100 -w34189"\r
                                Optimization="4"\r
-                               AdditionalIncludeDirectories="&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include&quot;,&quot;..\addon\doxywizard&quot;,&quot;c:\Qt\4.4.3\include\ActiveQt&quot;,&quot;..\addon\doxywizard\moc&quot;,&quot;..\addon\doxywizard&quot;,&quot;.&quot;,$(QT_DIR)\mkspecs\win32-msvc2005"\r
+                               AdditionalIncludeDirectories="&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include&quot;,&quot;..\addon\doxywizard&quot;,&quot;$(QT_DIR)\include\ActiveQt&quot;,&quot;moc&quot;,&quot;..\addon\doxywizard&quot;,&quot;.&quot;,$(QT_DIR)\mkspecs\win32-msvc2008"\r
                                PreprocessorDefinitions="_WINDOWS,UNICODE,WIN32,QT_LARGEFILE_SUPPORT,QT_NO_CAST_FROM_ASCII,QT_NO_CAST_TO_ASCII,QT_XML_LIB,QT_GUI_LIB,QT_CORE_LIB,QT_THREAD_SUPPORT"\r
                                GeneratePreprocessedFile="0"\r
                                ExceptionHandling="1"\r
@@ -53,9 +81,9 @@
                                BufferSecurityCheck="false"\r
                                TreatWChar_tAsBuiltInType="false"\r
                                RuntimeTypeInfo="true"\r
-                               AssemblerListingLocation="obj\"\r
-                               ObjectFile="obj\"\r
-                               ProgramDataBaseFileName=".\"\r
+                               AssemblerListingLocation="Debug\"\r
+                               ObjectFile="Debug\"\r
+                               ProgramDataBaseFileName=".\Debug\$(TargetName).pdb"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                                Name="VCLinkerTool"\r
                                IgnoreImportLibrary="true"\r
                                AdditionalOptions="&quot;/MANIFESTDEPENDENCY:type=&apos;win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos; processorArchitecture=&apos;*&apos;&quot; &quot;/MANIFESTDEPENDENCY:type=&apos;win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos; processorArchitecture=&apos;*&apos;&quot;"\r
-                               AdditionalDependencies="c:\Qt\4.4.3\lib\qtmaind.lib c:\Qt\4.4.3\lib\QtXmld.lib c:\Qt\4.4.3\lib\QtGuid.lib c:\Qt\4.4.3\lib\QtCored.lib kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib msimg32.lib"\r
-                               OutputFile="debug\doxywizard.exe"\r
+                               AdditionalDependencies="$(QT_DIR)\lib\qtmaind.lib $(QT_DIR)\lib\QtXmld.lib $(QT_DIR)\lib\QtGuid.lib $(QT_DIR)\lib\QtCored.lib kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib msimg32.lib"\r
+                               OutputFile="..\bin\Debug\doxywizard.exe"\r
                                SuppressStartupBanner="true"\r
-                               AdditionalLibraryDirectories="c:\Qt\4.4.3\lib"\r
+                               AdditionalLibraryDirectories="$(QT_DIR)\lib"\r
+                               IgnoreDefaultLibraryNames=""\r
                                GenerateDebugInformation="true"\r
-                               ProgramDatabaseFile=""\r
+                               ProgramDatabaseFile=".\Debug\$(TargetName).pdb"\r
                                SubSystem="2"\r
                                LargeAddressAware="2"\r
                                LinkTimeCodeGeneration="0"\r
                </Configuration>\r
                <Configuration\r
                        Name="Release|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="obj\"\r
+                       OutputDirectory="..\bin\Release"\r
+                       IntermediateDirectory=".\Release"\r
                        ConfigurationType="1"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                        />\r
                        <Tool\r
+                               Name="Version"\r
+                       />\r
+                       <Tool\r
                                Name="VCCustomBuildTool"\r
                        />\r
                        <Tool\r
+                               Name="Lex"\r
+                       />\r
+                       <Tool\r
+                               Name="Config"\r
+                       />\r
+                       <Tool\r
+                               Name="Config_dw"\r
+                       />\r
+                       <Tool\r
+                               Name="Settings"\r
+                       />\r
+                       <Tool\r
                                Name="VCXMLDataGeneratorTool"\r
                        />\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                AdditionalOptions="-Zm200 -w34100 -w34189 -Zm200 -w34100 -w34189 -w34100 -w34189"\r
                                Optimization="2"\r
-                               AdditionalIncludeDirectories="&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include&quot;,&quot;..\addon\doxywizard&quot;,&quot;c:\Qt\4.4.3\include\ActiveQt&quot;,&quot;..\addon\doxywizard\moc&quot;,&quot;..\addon\doxywizard&quot;,&quot;.&quot;,$(QT_DIR)\mkspecs\win32-msvc2008"\r
+                               AdditionalIncludeDirectories="&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtCore&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtGui&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include\QtXml&quot;,&quot;$(QT_DIR)\include&quot;,&quot;..\addon\doxywizard&quot;,&quot;$(QT_DIR)\include\ActiveQt&quot;,&quot;moc&quot;,&quot;..\addon\doxywizard&quot;,&quot;.&quot;,$(QT_DIR)\mkspecs\win32-msvc2008"\r
                                PreprocessorDefinitions="QT_NO_DEBUG,NDEBUG,_WINDOWS,UNICODE,WIN32,QT_LARGEFILE_SUPPORT,QT_NO_CAST_FROM_ASCII,QT_NO_CAST_TO_ASCII,QT_NO_DEBUG,QT_XML_LIB,QT_GUI_LIB,QT_CORE_LIB,QT_THREAD_SUPPORT,NDEBUG"\r
                                GeneratePreprocessedFile="0"\r
                                ExceptionHandling="1"\r
                                BufferSecurityCheck="false"\r
                                TreatWChar_tAsBuiltInType="false"\r
                                RuntimeTypeInfo="true"\r
-                               AssemblerListingLocation="obj\"\r
-                               ObjectFile="obj\"\r
-                               ProgramDataBaseFileName=".\"\r
+                               AssemblerListingLocation="Release\"\r
+                               ObjectFile="Release\"\r
+                               ProgramDataBaseFileName=".\Release\$(TargetName).pdb"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="true"\r
                                DebugInformationFormat="0"\r
                                Name="VCLinkerTool"\r
                                IgnoreImportLibrary="true"\r
                                AdditionalOptions="&quot;/MANIFESTDEPENDENCY:type=&apos;win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos; processorArchitecture=&apos;*&apos;&quot; &quot;/MANIFESTDEPENDENCY:type=&apos;win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos; processorArchitecture=&apos;*&apos;&quot;"\r
-                               AdditionalDependencies="c:\Qt\4.4.3\lib\qtmain.lib c:\Qt\4.4.3\lib\QtXml.lib c:\Qt\4.4.3\lib\QtGui.lib c:\Qt\4.4.3\lib\QtCore.lib kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib msimg32.lib"\r
-                               OutputFile="..\bin\doxywizard.exe"\r
+                               AdditionalDependencies="$(QT_DIR)\lib\qtmain.lib $(QT_DIR)\lib\QtXml.lib $(QT_DIR)\lib\QtGui.lib $(QT_DIR)\lib\QtCore.lib kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib msimg32.lib"\r
+                               OutputFile="..\bin\Release\doxywizard.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="true"\r
-                               AdditionalLibraryDirectories="c:\Qt\4.4.3\lib"\r
+                               AdditionalLibraryDirectories="$(QT_DIR)\lib"\r
                                IgnoreAllDefaultLibraries="false"\r
-                               IgnoreDefaultLibraryNames="libcmtd.lib"\r
+                               IgnoreDefaultLibraryNames=""\r
                                GenerateDebugInformation="false"\r
-                               ProgramDatabaseFile=""\r
+                               ProgramDatabaseFile=".\Release\$(TargetName).pdb"\r
                                SubSystem="2"\r
                                LargeAddressAware="2"\r
                                LinkTimeCodeGeneration="0"\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\doxywizard.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\doxywizard.h -o moc\moc_doxywizard.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\doxywizard.h -o moc\moc_doxywizard.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\doxywizard.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_doxywizard.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\doxywizard.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\doxywizard.h -o moc\moc_doxywizard.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\doxywizard.h -o moc\moc_doxywizard.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\doxywizard.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_doxywizard.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\expert.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\expert.h -o moc\moc_expert.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\expert.h -o moc\moc_expert.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\expert.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_expert.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\expert.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\expert.h -o moc\moc_expert.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\expert.h -o moc\moc_expert.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\expert.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_expert.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\helplabel.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\helplabel.h -o moc\moc_helplabel.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\helplabel.h -o moc\moc_helplabel.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\helplabel.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_helplabel.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\helplabel.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\helplabel.h -o moc\moc_helplabel.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\helplabel.h -o moc\moc_helplabel.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\helplabel.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_helplabel.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputbool.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputbool.h -o moc\moc_inputbool.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputbool.h -o moc\moc_inputbool.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputbool.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputbool.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputbool.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputbool.h -o moc\moc_inputbool.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputbool.h -o moc\moc_inputbool.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputbool.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputbool.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputint.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputint.h -o moc\moc_inputint.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputint.h -o moc\moc_inputint.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputint.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputint.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputint.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputint.h -o moc\moc_inputint.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputint.h -o moc\moc_inputint.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputint.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputint.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputstring.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstring.h -o moc\moc_inputstring.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstring.h -o moc\moc_inputstring.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputstring.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputstring.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputstring.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstring.h -o moc\moc_inputstring.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstring.h -o moc\moc_inputstring.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputstring.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputstring.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputstrlist.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstrlist.h -o moc\moc_inputstrlist.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstrlist.h -o moc\moc_inputstrlist.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputstrlist.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputstrlist.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\inputstrlist.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstrlist.h -o moc\moc_inputstrlist.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\inputstrlist.h -o moc\moc_inputstrlist.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\inputstrlist.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_inputstrlist.cpp"\r
                                        />\r
                                </FileConfiguration>\r
                        </File>\r
                        <File\r
-                               RelativePath="..\addon\doxywizard\version.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\addon\doxywizard\wizard.h"\r
                                >\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\wizard.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\wizard.h -o moc\moc_wizard.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\wizard.h -o moc\moc_wizard.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\wizard.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_wizard.cpp"\r
                                        />\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                                Description="MOC ..\addon\doxywizard\wizard.h"\r
-                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;c:\Qt\4.4.3\include\ActiveQt&quot; -I&quot;..\addon\doxywizard\moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\wizard.h -o moc\moc_wizard.cpp&#x0D;&#x0A;"\r
+                                               CommandLine="$(QT_DIR)\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtCore&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtGui&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include\QtXml&quot; -I&quot;$(QT_DIR)\include&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;$(QT_DIR)\include\ActiveQt&quot; -I&quot;moc&quot; -I&quot;..\addon\doxywizard&quot; -I&quot;.&quot; -I$(QT_DIR)\mkspecs\win32-msvc2008 -D_MSC_VER=1400 -DWIN32 ..\addon\doxywizard\wizard.h -o moc\moc_wizard.cpp&#x0D;&#x0A;"\r
                                                AdditionalDependencies="..\addon\doxywizard\wizard.h;$(QT_DIR)\bin\moc.exe"\r
                                                Outputs="moc\moc_wizard.cpp"\r
                                        />\r
                        UniqueIdentifier="{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}"\r
                        >\r
                        <File\r
-                               RelativePath="config_lex.cpp"\r
+                               RelativePath="..\addon\doxywizard\config_doxyw.cpp"\r
                                >\r
                        </File>\r
                        <File\r
                        </File>\r
                </Filter>\r
                <Filter\r
-                       Name="Lex / Yacc Files"\r
-                       Filter="l;y"\r
+                       Name="Lex Files"\r
+                       Filter="l"\r
                        UniqueIdentifier="{E12AE0D2-192F-4d59-BD23-7D3FA58D3183}"\r
                        ParseFiles="false"\r
                        >\r
                        <File\r
-                               RelativePath="..\addon\doxywizard\config.l"\r
+                               RelativePath="..\addon\doxywizard\config_doxyw.l"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Python Files"\r
+                       Filter="py"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\settings.py"\r
                                >\r
                                <FileConfiguration\r
                                        Name="Debug|Win32"\r
                                        >\r
                                        <Tool\r
-                                               Name="VCCustomBuildTool"\r
-                                               Description="Lex ..\addon\doxywizard\config.l"\r
-                                               CommandLine="flex -Pconfig ..\addon\doxywizard\config.l &amp;&amp;   del config_lex.cpp &amp;&amp;   move lex.config.c config_lex.cpp&#x0D;&#x0A;"\r
-                                               AdditionalDependencies="..\addon\doxywizard\config.l;flex"\r
-                                               Outputs="config_lex.cpp"\r
+                                               Name="Settings"\r
                                        />\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        Name="Release|Win32"\r
                                        >\r
                                        <Tool\r
-                                               Name="VCCustomBuildTool"\r
-                                               Description="Lex ..\addon\doxywizard\config.l"\r
-                                               CommandLine="flex -Pconfig ..\addon\doxywizard\config.l &amp;&amp;   del config_lex.cpp &amp;&amp;   move lex.config.c config_lex.cpp&#x0D;&#x0A;"\r
-                                               AdditionalDependencies="..\addon\doxywizard\config.l;flex"\r
-                                               Outputs="config_lex.cpp"\r
+                                               Name="Settings"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\src\version.py"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Version"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Version"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="XML Files"\r
+                       Filter="xml"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\src\config.xml"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config_dw"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config_dw"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config_dw"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|x64"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="Config_dw"\r
                                        />\r
                                </FileConfiguration>\r
                        </File>\r
diff --git a/winbuild/Gen_head.rules b/winbuild/Gen_head.rules
new file mode 100644 (file)
index 0000000..5b0b2b7
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+       Name="gen_head"
+       Version="8.00"
+       >
+       <Rules>
+               <CustomBuildRule
+                       Name="Gen_head"
+                       DisplayName="Gen_head"
+                       CommandLine="python $(ProjectDir)..\src\to_c_cmd.py [AllOptions] [AdditionalOptions] [inputs] &lt; $(InputPath) &gt; $(InputPath).h"
+                       Outputs="$(InputPath).h"
+                       FileExtensions=".*"
+                       AdditionalDependencies="$(ProjectDir)..\src\to_c_cmd.py"
+                       ExecutionDescription="Executing to_c_cmd on $(InputPath) ..."
+                       ShowOnlyRuleProperties="false"
+                       >
+               </CustomBuildRule>
+       </Rules>
+</VisualStudioToolFile>
diff --git a/winbuild/Languages.rules b/winbuild/Languages.rules
new file mode 100755 (executable)
index 0000000..ffa8cf5
--- /dev/null
@@ -0,0 +1,862 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+        Name="languages"
+        Version="8.00"
+        >
+        <Rules>
+                <CustomBuildRule
+                        Name="Languages"
+                        DisplayName="Settings"
+                        CommandLine="python $(InputPath) [AllOptions] [AdditionalOptions] &gt; $(InputDir)../src/$(InputName).h"
+                        Outputs="$(InputDir)../src/$(InputName).h"
+                        FileExtensions="*.py"
+                        AdditionalDependencies=""
+                        ExecutionDescription="Executing languages ..."
+                        ShowOnlyRuleProperties="false"
+                        >
+                        <Properties>
+                               <EnumProperty
+                                       Name="EnglishOnlys"
+                                       DisplayName="Use English Only"
+                                       Description="Use English Only"
+                                       DefaultValue="0"
+                               >
+                                       <Values>
+                                               <EnumValue
+                                               Value="0"
+                                               Switch=""
+                                               DisplayName="Don't use English Only"
+                                               />
+                                               <EnumValue
+                                               Value="1"
+                                               Switch="ENONLY"
+                                               DisplayName="Use English Only"
+                                               />
+                                       </Values>
+                               </EnumProperty>
+
+                                   <EnumProperty
+                                           Name="armenian"
+                                           DisplayName="Use Armenian"
+                                           Description="Use Armenian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Armenian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="AM"
+                                                   DisplayName="Use Armenian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="arabic"
+                                           DisplayName="Use Arabic"
+                                           Description="Use Arabic"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Arabic"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="AR"
+                                                   DisplayName="Use Arabic"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="brazilian"
+                                           DisplayName="Use Brazilian"
+                                           Description="Use Brazilian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Brazilian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="BR"
+                                                   DisplayName="Use Brazilian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="catalan"
+                                           DisplayName="Use Catalan"
+                                           Description="Use Catalan"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Catalan"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="CA"
+                                                   DisplayName="Use Catalan"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="chinese"
+                                           DisplayName="Use Chinese"
+                                           Description="Use Chinese"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Chinese"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="CN"
+                                                   DisplayName="Use Chinese"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="czech"
+                                           DisplayName="Use Czech"
+                                           Description="Use Czech"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Czech"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="CZ"
+                                                   DisplayName="Use Czech"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="german"
+                                           DisplayName="Use German"
+                                           Description="Use German"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use German"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="DE"
+                                                   DisplayName="Use German"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="danish"
+                                           DisplayName="Use Danish"
+                                           Description="Use Danish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Danish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="DK"
+                                                   DisplayName="Use Danish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="esperanto"
+                                           DisplayName="Use Esperanto"
+                                           Description="Use Esperanto"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Esperanto"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="EO"
+                                                   DisplayName="Use Esperanto"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="spanish"
+                                           DisplayName="Use Spanish"
+                                           Description="Use Spanish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Spanish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="ES"
+                                                   DisplayName="Use Spanish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="persian"
+                                           DisplayName="Use Persian"
+                                           Description="Use Persian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Persian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="FA"
+                                                   DisplayName="Use Persian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="finnish"
+                                           DisplayName="Use Finnish"
+                                           Description="Use Finnish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Finnish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="FI"
+                                                   DisplayName="Use Finnish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="french"
+                                           DisplayName="Use French"
+                                           Description="Use French"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use French"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="FR"
+                                                   DisplayName="Use French"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="greek"
+                                           DisplayName="Use Greek"
+                                           Description="Use Greek"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Greek"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="GR"
+                                                   DisplayName="Use Greek"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="croatian"
+                                           DisplayName="Use Croatian"
+                                           Description="Use Croatian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Croatian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="HR"
+                                                   DisplayName="Use Croatian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="hungarian"
+                                           DisplayName="Use Hungarian"
+                                           Description="Use Hungarian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Hungarian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="HU"
+                                                   DisplayName="Use Hungarian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="indonesian"
+                                           DisplayName="Use Indonesian"
+                                           Description="Use Indonesian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Indonesian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="ID"
+                                                   DisplayName="Use Indonesian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="italian"
+                                           DisplayName="Use Italian"
+                                           Description="Use Italian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Italian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="IT"
+                                                   DisplayName="Use Italian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="japaneseen"
+                                           DisplayName="Use Japanese-En"
+                                           Description="Use Japanese-En"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Japanese-En"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="JE"
+                                                   DisplayName="Use Japanese-En"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="japanese"
+                                           DisplayName="Use Japanese"
+                                           Description="Use Japanese"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Japanese"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="JP"
+                                                   DisplayName="Use Japanese"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="koreanen"
+                                           DisplayName="Use Korean-En"
+                                           Description="Use Korean-En"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Korean-En"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="KE"
+                                                   DisplayName="Use Korean-En"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="korean"
+                                           DisplayName="Use Korean"
+                                           Description="Use Korean"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Korean"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="KR"
+                                                   DisplayName="Use Korean"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="lithuanian"
+                                           DisplayName="Use Lithuanian"
+                                           Description="Use Lithuanian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Lithuanian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="LT"
+                                                   DisplayName="Use Lithuanian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="latvian"
+                                           DisplayName="Use Latvian"
+                                           Description="Use Latvian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Latvian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="LV"
+                                                   DisplayName="Use Latvian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="macedonian"
+                                           DisplayName="Use Macedonian"
+                                           Description="Use Macedonian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Macedonian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="MK"
+                                                   DisplayName="Use Macedonian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="dutch"
+                                           DisplayName="Use Dutch"
+                                           Description="Use Dutch"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Dutch"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="NL"
+                                                   DisplayName="Use Dutch"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="norwegian"
+                                           DisplayName="Use Norwegian"
+                                           Description="Use Norwegian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Norwegian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="NO"
+                                                   DisplayName="Use Norwegian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="polish"
+                                           DisplayName="Use Polish"
+                                           Description="Use Polish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Polish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="PL"
+                                                   DisplayName="Use Polish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="portuguese"
+                                           DisplayName="Use Portuguese"
+                                           Description="Use Portuguese"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Portuguese"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="PT"
+                                                   DisplayName="Use Portuguese"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="romanian"
+                                           DisplayName="Use Romanian"
+                                           Description="Use Romanian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Romanian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="RO"
+                                                   DisplayName="Use Romanian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="russian"
+                                           DisplayName="Use Russian"
+                                           Description="Use Russian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Russian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="RU"
+                                                   DisplayName="Use Russian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="serbiancyrillic"
+                                           DisplayName="Use Serbian-Cyrillic"
+                                           Description="Use Serbian-Cyrillic"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Serbian-Cyrillic"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="SC"
+                                                   DisplayName="Use Serbian-Cyrillic"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="slovene"
+                                           DisplayName="Use Slovene"
+                                           Description="Use Slovene"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Slovene"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="SI"
+                                                   DisplayName="Use Slovene"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="slovak"
+                                           DisplayName="Use Slovak"
+                                           Description="Use Slovak"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Slovak"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="SK"
+                                                   DisplayName="Use Slovak"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="serbian"
+                                           DisplayName="Use Serbian"
+                                           Description="Use Serbian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Serbian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="SR"
+                                                   DisplayName="Use Serbian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="swedish"
+                                           DisplayName="Use Swedish"
+                                           Description="Use Swedish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Swedish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="SV"
+                                                   DisplayName="Use Swedish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="turkish"
+                                           DisplayName="Use Turkish"
+                                           Description="Use Turkish"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Turkish"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="TR"
+                                                   DisplayName="Use Turkish"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="chinesetraditional"
+                                           DisplayName="Use Chinese-Traditional"
+                                           Description="Use Chinese-Traditional"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Chinese-Traditional"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="TW"
+                                                   DisplayName="Use Chinese-Traditional"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="ukrainian"
+                                           DisplayName="Use Ukrainian"
+                                           Description="Use Ukrainian"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Ukrainian"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="UA"
+                                                   DisplayName="Use Ukrainian"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="vietnamese"
+                                           DisplayName="Use Vietnamese"
+                                           Description="Use Vietnamese"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Vietnamese"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="VI"
+                                                   DisplayName="Use Vietnamese"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                                   <EnumProperty
+                                           Name="afrikaans"
+                                           DisplayName="Use Afrikaans"
+                                           Description="Use Afrikaans"
+                                           DefaultValue="1"
+                                   >
+                                           <Values>
+                                                   <EnumValue
+                                                   Value="0"
+                                                   Switch=""
+                                                   DisplayName="Don't use Afrikaans"
+                                                   />
+                                                   <EnumValue
+                                                   Value="1"
+                                                   Switch="ZA"
+                                                   DisplayName="Use Afrikaans"
+                                                   />
+                                           </Values>
+                                   </EnumProperty>
+        
+                        </Properties>
+                </CustomBuildRule>
+        </Rules>
+</VisualStudioToolFile>
+
index 3f2f5d9..298c978 100644 (file)
@@ -7,32 +7,26 @@
                <CustomBuildRule
                        Name="Lex"
                        DisplayName="Lex"
-                       CommandLine="flex [AllOptions] [AdditionalOptions] [inputs]"
+                       CommandLine="flex [AllOptions] -t -P$(InputName)YY [AdditionalOptions] [inputs] | python $(ProjectDir)..\src\increasebuffer.py &gt; $(InputDir)$(InputName).cpp"
                        Outputs="$(InputDir)/$(InputName).cpp"
                        FileExtensions="*.l"
-                       ExecutionDescription="Executing Lex for $(InputDir)/$(InputName).cpp ..."
+                       AdditionalDependencies="$(ProjectDir)..\src\increasebuffer.py"
+                       ExecutionDescription="Executing Lex for $(InputPath) ..."
                        ShowOnlyRuleProperties="false"
                        >
                        <Properties>
-                               <StringProperty
-                                       Name="Prefix"
-                                       DisplayName="Prefix"
-                                       Description="specify scanner prefix other than &quot;yy&quot;"
-                                       Switch="-P[value]"
-                                       Delimited="true"
-                               />
                                <BooleanProperty
-                                       Name="Stdout"
-                                       DisplayName="Redirect to stdout"
-                                       Description="write generated scanner on stdout instead of lex.yy.c"
-                                       Switch="-t"
+                                       Name="Case"
+                                       DisplayName="Case insensitive"
+                                       Description="case insensitive"
+                                       Switch="-i"
+                                        IsReadOnly="true"
                                />
-                               <StringProperty
-                                       Name="Output"
-                                       DisplayName="Output file name"
-                                       Description="Specify output filename"
-                                       Switch="-o[value]"
-                                       DefaultValue="$(InputDir)$(InputName).cpp"
+                               <BooleanProperty
+                                       Name="Rules"
+                                       DisplayName="Write used lex rules"
+                                       Description="Write used lex rules"
+                                       Switch="-d"
                                />
                        </Properties>
                </CustomBuildRule>
diff --git a/winbuild/Settings.rules b/winbuild/Settings.rules
new file mode 100644 (file)
index 0000000..5de8bee
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+       Name="settings"
+       Version="8.00"
+       >
+       <Rules>
+               <CustomBuildRule
+                       Name="Settings"
+                       DisplayName="Settings"
+                       CommandLine="python $(InputPath) [AllOptions] [AdditionalOptions] [inputs]"
+                       Outputs="$(InputDir)../src/$(InputName).h"
+                       FileExtensions="*.py"
+                       AdditionalDependencies="$(ProjectDir)..\configure"
+                       ExecutionDescription="Executing Settings ..."
+                       ShowOnlyRuleProperties="false"
+                       >
+                       <Properties>
+                               <EnumProperty
+                                       Name="SqlLite3"
+                                       DisplayName="Use SqlLite3"
+                                       Description="Use SqlLite3"
+                                       DefaultValue="0"
+                               >
+                                       <Values>
+                                               <EnumValue
+                                               Value="0"
+                                               Switch="NO"
+                                               DisplayName="Don't use SqlLite3"
+                                               />
+                                               <EnumValue
+                                               Value="1"
+                                               Switch="YES"
+                                               DisplayName="Use SqlLite3"
+                                               />
+                                       </Values>
+                               </EnumProperty>
+                               <EnumProperty
+                                       Name="CLANG"
+                                       DisplayName="Use CLANG"
+                                       Description="Use CLANG"
+                                       DefaultValue="0"
+                               >
+                                       <Values>
+                                               <EnumValue
+                                               Value="0"
+                                               Switch="NO"
+                                               DisplayName="Don't use CLANG"
+                                               />
+                                               <EnumValue
+                                               Value="1"
+                                               Switch="YES"
+                                               DisplayName="Use CLANG"
+                                               />
+                                       </Values>
+                               </EnumProperty>
+                       </Properties>
+               </CustomBuildRule>
+       </Rules>
+</VisualStudioToolFile>
diff --git a/winbuild/Version.rules b/winbuild/Version.rules
new file mode 100644 (file)
index 0000000..f19d094
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+       Name="version"
+       Version="8.00"
+       >
+       <Rules>
+               <CustomBuildRule
+                       Name="Version"
+                       DisplayName="Version"
+                       CommandLine="python $(InputPath)"
+                       Outputs="$(InputDir)..\src\$(InputName).cpp"
+                       FileExtensions="*.py"
+                       AdditionalDependencies="$(ProjectDir)..\configure"
+                       ExecutionDescription="Executing Version ..."
+                       ShowOnlyRuleProperties="false"
+                       >
+               </CustomBuildRule>
+       </Rules>
+</VisualStudioToolFile>
index f271f33..c54b118 100644 (file)
        <Configurations>\r
                <Configuration\r
                        Name="Debug|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
@@ -44,7 +45,7 @@
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
-                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\xapian-core-1.2.8\include&quot;,..\qtools"\r
+                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\include&quot;,..\qtools"\r
                                PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
@@ -52,6 +53,7 @@
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="4"\r
+                               ProgramDatabaseFileName=".\Debug\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
@@ -65,7 +67,7 @@
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="qtools.lib xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
-                               OutputFile="..\bin\doxyindexer.exe"\r
+                               OutputFile="..\bin\Debug\doxyindexer.exe"\r
                                LinkIncremental="1"\r
                                AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Debug&quot;;Debug"\r
                                GenerateManifest="false"\r
                </Configuration>\r
                <Configuration\r
                        Name="Debug|x64"\r
-                       OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
-                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Debug64"\r
+                       IntermediateDirectory=".\Debug64"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Debug64\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="qtools.lib xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
-                               OutputFile="..\bin\doxyindexer.exe"\r
+                               OutputFile="..\bin\Debug64\doxyindexer.exe"\r
                                LinkIncremental="2"\r
                                AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Debug64&quot;;Debug64"\r
                                GenerateDebugInformation="true"\r
                </Configuration>\r
                <Configuration\r
                        Name="Release|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Relase"\r
+                       IntermediateDirectory=".\Release"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Release\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                </Configuration>\r
                <Configuration\r
                        Name="Release|x64"\r
-                       OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
-                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Relase64"\r
+                       IntermediateDirectory=".\Release64"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Relase64\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
index eb7fb4e..96e2d4e 100644 (file)
        <Configurations>\r
                <Configuration\r
                        Name="Debug|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
@@ -44,7 +45,7 @@
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
-                               AdditionalIncludeDirectories="&quot;S:\xapian\include&quot;"\r
+                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\include&quot;"\r
                                PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
@@ -52,6 +53,7 @@
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="4"\r
+                               ProgramDatabaseFileName=".\Debug\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
@@ -65,9 +67,9 @@
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
-                               OutputFile="..\bin\doxysearch.cgi"\r
-                               LinkIncremental="2"\r
-                               AdditionalLibraryDirectories="&quot;S:\xapian\Debug&quot;"\r
+                               OutputFile="..\bin\Debug\doxysearch.cgi"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Debug&quot;"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile=".\Debug\$(TargetName).pdb"\r
                                SubSystem="1"\r
                </Configuration>\r
                <Configuration\r
                        Name="Debug|x64"\r
-                       OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
-                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Debug64"\r
+                       IntermediateDirectory=".\Debug64"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
-                               AdditionalIncludeDirectories="&quot;S:\xapian\include&quot;"\r
+                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\include&quot;"\r
                                PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Debug64\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
-                               OutputFile="..\bin\doxysearch.cgi"\r
+                               OutputFile="..\bin\Debug64\doxysearch.cgi"\r
                                LinkIncremental="2"\r
-                               AdditionalLibraryDirectories="&quot;S:\xapian\Release64&quot;"\r
+                               AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Debug64&quot;"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile=".\Debug64\$(TargetName).pdb"\r
                                SubSystem="1"\r
                </Configuration>\r
                <Configuration\r
                        Name="Release|Win32"\r
-                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
-                       IntermediateDirectory="$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Release"\r
+                       IntermediateDirectory=".\Release"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="2"\r
                                EnableIntrinsicFunctions="true"\r
-                               AdditionalIncludeDirectories="&quot;S:\xapian\include&quot;"\r
+                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\include&quot;"\r
                                PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"\r
                                RuntimeLibrary="0"\r
                                EnableFunctionLevelLinking="true"\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Release\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
                                OutputFile="..\bin\Release\doxysearch.cgi"\r
                                LinkIncremental="1"\r
-                               AdditionalLibraryDirectories="&quot;S:\xapian\Release&quot;"\r
+                               AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Release&quot;"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile=".\Release\$(TargetName).pdb"\r
                                SubSystem="1"\r
                </Configuration>\r
                <Configuration\r
                        Name="Release|x64"\r
-                       OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
-                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+                       OutputDirectory="..\bin\Release64"\r
+                       IntermediateDirectory=".\Release64"\r
                        ConfigurationType="1"\r
                        CharacterSet="1"\r
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"\r
                        WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="2"\r
                                EnableIntrinsicFunctions="true"\r
-                               AdditionalIncludeDirectories="&quot;S:\xapian\include&quot;"\r
+                               AdditionalIncludeDirectories="&quot;$(XAPIAN_DIR)\include&quot;"\r
                                PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"\r
                                RuntimeLibrary="0"\r
                                EnableFunctionLevelLinking="true"\r
                                UsePrecompiledHeader="0"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
+                               ProgramDatabaseFileName=".\Release64\$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="xapian.lib uuid.lib rpcrt4.lib ws2_32.lib"\r
                                OutputFile="..\bin\Release64\doxysearch.cgi"\r
                                LinkIncremental="1"\r
-                               AdditionalLibraryDirectories="&quot;S:\xapian\Release64&quot;"\r
+                               AdditionalLibraryDirectories="&quot;$(XAPIAN_DIR)\Release64&quot;"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile=".\Release64\$(TargetName).pdb"\r
                                SubSystem="1"\r
index d865a54..1d50d39 100644 (file)
@@ -25,6 +25,7 @@
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
index 573d633..a332d57 100644 (file)
@@ -26,6 +26,7 @@
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
@@ -56,7 +57,7 @@
                                PrecompiledHeaderFile=".\Release/qtools.pch"
                                AssemblerListingLocation=".\Release/"
                                ObjectFile=".\Release/"
-                               ProgramDataBaseFileName=".\Release/"
+                               ProgramDatabaseFileName=".\Release\$(TargetName).pdb"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                DebugInformationFormat="3"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                                PrecompiledHeaderFile=".\Release64/qtools.pch"
                                AssemblerListingLocation=".\Release64/"
                                ObjectFile=".\Release64/"
-                               ProgramDataBaseFileName=".\Release64/"
+                               ProgramDatabaseFileName=".\Release64\$(TargetName).pdb"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                DebugInformationFormat="3"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                                PrecompiledHeaderFile=".\Debug/qtools.pch"
                                AssemblerListingLocation=".\Debug/"
                                ObjectFile=".\Debug/"
-                               ProgramDataBaseFileName=".\Debug/"
+                               ProgramDatabaseFileName=".\Debug\$(TargetName).pdb"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                DebugInformationFormat="3"
                        UseOfMFC="0"
                        ATLMinimizesCRunTimeLibraryUsage="false"
                        CharacterSet="2"
+                       BuildLogFile="$(IntDir)\$(TargetName)BuildLog.htm"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
                                MinimalRebuild="true"
                                BasicRuntimeChecks="3"
                                RuntimeLibrary="1"
-                               PrecompiledHeaderFile=".\Debug/qtools.pch"
+                               PrecompiledHeaderFile=".\Debug64/qtools.pch"
                                AssemblerListingLocation=".\Debug64/"
                                ObjectFile=".\Debug64/"
-                               ProgramDataBaseFileName=".\Debug64/"
+                               ProgramDatabaseFileName=".\Debug64\$(TargetName).pdb"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                DebugInformationFormat="3"
index 65f923d..4747582 100644 (file)
@@ -1,7 +1,7 @@
-bison -l -d -p cppExpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.c
+bison -l -d -p ce_parseexpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.c
 del %1\..\src\ce_parse.c
-bison -l -p cppExpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.cpp
+bison -l -p constexpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.cpp
 
-bison -l -d -p vhdlScanYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.c
+bison -l -d -p vhdlscannerYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.c
 del %1\..\src\vhdlparser.c
-bison -l -p vhdlScanYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.cpp
+bison -l -p vhdlscannerYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.cpp