From bdc97d621d22b5e6e72d958cfd055cb8033735cc Mon Sep 17 00:00:00 2001
From: MultiMote <sporeon@yandex.ua>
Date: Fri, 24 May 2019 21:05:40 +0300
Subject: [PATCH] First commit

---
 README.md                   |   38 +
 example/Doxyfile            | 2434 +++++++++++++++++++++++++++++++++++
 example/database.db         |  Bin 0 -> 20480 bytes
 example/input/.gitignore    |    1 +
 example/input/index.dox     |    7 +
 example/mkdocs.bat          |    2 +
 example/mkdocs.sh           |    2 +
 example/table_comments.json |   18 +
 mksqlitedoc.py              |  101 ++
 mksqlitedoc_json.py         |   47 +
 screenshots/output.png      |  Bin 0 -> 24960 bytes
 11 files changed, 2650 insertions(+)
 create mode 100644 README.md
 create mode 100644 example/Doxyfile
 create mode 100644 example/database.db
 create mode 100644 example/input/.gitignore
 create mode 100644 example/input/index.dox
 create mode 100644 example/mkdocs.bat
 create mode 100644 example/mkdocs.sh
 create mode 100644 example/table_comments.json
 create mode 100644 mksqlitedoc.py
 create mode 100644 mksqlitedoc_json.py
 create mode 100644 screenshots/output.png

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..91b1839
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# Generating SQLite database documentation with Python and Doxygen #
+
+Simple scripts for SQLite database documenting.
+
+## Requirements ##
+
+* Python 3
+  - sqlite3 lib
+  - json lib
+* Doxygen
+
+## Usage ##
+
+SQLite does not support table and field comments so we are using external comment source (table_comments.json).
+
+```json
+{
+    "table_name": {
+        "comment": "Table comment",
+        "fields": {
+            "field_name": "Field comment",
+            "field_name2": "Field comment 2"
+        }
+    },
+}
+```
+
+* `python mksqlitedoc_json.py` - generates or updates comment source (table_comments.json)
+
+* `python mksqlitedoc_json.py` - generates Doxygen input file
+
+* `doxygen` - generates Doxygen documentation
+
+## Result ##
+
+![](screenshots/output.png)
+
+Python is not my strong side
\ No newline at end of file
diff --git a/example/Doxyfile b/example/Doxyfile
new file mode 100644
index 0000000..0e94b7e
--- /dev/null
+++ b/example/Doxyfile
@@ -0,0 +1,2434 @@
+# Doxyfile 1.8.12
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = pysqlitedoc
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         = 
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = 
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = output
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                = 
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to 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: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = input
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS          = *.dox
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS = 
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               = 
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           = 
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     = 
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     = 
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       = 
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     = 
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           = 
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET = 
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    = 
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             = 
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = NO
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_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.
+
+DIA_PATH               = 
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           = 
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           = 
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      = 
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/example/database.db b/example/database.db
new file mode 100644
index 0000000000000000000000000000000000000000..6e1edb6e2fbe3c8f7f58e7df685a14eb3bdd91b2
GIT binary patch
literal 20480
zcmeI&!EVzq7zc1??b@kYx7{Lc-vMcf79k`K9Cm<gbEjx&x@D<E52y;OK@n}!#i_Vb
zCha+RojnM=z$DJt-l$s8;D$u`Teai3{c3+dCx@s#KMS)`(A&Hir6oOMJIu1!OCrWt
zRn_(TYN=!6eoP%q(PMuqRrciZ$7b^@t8Ct~tuI^Go42Zi0s#m>00Izz00bZa0SG|g
z?+DB$^}21_*42wLeKQnODGF(twZoYE38%zA2sxP{a<TyhQNoXTOs8?s_TwI%@E-Zy
zq!UCcpv|Miqj5SCl<-#xMIBYUVdznj55+w8h`0Q1n2__-UHpi6m&vk7%Pb%F2dR1x
zJ5mcsf;OjlfF3Thk#Kg$`G;M1F}&4@d2k$=1vz>;mtx-HF^>-UxtU+;1YCFfIs0ty
z?_0Aold`-Vs)s&VP6t`uFU4rm|K0HV63YXzPJ`%<%2T~Lhd%k?VEVr#9Ch0b_jSeW
z$n23>hYpaYsV+@zh924xj|M_s6xl>uE^mc<x>mFI_N?AQmVGHMr(%2|?(&(RR+eV`
z=}kxH<*7(lU8y(v8v69!eCNM+4b|#3bGJ2hyJNa&AOHafKmY;|fB*y_009U<00IzL
zQ33t@Z*6~L>V*OU2tWV=5P$##AOHafKmY;|fWS%#Y*-b0!~AIhzyGh)#v&OAKmY;|
pfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5cp38z5^`x0)hYl

literal 0
HcmV?d00001

diff --git a/example/input/.gitignore b/example/input/.gitignore
new file mode 100644
index 0000000..6551a4f
--- /dev/null
+++ b/example/input/.gitignore
@@ -0,0 +1 @@
+/database.dox
diff --git a/example/input/index.dox b/example/input/index.dox
new file mode 100644
index 0000000..b7d8e08
--- /dev/null
+++ b/example/input/index.dox
@@ -0,0 +1,7 @@
+/*!
+ * \mainpage Main page
+ *
+ *
+ * \ref database_structure
+ *
+*/
diff --git a/example/mkdocs.bat b/example/mkdocs.bat
new file mode 100644
index 0000000..f4aba26
--- /dev/null
+++ b/example/mkdocs.bat
@@ -0,0 +1,2 @@
+@echo off
+python ..\mksqlitedoc_json.py && python ..\mksqlitedoc.py && doxygen
\ No newline at end of file
diff --git a/example/mkdocs.sh b/example/mkdocs.sh
new file mode 100644
index 0000000..b9572b0
--- /dev/null
+++ b/example/mkdocs.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+python ../mksqlitedoc_json.py && python ../mksqlitedoc.py && doxygen
\ No newline at end of file
diff --git a/example/table_comments.json b/example/table_comments.json
new file mode 100644
index 0000000..755ed9e
--- /dev/null
+++ b/example/table_comments.json
@@ -0,0 +1,18 @@
+{
+    "roles": {
+        "comment": "Roles table description",
+        "fields": {
+            "id": "Role unique ID",
+            "description": "Role description"
+        }
+    },
+    "users": {
+        "comment": "Users table description",
+        "fields": {
+            "id": "",
+            "name": "User name",
+            "role": "User role ID",
+            "registration_date": "User registration date"
+        }
+    }
+}
\ No newline at end of file
diff --git a/mksqlitedoc.py b/mksqlitedoc.py
new file mode 100644
index 0000000..507a574
--- /dev/null
+++ b/mksqlitedoc.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# ###################################################### #
+# Author: MultiMote                                      #
+# Description: pysqlitedoc dox generator                 #
+# URL: https://github.com/MultiMote/pysqlitedoc          #
+# ###################################################### #
+
+import sqlite3
+import json
+
+
+db_path = "database.db"
+dox_path = "input/database.dox"
+comments_path = "table_comments.json"
+
+
+db = sqlite3.connect(db_path)
+output = open(dox_path, "w", encoding='utf-8')
+comments = {}
+
+try:
+    json_file = open(comments_path, "r", encoding='utf-8')
+    comments = json.load(json_file)
+    json_file.close()
+except Exception:
+    pass
+
+db.row_factory = sqlite3.Row
+
+output.write("/*!\n")
+output.write(" * \\page database_structure Database structure\n")
+
+for tabledef in db.execute("SELECT * FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite\\_%' ESCAPE '\\' ORDER BY name "):
+    tablename = tabledef["name"]
+
+    output.write(" *\n")
+    output.write(" *\n")
+    output.write(" * \\section db_table_{} \"{}\" table\n".format(tablename, tablename))
+
+    try:
+        output.write(" *\n")
+        output.write(" * {}\n".format(comments.get(tablename).get("comment", "")))
+        output.write(" *\n")
+    except AttributeError:
+        pass
+
+    output.write(" * <table>\n")
+    output.write(" * <tr>\n")
+    output.write(" *  <th>Field</th>\n")
+    output.write(" *  <th>Type</th>\n")
+    output.write(" *  <th title=\"Primary key\">PK</th>\n")
+    output.write(" *  <th title=\"Required (NOT NULL)\">NN</th>\n")
+    output.write(" *  <th>Default</th>\n")
+    output.write(" *  <th>Description</th>\n")
+    output.write(" * </tr>\n")
+
+    for field in db.execute("PRAGMA table_info({})".format(tablename)):
+        output.write(" * <tr>\n")
+        output.write(" *  <td>{}</td>\n".format(field["name"]))
+        output.write(" *  <td>{}</td>\n".format(field["type"]))
+        output.write(" *  <td style=\"text-align:center\">{}</td>\n".format("●" if field["pk"] == 1 else ""))
+        output.write(" *  <td style=\"text-align:center\">{}</td>\n".format("●" if field["notnull"] == 1 else ""))
+        output.write(" *  <td style=\"text-align:center\">{}</td>\n".format("`NULL`" if field["dflt_value"] is None else field["dflt_value"]))
+
+        try:
+            output.write(" *  <td>{}</td>\n".format(comments.get(tablename).get("fields").get(field["name"], "")))
+        except AttributeError:
+            output.write(" *  <td></td>\n")
+
+        output.write(" * </tr>\n")
+
+    output.write(" * </table>\n")
+
+    foreign_keys = db.execute("PRAGMA foreign_key_list({})".format(tablename)).fetchall()
+
+    if len(foreign_keys) > 0:
+        output.write(" * <h2>\"{}\" foreign keys</h2>\n".format(tablename))
+        output.write(" * <table>\n")
+        output.write(" * <tr>\n")
+        output.write(" *  <th>Local field</th>\n")
+        output.write(" *  <th>Reference table</th>\n")
+        output.write(" *  <th>Reference field</th>\n")
+        output.write(" *  <th>On update</th>\n")
+        output.write(" *  <th>On delete</th>\n")
+        output.write(" * </tr>\n")
+        for fkey in foreign_keys:
+            output.write(" * <tr>\n")
+            output.write(" *  <td>{}</td>\n".format(fkey["from"]))
+            output.write(" *  <td>{}</td>\n".format(fkey["table"]))
+            output.write(" *  <td>{}</td>\n".format(fkey["to"]))
+            output.write(" *  <td>{}</td>\n".format(fkey["on_update"]))
+            output.write(" *  <td>{}</td>\n".format(fkey["on_delete"]))
+            output.write(" * </tr>\n")
+
+        output.write(" * </table>\n")
+
+output.write("*/\n")
+
+output.close()
diff --git a/mksqlitedoc_json.py b/mksqlitedoc_json.py
new file mode 100644
index 0000000..53229a9
--- /dev/null
+++ b/mksqlitedoc_json.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# ###################################################### #
+# Author: MultiMote                                      #
+# Description: pysqlitedoc table_comments.json generator #
+# URL: https://github.com/MultiMote/pysqlitedoc          #
+# ###################################################### #
+
+import sqlite3
+import json
+
+db_path = "database.db"
+comments_path = "table_comments.json"
+
+
+db = sqlite3.connect(db_path)
+json_data = {}
+
+try:
+    json_file = open(comments_path, "r", encoding='utf-8')
+    json_data = json.load(json_file)
+    json_file.close()
+except Exception:
+    pass
+
+db.row_factory = sqlite3.Row
+
+for tabledef in db.execute("SELECT * FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite\\_%' ESCAPE '\\' "):
+    tablename = tabledef["name"]
+
+    if json_data.get(tablename) is None:
+        json_data[tablename] = {}
+
+    if json_data.get(tablename).get("comment") is None:
+        json_data[tablename]["comment"] = ""
+
+    if json_data.get(tablename).get("fields") is None:
+        json_data[tablename]["fields"] = {}
+
+    for field in db.execute("PRAGMA table_info({})".format(tablename)):
+        if json_data.get(tablename).get("fields").get(field["name"]) is None:
+            json_data[tablename]["fields"][field["name"]] = ""
+
+json_file = open(comments_path, "w", encoding='utf-8')
+json.dump(json_data, json_file, indent=4)
+json_file.close()
diff --git a/screenshots/output.png b/screenshots/output.png
new file mode 100644
index 0000000000000000000000000000000000000000..715e306319ea8793f51b06f80368568366a0c8a5
GIT binary patch
literal 24960
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

literal 0
HcmV?d00001