chiark / gitweb /
doxygen: option to show undocumented symbols.
authorVladimír Vondruš <mosra@centrum.cz>
Sun, 24 Feb 2019 19:06:36 +0000 (20:06 +0100)
committerVladimír Vondruš <mosra@centrum.cz>
Fri, 29 Mar 2019 12:44:31 +0000 (13:44 +0100)
Done simply as a preprocessing step by populating the <briefdescription>
for each symbol that has neither <briefdescription> nor
<detaileddescription> with an empty <span>. That's all.

14 files changed:
doc/doxygen.rst
doxygen/dox2html5.py
doxygen/test/test_doxyfile.py
doxygen/test/test_undocumented.py [new file with mode: 0644]
doxygen/test/undocumented/Directory/File.h [new file with mode: 0644]
doxygen/test/undocumented/Doxyfile [new file with mode: 0644]
doxygen/test/undocumented/File_8h.html [new file with mode: 0644]
doxygen/test/undocumented/annotated.html [new file with mode: 0644]
doxygen/test/undocumented/classClass.html [new file with mode: 0644]
doxygen/test/undocumented/dir_4b0d5f8864bf89936129251a2d32609b.html [new file with mode: 0644]
doxygen/test/undocumented/files.html [new file with mode: 0644]
doxygen/test/undocumented/group__group.html [new file with mode: 0644]
doxygen/test/undocumented/namespaceNamespace.html [new file with mode: 0644]
doxygen/test/undocumented/structNamespace_1_1ClassInANamespace.html [new file with mode: 0644]

index 6c4315fe29c8827394598eafaf603476fa84806f..3c183ce03bf74f5a4e3133f4df4bd7e2f2eb8a95 100644 (file)
@@ -183,7 +183,11 @@ If you see something unexpected or not see something expected, check the
 -   Files, directories and symbols that don't have any documentation are not
     present in the output at all. This is done in order to encourage good
     documentation practices --- having the output consist of an actual
-    human-written documentation instead of just autogenerated lists.
+    human-written documentation instead of just autogenerated lists. If you
+    *really* want to have them included in the output, you can enable them
+    using a default-to-off :ini:`M_SHOW_UNDOCUMENTED` option, but there are
+    some tradeoffs. See `Showing undocumented symbols and files`_ for
+    more information.
 -   Table of contents is generated for compound references as well, containing
     all sections of detailed description together with anchors to member
     listings
@@ -399,6 +403,10 @@ Variable                            Description
                                     search is offered. See `Search options`_
                                     for more information. Has effect only if
                                     :ini:`M_SEARCH_DISABLED` is not ``YES``.
+:ini:`M_SHOW_UNDOCUMENTED`          Include undocumented symbols, files and
+                                    directories in the output. If not set,
+                                    ``NO`` is used. See `Showing undocumented symbols and files`_
+                                    for more information.
 =================================== ===========================================
 
 Note that namespace, directory and page lists are always fully expanded as
@@ -570,6 +578,26 @@ the search to a subdomain:
 
     M_SEARCH_EXTERNAL_URL = "https://google.com/search?q=site:doc.magnum.graphics+{query}"
 
+`Showing undocumented symbols and files`_
+-----------------------------------------
+
+As noted in `Features`_, the main design decision of the m.css Doxygen theme is
+to reduce the amount of useless output. A plain list of undocumented APIs also
+counts as useless output, so by default everything that's not documented is not
+shown.
+
+In some cases, however, it might be desirable to show undocumented symbols as
+well --- for example when converting an existing project from vanilla Doxygen
+to m.css, not all APIs might be documented yet and thus the output would be
+incomplete. The :ini:`M_SHOW_UNDOCUMENTED` option unconditionally makes all
+undocumented symbols, files and directories "appear documented". Note, however,
+that Doxygen itself doesn't allow to link to undocumented symbols and so even
+though the undocumented symbols are present in the output, nothing is able to
+reference them, causing very questionable usability of such approach. A
+potential "fix" to this is enabling the :ini:`EXTRACT_ALL` option, but that
+exposes all symbols, including private and file-local ones --- which, most
+probably, is *not* what you want.
+
 `Content`_
 ==========
 
index 6b917497a57a14df0ad6d3e733d4c4b7833380b2..0585fa9e7f19fb0a705a4509f3d2dcf39bfa8e39 100755 (executable)
@@ -1505,9 +1505,16 @@ def parse_desc_internal(state: State, element: ET.Element, immediate_parent: ET.
                 ' class="{}"'.format(add_inline_css_class) if add_inline_css_class else '',
                 add_wbr(parse_inline_desc(state, i).strip()))
 
-        # <span> with custom CSS classes
+        # <span> with custom CSS classes. This is (ab)used by the
+        # M_SHOW_UNDOCUMENTED option to make things appear to be documented
+        # in _document_all_stuff(). In that case the class attribute is not
+        # present.
         elif i.tag == '{http://mcss.mosra.cz/doxygen/}span':
-            out.parsed += '<span class="{}">{}</span>'.format(i.attrib['{http://mcss.mosra.cz/doxygen/}class'], parse_inline_desc(state, i).strip())
+            content = parse_inline_desc(state, i).strip()
+            if '{http://mcss.mosra.cz/doxygen/}class' in i.attrib:
+                out.parsed += '<span class="{}">{}</span>'.format(i.attrib['{http://mcss.mosra.cz/doxygen/}class'], content)
+            else:
+                out.parsed += '<span>{}</span>'.format(content)
 
         # WHAT THE HELL WHY IS THIS NOT AN XML ENTITY
         elif i.tag in ['mdash', 'ndash', 'laquo', 'raquo']:
@@ -2057,6 +2064,20 @@ def parse_define(state: State, element: ET.Element):
         return define
     return None
 
+# Used for the M_SHOW_UNDOCUMENTED option
+def _document_all_stuff(compounddef: ET.Element):
+    for i in compounddef.findall('.//briefdescription/..'):
+        brief = i.find('briefdescription')
+        if not brief and not i.find('detaileddescription'):
+            # Add an empty <span> to the paragraph so it doesn't look empty.
+            # Can't use strong/emphasis, as those are collapsed if empty as
+            # well; on the other hand it's very unlikely that someone would
+            # want to use @m_span with empty contents.
+            dim = ET.Element('{http://mcss.mosra.cz/doxygen/}span')
+            para = ET.Element('para')
+            para.append(dim)
+            brief.append(para)
+
 def extract_metadata(state: State, xml):
     logging.debug("Extracting metadata from {}".format(os.path.basename(xml)))
 
@@ -2085,6 +2106,11 @@ def extract_metadata(state: State, xml):
         logging.debug("No useful info in {}, skipping".format(os.path.basename(xml)))
         return
 
+    # In order to show also undocumented members, go through all empty
+    # <briefdescription>s and fill them with a generic text.
+    if state.doxyfile['M_SHOW_UNDOCUMENTED']:
+        _document_all_stuff(compounddef)
+
     compound = StateCompound()
     compound.id  = compounddef.attrib['id']
     compound.kind = compounddef.attrib['kind']
@@ -2392,6 +2418,11 @@ def parse_xml(state: State, xml: str):
         logging.debug("{}: only private things, skipping".format(state.current))
         return None
 
+    # In order to show also undocumented members, go through all empty
+    # <briefdescription>s and fill them with a generic text.
+    if state.doxyfile['M_SHOW_UNDOCUMENTED']:
+        _document_all_stuff(compounddef)
+
     # Ignoring compounds w/o any description, except for pages and groups,
     # which are created explicitly
     if not compounddef.find('briefdescription') and not compounddef.find('detaileddescription') and not compounddef.attrib['kind'] in ['page', 'group']:
@@ -3291,7 +3322,8 @@ copy a link to the result using <span class="m-label m-dim">⌘</span>
 <span class="m-label m-dim">M</span> produces a Markdown link.</p>
 """],
         'M_SEARCH_BASE_URL': [''],
-        'M_SEARCH_EXTERNAL_URL': ['']
+        'M_SEARCH_EXTERNAL_URL': [''],
+        'M_SHOW_UNDOCUMENTED': ['NO']
     }
 
     # Defaults so we don't fail with minimal Doxyfiles and also that the
@@ -3409,7 +3441,8 @@ copy a link to the result using <span class="m-label m-dim">⌘</span>
               'SHOW_INCLUDE_FILES',
               'M_EXPAND_INNER_TYPES',
               'M_SEARCH_DISABLED',
-              'M_SEARCH_DOWNLOAD_BINARY']:
+              'M_SEARCH_DOWNLOAD_BINARY',
+              'M_SHOW_UNDOCUMENTED']:
         if i in config: state.doxyfile[i] = ' '.join(config[i]) == 'YES'
 
     # List values that we want. Drop empty lines.
index eccf17d644550af8e5cbf236c768ea87b64d1457..eeae2b29dac3d8aeb39dda6e892e6ecfbe610b15 100644 (file)
@@ -73,6 +73,7 @@ copy a link to the result using <span class="m-label m-dim">⌘</span>
 <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
 <span class="m-label m-dim">M</span> produces a Markdown link.</p>
 """,
+            'M_SHOW_UNDOCUMENTED': False,
             'M_THEME_COLOR': '#22272e',
             'OUTPUT_DIRECTORY': '',
             'PROJECT_BRIEF': 'is cool',
diff --git a/doxygen/test/test_undocumented.py b/doxygen/test/test_undocumented.py
new file mode 100644 (file)
index 0000000..01c6b4f
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+
+#
+#   This file is part of m.css.
+#
+#   Copyright © 2017, 2018, 2019 Vladimír Vondruš <mosra@centrum.cz>
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+#   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+#   DEALINGS IN THE SOFTWARE.
+#
+
+import os
+
+from dox2html5 import search_data_header_struct
+
+from . import IntegrationTestCase
+
+class Test(IntegrationTestCase):
+    def __init__(self, *args, **kwargs):
+        super().__init__(__file__, '', *args, **kwargs)
+
+    def test(self):
+        self.run_dox2html5(wildcard='*.xml')
+
+        # The index pages should be full
+        self.assertEqual(*self.actual_expected_contents('annotated.html'))
+        self.assertEqual(*self.actual_expected_contents('files.html'))
+
+        # The empty class pages should be present
+        self.assertEqual(*self.actual_expected_contents('classClass.html'))
+
+        # Namespace, dir, file, group and class member listing
+        self.assertEqual(*self.actual_expected_contents('namespaceNamespace.html'))
+        self.assertEqual(*self.actual_expected_contents('dir_4b0d5f8864bf89936129251a2d32609b.html'))
+        self.assertEqual(*self.actual_expected_contents('File_8h.html'))
+        self.assertEqual(*self.actual_expected_contents('group__group.html'))
+        self.assertEqual(*self.actual_expected_contents('structNamespace_1_1ClassInANamespace.html'))
+
+        # Test we have all symbols in search data. It's enough to assert the
+        # count, it equal to symbol count in the header file
+        # TODO: reuse the search data deserialization API once done
+        with open(os.path.join(self.path, 'html', 'searchdata.bin'), 'rb') as f:
+            serialized = f.read()
+            magic, version, symbol_count, map_offset = search_data_header_struct.unpack_from(serialized)
+            self.assertEqual(symbol_count, 38)
diff --git a/doxygen/test/undocumented/Directory/File.h b/doxygen/test/undocumented/Directory/File.h
new file mode 100644 (file)
index 0000000..71622df
--- /dev/null
@@ -0,0 +1,119 @@
+/* An undocumented directory */
+
+/* An undocumented file in an undocumented directory */
+
+/* An undocumented class in the root namespace */
+class Class {};
+
+/* An undocumented structure in the root namespace */
+struct Struct {};
+
+/* An undocumented union in the root namespace */
+union Union {};
+
+/* An undocumented enum in the root namespace */
+enum Enum {};
+
+/* An undocumented typedef in the root namespace */
+typedef int Int;
+
+/* An undocumented using declaration in the root namespace */
+using Float = float;
+
+/* An undocumented variable in the root namespace */
+constexpr const int Var = 3;
+
+/* An undocumented function in the root namespace */
+void foo();
+
+/* An undocumented namespace */
+namespace Namespace {
+
+/* An undocumented class */
+struct ClassInANamespace {
+    /* An undocumented inner class */
+    class ClassInAClass {};
+
+    /* An undocumented inner enum */
+    enum EnumInAClass {};
+
+    /* An undocumented inner typedef */
+    typedef int IntInAClass;
+
+    /* An undocumented inner using declaration */
+    using FloatInAClass = float;
+
+    /* An undocumented inner variable */
+    constexpr const int VarInAClass = 3;
+
+    /* An undocumented inner function */
+    void fooInAClass();
+};
+
+/* An undocumented enum */
+enum EnumInANamespace {};
+
+/* An undocumented typedef */
+typedef int IntInANamespace;
+
+/* An undocumented using declaration */
+using FloatInANamespace = float;
+
+/* An undocumented variable */
+constexpr const int VarInANamespace = 3;
+
+/* An undocumented function */
+void fooInANamespace();
+
+/** @{ @name A group */ /* does *not* contribute to search symbol count */
+
+/* An undocumented flag in a group */
+enum FlagInAGroup {};
+
+/* An undocumented alias in a group */
+using MainInAGroup = void;
+
+/* A undocumented function in a group */
+void barInAGroup();
+
+/* An undocumented variable in a group */
+constexpr void* variableInAGroup = nullptr;
+
+/* An undocumented define in a group */
+#define A_DEFINE_IN_A_GROUP
+
+/*@}*/
+
+/** @defgroup group A module
+@{ */
+
+/* An undocumented class in a module */
+class ClassInModule {};
+
+/* An undocumented structure in a module */
+struct StructInModule {};
+
+/* An undocumented union in a module */
+union UnionInModule {};
+
+/* An undocumented enum in a module */
+enum EnumInModule {};
+
+/* An undocumented typedef in a module */
+typedef int IntInModule;
+
+/* An undocumented using declaration in a module */
+using FloatInModule = float;
+
+/* An undocumented variable in a module */
+constexpr const int VarInModule = 3;
+
+/* An undocumented function in a module */
+void fooInModule();
+
+/*@}*/
+
+}}
+
+/* An undocumented define */
+#define A_DEFINE
diff --git a/doxygen/test/undocumented/Doxyfile b/doxygen/test/undocumented/Doxyfile
new file mode 100644 (file)
index 0000000..3ef7f71
--- /dev/null
@@ -0,0 +1,18 @@
+INPUT                   = Directory
+RECURSIVE               = YES
+QUIET                   = YES
+GENERATE_HTML           = NO
+GENERATE_LATEX          = NO
+GENERATE_XML            = YES
+XML_PROGRAMLISTING      = NO
+
+##! M_PAGE_FINE_PRINT   =
+##! M_THEME_COLOR       =
+##! M_FAVICON           =
+
+XML_NS_MEMB_FILE_SCOPE  = YES
+##! M_LINKS_NAVBAR1     = \
+##!     modules \
+##!     namespaces
+##! M_SEARCH_DOWNLOAD_BINARY = YES
+##! M_SHOW_UNDOCUMENTED = YES
diff --git a/doxygen/test/undocumented/File_8h.html b/doxygen/test/undocumented/File_8h.html
new file mode 100644 (file)
index 0000000..c189dc4
--- /dev/null
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Directory/File.h file | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          <span class="m-breadcrumb"><a href="dir_4b0d5f8864bf89936129251a2d32609b.html">Directory</a>/</span>File.h <span class="m-thin">file</span>
+        </h1>
+        <p><span></span></p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#namespaces">Namespaces</a></li>
+                <li><a href="#nested-classes">Classes</a></li>
+                <li><a href="#enum-members">Enums</a></li>
+                <li><a href="#typedef-members">Typedefs</a></li>
+                <li><a href="#func-members">Functions</a></li>
+                <li><a href="#var-members">Variables</a></li>
+                <li><a href="#defines">Defines</a></li>
+                <li><a href="#a-group">A group</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="namespaces">
+          <h2><a href="#namespaces">Namespaces</a></h2>
+          <dl class="m-dox">
+            <dt>namespace <a href="namespaceNamespace.html" class="m-dox">Namespace</a></dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h2>
+          <dl class="m-dox">
+            <dt>
+              class <a href="classClass.html" class="m-dox">Class</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              struct <a href="structStruct.html" class="m-dox">Struct</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              union <a href="unionUnion.html" class="m-dox">Union</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              struct <a href="structNamespace_1_1ClassInANamespace.html" class="m-dox">Namespace::ClassInANamespace</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              class <a href="classNamespace_1_1ClassInANamespace_1_1ClassInAClass.html" class="m-dox">Namespace::ClassInANamespace::ClassInAClass</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              class <a href="classNamespace_1_1ClassInModule.html" class="m-dox">Namespace::ClassInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              struct <a href="structNamespace_1_1StructInModule.html" class="m-dox">Namespace::StructInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              union <a href="unionNamespace_1_1UnionInModule.html" class="m-dox">Namespace::UnionInModule</a>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="enum-members">
+          <h2><a href="#enum-members">Enums</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#a8150b7776c2a1749101acf22e868d091" class="m-dox-self" name="a8150b7776c2a1749101acf22e868d091">Enum</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#a8a9c59c4fc669202671b19a5df454fd0" class="m-dox-self" name="a8a9c59c4fc669202671b19a5df454fd0">EnumInANamespace</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="group__group.html#gac29f30d3e17c48ae9313c45384cfb0f0" class="m-dox">EnumInModule</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="typedef-members">
+          <h2><a href="#typedef-members">Typedefs</a></h2>
+          <dl class="m-dox">
+            <dt>
+              using <a href="#a7cc214a236ad3bb6ad435bdcf5262a3f" class="m-dox-self" name="a7cc214a236ad3bb6ad435bdcf5262a3f">Int</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#a3ffd74e95952eacd75f04a2b85d61845" class="m-dox-self" name="a3ffd74e95952eacd75f04a2b85d61845">Float</a> = float
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#aafe0a3decaed02dd572ca9c5741e8f0f" class="m-dox-self" name="aafe0a3decaed02dd572ca9c5741e8f0f">IntInANamespace</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#af411f7ca665a2797abbb9246dc8ce66f" class="m-dox-self" name="af411f7ca665a2797abbb9246dc8ce66f">FloatInANamespace</a> = float
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="group__group.html#gaa0873618a2fbb3e8bb4963da4a278092" class="m-dox">IntInModule</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="group__group.html#ga506dd0de38d03423ba42d30f80948580" class="m-dox">FloatInModule</a> = float
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="func-members">
+          <h2><a href="#func-members">Functions</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#ac07863d69ae41a4e395b31f73b35fbcd" class="m-dox-self" name="ac07863d69ae41a4e395b31f73b35fbcd">foo</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#a451d9a4eeb8244db749a8d6d31af0a4e" class="m-dox-self" name="a451d9a4eeb8244db749a8d6d31af0a4e">fooInANamespace</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="group__group.html#ga4e08e167e7c84518c1e39e57de78f00d" class="m-dox">fooInModule</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="var-members">
+          <h2><a href="#var-members">Variables</a></h2>
+          <dl class="m-dox">
+            <dt>
+              const int <a href="#a7708bd7aaec399e771a2b30db52e4d22" class="m-dox-self" name="a7708bd7aaec399e771a2b30db52e4d22">Var</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              const int <a href="#a6165847e2f1c2a0749c225caafe2d9fd" class="m-dox-self" name="a6165847e2f1c2a0749c225caafe2d9fd">VarInANamespace</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              const int <a href="group__group.html#gadf77c8e0e703901b221c9f55b6900617" class="m-dox">VarInModule</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="define-members">
+          <h2><a href="#define-members">Defines</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">#define <a href="#a144a2a84c08d05de76f6a4a245584810" class="m-dox-self" name="a144a2a84c08d05de76f6a4a245584810">A_DEFINE</a></span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="a-group">
+          <h2><a href="#a-group">A group</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">#define <a href="#ac8ab78e5a895bc0dfceb61c9b7707dbe" class="m-dox-self" name="ac8ab78e5a895bc0dfceb61c9b7707dbe">A_DEFINE_IN_A_GROUP</a></span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#a4e54d99b64c66ac62367c340296cf0e6" class="m-dox-self" name="a4e54d99b64c66ac62367c340296cf0e6">FlagInAGroup</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#a01be7a4b97db30990f9e35a80dfab953" class="m-dox-self" name="a01be7a4b97db30990f9e35a80dfab953">MainInAGroup</a> = void
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              void* <a href="#addafc81fb6e46828eada927103080acc" class="m-dox-self" name="addafc81fb6e46828eada927103080acc">variableInAGroup</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#a34b4421352d415dad9bf0c6a2e4694d4" class="m-dox-self" name="a34b4421352d415dad9bf0c6a2e4694d4">barInAGroup</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/annotated.html b/doxygen/test/undocumented/annotated.html
new file mode 100644 (file)
index 0000000..2ed7c58
--- /dev/null
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html" id="m-navbar-current">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>Classes</h2>
+        <ul class="m-dox">
+          <li class="m-dox-collapsible">
+            <a href="#" onclick="return toggle(this)">namespace</a> <a href="namespaceNamespace.html" class="m-dox">Namespace</a> <span class="m-dox"><span></span></span>
+            <ul class="m-dox">
+              <li class="m-dox-collapsible collapsed">
+                <a href="#" onclick="return toggle(this)">struct</a> <a href="structNamespace_1_1ClassInANamespace.html" class="m-dox">ClassInANamespace</a> <span class="m-dox"><span></span></span>
+                <ul class="m-dox">
+                  <li>class <a href="classNamespace_1_1ClassInANamespace_1_1ClassInAClass.html" class="m-dox">ClassInAClass</a> <span class="m-dox"><span></span></span></li>
+                </ul>
+              </li>
+              <li>class <a href="classNamespace_1_1ClassInModule.html" class="m-dox">ClassInModule</a> <span class="m-dox"><span></span></span></li>
+              <li>struct <a href="structNamespace_1_1StructInModule.html" class="m-dox">StructInModule</a> <span class="m-dox"><span></span></span></li>
+              <li>union <a href="unionNamespace_1_1UnionInModule.html" class="m-dox">UnionInModule</a> <span class="m-dox"><span></span></span></li>
+            </ul>
+          </li>
+          <li>class <a href="classClass.html" class="m-dox">Class</a> <span class="m-dox"><span></span></span></li>
+          <li>struct <a href="structStruct.html" class="m-dox">Struct</a> <span class="m-dox"><span></span></span></li>
+          <li>union <a href="unionUnion.html" class="m-dox">Union</a> <span class="m-dox"><span></span></span></li>
+        </ul>
+        <script>
+        function toggle(e) {
+            e.parentElement.className = e.parentElement.className == 'm-dox-collapsible' ?
+                'm-dox-expansible' : 'm-dox-collapsible';
+            return false;
+        }
+        /* Collapse all nodes marked as such. Doing it via JS instead of directly in
+           markup so disabling it doesn't harm usability. The list is somehow
+           regenerated on every iteration and shrinks as I change the classes. It's not
+           documented anywhere and I'm not sure if this is the same across browsers, so
+           I am going backwards in that list to be sure.  */
+        var collapsed = document.getElementsByClassName("collapsed");
+        for(var i = collapsed.length - 1; i >= 0; --i)
+            collapsed[i].className = 'm-dox-expansible';
+        </script>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/classClass.html b/doxygen/test/undocumented/classClass.html
new file mode 100644 (file)
index 0000000..e2ce075
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Class class | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          Class <span class="m-thin">class</span>
+          <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+        </h1>
+        <p><span></span></p>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/dir_4b0d5f8864bf89936129251a2d32609b.html b/doxygen/test/undocumented/dir_4b0d5f8864bf89936129251a2d32609b.html
new file mode 100644 (file)
index 0000000..efdd612
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Directory/ directory | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          Directory<span class="m-breadcrumb">/</span> <span class="m-thin">directory</span>
+        </h1>
+        <p><span></span></p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#files">Files</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="files">
+          <h2><a href="#files">Files</a></h2>
+          <dl class="m-dox">
+            <dt>file <a href="File_8h.html" class="m-dox">File.h</a></dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/files.html b/doxygen/test/undocumented/files.html
new file mode 100644 (file)
index 0000000..9ed47f3
--- /dev/null
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html" id="m-navbar-current">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>Files</h2>
+        <ul class="m-dox">
+          <li class="m-dox-collapsible">
+            <a href="#" onclick="return toggle(this)">dir</a> <a href="dir_4b0d5f8864bf89936129251a2d32609b.html" class="m-dox">Directory</a> <span class="m-dox"><span></span></span>
+            <ul class="m-dox">
+              <li>file <a href="File_8h.html" class="m-dox">File.h</a> <span class="m-dox"><span></span></span></li>
+            </ul>
+          </li>
+        </ul>
+        <script>
+        function toggle(e) {
+            e.parentElement.className = e.parentElement.className == 'm-dox-collapsible' ?
+                'm-dox-expansible' : 'm-dox-collapsible';
+            return false;
+        }
+        /* Collapse all nodes marked as such. Doing it via JS instead of directly in
+           markup so disabling it doesn't harm usability. The list is somehow
+           regenerated on every iteration and shrinks as I change the classes. It's not
+           documented anywhere and I'm not sure if this is the same across browsers, so
+           I am going backwards in that list to be sure.  */
+        var collapsed = document.getElementsByClassName("collapsed");
+        for(var i = collapsed.length - 1; i >= 0; --i)
+            collapsed[i].className = 'm-dox-expansible';
+        </script>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/group__group.html b/doxygen/test/undocumented/group__group.html
new file mode 100644 (file)
index 0000000..4fe2c1b
--- /dev/null
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>A module module | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          A module <span class="m-thin">module</span></h1>
+        <p><span></span></p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#nested-classes">Classes</a></li>
+                <li><a href="#enum-members">Enums</a></li>
+                <li><a href="#typedef-members">Typedefs</a></li>
+                <li><a href="#func-members">Functions</a></li>
+                <li><a href="#var-members">Variables</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h2>
+          <dl class="m-dox">
+            <dt>
+              class <a href="classNamespace_1_1ClassInModule.html" class="m-dox">Namespace::ClassInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              struct <a href="structNamespace_1_1StructInModule.html" class="m-dox">Namespace::StructInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              union <a href="unionNamespace_1_1UnionInModule.html" class="m-dox">Namespace::UnionInModule</a>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="enum-members">
+          <h2><a href="#enum-members">Enums</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#gac29f30d3e17c48ae9313c45384cfb0f0" class="m-dox">EnumInModule</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="typedef-members">
+          <h2><a href="#typedef-members">Typedefs</a></h2>
+          <dl class="m-dox">
+            <dt>
+              using <a href="#gaa0873618a2fbb3e8bb4963da4a278092" class="m-dox">IntInModule</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#ga506dd0de38d03423ba42d30f80948580" class="m-dox">FloatInModule</a> = float
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="func-members">
+          <h2><a href="#func-members">Functions</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#ga4e08e167e7c84518c1e39e57de78f00d" class="m-dox">fooInModule</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="var-members">
+          <h2><a href="#var-members">Variables</a></h2>
+          <dl class="m-dox">
+            <dt>
+              const int <a href="#gadf77c8e0e703901b221c9f55b6900617" class="m-dox">VarInModule</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section>
+          <h2>Enum documentation</h2>
+          <section class="m-dox-details" id="gac29f30d3e17c48ae9313c45384cfb0f0"><div>
+            <h3>
+              enum <a href="#gac29f30d3e17c48ae9313c45384cfb0f0" class="m-dox-self">EnumInModule</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Typedef documentation</h2>
+          <section class="m-dox-details" id="gaa0873618a2fbb3e8bb4963da4a278092"><div>
+            <h3>
+              typedef int <a href="#gaa0873618a2fbb3e8bb4963da4a278092" class="m-dox-self">IntInModule</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="ga506dd0de38d03423ba42d30f80948580"><div>
+            <h3>
+              using <a href="#ga506dd0de38d03423ba42d30f80948580" class="m-dox-self">FloatInModule</a> = float
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Function documentation</h2>
+          <section class="m-dox-details" id="ga4e08e167e7c84518c1e39e57de78f00d"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">void </span><span class="m-dox-wrap"><span class="m-dox-wrap-bumper"><a href="#ga4e08e167e7c84518c1e39e57de78f00d" class="m-dox-self">fooInModule</a>(</span><span class="m-dox-wrap">)</span></span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Variable documentation</h2>
+          <section class="m-dox-details" id="gadf77c8e0e703901b221c9f55b6900617"><div>
+            <h3>
+              const int <a href="#gadf77c8e0e703901b221c9f55b6900617" class="m-dox-self">VarInModule</a> <span class="m-label m-primary">constexpr</span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/namespaceNamespace.html b/doxygen/test/undocumented/namespaceNamespace.html
new file mode 100644 (file)
index 0000000..7d9b828
--- /dev/null
@@ -0,0 +1,319 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Namespace namespace | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          Namespace <span class="m-thin">namespace</span>
+        </h1>
+        <p><span></span></p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#nested-classes">Classes</a></li>
+                <li><a href="#enum-members">Enums</a></li>
+                <li><a href="#typedef-members">Typedefs</a></li>
+                <li><a href="#func-members">Functions</a></li>
+                <li><a href="#var-members">Variables</a></li>
+                <li><a href="#a-group">A group</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h2>
+          <dl class="m-dox">
+            <dt>
+              struct <a href="structNamespace_1_1ClassInANamespace.html" class="m-dox">ClassInANamespace</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              class <a href="classNamespace_1_1ClassInModule.html" class="m-dox">ClassInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              struct <a href="structNamespace_1_1StructInModule.html" class="m-dox">StructInModule</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              union <a href="unionNamespace_1_1UnionInModule.html" class="m-dox">UnionInModule</a>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="enum-members">
+          <h2><a href="#enum-members">Enums</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="File_8h.html#a8a9c59c4fc669202671b19a5df454fd0" class="m-dox">EnumInANamespace</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="group__group.html#gac29f30d3e17c48ae9313c45384cfb0f0" class="m-dox">EnumInModule</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="typedef-members">
+          <h2><a href="#typedef-members">Typedefs</a></h2>
+          <dl class="m-dox">
+            <dt>
+              using <a href="File_8h.html#aafe0a3decaed02dd572ca9c5741e8f0f" class="m-dox">IntInANamespace</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="File_8h.html#af411f7ca665a2797abbb9246dc8ce66f" class="m-dox">FloatInANamespace</a> = float
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="group__group.html#gaa0873618a2fbb3e8bb4963da4a278092" class="m-dox">IntInModule</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="group__group.html#ga506dd0de38d03423ba42d30f80948580" class="m-dox">FloatInModule</a> = float
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="func-members">
+          <h2><a href="#func-members">Functions</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="File_8h.html#a451d9a4eeb8244db749a8d6d31af0a4e" class="m-dox">fooInANamespace</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="group__group.html#ga4e08e167e7c84518c1e39e57de78f00d" class="m-dox">fooInModule</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="var-members">
+          <h2><a href="#var-members">Variables</a></h2>
+          <dl class="m-dox">
+            <dt>
+              const int <a href="File_8h.html#a6165847e2f1c2a0749c225caafe2d9fd" class="m-dox">VarInANamespace</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              const int <a href="group__group.html#gadf77c8e0e703901b221c9f55b6900617" class="m-dox">VarInModule</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="a-group">
+          <h2><a href="#a-group">A group</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="File_8h.html#a4e54d99b64c66ac62367c340296cf0e6" class="m-dox">FlagInAGroup</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="File_8h.html#a01be7a4b97db30990f9e35a80dfab953" class="m-dox">MainInAGroup</a> = void
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              void* <a href="File_8h.html#addafc81fb6e46828eada927103080acc" class="m-dox">variableInAGroup</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="File_8h.html#a34b4421352d415dad9bf0c6a2e4694d4" class="m-dox">barInAGroup</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section>
+          <h2>Enum documentation</h2>
+          <section class="m-dox-details" id="a8a9c59c4fc669202671b19a5df454fd0"><div>
+            <h3>
+              enum Namespace::<wbr /><a href="#a8a9c59c4fc669202671b19a5df454fd0" class="m-dox-self">EnumInANamespace</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="gac29f30d3e17c48ae9313c45384cfb0f0"><div>
+            <h3>
+              enum Namespace::<wbr /><a href="#gac29f30d3e17c48ae9313c45384cfb0f0" class="m-dox-self">EnumInModule</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="a4e54d99b64c66ac62367c340296cf0e6"><div>
+            <h3>
+              enum Namespace::<wbr /><a href="#a4e54d99b64c66ac62367c340296cf0e6" class="m-dox-self">FlagInAGroup</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Typedef documentation</h2>
+          <section class="m-dox-details" id="aafe0a3decaed02dd572ca9c5741e8f0f"><div>
+            <h3>
+              typedef int Namespace::<wbr /><a href="#aafe0a3decaed02dd572ca9c5741e8f0f" class="m-dox-self">IntInANamespace</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="af411f7ca665a2797abbb9246dc8ce66f"><div>
+            <h3>
+              using Namespace::<wbr /><a href="#af411f7ca665a2797abbb9246dc8ce66f" class="m-dox-self">FloatInANamespace</a> = float
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="gaa0873618a2fbb3e8bb4963da4a278092"><div>
+            <h3>
+              typedef int Namespace::<wbr /><a href="#gaa0873618a2fbb3e8bb4963da4a278092" class="m-dox-self">IntInModule</a>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="ga506dd0de38d03423ba42d30f80948580"><div>
+            <h3>
+              using Namespace::<wbr /><a href="#ga506dd0de38d03423ba42d30f80948580" class="m-dox-self">FloatInModule</a> = float
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="a01be7a4b97db30990f9e35a80dfab953"><div>
+            <h3>
+              using Namespace::<wbr /><a href="#a01be7a4b97db30990f9e35a80dfab953" class="m-dox-self">MainInAGroup</a> = void
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Function documentation</h2>
+          <section class="m-dox-details" id="a451d9a4eeb8244db749a8d6d31af0a4e"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">void Namespace::<wbr /></span><span class="m-dox-wrap"><span class="m-dox-wrap-bumper"><a href="#a451d9a4eeb8244db749a8d6d31af0a4e" class="m-dox-self">fooInANamespace</a>(</span><span class="m-dox-wrap">)</span></span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="ga4e08e167e7c84518c1e39e57de78f00d"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">void Namespace::<wbr /></span><span class="m-dox-wrap"><span class="m-dox-wrap-bumper"><a href="#ga4e08e167e7c84518c1e39e57de78f00d" class="m-dox-self">fooInModule</a>(</span><span class="m-dox-wrap">)</span></span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="a34b4421352d415dad9bf0c6a2e4694d4"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">void Namespace::<wbr /></span><span class="m-dox-wrap"><span class="m-dox-wrap-bumper"><a href="#a34b4421352d415dad9bf0c6a2e4694d4" class="m-dox-self">barInAGroup</a>(</span><span class="m-dox-wrap">)</span></span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+        <section>
+          <h2>Variable documentation</h2>
+          <section class="m-dox-details" id="a6165847e2f1c2a0749c225caafe2d9fd"><div>
+            <h3>
+              const int Namespace::<wbr /><a href="#a6165847e2f1c2a0749c225caafe2d9fd" class="m-dox-self">VarInANamespace</a> <span class="m-label m-primary">constexpr</span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="gadf77c8e0e703901b221c9f55b6900617"><div>
+            <h3>
+              const int Namespace::<wbr /><a href="#gadf77c8e0e703901b221c9f55b6900617" class="m-dox-self">VarInModule</a> <span class="m-label m-primary">constexpr</span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+          <section class="m-dox-details" id="addafc81fb6e46828eada927103080acc"><div>
+            <h3>
+              void* Namespace::<wbr /><a href="#addafc81fb6e46828eada927103080acc" class="m-dox-self">variableInAGroup</a> <span class="m-label m-primary">constexpr</span>
+              <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+            </h3>
+            <p><span></span></p>
+          </div></section>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>
diff --git a/doxygen/test/undocumented/structNamespace_1_1ClassInANamespace.html b/doxygen/test/undocumented/structNamespace_1_1ClassInANamespace.html
new file mode 100644 (file)
index 0000000..1a71c90
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Namespace::ClassInANamespace struct | My Project</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
+  <link rel="stylesheet" href="m-dark+doxygen.compiled.css" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+<body>
+<header><nav id="navigation">
+  <div class="m-container">
+    <div class="m-row">
+      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
+      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
+        <a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+          <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+        </svg></a>
+        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
+        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
+      </div>
+      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
+        <div class="m-row">
+          <ol class="m-col-t-6 m-col-m-none">
+            <li><a href="modules.html">Modules</a></li>
+            <li><a href="namespaces.html">Namespaces</a></li>
+          </ol>
+          <ol class="m-col-t-6 m-col-m-none" start="3">
+            <li><a href="annotated.html">Classes</a></li>
+            <li><a href="files.html">Files</a></li>
+            <li class="m-show-m"><a href="#search" class="m-dox-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
+              <path d="m6 0c-3.3144 0-6 2.6856-6 6 0 3.3144 2.6856 6 6 6 1.4858 0 2.8463-0.54083 3.8945-1.4355-0.0164 0.33797 0.14734 0.75854 0.5 1.1504l3.2227 3.7891c0.55185 0.6139 1.4517 0.66544 2.002 0.11524 0.55022-0.55022 0.49866-1.4501-0.11524-2.002l-3.7891-3.2246c-0.39184-0.35266-0.81242-0.51469-1.1504-0.5 0.89472-1.0482 1.4355-2.4088 1.4355-3.8945 0-3.3128-2.6856-5.998-6-5.998zm0 1.5625a4.4375 4.4375 0 0 1 4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375 4.4375 4.4375 4.4375 0 0 1-4.4375-4.4375 4.4375 4.4375 0 0 1 4.4375-4.4375z"/>
+            </svg></a></li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</nav></header>
+<main><article>
+  <div class="m-container m-container-inflatable">
+    <div class="m-row">
+      <div class="m-col-l-10 m-push-l-1">
+        <h1>
+          <span class="m-breadcrumb"><a href="namespaceNamespace.html">Namespace</a>::<wbr/></span>ClassInANamespace <span class="m-thin">struct</span>
+          <div class="m-dox-include m-code m-inverted m-text-right"><span class="cp">#include</span> <a class="cpf" href="File_8h.html">&lt;Directory/File.h&gt;</a></div>
+        </h1>
+        <p><span></span></p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#pub-types">Public types</a></li>
+                <li><a href="#pub-methods">Public functions</a></li>
+                <li><a href="#pub-attribs">Public variables</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="pub-types">
+          <h2><a href="#pub-types">Public types</a></h2>
+          <dl class="m-dox">
+            <dt>
+              class <a href="classNamespace_1_1ClassInANamespace_1_1ClassInAClass.html" class="m-dox">ClassInAClass</a>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#a7109316166bde2795af5ec1a595e38d1" class="m-dox-self" name="a7109316166bde2795af5ec1a595e38d1">EnumInAClass</a> { </span><span class="m-dox-wrap"> }</span>
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#ac0467a0a405a8fcdc37e8e7ea1cdef40" class="m-dox-self" name="ac0467a0a405a8fcdc37e8e7ea1cdef40">IntInAClass</a> = int
+            </dt>
+            <dd><span></span></dd>
+            <dt>
+              using <a href="#a4a1ae978a09a174b2fc3ac1ba9cea2ac" class="m-dox-self" name="a4a1ae978a09a174b2fc3ac1ba9cea2ac">FloatInAClass</a> = float
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="pub-methods">
+          <h2><a href="#pub-methods">Public functions</a></h2>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#a7f5acd1d7e6244b444fa4e3f15430889" class="m-dox-self" name="a7f5acd1d7e6244b444fa4e3f15430889">fooInAClass</a>(</span><span class="m-dox-wrap">)</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+        <section id="pub-attribs">
+          <h2><a href="#pub-attribs">Public variables</a></h2>
+          <dl class="m-dox">
+            <dt>
+              const int <a href="#a3394e3697ec70fe596ca3561f73fdcbd" class="m-dox-self" name="a3394e3697ec70fe596ca3561f73fdcbd">VarInAClass</a> <span class="m-label m-flat m-primary">constexpr</span>
+            </dt>
+            <dd><span></span></dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+<div class="m-dox-search" id="search">
+  <a href="#!" onclick="return hideSearch()"></a>
+  <div class="m-container">
+    <div class="m-row">
+      <div class="m-col-m-8 m-push-m-2">
+        <div class="m-dox-search-header m-text m-small">
+          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
+          <div id="search-symbolcount">&hellip;</div>
+        </div>
+        <div class="m-dox-search-content">
+          <form>
+            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
+          </form>
+          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
+          <div id="search-help" class="m-text m-dim m-text-center">
+            <p class="m-noindent">Search for symbols, directories, files, pages or
+            modules. You can omit any prefix from the symbol or file path; adding a
+            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
+            directory.</p>
+            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
+            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
+            <span class="m-label m-dim">Enter</span> to go.
+            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
+            copy a link to the result using <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
+            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
+          </div>
+          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
+          <ul id="search-results"></ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script src="search.js"></script>
+<script>
+  Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + "searchdata.bin");
+</script>
+</body>
+</html>