chiark / gitweb /
doxygen: extract deprecation info and show it everywhere.
authorVladimír Vondruš <mosra@centrum.cz>
Fri, 2 Feb 2018 23:01:09 +0000 (00:01 +0100)
committerVladimír Vondruš <mosra@centrum.cz>
Sun, 4 Feb 2018 14:02:58 +0000 (15:02 +0100)
 * In symbol/filesystem tree listing
 * In member listing
 * In the search

38 files changed:
doc/doxygen.rst
doxygen/dox2html5.py
doxygen/search.js
doxygen/templates/annotated.html
doxygen/templates/entry-class.html
doxygen/templates/entry-define.html
doxygen/templates/entry-dir.html
doxygen/templates/entry-enum.html
doxygen/templates/entry-file.html
doxygen/templates/entry-func.html
doxygen/templates/entry-module.html
doxygen/templates/entry-namespace.html
doxygen/templates/entry-typedef.html
doxygen/templates/entry-var.html
doxygen/templates/files.html
doxygen/templates/modules.html
doxygen/templates/namespaces.html
doxygen/test/compound_deprecated/DeprecatedFile_8h.html [new file with mode: 0644]
doxygen/test/compound_deprecated/Dir/DeprecatedFile.h [new file with mode: 0644]
doxygen/test/compound_deprecated/Dir/DeprecatedSubdir/File.h [new file with mode: 0644]
doxygen/test/compound_deprecated/Doxyfile [new file with mode: 0644]
doxygen/test/compound_deprecated/annotated.html [new file with mode: 0644]
doxygen/test/compound_deprecated/dir_da5033def2d0db76e9883b31b76b3d0c.html [new file with mode: 0644]
doxygen/test/compound_deprecated/files.html [new file with mode: 0644]
doxygen/test/compound_deprecated/group__group.html [new file with mode: 0644]
doxygen/test/compound_deprecated/modules.html [new file with mode: 0644]
doxygen/test/compound_deprecated/namespaceDeprecatedNamespace.html [new file with mode: 0644]
doxygen/test/compound_deprecated/namespaces.html [new file with mode: 0644]
doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1BaseDeprecatedClass.html [new file with mode: 0644]
doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1DeprecatedClass.html [new file with mode: 0644]
doxygen/test/js-test-data/searchdata.b85
doxygen/test/js-test-data/searchdata.bin
doxygen/test/populate-js-test-data.py
doxygen/test/search/DeprecatedDir/DeprecatedFile.h [new file with mode: 0644]
doxygen/test/search/Doxyfile
doxygen/test/test-search.js
doxygen/test/test_compound.py
doxygen/test/test_search.py

index 5f7dbff1b68a477a9af15a6501911bbe1384721e..5d7fc4aa04fe858ac80a6ad1a8a7a5af92edb375 100644 (file)
@@ -916,6 +916,8 @@ Property                                Description
 :py:`compound.footer_navigation`        Footer navigation of a page. See
                                         `Navigation properties`_ for details.
 :py:`compound.brief`                    Brief description. Can be empty. [1]_
+:py:`compound.is_deprecated`            Whether the compound is deprecated. Not
+                                        set for pages. [7]_
 :py:`compound.description`              Detailed description. Can be empty. [2]_
 :py:`compound.modules`                  List of submodules in this compound.
                                         Set only for modules. See
@@ -1046,6 +1048,7 @@ Property                    Description
 :py:`module.url`            URL of the file containing detailed module docs
 :py:`module.name`           Module name (just the leaf)
 :py:`module.brief`          Brief description. Can be empty. [1]_
+:py:`module.is_deprecated`  Whether the module is deprecated. [7]_
 =========================== ===================================================
 
 `Directory properties`_
@@ -1062,6 +1065,7 @@ Property                    Description
 :py:`dir.url`               URL of the file containing detailed directory docs
 :py:`dir.name`              Directory name (just the leaf)
 :py:`dir.brief`             Brief description. Can be empty. [1]_
+:py:`dir.is_deprecated`     Whether the directory is deprecated. [7]_
 =========================== ===================================================
 
 `File properties`_
@@ -1078,6 +1082,7 @@ Property                    Description
 :py:`file.url`              URL of the file containing detailed file docs
 :py:`file.name`             File name (just the leaf)
 :py:`file.brief`            Brief description. Can be empty. [1]_
+:py:`file.is_deprecated`    Whether the file is deprecated. [7]_
 =========================== ===================================================
 
 `Namespace properties`_
@@ -1088,15 +1093,17 @@ every item has the following properties:
 
 .. class:: m-table m-fullwidth
 
-=========================== ===================================================
-Property                    Description
-=========================== ===================================================
-:py:`namespace.url`         URL of the file containing detailed namespace docs
-:py:`namespace.name`        Namespace name. Fully qualified in case it's in a
-                            file documentation, just the leaf name if in a
-                            namespace documentation.
-:py:`namespace.brief`       Brief description. Can be empty. [1]_
-=========================== ===================================================
+=============================== ===============================================
+Property                        Description
+=============================== ===============================================
+:py:`namespace.url`             URL of the file containing detailed namespace
+                                docs
+:py:`namespace.name`            Namespace name. Fully qualified in case it's in
+                                a file documentation, just the leaf name if in
+                                a namespace documentation.
+:py:`namespace.brief`           Brief description. Can be empty. [1]_
+:py:`namespace.is_deprecated`   Whether the namespace is deprecated. [7]_
+=============================== ===============================================
 
 `Class properties`_
 ```````````````````
@@ -1117,6 +1124,7 @@ Property                    Description
 :py:`class.templates`       Template specification. See `Template properties`_
                             for details.
 :py:`class.brief`           Brief description. Can be empty. [1]_
+:py:`class.is_deprecated`   Whether the class is deprecated. [7]_
 :py:`class.is_protected`    Whether this is a protected base class. Set only
                             for base classes.
 :py:`class.is_virtual`      Whether this is a virtual base class. Set only for
@@ -1142,6 +1150,7 @@ Property                        Description
 :py:`enum.description`          Detailed description. Can be empty. [2]_
 :py:`enum.has_details`          If there is enough content for the full
                                 description block [5]_
+:py:`enum.is_deprecated`        Whether the enum is deprecated. [7]_
 :py:`enum.is_protected`         If the enum is :cpp:`protected`. Set only for
                                 member types.
 :py:`enum.values`               List of enum values
@@ -1158,6 +1167,7 @@ Property                    Description
 :py:`value.id`              Identifier hash [3]_
 :py:`value.name`            Value name [4]_
 :py:`value.initializer`     Value initializer. Can be empty. [1]_
+:py:`value.is_deprecated`   Whether the value is deprecated. [7]_
 :py:`value.description`     Detailed description. Can be empty. [2]_
 =========================== ===================================================
 
@@ -1183,6 +1193,7 @@ Property                    Description
                             :cpp:`using`. . See `Template properties`_ for
                             details.
 :py:`typedef.brief`         Brief description. Can be empty. [1]_
+:py:`typedef.is_deprecated` Whether the typedef is deprecated. [7]_
 :py:`typedef.description`   Detailed description. Can be empty. [2]_
 :py:`typedef.has_details`   If there is enough content for the full description
                             block [4]_
@@ -1229,6 +1240,7 @@ Property                        Description
                                 :cpp:`virtual`\ ity and :cpp:`delete`\ d /
                                 :cpp:`default`\ ed functions is removed from
                                 the suffix and available via other properties.
+:py:`func.is_deprecated`        Whether the function is deprecated. [7]_
 :py:`func.is_protected`         If the function is :cpp:`protected`. Set only
                                 for member functions.
 :py:`func.is_private`           If the function is :cpp:`private`. Set only for
@@ -1284,6 +1296,7 @@ Property                    Description
 :py:`var.description`       Detailed description. Can be empty. [2]_
 :py:`var.has_details`       If there is enough content for the full description
                             block [5]_
+:py:`var.is_deprecated`     Whether the variable is deprecated. [7]_
 :py:`var.is_static`         If the variable is :cpp:`static`. Set only for
                             member variables.
 :py:`var.is_protected`      If the variable is :cpp:`protected`. Set only for
@@ -1310,6 +1323,7 @@ Property                        Description
 :py:`define.return_value`       Return value description. Can be empty.
 :py:`define.brief`              Brief description. Can be empty. [1]_
 :py:`define.description`        Detailed description. Can be empty. [2]_
+:py:`define.is_deprecated`      Whether the define is deprecated. [7]_
 :py:`define.has_details`        If there is enough content for the full
                                 description block [5]_
 =============================== ===============================================
@@ -1397,6 +1411,8 @@ Property                Description
     the brief listing on top of the page to avoid unnecessary repetition.
 .. [6] :py:`i.type` and :py:`param.default` is rendered as HTML and usually
     contains links to related documentation
+.. [7] :py:`i.is_deprecated` is set to :py:`True` if detailed docs of given
+    symbol contain the ``@deprecated`` command and to :py:`False` otherwise
 
 `Navigation page templates`_
 ----------------------------
@@ -1450,6 +1466,7 @@ Property                        Description
 :py:`i.name`                    Name
 :py:`i.url`                     URL of the file with detailed documentation
 :py:`i.brief`                   Brief documentation
+:py:`i.is_deprecated`           Whether the entry is deprecated. [7]_
 :py:`i.has_nestable_children`   If the list has nestable children (i.e., dirs
                                 or namespaces)
 :py:`i.children`                Recursive list of child entries
index d86ae66f1bb9dc9dbaa44efe6569405c6ff61d42..34dafc5e8fcc63a44365bdacc7c0eba03ed46766 100755 (executable)
@@ -131,6 +131,7 @@ class Trie:
 
 class ResultFlag(Flag):
     HAS_SUFFIX = 1 << 0
+    IS_DEPRECATED = 1 << 1
 
     _TYPE = 0xf << 4
     NAMESPACE = 1 << 4
@@ -328,6 +329,7 @@ def parse_desc_internal(state: State, element: ET.Element, immediate_parent: ET.
     out.add_css_class = None
     out.footer_navigation = False
     out.example_navigation = None
+    out.is_deprecated = False
 
     # DOXYGEN <PARA> PATCHING 1/4
     #
@@ -598,9 +600,10 @@ def parse_desc_internal(state: State, element: ET.Element, immediate_parent: ET.
             # resetting here explicitly.
             add_css_class = parsed.add_css_class
 
-            # Bubble up also footer / example navigation
+            # Bubble up also footer / example navigation, deprecation flag
             if parsed.footer_navigation: out.footer_navigation = True
             if parsed.example_navigation: out.example_navigation = parsed.example_navigation
+            if parsed.is_deprecated: out.is_deprecated = True
 
             # Assert we didn't miss anything important
             assert not parsed.section
@@ -718,6 +721,7 @@ def parse_desc_internal(state: State, element: ET.Element, immediate_parent: ET.
             file = match.group(1)
             if file.startswith(('deprecated', 'bug')):
                 color = 'm-danger'
+                out.is_deprecated = True
             elif file.startswith('todo'):
                 color = 'm-dim'
             else:
@@ -1069,13 +1073,28 @@ def parse_desc(state: State, element: ET.Element) -> str:
     assert not parsed.section # might be problematic
     return parsed.parsed
 
+def parse_enum_desc(state: State, element: ET.Element) -> str:
+    # Verify that we didn't ignore any important info by accident
+    parsed = parse_desc_internal(state, element.find('detaileddescription'))
+    parsed.parsed += parse_desc(state, element.find('inbodydescription'))
+    assert not parsed.templates and not parsed.params and not parsed.return_value
+    assert not parsed.section # might be problematic
+    return (parsed.parsed, parsed.is_deprecated)
+
+def parse_enum_value_desc(state: State, element: ET.Element) -> str:
+    # Verify that we didn't ignore any important info by accident
+    parsed = parse_desc_internal(state, element.find('detaileddescription'))
+    assert not parsed.templates and not parsed.params and not parsed.return_value
+    assert not parsed.section # might be problematic
+    return (parsed.parsed, parsed.is_deprecated)
+
 def parse_var_desc(state: State, element: ET.Element) -> str:
     # Verify that we didn't ignore any important info by accident
     parsed = parse_desc_internal(state, element.find('detaileddescription'))
     parsed.parsed += parse_desc(state, element.find('inbodydescription'))
     assert not parsed.templates and not parsed.params and not parsed.return_value
     assert not parsed.section # might be problematic
-    return parsed.parsed
+    return (parsed.parsed, parsed.is_deprecated)
 
 def parse_toplevel_desc(state: State, element: ET.Element):
     # Verify that we didn't ignore any important info by accident
@@ -1083,7 +1102,7 @@ def parse_toplevel_desc(state: State, element: ET.Element):
     assert not parsed.return_value
     if parsed.params:
         logging.warning("{}: use @tparam instead of @param for documenting class templates, @param is ignored".format(state.current))
-    return (parsed.parsed, parsed.templates, parsed.section[2] if parsed.section else '', parsed.footer_navigation, parsed.example_navigation)
+    return (parsed.parsed, parsed.templates, parsed.section[2] if parsed.section else '', parsed.footer_navigation, parsed.example_navigation, parsed.is_deprecated)
 
 def parse_typedef_desc(state: State, element: ET.Element):
     # Verify that we didn't ignore any important info by accident
@@ -1091,14 +1110,14 @@ def parse_typedef_desc(state: State, element: ET.Element):
     parsed.parsed += parse_desc(state, element.find('inbodydescription'))
     assert not parsed.params and not parsed.return_value
     assert not parsed.section # might be problematic
-    return (parsed.parsed, parsed.templates)
+    return (parsed.parsed, parsed.templates, parsed.is_deprecated)
 
 def parse_func_desc(state: State, element: ET.Element):
     # Verify that we didn't ignore any important info by accident
     parsed = parse_desc_internal(state, element.find('detaileddescription'))
     parsed.parsed += parse_desc(state, element.find('inbodydescription'))
     assert not parsed.section # might be problematic
-    return (parsed.parsed, parsed.templates, parsed.params, parsed.return_value)
+    return (parsed.parsed, parsed.templates, parsed.params, parsed.return_value, parsed.is_deprecated)
 
 def parse_define_desc(state: State, element: ET.Element):
     # Verify that we didn't ignore any important info by accident
@@ -1106,7 +1125,7 @@ def parse_define_desc(state: State, element: ET.Element):
     parsed.parsed += parse_desc(state, element.find('inbodydescription'))
     assert not parsed.templates
     assert not parsed.section # might be problematic
-    return (parsed.parsed, parsed.params, parsed.return_value)
+    return (parsed.parsed, parsed.params, parsed.return_value, parsed.is_deprecated)
 
 def parse_inline_desc(state: State, element: ET.Element) -> str:
     if element is None: return ''
@@ -1126,7 +1145,7 @@ def parse_enum(state: State, element: ET.Element):
     enum.name = element.find('name').text
     if enum.name.startswith('@'): enum.name = '(anonymous)'
     enum.brief = parse_desc(state, element.find('briefdescription'))
-    enum.description = parse_desc(state, element.find('detaileddescription')) + parse_desc(state, element.find('inbodydescription'))
+    enum.description, enum.is_deprecated = parse_enum_desc(state, element)
     enum.is_protected = element.attrib['prot'] == 'protected'
     enum.is_strong = False
     if 'strong' in element.attrib:
@@ -1143,12 +1162,12 @@ def parse_enum(state: State, element: ET.Element):
         value.initializer = html.escape(enumvalue.findtext('initializer', ''))
         if ''.join(enumvalue.find('briefdescription').itertext()).strip():
             logging.warning("{}: ignoring brief description of enum value {}::{}".format(state.current, enum.name, value.name))
-        value.description = parse_desc(state, enumvalue.find('detaileddescription'))
+        value.description, value.is_deprecated = parse_enum_value_desc(state, enumvalue)
         if value.description:
             enum.has_value_details = True
             if not state.doxyfile['M_SEARCH_DISABLED']:
                 result = Empty()
-                result.flags = ResultFlag.ENUM_VALUE
+                result.flags = ResultFlag.ENUM_VALUE|(ResultFlag.IS_DEPRECATED if value.is_deprecated else ResultFlag(0))
                 result.url = state.current_url + '#' + value.id
                 result.prefix = state.current_prefix + [enum.name]
                 result.name = value.name
@@ -1159,7 +1178,7 @@ def parse_enum(state: State, element: ET.Element):
     if enum.brief or enum.has_details or enum.has_value_details:
         if not state.doxyfile['M_SEARCH_DISABLED']:
             result = Empty()
-            result.flags = ResultFlag.ENUM
+            result.flags = ResultFlag.ENUM|(ResultFlag.IS_DEPRECATED if enum.is_deprecated else ResultFlag(0))
             result.url = state.current_url + '#' + enum.id
             result.prefix = state.current_prefix
             result.name = enum.name
@@ -1214,14 +1233,14 @@ def parse_typedef(state: State, element: ET.Element):
     typedef.args = parse_type(state, element.find('argsstring'))
     typedef.name = element.find('name').text
     typedef.brief = parse_desc(state, element.find('briefdescription'))
-    typedef.description, templates = parse_typedef_desc(state, element)
+    typedef.description, templates, typedef.is_deprecated = parse_typedef_desc(state, element)
     typedef.is_protected = element.attrib['prot'] == 'protected'
     typedef.has_template_details, typedef.templates = parse_template_params(state, element.find('templateparamlist'), templates)
 
     typedef.has_details = typedef.description or typedef.has_template_details
     if typedef.brief or typedef.has_details:
         result = Empty()
-        result.flags = ResultFlag.TYPEDEF
+        result.flags = ResultFlag.TYPEDEF|(ResultFlag.IS_DEPRECATED if typedef.is_deprecated else ResultFlag(0))
         result.url = state.current_url + '#' + typedef.id
         result.prefix = state.current_prefix
         result.name = typedef.name
@@ -1237,7 +1256,7 @@ def parse_func(state: State, element: ET.Element):
     func.type = parse_type(state, element.find('type'))
     func.name = fix_type_spacing(html.escape(element.find('name').text))
     func.brief = parse_desc(state, element.find('briefdescription'))
-    func.description, templates, params, func.return_value = parse_func_desc(state, element)
+    func.description, templates, params, func.return_value, func.is_deprecated = parse_func_desc(state, element)
 
     # Extract function signature to prefix, suffix and various flags. Important
     # things affecting caller such as static or const (and rvalue overloads)
@@ -1324,7 +1343,7 @@ def parse_func(state: State, element: ET.Element):
     if func.brief or func.has_details:
         if not state.doxyfile['M_SEARCH_DISABLED']:
             result = Empty()
-            result.flags = ResultFlag.FUNC
+            result.flags = ResultFlag.FUNC|(ResultFlag.IS_DEPRECATED if func.is_deprecated else ResultFlag(0))
             result.url = state.current_url + '#' + func.id
             result.prefix = state.current_prefix
             result.name = func.name
@@ -1350,13 +1369,13 @@ def parse_var(state: State, element: ET.Element):
     var.is_private = element.attrib['prot'] == 'private'
     var.name = element.find('name').text
     var.brief = parse_desc(state, element.find('briefdescription'))
-    var.description = parse_var_desc(state, element)
+    var.description, var.is_deprecated = parse_var_desc(state, element)
 
     var.has_details = not not var.description
     if var.brief or var.has_details:
         if not state.doxyfile['M_SEARCH_DISABLED']:
             result = Empty()
-            result.flags = ResultFlag.VAR
+            result.flags = ResultFlag.VAR|(ResultFlag.IS_DEPRECATED if var.is_deprecated else ResultFlag(0))
             result.url = state.current_url + '#' + var.id
             result.prefix = state.current_prefix
             result.name = var.name
@@ -1371,7 +1390,7 @@ def parse_define(state: State, element: ET.Element):
     define.id = extract_id(element)
     define.name = element.find('name').text
     define.brief = parse_desc(state, element.find('briefdescription'))
-    define.description, params, define.return_value = parse_define_desc(state, element)
+    define.description, params, define.return_value, define.is_deprecated = parse_define_desc(state, element)
 
     define.has_param_details = False
     define.params = None
@@ -1394,7 +1413,7 @@ def parse_define(state: State, element: ET.Element):
     if define.brief or define.has_details:
         if not state.doxyfile['M_SEARCH_DISABLED']:
             result = Empty()
-            result.flags = ResultFlag.DEFINE
+            result.flags = ResultFlag.DEFINE|(ResultFlag.IS_DEPRECATED if define.is_deprecated else ResultFlag(0))
             result.url = state.current_url + '#' + define.id
             result.prefix = []
             result.name = define.name
@@ -1446,6 +1465,15 @@ def extract_metadata(state: State, xml):
     compound.children = []
     compound.parent = None # is filled in by postprocess_state()
 
+    compound.is_deprecated = False
+    for i in compounddef.find('detaileddescription').findall('.//xrefsect'):
+        id = i.attrib['id']
+        match = xref_id_rx.match(id)
+        file = match.group(1)
+        if file.startswith('deprecated'):
+            compound.is_deprecated = True
+            break
+
     if compound.kind in ['class', 'struct', 'union']:
         # Fix type spacing
         compound.name = fix_type_spacing(compound.name)
@@ -1587,7 +1615,7 @@ def _build_search_data(state: State, prefix, id: str, trie: Trie, map: ResultMap
     # Otherwise add it multiple times with all possible prefixes
     else:
         # TODO: escape elsewhere so i don't have to unescape here
-        index = map.add(html.unescape(result_joiner.join(prefixed_name)), compound.url, flags=kind)
+        index = map.add(html.unescape(result_joiner.join(prefixed_name)), compound.url, flags=kind|(ResultFlag.IS_DEPRECATED if compound.is_deprecated else ResultFlag(0)))
         for i in range(len(prefixed_name)):
             lookahead_barriers = []
             name = ''
@@ -1693,7 +1721,7 @@ def parse_xml(state: State, xml: str):
     compound.has_template_details = False
     compound.templates = None
     compound.brief = parse_desc(state, compounddef.find('briefdescription'))
-    compound.description, templates, compound.sections, footer_navigation, example_navigation = parse_toplevel_desc(state, compounddef.find('detaileddescription'))
+    compound.description, templates, compound.sections, footer_navigation, example_navigation, compound.is_deprecated = parse_toplevel_desc(state, compounddef.find('detaileddescription'))
     compound.example_navigation = None
     compound.footer_navigation = None
     compound.modules = []
@@ -1804,6 +1832,7 @@ def parse_xml(state: State, xml: str):
                 f.url = file.url
                 f.name = file.leaf_name
                 f.brief = file.brief
+                f.is_deprecated = file.is_deprecated
 
                 if compounddef_child.tag == 'innerdir':
                     compound.dirs += [f]
@@ -1824,6 +1853,7 @@ def parse_xml(state: State, xml: str):
                     namespace.url = symbol.url
                     namespace.name = symbol.leaf_name if compound.kind == 'namespace' else symbol.name
                     namespace.brief = symbol.brief
+                    namespace.is_deprecated = symbol.is_deprecated
                     compound.namespaces += [namespace]
 
                 else:
@@ -1834,6 +1864,7 @@ def parse_xml(state: State, xml: str):
                     class_.url = symbol.url
                     class_.name = symbol.leaf_name if compound.kind in ['namespace', 'class', 'struct', 'union'] else symbol.name
                     class_.brief = symbol.brief
+                    class_.is_deprecated = symbol.is_deprecated
                     class_.templates = symbol.templates
 
                     # Put classes into the public/protected section for
@@ -1865,6 +1896,7 @@ def parse_xml(state: State, xml: str):
                     class_.name = symbol.leaf_name
                     class_.brief = symbol.brief
                     class_.templates = symbol.templates
+                    class_.is_deprecated = symbol.is_deprecated
                     class_.is_protected = compounddef_child.attrib['prot'] == 'protected'
                     class_.is_virtual = compounddef_child.attrib['virt'] == 'virtual'
 
@@ -1887,6 +1919,7 @@ def parse_xml(state: State, xml: str):
                     class_.name = symbol.leaf_name
                     class_.brief = symbol.brief
                     class_.templates = symbol.templates
+                    class_.is_deprecated = symbol.is_deprecated
 
                     compound.derived_classes += [class_]
 
@@ -1899,6 +1932,7 @@ def parse_xml(state: State, xml: str):
             g.url = group.url
             g.name = group.leaf_name
             g.brief = group.brief
+            g.is_deprecated = group.is_deprecated
             compound.modules += [g]
 
         # Other, grouped in sections
@@ -2250,6 +2284,7 @@ def parse_index_xml(state: State, xml):
         entry.url = compound.url
         entry.brief = compound.brief
         entry.children = []
+        entry.is_deprecated = compound.is_deprecated
         entry.has_nestable_children = False
 
         # If a top-level thing, put it directly into the list
index e0b6dac15fa4a8b8fb2b89ece60c78af155ebeed..69aa469c7aa0c8082321bd1b50c146367fb56de3 100644 (file)
@@ -391,7 +391,7 @@ var Search = {
                         break;
                 }
 
-                list += this.fromUtf8('<li' + (i ? '' : ' id="search-current"') + '><a href="' + results[i].url + '" onmouseover="selectResult(event)"><div class="m-label m-flat ' + color + '">' + type + '</div><div><span class="m-text m-dim">' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - value.length - results[i].suffixLength)) + '</span><span class="m-dox-search-typed">' + this.escapeForRtl(results[i].name.substr(results[i].name.length - value.length - results[i].suffixLength, value.length)) + '</span>' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + '</div></a></li>');
+                list += this.fromUtf8('<li' + (i ? '' : ' id="search-current"') + '><a href="' + results[i].url + '" onmouseover="selectResult(event)"><div class="m-label m-flat ' + color + '">' + type + '</div>' + (results[i].flags & 2 ? '<div class="m-label m-danger">deprecated</div>' : '') + '<div><span class="m-text m-dim">' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - value.length - results[i].suffixLength)) + '</span><span class="m-dox-search-typed">' + this.escapeForRtl(results[i].name.substr(results[i].name.length - value.length - results[i].suffixLength, value.length)) + '</span>' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + '</div></a></li>');
             }
             document.getElementById('search-results').innerHTML = list;
             document.getElementById('search-current').scrollIntoView(true);
index f6b23278becd2c9450fb507cb6a749f8304fb2a3..f2b83fe525bc2d0ee4fc1f6f91190a8117caa919 100644 (file)
@@ -7,13 +7,15 @@
           {% for i in index.symbols recursive %}
           {% if i.children %}
           <li class="m-dox-collapsible{% if loop.depth > M_CLASS_TREE_EXPAND_LEVELS or (i.kind != 'namespace' and not M_EXPAND_INNER_TYPES) %} collapsed{% endif %}">
-            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>
+            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}
+
+            {# the above is here to preserve the newline #}
             <ul class="m-dox">
 {{ loop(i.children)|indent(4, true) }}
             </ul>
           </li>
           {% else %}
-          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span></li>
+          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</li>
           {% endif %}
           {% endfor %}
         </ul>
index bd7d1c9925a0f9511e1477faacb296eb2bbdc63d..0cb8dee07e0ab10333c6eec25ed0617e6d023144 100644 (file)
@@ -3,7 +3,7 @@
               {% set j = joiner(', ') %}
               <div class="m-dox-template">template&lt;{% for t in class.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif %}{% endfor %}&gt;</div>
               {% endif %}
-              {{ class.kind }} <a href="{{ class.url }}" class="m-dox">{{ class.name }}</a>{% if class.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if class.is_virtual %} <span class="m-label m-flat m-warning">virtual</span>{% endif %}
+              {{ class.kind }} <a href="{{ class.url }}" class="m-dox">{{ class.name }}</a>{% if class.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if class.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if class.is_virtual %} <span class="m-label m-flat m-warning">virtual</span>{% endif %}
 
               {# the empty line is above to fix spacing #}
             </dt>
index 6c3775e27f16a128d03594d4ba5f47d2f745dbc0..91e4318666b5f105f27b065b9cd93eb90d9559ea 100644 (file)
@@ -1,5 +1,5 @@
             <dt>
               {% set j = joiner(',\n              ') %}
-              <span class="m-dox-wrap-bumper">#define <a href="#{{ define.id }}" {% if define.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ define.id }}"{% endif %}>{{ define.name }}</a>{% if define.params != None %}(</span><span class="m-dox-wrap">{% for param in define.params %}{{ j() }}{{ param[0] }}{% endfor %}){% endif %}</span>
+              <span class="m-dox-wrap-bumper">#define <a href="#{{ define.id }}" {% if define.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ define.id }}"{% endif %}>{{ define.name }}</a>{% if define.params != None %}(</span><span class="m-dox-wrap">{% for param in define.params %}{{ j() }}{{ param[0] }}{% endfor %}){% endif %}{% if define.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</span>
             </dt>
             <dd>{{ define.brief }}</dd>
index 32322321842cb354f36762c234fb8c7fd36d5637..e86271f68552996fad83e5cc30901649c1effa36 100644 (file)
@@ -1,2 +1,2 @@
-            <dt>directory <a href="{{ dir.url }}" class="m-dox">{{ dir.name }}</a>/</dt>
+            <dt>directory <a href="{{ dir.url }}" class="m-dox">{{ dir.name }}</a>/{% if dir.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</dt>
             <dd>{{ dir.brief }}</dd>
index 60fa44bfe1f60d7846333a13062a03f4e9fc3f31..61a078eb45018ecff34d15bf9b0ef7ba0ff651ea 100644 (file)
@@ -1,5 +1,5 @@
             <dt>
               {% set j = joiner(',\n              ') %}
-              <span class="m-dox-wrap-bumper">enum {% if enum.is_strong %}class {% endif %}<a href="#{{ enum.id }}" {% if enum.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ enum.id }}"{% endif %}>{{ enum.name }}</a>{% if enum.type %}: {{ enum.type }}{% endif %} { </span><span class="m-dox-wrap">{% for value in enum.values %}{{ j() }}<a href="#{{ value.id }}" class="m-dox">{{ value.name }}</a>{% if value.initializer %} {{ value.initializer }}{% endif %}{% endfor %} }{% if mark_nonpublic and enum.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}</span>
+              <span class="m-dox-wrap-bumper">enum {% if enum.is_strong %}class {% endif %}<a href="#{{ enum.id }}" {% if enum.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ enum.id }}"{% endif %}>{{ enum.name }}</a>{% if enum.type %}: {{ enum.type }}{% endif %} { </span><span class="m-dox-wrap">{% for value in enum.values %}{{ j() }}<a href="#{{ value.id }}" class="m-dox">{{ value.name }}</a>{% if value.initializer %} {{ value.initializer }}{% endif %}{% if value.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% endfor %} }{% if enum.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if mark_nonpublic and enum.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}</span>
             </dt>
             <dd>{{ enum.brief }}</dd>
index 4dfdb9187e6d9d8cd21abe2214c58cd8021a9fe9..6f91fe6ee7b8dd8f199067a92235832edd9369bf 100644 (file)
@@ -1,2 +1,2 @@
-            <dt>file <a href="{{ file.url }}" class="m-dox">{{ file.name }}</a></dt>
+            <dt>file <a href="{{ file.url }}" class="m-dox">{{ file.name }}</a>{% if file.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</dt>
             <dd>{{ file.brief }}</dd>
index 39c6b351ea68f306e119acb01f841861594cb45f..a5fc72d9513e753995cf76155070167c0c85c0c0 100644 (file)
@@ -4,6 +4,6 @@
               <div class="m-dox-template">template&lt;{% for t in func.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif%}{% endfor %}&gt;</div>
               {% endif %}
               {% set j = joiner(',\n              ') %}
-              <span class="m-dox-wrap-bumper">{{ func.prefix }}{% if func.type == 'void' %}void {% elif func.type %}auto {% endif %}<a href="#{{ func.id }}" {% if func.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ func.id }}"{% endif %}>{{ func.name }}</a>(</span><span class="m-dox-wrap">{% for param in func.params %}{{ j() }}{{ param.type_name }}{% if param.default %} = {{ param.default }}{% endif %}{% endfor %}){{ func.suffix }}{% if func.type and func.type != 'void' %} -&gt; {{ func.type }}{% endif %}{% if not func.type or mark_nonpublic %}{% if func.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% elif func.is_private %} <span class="m-label m-flat m-danger">private</span>{% endif %}{% endif %}{% if func.is_defaulted %} <span class="m-label m-flat m-info">defaulted</span>{% endif %}{% if func.is_deleted %} <span class="m-label m-flat m-danger">deleted</span>{% endif %}{% if func.is_explicit %} <span class="m-label m-flat m-info">explicit</span> {% endif %}{% if func.is_pure_virtual %} <span class="m-label m-flat m-warning">pure virtual</span>{% elif func.is_virtual %} <span class="m-label m-flat m-warning">virtual</span>{% endif %}{% if func.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}{% if func.is_noexcept %} <span class="m-label m-flat m-success">noexcept</span>{% endif %}</span>
+              <span class="m-dox-wrap-bumper">{{ func.prefix }}{% if func.type == 'void' %}void {% elif func.type %}auto {% endif %}<a href="#{{ func.id }}" {% if func.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ func.id }}"{% endif %}>{{ func.name }}</a>(</span><span class="m-dox-wrap">{% for param in func.params %}{{ j() }}{{ param.type_name }}{% if param.default %} = {{ param.default }}{% endif %}{% endfor %}){{ func.suffix }}{% if func.type and func.type != 'void' %} -&gt; {{ func.type }}{% endif %}{% if func.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if not func.type or mark_nonpublic %}{% if func.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% elif func.is_private %} <span class="m-label m-flat m-danger">private</span>{% endif %}{% endif %}{% if func.is_defaulted %} <span class="m-label m-flat m-info">defaulted</span>{% endif %}{% if func.is_deleted %} <span class="m-label m-flat m-danger">deleted</span>{% endif %}{% if func.is_explicit %} <span class="m-label m-flat m-info">explicit</span> {% endif %}{% if func.is_pure_virtual %} <span class="m-label m-flat m-warning">pure virtual</span>{% elif func.is_virtual %} <span class="m-label m-flat m-warning">virtual</span>{% endif %}{% if func.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}{% if func.is_noexcept %} <span class="m-label m-flat m-success">noexcept</span>{% endif %}</span>
             </dt>
             <dd>{{ func.brief }}</dd>
index aac45ea8fff344c4b2279a2cc8bd2821ff8610c5..489918a1fa8a05f33b84924b3a5878b731e2ef16 100644 (file)
@@ -1,2 +1,2 @@
-            <dt>module <a href="{{ module.url }}" class="m-dox">{{ module.name }}</a></dt>
+            <dt>module <a href="{{ module.url }}" class="m-dox">{{ module.name }}</a>{% if module.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</dt>
             <dd>{{ module.brief }}</dd>
index eaae64aec88660be39bc5146fac4a250ba64a268..f0a10359d0d1b3a5344fa650d69a04153ff8df2f 100644 (file)
@@ -1,2 +1,2 @@
-            <dt>namespace <a href="{{ namespace.url }}" class="m-dox">{{ namespace.name }}</a></dt>
+            <dt>namespace <a href="{{ namespace.url }}" class="m-dox">{{ namespace.name }}</a>{% if namespace.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</dt>
             <dd>{{ namespace.brief }}</dd>
index 03b99db878af20a9ec25729f8b25feb22a5eb2c3..f370c1ab3bf5bbfce533d1ec83fcd059ba2dca73 100644 (file)
@@ -3,7 +3,7 @@
               {% set j = joiner(', ') %}
               <div class="m-dox-template">template&lt;{% for t in typedef.templates %}{{ j() }}{{ t.type }}{% if t.name %} {{ t.name }}{% endif %}{% if t.default %} = {{ t.default }}{% endif%}{% endfor %}&gt;</div>
               {% endif %}
-              using <a href="#{{ typedef.id }}" {% if typedef.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ typedef.id }}"{% endif %}>{{ typedef.name }}</a> = {{ typedef.type }}{{ typedef.args }}{% if mark_nonpublic and typedef.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}
+              using <a href="#{{ typedef.id }}" {% if typedef.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ typedef.id }}"{% endif %}>{{ typedef.name }}</a> = {{ typedef.type }}{{ typedef.args }}{% if typedef.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if mark_nonpublic and typedef.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}
               {# This empty line needs to be there otherwise it's eaten #}
 
             </dt>
index 0cb595058bbfaf619a9d10d75e428fbed56bc7df..50fb95ef5d655df36e4fcbd3224c05895cdba93c 100644 (file)
@@ -1,2 +1,2 @@
-            <dt>{% if var.is_static %}static {% endif %}{{ var.type }} <a href="#{{ var.id }}" {% if var.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ var.id }}"{% endif %}>{{ var.name }}</a>{% if mark_nonpublic and var.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if var.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}</dt>
+            <dt>{% if var.is_static %}static {% endif %}{{ var.type }} <a href="#{{ var.id }}" {% if var.has_details %}class="m-dox"{% else %}class="m-dox-self" name="{{ var.id }}"{% endif %}>{{ var.name }}</a>{% if var.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}{% if mark_nonpublic and var.is_protected %} <span class="m-label m-flat m-warning">protected</span>{% endif %}{% if var.is_constexpr %} <span class="m-label m-flat m-primary">constexpr</span>{% endif %}</dt>
             <dd>{{ var.brief }}</dd>
index 0f1b98b12fb9ffadc73234a90957adb4907a7679..602cc8c6a4936fbc3d6f2d198ccd1ea82b99c6da 100644 (file)
@@ -7,13 +7,15 @@
           {% for i in index.files recursive %}
           {% if i.children %}
           <li class="m-dox-collapsible{% if loop.depth > M_FILE_TREE_EXPAND_LEVELS %} collapsed{% endif %}">
-            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>
+            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}
+
+            {# the above is here to preserve the newline #}
             <ul class="m-dox">
 {{ loop(i.children)|indent(4, true) }}
             </ul>
           </li>
           {% else %}
-          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span></li>
+          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</li>
           {% endif %}
           {% endfor %}
         </ul>
index 5cb48e951017d23948c4b5a1751be15d249c54c6..c43d0a5663e4f86ec9d788ab4e27f07cdb9a697f 100644 (file)
@@ -7,13 +7,15 @@
           {% for i in index.modules recursive %}
           {% if i.has_nestable_children %}
           <li class="m-dox-collapsible">
-            <a href="#" onclick="return toggle(this)">module</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>
+            <a href="#" onclick="return toggle(this)">module</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}
+
+            {# the above is here to preserve the newline #}
             <ul class="m-dox">
 {{ loop(i.children)|indent(4, true) }}
             </ul>
           </li>
           {% else %}
-          <li>module <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span></li>
+          <li>module <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</li>
           {% endif %}
           {% endfor %}
         </ul>
index 2f1af35dd4ad3e8230b62c322fd287cf0b9a5143..70b2bc8ffdace331cc5b9105bc217d576a78c626 100644 (file)
@@ -7,13 +7,15 @@
           {% for i in index.symbols|selectattr('kind', 'equalto', 'namespace') recursive %}
           {% if i.has_nestable_children %}
           <li class="m-dox-collapsible">
-            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>
+            <a href="#" onclick="return toggle(this)">{{ i.kind }}</a> <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}
+
+            {# the above is here to preserve the newline #}
             <ul class="m-dox">
 {{ loop(i.children|selectattr('kind', 'equalto', 'namespace'))|indent(4, true) }}
             </ul>
           </li>
           {% else %}
-          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span></li>
+          <li>{{ i.kind }} <a href="{{ i.url }}" class="m-dox">{{ i.name }}</a> <span class="m-dox">{{ i.brief }}</span>{% if i.is_deprecated %} <span class="m-label m-danger">deprecated</span>{% endif %}</li>
           {% endif %}
           {% endfor %}
         </ul>
diff --git a/doxygen/test/compound_deprecated/DeprecatedFile_8h.html b/doxygen/test/compound_deprecated/DeprecatedFile_8h.html
new file mode 100644 (file)
index 0000000..3bb767b
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Dir/DeprecatedFile.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>
+  </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_da5033def2d0db76e9883b31b76b3d0c.html">Dir</a>/</span>DeprecatedFile.h <span class="m-thin">file</span>
+        </h1>
+        <p>A file.</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="#defines">Defines</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000002" class="m-dox">Deprecated</a></h4><p>This file is deprecated.</p></aside>
+        <section id="namespaces">
+          <h2><a href="#namespaces">Namespaces</a></h3>
+          <dl class="m-dox">
+            <dt>namespace <a href="namespaceDeprecatedNamespace.html" class="m-dox">DeprecatedNamespace</a> <span class="m-label m-danger">deprecated</span></dt>
+            <dd>A namespace.</dd>
+          </dl>
+        </section>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h3>
+          <dl class="m-dox">
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1BaseDeprecatedClass.html" class="m-dox">DeprecatedNamespace::BaseDeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A base class.</dd>
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedClass.html" class="m-dox">DeprecatedNamespace::DeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A class.</dd>
+            <dt>
+              union <a href="unionDeprecatedNamespace_1_1DeprecatedUnion.html" class="m-dox">DeprecatedNamespace::DeprecatedUnion</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>An union.</dd>
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedStruct.html" class="m-dox">DeprecatedNamespace::DeprecatedStruct</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A struct.</dd>
+          </dl>
+        </section>
+        <section id="define-members">
+          <h2><a href="#define-members">Defines</a></h3>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">#define <a href="#a7f8376730349fef9ff7d103b0245a13e" class="m-dox">DEPRECATED_MACRO</a>(</span><span class="m-dox-wrap">a,
+              b,
+              c) <span class="m-label m-danger">deprecated</span></span>
+            </dt>
+            <dd>A macro.</dd>
+          </dl>
+        </section>
+        <section>
+          <h2>Define documentation</h2>
+          <section class="m-dox-details" id="a7f8376730349fef9ff7d103b0245a13e"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">#define <a href="#a7f8376730349fef9ff7d103b0245a13e" class="m-dox-self">DEPRECATED_MACRO</a>(</span><span class="m-dox-wrap">a,
+              b,
+              c)</span>
+            </h3>
+            <p>A macro.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000004" class="m-dox">Deprecated</a></h4><p>This macro is deprecated</p></aside>
+          </div></section>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
\ No newline at end of file
diff --git a/doxygen/test/compound_deprecated/Dir/DeprecatedFile.h b/doxygen/test/compound_deprecated/Dir/DeprecatedFile.h
new file mode 100644 (file)
index 0000000..a95626f
--- /dev/null
@@ -0,0 +1,98 @@
+/** @dir Dir
+ * @brief A directory
+ */
+
+/** @dir DeprecatedSubdir
+ * @brief A directory
+ * @deprecated This dir is deprecated.
+ */
+
+/** @file
+ * @brief A file
+ * @deprecated This file is deprecated.
+ */
+
+/**
+@brief A namespace
+@deprecated This namespace is deprecated.
+*/
+namespace DeprecatedNamespace {
+
+/**
+@brief A base class
+@deprecated This class is deprecated.
+*/
+struct BaseDeprecatedClass {};
+
+/**
+@brief A class
+@deprecated This class is deprecated.
+*/
+struct DeprecatedClass: BaseDeprecatedClass {};
+
+/**
+@brief A function
+@deprecated This function is deprecated.
+*/
+void deprecatedFoo(int a, bool b, double c);
+
+/**
+@brief A variable
+@deprecated This variable is deprecated.
+*/
+constexpr int DeprecatedVariable = 5;
+
+/**
+@brief A typedef
+@deprecated This typedef is deprecated.
+*/
+typedef int DeprecatedTypedef;
+
+/**
+@brief An enum
+@deprecated This enum is deprecated.
+*/
+enum DeprecatedEnum {
+    /** Enum value */
+    Value = 15
+};
+
+/** @brief An enum */
+enum Enum {
+    /**
+     * Enum value
+     * @deprecated This enum is deprecated.
+     */
+    DeprecatedValue = 15
+};
+
+/** @defgroup group A group
+ * @{
+ */
+
+/**
+@brief An union
+@deprecated This union is deprecated.
+*/
+union DeprecatedUnion {};
+
+/**
+@brief A struct
+@deprecated This struct is deprecated.
+*/
+struct DeprecatedStruct {};
+
+/*@}*/
+
+/** @defgroup deprecated-group A group
+ * @ingroup group
+ * @deprecated This group is deprecated.
+ */
+
+}
+
+/**
+@brief A macro
+@deprecated This macro is deprecated
+*/
+#define DEPRECATED_MACRO(a, b, c)
diff --git a/doxygen/test/compound_deprecated/Dir/DeprecatedSubdir/File.h b/doxygen/test/compound_deprecated/Dir/DeprecatedSubdir/File.h
new file mode 100644 (file)
index 0000000..84b6920
--- /dev/null
@@ -0,0 +1,3 @@
+/** @file
+ * @brief A file
+ */
diff --git a/doxygen/test/compound_deprecated/Doxyfile b/doxygen/test/compound_deprecated/Doxyfile
new file mode 100644 (file)
index 0000000..64cd8d0
--- /dev/null
@@ -0,0 +1,14 @@
+INPUT                   = Dir
+RECURSIVE               = YES
+AUTOLINK_SUPPORT        = NO
+QUIET                   = YES
+GENERATE_HTML           = NO
+GENERATE_LATEX          = NO
+GENERATE_XML            = YES
+XML_PROGRAMLISTING      = NO
+
+M_PAGE_FINE_PRINT       =
+M_THEME_COLOR           =
+M_LINKS_NAVBAR1         =
+M_LINKS_NAVBAR2         =
+M_SEARCH_DISABLED       = YES
diff --git a/doxygen/test/compound_deprecated/annotated.html b/doxygen/test/compound_deprecated/annotated.html
new file mode 100644 (file)
index 0000000..d4a13d7
--- /dev/null
@@ -0,0 +1,54 @@
+<!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>
+  </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="namespaceDeprecatedNamespace.html" class="m-dox">DeprecatedNamespace</a> <span class="m-dox">A namespace.</span> <span class="m-label m-danger">deprecated</span>
+            <ul class="m-dox">
+              <li>struct <a href="structDeprecatedNamespace_1_1BaseDeprecatedClass.html" class="m-dox">BaseDeprecatedClass</a> <span class="m-dox">A base class.</span> <span class="m-label m-danger">deprecated</span></li>
+              <li>struct <a href="structDeprecatedNamespace_1_1DeprecatedClass.html" class="m-dox">DeprecatedClass</a> <span class="m-dox">A class.</span> <span class="m-label m-danger">deprecated</span></li>
+              <li>struct <a href="structDeprecatedNamespace_1_1DeprecatedStruct.html" class="m-dox">DeprecatedStruct</a> <span class="m-dox">A struct.</span> <span class="m-label m-danger">deprecated</span></li>
+              <li>union <a href="unionDeprecatedNamespace_1_1DeprecatedUnion.html" class="m-dox">DeprecatedUnion</a> <span class="m-dox">An union.</span> <span class="m-label m-danger">deprecated</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>
+</body>
+</html>
diff --git a/doxygen/test/compound_deprecated/dir_da5033def2d0db76e9883b31b76b3d0c.html b/doxygen/test/compound_deprecated/dir_da5033def2d0db76e9883b31b76b3d0c.html
new file mode 100644 (file)
index 0000000..a4ba4ed
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>Dir/ 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>
+  </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>
+          Dir<span class="m-breadcrumb">/</span> <span class="m-thin">directory</span>
+        </h1>
+        <p>A directory.</p>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#subdirs">Directories</a></li>
+                <li><a href="#files">Files</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="subdirs">
+          <h2><a href="#subdirs">Directories</a></h3>
+          <dl class="m-dox">
+            <dt>directory <a href="dir_89d28accb4b69f59411b7eddd48bbfbd.html" class="m-dox">DeprecatedSubdir</a>/ <span class="m-label m-danger">deprecated</span></dt>
+            <dd>A directory.</dd>
+          </dl>
+        </section>
+        <section id="files">
+          <h2><a href="#files">Files</a></h3>
+          <dl class="m-dox">
+            <dt>file <a href="DeprecatedFile_8h.html" class="m-dox">DeprecatedFile.h</a> <span class="m-label m-danger">deprecated</span></dt>
+            <dd>A file.</dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
\ No newline at end of file
diff --git a/doxygen/test/compound_deprecated/files.html b/doxygen/test/compound_deprecated/files.html
new file mode 100644 (file)
index 0000000..4bbbc42
--- /dev/null
@@ -0,0 +1,57 @@
+<!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>
+  </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_da5033def2d0db76e9883b31b76b3d0c.html" class="m-dox">Dir</a> <span class="m-dox">A directory.</span>
+            <ul class="m-dox">
+              <li class="m-dox-collapsible collapsed">
+                <a href="#" onclick="return toggle(this)">dir</a> <a href="dir_89d28accb4b69f59411b7eddd48bbfbd.html" class="m-dox">DeprecatedSubdir</a> <span class="m-dox">A directory.</span> <span class="m-label m-danger">deprecated</span>
+                <ul class="m-dox">
+                  <li>file <a href="File_8h.html" class="m-dox">File.h</a> <span class="m-dox">A file.</span></li>
+                </ul>
+              </li>
+              <li>file <a href="DeprecatedFile_8h.html" class="m-dox">DeprecatedFile.h</a> <span class="m-dox">A file.</span> <span class="m-label m-danger">deprecated</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>
+</body>
+</html>
\ No newline at end of file
diff --git a/doxygen/test/compound_deprecated/group__group.html b/doxygen/test/compound_deprecated/group__group.html
new file mode 100644 (file)
index 0000000..8280484
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>A group 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>
+  </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 group <span class="m-thin">module</span></h1>
+        <div class="m-block m-default">
+          <h3>Contents</h3>
+          <ul>
+            <li>
+              Reference
+              <ul>
+                <li><a href="#groups">Modules</a></li>
+                <li><a href="#nested-classes">Classes</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+        <section id="groups">
+          <h2><a href="#groups">Modules</a></h3>
+          <dl class="m-dox">
+            <dt>module <a href="group__deprecated-group.html" class="m-dox">A group</a> <span class="m-label m-danger">deprecated</span></dt>
+            <dd></dd>
+          </dl>
+        </section>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h3>
+          <dl class="m-dox">
+            <dt>
+              union <a href="unionDeprecatedNamespace_1_1DeprecatedUnion.html" class="m-dox">DeprecatedNamespace::DeprecatedUnion</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>An union.</dd>
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedStruct.html" class="m-dox">DeprecatedNamespace::DeprecatedStruct</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A struct.</dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
\ No newline at end of file
diff --git a/doxygen/test/compound_deprecated/modules.html b/doxygen/test/compound_deprecated/modules.html
new file mode 100644 (file)
index 0000000..261cffc
--- /dev/null
@@ -0,0 +1,51 @@
+<!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>
+  </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>Modules</h2>
+        <ul class="m-dox">
+          <li class="m-dox-collapsible">
+            <a href="#" onclick="return toggle(this)">module</a> <a href="group__group.html" class="m-dox">A group</a> <span class="m-dox"></span>
+            <ul class="m-dox">
+              <li>module <a href="group__deprecated-group.html" class="m-dox">A group</a> <span class="m-dox"></span> <span class="m-label m-danger">deprecated</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>
+</body>
+</html>
\ No newline at end of file
diff --git a/doxygen/test/compound_deprecated/namespaceDeprecatedNamespace.html b/doxygen/test/compound_deprecated/namespaceDeprecatedNamespace.html
new file mode 100644 (file)
index 0000000..6d39cee
--- /dev/null
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>DeprecatedNamespace 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>
+  </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>DeprecatedNamespace <span class="m-thin">namespace</span></h1>
+        <p>A namespace.</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>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000003" class="m-dox">Deprecated</a></h4><p>This namespace is deprecated.</p></aside>
+        <section id="nested-classes">
+          <h2><a href="#nested-classes">Classes</a></h3>
+          <dl class="m-dox">
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1BaseDeprecatedClass.html" class="m-dox">BaseDeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A base class.</dd>
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedClass.html" class="m-dox">DeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A class.</dd>
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedStruct.html" class="m-dox">DeprecatedStruct</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A struct.</dd>
+            <dt>
+              union <a href="unionDeprecatedNamespace_1_1DeprecatedUnion.html" class="m-dox">DeprecatedUnion</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>An union.</dd>
+          </dl>
+        </section>
+        <section id="enum-members">
+          <h2><a href="#enum-members">Enums</a></h3>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#ab1e37ddc1d65765f2a48485df4af7b47" class="m-dox">DeprecatedEnum</a> { </span><span class="m-dox-wrap"><a href="#ab1e37ddc1d65765f2a48485df4af7b47aa4d464de178e623239177e744f063cc3" class="m-dox">Value</a> = 15 } <span class="m-label m-danger">deprecated</span></span>
+            </dt>
+            <dd>An enum.</dd>
+            <dt>
+              <span class="m-dox-wrap-bumper">enum <a href="#ac59010e983270c330b8625b5433961b9" class="m-dox">Enum</a> { </span><span class="m-dox-wrap"><a href="#ac59010e983270c330b8625b5433961b9aad7bb85a28af8a4e08df4550abde24ee" class="m-dox">DeprecatedValue</a> = 15 <span class="m-label m-danger">deprecated</span> }</span>
+            </dt>
+            <dd>An enum.</dd>
+          </dl>
+        </section>
+        <section id="typedef-members">
+          <h2><a href="#typedef-members">Typedefs</a></h3>
+          <dl class="m-dox">
+            <dt>
+              using <a href="#af503ad3ff194a4c2512aff16df771164" class="m-dox">DeprecatedTypedef</a> = int <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A typedef.</dd>
+          </dl>
+        </section>
+        <section id="func-members">
+          <h2><a href="#func-members">Functions</a></h3>
+          <dl class="m-dox">
+            <dt>
+              <span class="m-dox-wrap-bumper">void <a href="#a9a1b3fc71d294b548095985acc0d5092" class="m-dox">deprecatedFoo</a>(</span><span class="m-dox-wrap">int a,
+              bool b,
+              double c) <span class="m-label m-danger">deprecated</span></span>
+            </dt>
+            <dd>A function.</dd>
+          </dl>
+        </section>
+        <section id="var-members">
+          <h2><a href="#var-members">Variables</a></h3>
+          <dl class="m-dox">
+            <dt>int <a href="#ae934297fc39624409333eefbfeabf5e5" class="m-dox">DeprecatedVariable</a> <span class="m-label m-danger">deprecated</span> <span class="m-label m-flat m-primary">constexpr</span></dt>
+            <dd>A variable.</dd>
+          </dl>
+        </section>
+        <section>
+          <h2>Enum documentation</h2>
+          <section class="m-dox-details" id="ab1e37ddc1d65765f2a48485df4af7b47"><div>
+            <h3>
+              enum DeprecatedNamespace::<wbr /><a href="#ab1e37ddc1d65765f2a48485df4af7b47" class="m-dox-self">DeprecatedEnum</a>
+            </h3>
+            <p>An enum.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000010" class="m-dox">Deprecated</a></h4><p>This enum is deprecated.</p></aside>
+            <table class="m-table m-fullwidth m-flat m-dox">
+              <thead><tr><th style="width: 1%">Enumerators</th><th></th></tr></thead>
+              <tbody>
+                <tr>
+                  <td><a href="#ab1e37ddc1d65765f2a48485df4af7b47aa4d464de178e623239177e744f063cc3" class="m-dox-self" name="ab1e37ddc1d65765f2a48485df4af7b47aa4d464de178e623239177e744f063cc3">Value</a></td>
+                  <td>
+<p>Enum value</p>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div></section>
+          <section class="m-dox-details" id="ac59010e983270c330b8625b5433961b9"><div>
+            <h3>
+              enum DeprecatedNamespace::<wbr /><a href="#ac59010e983270c330b8625b5433961b9" class="m-dox-self">Enum</a>
+            </h3>
+            <p>An enum.</p>
+            <table class="m-table m-fullwidth m-flat m-dox">
+              <thead><tr><th style="width: 1%">Enumerators</th><th></th></tr></thead>
+              <tbody>
+                <tr>
+                  <td><a href="#ac59010e983270c330b8625b5433961b9aad7bb85a28af8a4e08df4550abde24ee" class="m-dox-self" name="ac59010e983270c330b8625b5433961b9aad7bb85a28af8a4e08df4550abde24ee">DeprecatedValue</a></td>
+                  <td>
+<p>Enum value</p><aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000014" class="m-dox">Deprecated</a></h4><p>This enum is deprecated.</p></aside>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div></section>
+        </section>
+        <section>
+          <h2>Typedef documentation</h2>
+          <section class="m-dox-details" id="af503ad3ff194a4c2512aff16df771164"><div>
+            <h3>
+              typedef int DeprecatedNamespace::<wbr /><a href="#af503ad3ff194a4c2512aff16df771164" class="m-dox-self">DeprecatedTypedef</a>
+            </h3>
+            <p>A typedef.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000009" class="m-dox">Deprecated</a></h4><p>This typedef is deprecated.</p></aside>
+          </div></section>
+        </section>
+        <section>
+          <h2>Function documentation</h2>
+          <section class="m-dox-details" id="a9a1b3fc71d294b548095985acc0d5092"><div>
+            <h3>
+              <span class="m-dox-wrap-bumper">void DeprecatedNamespace::<wbr /></span><span class="m-dox-wrap"><span class="m-dox-wrap-bumper"><a href="#a9a1b3fc71d294b548095985acc0d5092" class="m-dox-self">deprecatedFoo</a>(</span><span class="m-dox-wrap">int a,
+              bool b,
+              double c)</span></span>
+            </h3>
+            <p>A function.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000007" class="m-dox">Deprecated</a></h4><p>This function is deprecated.</p></aside>
+          </div></section>
+        </section>
+        <section>
+          <h2>Variable documentation</h2>
+          <section class="m-dox-details" id="ae934297fc39624409333eefbfeabf5e5"><div>
+            <h3>
+              int DeprecatedNamespace::<wbr /><a href="#ae934297fc39624409333eefbfeabf5e5" class="m-dox-self">DeprecatedVariable</a> <span class="m-label m-primary">constexpr</span>
+            </h3>
+            <p>A variable.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000008" class="m-dox">Deprecated</a></h4><p>This variable is deprecated.</p></aside>
+          </div></section>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
diff --git a/doxygen/test/compound_deprecated/namespaces.html b/doxygen/test/compound_deprecated/namespaces.html
new file mode 100644 (file)
index 0000000..891726d
--- /dev/null
@@ -0,0 +1,46 @@
+<!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>
+  </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>Namespaces</h2>
+        <ul class="m-dox">
+          <li>namespace <a href="namespaceDeprecatedNamespace.html" class="m-dox">DeprecatedNamespace</a> <span class="m-dox">A namespace.</span> <span class="m-label m-danger">deprecated</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>
+</body>
+</html>
diff --git a/doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1BaseDeprecatedClass.html b/doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1BaseDeprecatedClass.html
new file mode 100644 (file)
index 0000000..9deacf9
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>DeprecatedNamespace::BaseDeprecatedClass 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>
+  </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="namespaceDeprecatedNamespace.html">DeprecatedNamespace</a>::</span>BaseDeprecatedClass <span class="m-thin">struct</span>
+        </h1>
+        <p>A base class.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000005" class="m-dox">Deprecated</a></h4><p>This class is deprecated.</p></aside>
+        <section id="derived-classes">
+          <h2><a href="#derived-classes">Derived classes</a></h3>
+          <dl class="m-dox">
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1DeprecatedClass.html" class="m-dox">DeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A class.</dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
diff --git a/doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1DeprecatedClass.html b/doxygen/test/compound_deprecated/structDeprecatedNamespace_1_1DeprecatedClass.html
new file mode 100644 (file)
index 0000000..36be53d
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>DeprecatedNamespace::DeprecatedClass 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>
+  </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="namespaceDeprecatedNamespace.html">DeprecatedNamespace</a>::</span>DeprecatedClass <span class="m-thin">struct</span>
+        </h1>
+        <p>A class.</p>
+<aside class="m-note m-danger"><h4><a href="deprecated.html#_deprecated000006" class="m-dox">Deprecated</a></h4><p>This class is deprecated.</p></aside>
+        <section id="base-classes">
+          <h2><a href="#base-classes">Base classes</a></h3>
+          <dl class="m-dox">
+            <dt>
+              struct <a href="structDeprecatedNamespace_1_1BaseDeprecatedClass.html" class="m-dox">BaseDeprecatedClass</a> <span class="m-label m-danger">deprecated</span>
+            </dt>
+            <dd>A base class.</dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+  </div>
+</article></main>
+</body>
+</html>
index d218b3914e2847bc9c34d0368729393ff5cfe0c5..02983f9d9b3f7e6deb0bb75d878f4883db945d74 100644 (file)
@@ -1 +1 @@
-O+!-vL;(N*Dggih0s#R40{{d704W0i2mk;m0{{*H0B!>S6aWBe0s#X60{|cZ04W0iBme*?0{|)j0B!>SFaQ8)0{}Jv0Br*RJOBVX1OWm7LI8j|0{}<>0CEEWPyhgL0{~V40CWQYTmS%L0{~(G0A&IJ1pos8ZU6u&0|0UW04M_hcmM!y0|0&i0BHjNga80-0|1Hu06GK#1OSi#fI0&JmH+@{0|1@?0A~XLqyPYJ0|2T30AU9J8UO%oXaE3qumAvZ0|2%F06GK#006`QfI0&J$^Zap0|3$h0CWTc0RRI41pos8-T(k80|4d#04M_h>;M361pwFp0Aca~0BHgN1^@#90s#PJ0{{jA0A~XL3;_UP0{{{M0B{2U7y$rc0{|WY0Cfof_y7QHXaE3qumAvZBmn?(AOHXmHvj-(VgLXjhX4R!z5oCq;Q#<(76AajG64VpO<{Cs0B&JzWpi+0V`WWYbZ9PUbZu-1O<{CsIy!A>ZYXJPbSxlgZgeRCZeeX@b8ul}WldppXf9}UZEPcLX>LtnbZ9y{R%K&!Z*l-*Y+-YAO<{CsUol@XR%K&!Z*neZbZu+~O<{CsIyzQmV{~tFIy!A>ZYU`rV{dMAbO2*)VRLg$VRUF;F<&uOWn*-2axQ3eZEPcLX>LtnbZ9y{QekdqWdLJrVRLg$VRUF;F<&uKVQyz-E@*UZYz9qXbZ9y{QekdqWjZ=-X>KSfAY*TCb94Y>Y+-YAO<{CsUol@XQekdqWiDuRZEPcLX>L$qXJsJ5yC73_VsK$+WdL(^VsK$+WiDuRZEOGl
\ No newline at end of file
+O+!-vL;(N*Dggih0s#R40{{d704W0i2mk;m0{{*H0B!>S6aWBe0s#X60{|cZ04W0iBme*?0{|)j0B!>SFaQ8)0{}Jv0Br*RJOBVX1OWm7LI8j|0{}<>0CEEWPyhgL0{~V40CWQYTmS%L0{~(G0A&IJ1pos8ZU6u&0|0UW04M_hcmM!y0|0&i0BHjNga80-0|1Hu06GK#1OSi#fI0&JmH+@{0|1@?0A~XLqyPYJ0|2T30AU9J8UO%oXaE3qumAvZ0|2%F06GK#006`QfI0&J$^Zap0|3$h0CWTc0RRI41pos8-T(k80|4d#04M_h>;M361pwFp0Aca~0BHgN1^@#90s#PJ0{{jA0A~XL3;_UP0{{{M0B{2U7y$rc0{|WY0Cfof_y7QHXaE3qumAvZBmn?(AOHXmHvj-(VgLXlhX4R!z5oCq;Q#<(76AajG64VpO<{Cs0B&JzWpi+0V`WWYbZ9PUbZu-1O<{CsIy!A>ZYXJPbSxlgZgeRCZeeX@b8ul}WldppXf9}UZEPcLX>LtnbZ9y{R%K&!Z*l-*Y+-YAO<{CsUol@XR%K&!Z*neZbZu+~O<{CsIyzQmV{~tFIy!A>ZYU`rV{dMAbO2*)VRLg$VRUF;F<&uOWn*-2axQ3eZEPcLX>LtnbZ9y{QekdqWdLJrVRLg$VRUF;F<&uKVQyz-E@*UZYz9qXbZ9y{QekdqWjZ=-X>KSfAY*TCb94Y>Y+-YAO<{CsUol@XQekdqWiDuRZEPcLX>L$qXJsJ5yC73_VsK$+WdL(^VsK$+WiDuRZEOGl
\ No newline at end of file
index 017346703b27fd7522763d88a66c7a54070bacb5..ff1d18795deb9df80ef8d28973c45a26aa392caf 100644 (file)
Binary files a/doxygen/test/js-test-data/searchdata.bin and b/doxygen/test/js-test-data/searchdata.bin differ
index 35e182c123bc080e50e4f41644213a0944b3359d..32bcfbaf17ac64a15ff58a7f32be9cc1e15b0077 100755 (executable)
@@ -50,7 +50,7 @@ trie.insert("math", map.add("Math", "namespaceMath.html", flags=ResultFlag.NAMES
 index = map.add("Math::min(int, int)", "namespaceMath.html#min", suffix_length=8, flags=ResultFlag.FUNC)
 trie.insert("math::min()", index, lookahead_barriers=[4])
 trie.insert("min()", index)
-index = map.add("Math::Vector", "classMath_1_1Vector.html", flags=ResultFlag.CLASS)
+index = map.add("Math::Vector", "classMath_1_1Vector.html", flags=ResultFlag.CLASS|ResultFlag.IS_DEPRECATED)
 trie.insert("math::vector", index)
 trie.insert("vector", index)
 index = map.add("Math::Vector::min() const", "classMath_1_1Vector.html#min", suffix_length=6, flags=ResultFlag.FUNC)
diff --git a/doxygen/test/search/DeprecatedDir/DeprecatedFile.h b/doxygen/test/search/DeprecatedDir/DeprecatedFile.h
new file mode 100644 (file)
index 0000000..a38bd73
--- /dev/null
@@ -0,0 +1,83 @@
+/** @dir DeprecatedDir
+ * @brief A directory
+ * @deprecated This dir is deprecated.
+ */
+
+/** @file
+ * @brief A file
+ * @deprecated This file is deprecated.
+ */
+
+/**
+@brief A namespace
+@deprecated This namespace is deprecated.
+*/
+namespace DeprecatedNamespace {
+
+/**
+@brief A class
+@deprecated This class is deprecated.
+*/
+struct DeprecatedClass {};
+
+/**
+@brief A function
+@deprecated This function is deprecated.
+*/
+void deprecatedFoo(int a, bool b, double c);
+
+/**
+@brief A variable
+@deprecated This variable is deprecated.
+*/
+constexpr int DeprecatedVariable = 5;
+
+/**
+@brief A typedef
+@deprecated This typedef is deprecated.
+*/
+typedef int DeprecatedTypedef;
+
+/**
+@brief An enum
+@deprecated This enum is deprecated.
+*/
+enum class DeprecatedEnum {
+    /** Enum value */
+    Value = 15
+};
+
+/** @brief An enum */
+enum class Enum {
+    /**
+     * Enum value
+     * @deprecated This enum is deprecated.
+     */
+    DeprecatedValue = 15
+};
+
+/** @defgroup deprecated-group A group
+ * @deprecated This group is deprecated.
+ */
+
+/**
+@brief An union
+@deprecated This union is deprecated.
+*/
+union DeprecatedUnion {};
+
+/**
+@brief A struct
+@deprecated This struct is deprecated.
+*/
+struct DeprecatedStruct {};
+
+/*@}*/
+
+}
+
+/**
+@brief A macro
+@deprecated This macro is deprecated
+*/
+#define DEPRECATED_MACRO(a, b, c)
index 69240dd9e5c8e0ee44198f2e4acf3ed87cace1c5..f25fc022438f6d746d4b7195c4f5aaa296aed7d6 100644 (file)
@@ -1,4 +1,4 @@
-INPUT                   = Dir UndocumentedDir input.dox
+INPUT                   = Dir DeprecatedDir UndocumentedDir input.dox
 QUIET                   = YES
 GENERATE_HTML           = NO
 GENERATE_LATEX          = NO
index d1af900cbb4c42756fe18d3677dede5dcca922cc..87d1434f057ce6e9273a366f37c9cd5bdb29826c 100644 (file)
@@ -151,7 +151,7 @@ const { StringDecoder } = require('string_decoder');
     let resultsForVec = [
         { name: 'Math::Vector',
           url: 'classMath_1_1Vector.html',
-          flags: 32,
+          flags: 32|2, /* Deprecated */
           suffixLength: 3 }];
     assert.deepEqual(Search.search('vec'), resultsForVec);
 
index 6e22791b934daa8a9025eda79064a83dbcf4a318..b390cf9128403838867ee76fbc85ef4d72f106e3 100644 (file)
@@ -149,3 +149,39 @@ class Modules(IntegrationTestCase):
         self.assertEqual(*self.actual_expected_contents('group__group2.html'))
         self.assertEqual(*self.actual_expected_contents('group__subgroup.html'))
         self.assertEqual(*self.actual_expected_contents('modules.html'))
+
+class Deprecated(IntegrationTestCase):
+    def __init__(self, *args, **kwargs):
+        super().__init__(__file__, 'deprecated', *args, **kwargs)
+
+    def test(self):
+        self.run_dox2html5(wildcard='*.xml')
+        # Test that the [deprecated] label is in all places where it should ne
+
+        # Class tree
+        self.assertEqual(*self.actual_expected_contents('annotated.html'))
+
+        # Member namespace and define listing
+        self.assertEqual(*self.actual_expected_contents('DeprecatedFile_8h.html'))
+
+        # Member file and directory listing
+        self.assertEqual(*self.actual_expected_contents('dir_da5033def2d0db76e9883b31b76b3d0c.html'))
+
+        # File and directory tree
+        self.assertEqual(*self.actual_expected_contents('files.html'))
+
+        # Member module listing
+        self.assertEqual(*self.actual_expected_contents('group__group.html'))
+
+        # Module tree
+        self.assertEqual(*self.actual_expected_contents('modules.html'))
+
+        # Member namespace, class, function, variable, typedef and enum listing
+        self.assertEqual(*self.actual_expected_contents('namespaceDeprecatedNamespace.html'))
+
+        # Namespace tree
+        self.assertEqual(*self.actual_expected_contents('namespaces.html'))
+
+        # Base and derived class listing
+        self.assertEqual(*self.actual_expected_contents('structDeprecatedNamespace_1_1BaseDeprecatedClass.html'))
+        self.assertEqual(*self.actual_expected_contents('structDeprecatedNamespace_1_1DeprecatedClass.html'))
index 2441ab23aa0fa6b84df394819b2991fc1a94af3c..304516e9a600ed2cf54047ca15ff4d78906b66a5 100755 (executable)
@@ -138,6 +138,8 @@ def pretty_print_map(serialized: bytes, colors=False):
         if i: out += '\n'
         flags = ResultFlag(ResultMap.flags_struct.unpack_from(serialized, i*4 + 3)[0])
         extra = []
+        if flags & ResultFlag.IS_DEPRECATED:
+            extra += ['deprecated']
         if flags & ResultFlag.HAS_SUFFIX:
             extra += ['suffix_length={}'.format(ResultMap.suffix_length_struct.unpack_from(serialized, offset)[0])]
             offset += 1
@@ -366,60 +368,101 @@ class Search(IntegrationTestCase):
             search_data_pretty = pretty_print(f.read())[0]
         #print(search_data_pretty)
         self.assertEqual(search_data_pretty, """
-a group [0]
-| page [5]
-namespace [1]
+deprecatednamespace [0]
+|         |        :$
+|         |         :deprecatedclass [1]
+|         |          |         struct [2]
+|         |          |         union [3]
+|         |          |         enum [20]
+|         |          |         |   :$
+|         |          |         |    :value [19]
+|         |          |         typedef [23]
+|         |          |         variable [24]
+|         |          |         foo() [25]
+|         |          enum [22]
+|         |          |   :$
+|         |          |    :deprecatedvalue [21]
+|         class [1]
+|         struct [2]
+|         union [3]
+|          list [5]
+|         dir [13]
+|         |  /$
+|         |   deprecatedfile.h [14]
+|         file.h [14]
+|         |oo() [25]
+|         enum [20]
+|         |   :$
+|         |    :value [19]
+|         value [21]
+|         | riable [24]
+|         typedef [23]
+|         _macro() [30]
+a group [4, 10]
+| page [11]
+namespace [6]
 |        :$
-|         :class [2]
+|         :class [7]
 |          |    :$
-|          |     :foo() [9, 10, 11, 12]
-|          struct [3]
-|          union [4]
-|          enum [14]
+|          |     :foo() [15, 16, 17, 18]
+|          struct [8]
+|          union [9]
+|          enum [27]
 |          |   :$
-|          |    :value [13]
-|          typedef [15]
-|          variable [16]
-class [2]
+|          |    :value [26]
+|          typedef [28]
+|          variable [29]
+class [7]
 |    :$
-|     :foo() [9, 10, 11, 12]
-struct [3]
-|ubpage [6]
-union [4]
-dir [7]
-|  /$
-|   file.h [8]
-file.h [8]
-|oo() [9, 10, 11, 12]
-enum [14]
+|     :foo() [15, 16, 17, 18]
+struct [8]
+|ubpage [12]
+union [9]
+foo() [15, 16, 17, 18]
+value [19, 26]
+| riable [29]
+enum [22, 27]
 |   :$
-|    :value [13]
-value [13]
-| riable [16]
-typedef [15]
-macro [17]
-|    _function() [18]
-|             _with_params() [19]
-0: A group [type=GROUP] -> group__group.html
-1: Namespace [type=NAMESPACE] -> namespaceNamespace.html
-2: Namespace::Class [type=CLASS] -> classNamespace_1_1Class.html
-3: Namespace::Struct [type=STRUCT] -> structNamespace_1_1Struct.html
-4: Namespace::Union [type=UNION] -> unionNamespace_1_1Union.html
-5: A page [type=PAGE] -> page.html
-6: A page » Subpage [type=PAGE] -> subpage.html
-7: Dir [type=DIR] -> dir_da5033def2d0db76e9883b31b76b3d0c.html
-8: Dir/File.h [type=FILE] -> File_8h.html
-9: Namespace::Class::foo() [type=FUNC] -> classNamespace_1_1Class.html#aaeba4096356215868370d6ea476bf5d9
-10: Namespace::Class::foo() const [suffix_length=6, type=FUNC] -> classNamespace_1_1Class.html#ac03c5b93907dda16763eabd26b25500a
-11: Namespace::Class::foo() && [suffix_length=3, type=FUNC] -> classNamespace_1_1Class.html#ac9e7e80d06281e30cfcc13171d117ade
-12: Namespace::Class::foo(const Enum&, Typedef) [suffix_length=20, type=FUNC] -> classNamespace_1_1Class.html#aba8d57a830d4d79f86d58d92298677fa
-13: Namespace::Enum::Value [type=ENUM_VALUE] -> namespaceNamespace.html#add172b93283b1ab7612c3ca6cc5dcfeaa689202409e48743b914713f96d93947c
-14: Namespace::Enum [type=ENUM] -> namespaceNamespace.html#add172b93283b1ab7612c3ca6cc5dcfea
-15: Namespace::Typedef [type=TYPEDEF] -> namespaceNamespace.html#abe2a245304bc2234927ef33175646e08
-16: Namespace::Variable [type=VAR] -> namespaceNamespace.html#ad3121960d8665ab045ca1bfa1480a86d
-17: MACRO [type=DEFINE] -> File_8h.html#a824c99cb152a3c2e9111a2cb9c34891e
-18: MACRO_FUNCTION() [type=DEFINE] -> File_8h.html#a025158d6007b306645a8eb7c7a9237c1
-19: MACRO_FUNCTION_WITH_PARAMS(params) [suffix_length=6, type=DEFINE] -> File_8h.html#a88602bba5a72becb4f2dc544ce12c420
+|    :deprecatedvalue [21]
+|     value [26]
+typedef [28]
+macro [31]
+|    _function() [32]
+|             _with_params() [33]
+0: DeprecatedNamespace [deprecated, type=NAMESPACE] -> namespaceDeprecatedNamespace.html
+1: DeprecatedNamespace::DeprecatedClass [deprecated, type=STRUCT] -> structDeprecatedNamespace_1_1DeprecatedClass.html
+2: DeprecatedNamespace::DeprecatedStruct [deprecated, type=STRUCT] -> structDeprecatedNamespace_1_1DeprecatedStruct.html
+3: DeprecatedNamespace::DeprecatedUnion [deprecated, type=UNION] -> unionDeprecatedNamespace_1_1DeprecatedUnion.html
+4: A group [type=GROUP] -> group__group.html
+5: Deprecated List [type=PAGE] -> deprecated.html
+6: Namespace [type=NAMESPACE] -> namespaceNamespace.html
+7: Namespace::Class [type=CLASS] -> classNamespace_1_1Class.html
+8: Namespace::Struct [type=STRUCT] -> structNamespace_1_1Struct.html
+9: Namespace::Union [type=UNION] -> unionNamespace_1_1Union.html
+10: A group [type=GROUP] -> group__deprecated-group.html
+11: A page [type=PAGE] -> page.html
+12: A page » Subpage [type=PAGE] -> subpage.html
+13: DeprecatedDir [deprecated, type=DIR] -> dir_c6c97faf5a6cbd0f62c27843ce3af4d0.html
+14: DeprecatedDir/DeprecatedFile.h [deprecated, type=FILE] -> DeprecatedFile_8h.html
+15: Namespace::Class::foo() [type=FUNC] -> classNamespace_1_1Class.html#aaeba4096356215868370d6ea476bf5d9
+16: Namespace::Class::foo() const [suffix_length=6, type=FUNC] -> classNamespace_1_1Class.html#ac03c5b93907dda16763eabd26b25500a
+17: Namespace::Class::foo() && [suffix_length=3, type=FUNC] -> classNamespace_1_1Class.html#ac9e7e80d06281e30cfcc13171d117ade
+18: Namespace::Class::foo(const Enum&, Typedef) [suffix_length=20, type=FUNC] -> classNamespace_1_1Class.html#aba8d57a830d4d79f86d58d92298677fa
+19: DeprecatedNamespace::DeprecatedEnum::Value [type=ENUM_VALUE] -> namespaceDeprecatedNamespace.html#ab1e37ddc1d65765f2a48485df4af7b47a689202409e48743b914713f96d93947c
+20: DeprecatedNamespace::DeprecatedEnum [deprecated, type=ENUM] -> namespaceDeprecatedNamespace.html#ab1e37ddc1d65765f2a48485df4af7b47
+21: DeprecatedNamespace::Enum::DeprecatedValue [deprecated, type=ENUM_VALUE] -> namespaceDeprecatedNamespace.html#ac59010e983270c330b8625b5433961b9a4b5b0e9709902228c33df7e5e377e596
+22: DeprecatedNamespace::Enum [type=ENUM] -> namespaceDeprecatedNamespace.html#ac59010e983270c330b8625b5433961b9
+23: DeprecatedNamespace::DeprecatedTypedef [deprecated, type=TYPEDEF] -> namespaceDeprecatedNamespace.html#af503ad3ff194a4c2512aff16df771164
+24: DeprecatedNamespace::DeprecatedVariable [deprecated, type=VAR] -> namespaceDeprecatedNamespace.html#ae934297fc39624409333eefbfeabf5e5
+25: DeprecatedNamespace::deprecatedFoo(int, bool, double) [deprecated, suffix_length=17, type=FUNC] -> namespaceDeprecatedNamespace.html#a9a1b3fc71d294b548095985acc0d5092
+26: Namespace::Enum::Value [type=ENUM_VALUE] -> namespaceNamespace.html#add172b93283b1ab7612c3ca6cc5dcfeaa689202409e48743b914713f96d93947c
+27: Namespace::Enum [type=ENUM] -> namespaceNamespace.html#add172b93283b1ab7612c3ca6cc5dcfea
+28: Namespace::Typedef [type=TYPEDEF] -> namespaceNamespace.html#abe2a245304bc2234927ef33175646e08
+29: Namespace::Variable [type=VAR] -> namespaceNamespace.html#ad3121960d8665ab045ca1bfa1480a86d
+30: DEPRECATED_MACRO(a, b, c) [deprecated, suffix_length=7, type=DEFINE] -> DeprecatedFile_8h.html#a7f8376730349fef9ff7d103b0245a13e
+31: MACRO [type=DEFINE] -> File_8h.html#a824c99cb152a3c2e9111a2cb9c34891e
+32: MACRO_FUNCTION() [type=DEFINE] -> File_8h.html#a025158d6007b306645a8eb7c7a9237c1
+33: MACRO_FUNCTION_WITH_PARAMS(params) [suffix_length=6, type=DEFINE] -> File_8h.html#a88602bba5a72becb4f2dc544ce12c420
 """.strip())
 
 if __name__ == '__main__': # pragma: no cover