diff --git a/_includes/rmw_doc/Modules/group__rmw.md b/_includes/rmw_doc/Modules/group__rmw.md
new file mode 100644
index 00000000..e6b46e94
--- /dev/null
+++ b/_includes/rmw_doc/Modules/group__rmw.md
@@ -0,0 +1,283 @@
+# micro-ROS RMW API
+
+## Functions
+
+| | Name |
+| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| void | **[rmw_uros_set_continous_serialization_callbacks](#function-rmw_uros_set_continous_serialization_callbacks)**(rmw_publisher_t * publisher, rmw_uros_continous_serialization_size size_cb, rmw_uros_continous_serialization serialization_cb)
Sets the callback functions for continous serialization for a publisher. |
+| rmw_ret_t | **[rmw_uros_set_custom_transport](#function-rmw_uros_set_custom_transport)**(bool framing, void * args, open_custom_func open_cb, close_custom_func close_cb, write_custom_func write_cb, read_custom_func read_cb)
Check if micro-ROS Agent answers to micro-ROS client. |
+| rmw_ret_t | **[rmw_uros_discover_agent](#function-rmw_uros_discover_agent)**(rmw_init_options_t * rmw_options)
Fills rmw implementation-specific options with the autodicovered address of an micro-ROS Agent. |
+| rmw_ret_t | **[rmw_uros_init_options](#function-rmw_uros_init_options)**(int argc, const char *const argv[], rmw_init_options_t * rmw_options)
Parses command line args and fills rmw implementation-specific options. |
+| rmw_ret_t | **[rmw_uros_options_set_serial_device](#function-rmw_uros_options_set_serial_device)**(const char * dev, rmw_init_options_t * rmw_options)
Fills rmw implementation-specific options with the given parameters. |
+| rmw_ret_t | **[rmw_uros_options_set_udp_address](#function-rmw_uros_options_set_udp_address)**(const char * ip, const char * port, rmw_init_options_t * rmw_options)
Fills rmw implementation-specific options with the given parameters. |
+| rmw_ret_t | **[rmw_uros_options_set_client_key](#function-rmw_uros_options_set_client_key)**(uint32_t client_key, rmw_init_options_t * rmw_options)
Fills rmw implementation-specific options with the given parameters. |
+| rmw_ret_t | **[rmw_uros_ping_agent](#function-rmw_uros_ping_agent)**(const int timeout_ms, const uint8_t attempts)
Check if micro-ROS Agent is up and running. |
+| bool | **[rmw_uros_epoch_synchronized](#function-rmw_uros_epoch_synchronized)**()
Returns the time synchronization state of the epoch time. |
+| int64_t | **[rmw_uros_epoch_millis](#function-rmw_uros_epoch_millis)**()
Returns the epoch time in milliseconds taking into account the offset computed during the time synchronization. |
+| int64_t | **[rmw_uros_epoch_nanos](#function-rmw_uros_epoch_nanos)**()
Returns the epoch time in nanoseconds taking into account the offset computed during the time synchronization. |
+| rmw_ret_t | **[rmw_uros_sync_session](#function-rmw_uros_sync_session)**(const int timeout_ms)
Synchronizes the session time using the NTP protocol. |
+
+
+## Functions Documentation
+
+### function rmw_uros_set_continous_serialization_callbacks
+
+```cpp
+void rmw_uros_set_continous_serialization_callbacks(
+ rmw_publisher_t * publisher,
+ rmw_uros_continous_serialization_size size_cb,
+ rmw_uros_continous_serialization serialization_cb
+)
+```
+
+Sets the callback functions for continous serialization for a publisher.
+
+**Parameters**:
+
+ * **publisher** publisher where continous serialization is being configured
+ * **size_cb** callback that should modify the total serialization size
+ * **serialization_cb** callback that should serialize the user part of the message
+
+
+### function rmw_uros_set_custom_transport
+
+```cpp
+rmw_ret_t rmw_uros_set_custom_transport(
+ bool framing,
+ void * args,
+ open_custom_func open_cb,
+ close_custom_func close_cb,
+ write_custom_func write_cb,
+ read_custom_func read_cb
+)
+```
+
+Check if micro-ROS Agent answers to micro-ROS client.
+
+**Parameters**:
+
+ * **framing** Enable XRCE framing.
+ * **args** Arguments for open function.
+ * **open_cb** Open transport callback.
+ * **close_cb** Close transport callback.
+ * **write_cb** Write transport callback.
+ * **read_cb** Read transport callback.
+
+
+**Return**:
+
+ * RMW_RET_OK If correct.
+ * RMW_RET_ERROR If invalid.
+
+
+### function rmw_uros_discover_agent
+
+```cpp
+rmw_ret_t rmw_uros_discover_agent(
+ rmw_init_options_t * rmw_options
+)
+```
+
+Fills rmw implementation-specific options with the autodicovered address of an micro-ROS Agent.
+
+**Parameters**:
+
+ * **rmw_options** Updated options with rmw specifics.
+
+
+**Return**:
+
+ * RMW_RET_OK If arguments were valid and set in rmw_init_options.
+ * RMW_RET_TIMEOUT If micro-ROS agent autodiscovery is timeout.
+ * RMW_RET_INVALID_ARGUMENT If rmw_init_options is not valid or unexpected arguments.
+
+
+### function rmw_uros_init_options
+
+```cpp
+rmw_ret_t rmw_uros_init_options(
+ int argc,
+ const char *const argv[],
+ rmw_init_options_t * rmw_options
+)
+```
+
+Parses command line args and fills rmw implementation-specific options.
+
+**Parameters**:
+
+ * **argc** Number of arguments.
+ * **argv** Arguments.
+ * **rmw_options** Updated options with rmw specifics.
+
+
+**Return**:
+
+ * RMW_RET_OK If arguments were valid and set in rmw_init_options.
+ * RMW_RET_INVALID_ARGUMENT If rmw_init_options is not valid or unexpected arguments.
+
+
+`rmw_init_options allocator` is used to allocate the specific rmw options.
+
+
+### function rmw_uros_options_set_serial_device
+
+```cpp
+rmw_ret_t rmw_uros_options_set_serial_device(
+ const char * dev,
+ rmw_init_options_t * rmw_options
+)
+```
+
+Fills rmw implementation-specific options with the given parameters.
+
+**Parameters**:
+
+ * **dev** Serial device.
+ * **rmw_options** Updated options with rmw specifics.
+
+
+**Return**:
+
+ * RMW_RET_OK If arguments were valid and set in rmw_init_options.
+ * RMW_RET_INVALID_ARGUMENT If rmw_init_options is not valid or unexpected arguments.
+
+
+### function rmw_uros_options_set_udp_address
+
+```cpp
+rmw_ret_t rmw_uros_options_set_udp_address(
+ const char * ip,
+ const char * port,
+ rmw_init_options_t * rmw_options
+)
+```
+
+Fills rmw implementation-specific options with the given parameters.
+
+**Parameters**:
+
+ * **ip** Agent IP address.
+ * **port** Agent UDP port.
+ * **rmw_options** Updated options with rmw specifics.
+
+
+**Return**:
+
+ * RMW_RET_OK If arguments were valid and set in rmw_init_options.
+ * RMW_RET_INVALID_ARGUMENT If rmw_init_options is not valid or unexpected arguments.
+
+
+### function rmw_uros_options_set_client_key
+
+```cpp
+rmw_ret_t rmw_uros_options_set_client_key(
+ uint32_t client_key,
+ rmw_init_options_t * rmw_options
+)
+```
+
+Fills rmw implementation-specific options with the given parameters.
+
+**Parameters**:
+
+ * **client_key** MicroXRCE-DDS client key.
+ * **rmw_options** Updated options with rmw specifics.
+
+
+**Return**:
+
+ * RMW_RET_OK If arguments were valid and set in rmw_init_options.
+ * RMW_RET_INVALID_ARGUMENT If rmw_init_options is not valid or unexpected arguments.
+
+
+### function rmw_uros_ping_agent
+
+```cpp
+rmw_ret_t rmw_uros_ping_agent(
+ const int timeout_ms,
+ const uint8_t attempts
+)
+```
+
+Check if micro-ROS Agent is up and running.
+
+**Parameters**:
+
+ * **timeout_ms** Timeout in ms (per attempt).
+ * **attempts** Number of tries before considering the ping as failed.
+
+
+**Return**:
+
+ * RMW_RET_OK If micro-ROS Agent is available.
+ * RMW_RET_ERROR If micro-ROS Agent is not available.
+
+
+This function can be called even when the micro-ROS context has not yet been initialized by the application logics.
+
+
+### function rmw_uros_epoch_synchronized
+
+```cpp
+bool rmw_uros_epoch_synchronized()
+```
+
+Returns the time synchronization state of the epoch time.
+
+**Return**: true if last time synchronization succeded and false otherwise
+
+### function rmw_uros_epoch_millis
+
+```cpp
+int64_t rmw_uros_epoch_millis()
+```
+
+Returns the epoch time in milliseconds taking into account the offset computed during the time synchronization.
+
+**Return**:
+
+ * epoch time in milliseconds.
+ * 0 if session is not initialized.
+
+
+### function rmw_uros_epoch_nanos
+
+```cpp
+int64_t rmw_uros_epoch_nanos()
+```
+
+Returns the epoch time in nanoseconds taking into account the offset computed during the time synchronization.
+
+**Return**:
+
+ * epoch time in nanoseconds.
+ * 0 if session is not initialized.
+
+
+### function rmw_uros_sync_session
+
+```cpp
+rmw_ret_t rmw_uros_sync_session(
+ const int timeout_ms
+)
+```
+
+Synchronizes the session time using the NTP protocol.
+
+**Parameters**:
+
+ * **timeout_ms** The waiting time in milliseconds.
+
+
+**Return**:
+
+ * RMW_RET_OK when success.
+ * RMW_RET_ERROR If no session is running or the synchronization fails.
+
+
+
+
+
+
+-------------------------------
\ No newline at end of file
diff --git a/_includes/rmw_doc/index_groups.md b/_includes/rmw_doc/index_groups.md
new file mode 100644
index 00000000..93ebc176
--- /dev/null
+++ b/_includes/rmw_doc/index_groups.md
@@ -0,0 +1,10 @@
+# Modules
+
+
+
+
+* **group [micro-ROS RMW API](Modules/group__rmw.md)**
TODO.
+
+
+
+-------------------------------
diff --git a/_includes/topnav.html b/_includes/topnav.html
index cbbb96ec..1ce5ebcc 100644
--- a/_includes/topnav.html
+++ b/_includes/topnav.html
@@ -16,6 +16,7 @@
Overview
Concepts
Tutorials
+
API
Blog
diff --git a/utils/doxy_config b/utils/doxy_config
new file mode 100644
index 00000000..9ca9e3dc
--- /dev/null
+++ b/utils/doxy_config
@@ -0,0 +1,56 @@
+{
+ "baseUrl": "",
+ "copyImages": true,
+ "fileExt": "md",
+ "filesFilter": [],
+ "folderClassesName": "Classes",
+ "folderExamplesName": "Examples",
+ "folderFilesName": "Files",
+ "folderGroupsName": "Modules",
+ "folderNamespacesName": "Namespaces",
+ "folderRelatedPagesName": "Pages",
+ "foldersToGenerate": [
+ "modules"
+ ],
+ "formulaBlockEnd": "\\]",
+ "formulaBlockStart": "\\[",
+ "formulaInlineEnd": "\\)",
+ "formulaInlineStart": "\\(",
+ "imagesFolder": "images",
+ "indexClassesName": "index_classes",
+ "indexClassesTitle": "Classes",
+ "indexExamplesName": "index_examples",
+ "indexExamplesTitle": "Examples",
+ "indexFilesName": "index_files",
+ "indexFilesTitle": "Files",
+ "indexGroupsName": "index_groups",
+ "indexGroupsTitle": "Modules",
+ "indexInFolders": false,
+ "indexNamespacesName": "index_namespaces",
+ "indexNamespacesTitle": "Namespaces",
+ "indexRelatedPagesName": "index_pages",
+ "indexRelatedPagesTitle": "Pages",
+ "linkAndInlineCodeAsHTML": false,
+ "linkLowercase": false,
+ "linkSuffix": ".md",
+ "mainPageInRoot": false,
+ "mainPageName": "indexpage",
+ "sort": false,
+ "templateIndexClasses": "index_classes",
+ "templateIndexExamples": "index_examples",
+ "templateIndexFiles": "index_files",
+ "templateIndexGroups": "index_groups",
+ "templateIndexNamespaces": "index_namespaces",
+ "templateIndexRelatedPages": "index_pages",
+ "templateKindClass": "kind_class",
+ "templateKindDir": "kind_file",
+ "templateKindExample": "kind_page",
+ "templateKindFile": "kind_file",
+ "templateKindGroup": "kind_nonclass",
+ "templateKindInterface": "kind_class",
+ "templateKindNamespace": "kind_nonclass",
+ "templateKindPage": "kind_page",
+ "templateKindStruct": "kind_class",
+ "templateKindUnion": "kind_class",
+ "useFolders": true
+}
diff --git a/utils/doxy_templates/breadcrumbs.tmpl b/utils/doxy_templates/breadcrumbs.tmpl
new file mode 100644
index 00000000..3c97fc4b
--- /dev/null
+++ b/utils/doxy_templates/breadcrumbs.tmpl
@@ -0,0 +1,6 @@
+{% if exists("moduleBreadcrumbs") -%}
+**Module:** {%- for module in moduleBreadcrumbs -%}
+ **[{{module.title}}]({{module.url}})**{% if not loop.is_last %} **/** {% endif -%}
+{% endfor %}
+
+{% endif -%}
\ No newline at end of file
diff --git a/utils/doxy_templates/class_members_details.tmpl b/utils/doxy_templates/class_members_details.tmpl
new file mode 100644
index 00000000..4572f272
--- /dev/null
+++ b/utils/doxy_templates/class_members_details.tmpl
@@ -0,0 +1,104 @@
+{% if exists("publicTypes") %}## Public Types Documentation
+
+{% for child in publicTypes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedTypes") %}## Protected Types Documentation
+
+{% for child in protectedTypes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicSlots") %}## Public Slots Documentation
+
+{% for child in publicSlots %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedSlots") %}## Protected Slots Documentation
+
+{% for child in protectedSlots %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicSignals") %}## Public Signals Documentation
+
+{% for child in publicSignals %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedSignals") %}## Protected Signals Documentation
+
+{% for child in protectedSignals %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicEvents") %}## Public Events Documentation
+
+{% for child in publicEvents %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedEvents") %}## Protected Events Documentation
+
+{% for child in protectedEvents %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicFunctions") %}## Public Functions Documentation
+
+{% for child in publicFunctions %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedFunctions") %}## Protected Functions Documentation
+
+{% for child in protectedFunctions %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicProperties") %}## Public Property Documentation
+
+{% for child in publicProperties %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedProperties") %}## Protected Property Documentation
+
+{% for child in protectedProperties %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("publicAttributes") %}## Public Attributes Documentation
+
+{% for child in publicAttributes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("protectedAttributes") %}## Protected Attributes Documentation
+
+{% for child in protectedAttributes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
+
+{% if exists("friends") %}## Friends
+
+{% for child in friends %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif -%}
\ No newline at end of file
diff --git a/utils/doxy_templates/class_members_inherited_tables.tmpl b/utils/doxy_templates/class_members_inherited_tables.tmpl
new file mode 100644
index 00000000..96048aa9
--- /dev/null
+++ b/utils/doxy_templates/class_members_inherited_tables.tmpl
@@ -0,0 +1,303 @@
+{% for base in baseClasses -%}
+{%- if existsIn(base, "publicClasses") -%}
+**Public Classes inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicClasses -%}
+| {{child.kind}} | **[{{last(stripNamespace(child.name))}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedClasses") -%}
+**Protected Classes inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedClasses -%}
+| {{child.kind}} | **[{{last(stripNamespace(child.name))}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicTypes") -%}
+**Public Types inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicTypes -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{{child.kind}}{% if existsIn(child, "type") %} {{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if child.kind == "enum" %}{ {% for enumvalue in child.enumvalues -%}
+{{enumvalue.name}}{% if existsIn(enumvalue, "initializer") %} {{enumvalue.initializer}}{% endif -%}
+{% if not loop.is_last %}, {% endif %}{% endfor -%}
+ }{% endif -%}
+{% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedTypes") -%}
+**Protected Types inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedTypes -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{{child.kind}}{% if existsIn(child, "type") %} {{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if child.kind == "enum" %}{ {% for enumvalue in child.enumvalues -%}
+{{enumvalue.name}}{% if existsIn(enumvalue, "initializer") %} {{enumvalue.initializer}}{% endif -%}
+{% if not loop.is_last %}, {% endif %}{% endfor -%}
+ }{% endif -%}
+{% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicSlots") -%}
+**Public Slots inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicSlots -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedSlots") -%}
+**Protected Slots inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedSlots -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicSignals") -%}
+**Public Signals inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicSignals -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedSignals") -%}
+**Protected Signals inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedSignals -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicEvents") -%}
+**Public Events inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicEvents -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedEvents") -%}
+**Protected Events inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedEvents -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicFunctions") -%}
+**Public Functions inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicFunctions -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedFunctions") -%}
+**Protected Functions inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedFunctions -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicProperties") -%}
+**Public Properties inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicProperties -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedProperties") -%}
+**Protected Properties inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedProperties -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "publicAttributes") -%}
+**Public Attributes inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.publicAttributes -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if existsIn(base, "protectedAttributes") -%}
+**Protected Attributes inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.protectedAttributes -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{% if existsIn(base, "friends") %}**Friends inherited from [{{base.name}}]({{base.url}})**
+
+| | Name |
+| -------------- | -------------- |
+{% for child in base.friends -%}| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**{% if child.type != "class" -%}
+({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% endif %} {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{% endfor -%}
\ No newline at end of file
diff --git a/utils/doxy_templates/class_members_tables.tmpl b/utils/doxy_templates/class_members_tables.tmpl
new file mode 100644
index 00000000..38ccd5b0
--- /dev/null
+++ b/utils/doxy_templates/class_members_tables.tmpl
@@ -0,0 +1,285 @@
+{%- if exists("publicClasses") %}## Public Classes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicClasses -%}
+| {{child.kind}} | **[{{last(stripNamespace(child.name))}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedClasses") %}## Protected Classes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedClasses -%}
+| {{child.kind}} | **[{{last(stripNamespace(child.name))}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicTypes") %}## Public Types
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicTypes -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{{child.kind}}{% if existsIn(child, "type") %} {{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if child.kind == "enum" %}{ {% for enumvalue in child.enumvalues -%}
+{{enumvalue.name}}{% if existsIn(enumvalue, "initializer") %} {{enumvalue.initializer}}{% endif -%}
+{% if not loop.is_last %}, {% endif %}{% endfor -%}
+ }{% endif -%}
+{% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedTypes") %}## Protected Types
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedTypes -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{{child.kind}}{% if existsIn(child, "type") %} {{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if child.kind == "enum" %}{ {% for enumvalue in child.enumvalues -%}
+{{enumvalue.name}}{% if existsIn(enumvalue, "initializer") %} {{enumvalue.initializer}}{% endif -%}
+{% if not loop.is_last %}, {% endif %}{% endfor -%}
+ }{% endif -%}
+{% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicSlots") %}## Public Slots
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicSlots -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedSlots") %}## Protected Slots
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedSlots -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicSignals") %}## Public Signals
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicSignals -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedSignals") %}## Protected Signals
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedSignals -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicEvents") %}## Public Events
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicEvents -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedEvents") %}## Protected Events
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedEvents -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicFunctions") %}## Public Functions
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicFunctions -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedFunctions") %}## Protected Functions
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedFunctions -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicProperties") %}## Public Properties
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicProperties -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedProperties") %}## Protected Properties
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedProperties -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicAttributes") %}## Public Attributes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicAttributes -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("protectedAttributes") %}## Protected Attributes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in protectedAttributes -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{% if exists("friends") %}## Friends
+
+| | Name |
+| -------------- | -------------- |
+{% for child in friends -%}| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**{% if child.type != "class" -%}
+({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% endif %} {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
diff --git a/utils/doxy_templates/details.tmpl b/utils/doxy_templates/details.tmpl
new file mode 100644
index 00000000..58ea0d66
--- /dev/null
+++ b/utils/doxy_templates/details.tmpl
@@ -0,0 +1,189 @@
+{% if exists("brief") %}{{brief}}
+{% endif -%}
+
+{% if exists("paramList") %}
+**Parameters**:
+
+{% for param in paramList %} * **{{param.name}}** {{param.text}}
+{% endfor %}
+{% endif -%}
+
+{% if exists("returnsList") %}
+**Returns**:
+
+{% for param in returnsList %} * **{{param.name}}** {{param.text}}
+{% endfor %}
+{% endif -%}
+
+{% if exists("exceptionsList") %}
+**Exceptions**:
+
+{% for param in exceptionsList %} * **{{param.name}}** {{param.text}}
+{% endfor %}
+{% endif -%}
+
+{% if exists("templateParamsList") %}
+**Template Parameters**:
+
+{% for param in templateParamsList %} * **{{param.name}}** {{param.text}}
+{% endfor %}
+{% endif -%}
+
+{% if exists("deprecated") %}
+**Deprecated**:
+
+{{deprecated}}
+{% endif -%}
+
+{% if exists("see") %}
+**See**: {% if length(see) == 1 %}{{first(see)}}{% else %}
+
+{% for item in see %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("returns") %}
+**Return**: {% if length(returns) == 1 %}{{first(returns)}}{% else %}
+
+{% for item in returns %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("authors") %}
+**Author**: {% if length(authors) == 1 %}{{first(authors)}}{% else %}
+
+{% for item in authors %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("version") %}
+**Version**: {% if length(version) == 1 %}{{first(version)}}{% else %}
+
+{% for item in version %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("since") %}
+**Since**: {% if length(since) == 1 %}{{first(since)}}{% else %}
+
+{% for item in since %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("date") %}
+**Date**: {% if length(date) == 1 %}{{first(date)}}{% else %}
+
+{% for item in date %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("note") %}
+**Note**: {% if length(note) == 1 %}{{first(note)}}{% else %}
+
+{% for item in note %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("bugs") %}
+**Bug**: {% if length(bugs) == 1 %}{{first(bugs)}}{% else %}
+
+{% for item in bugs %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("tests") %}
+**Test**: {% if length(tests) == 1 %}{{first(tests)}}{% else %}
+
+{% for item in tests %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("todos") %}
+**Todo**: {% if length(todos) == 1 %}{{first(todos)}}{% else %}
+
+{% for item in todos %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("warning") %}
+**Warning**: {% if length(warning) == 1 %}{{first(warning)}}{% else %}
+
+{% for item in warning %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("pre") %}
+**Precondition**: {% if length(pre) == 1 %}{{first(pre)}}{% else %}
+
+{% for item in pre %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("post") %}
+**Postcondition**: {% if length(post) == 1 %}{{first(post)}}{% else %}
+
+{% for item in post %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("copyright") %}
+**Copyright**: {% if length(copyright) == 1 %}{{first(copyright)}}{% else %}
+
+{% for item in copyright %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("invariant") %}
+**Invariant**: {% if length(invariant) == 1 %}{{first(invariant)}}{% else %}
+
+{% for item in invariant %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("remark") %}
+**Remark**: {% if length(remark) == 1 %}{{first(remark)}}{% else %}
+
+{% for item in remark %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("attention") %}
+**Attention**: {% if length(attention) == 1 %}{{first(attention)}}{% else %}
+
+{% for item in attention %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("par") %}
+**Par**: {% if length(par) == 1 %}{{first(par)}}{% else %}
+
+{% for item in par %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("rcs") %}
+**Rcs**: {% if length(rcs) == 1 %}{{first(rcs)}}{% else %}
+
+{% for item in rcs %} * {{item}}
+{% endfor %}{% endif %}
+{% endif -%}
+
+{% if exists("reimplements") %}
+**Reimplements**: [{{reimplements.fullname}}]({{reimplements.url}})
+
+{% endif -%}
+
+{% if exists("reimplementedBy") %}
+**Reimplemented by**: {% for impl in reimplementedBy %}[{{impl.fullname}}]({{impl.url}}){% if not loop.is_last %}, {% endif %}{% endfor %}
+
+{% endif -%}
+
+{% if exists("details") %}
+{{details}}
+
+{% endif -%}
+
+{% if exists("inbody") %}
+{{inbody}}
+
+{% endif -%}
\ No newline at end of file
diff --git a/utils/doxy_templates/footer.tmpl b/utils/doxy_templates/footer.tmpl
new file mode 100644
index 00000000..c6036d76
--- /dev/null
+++ b/utils/doxy_templates/footer.tmpl
@@ -0,0 +1 @@
+-------------------------------
\ No newline at end of file
diff --git a/utils/doxy_templates/header.tmpl b/utils/doxy_templates/header.tmpl
new file mode 100644
index 00000000..f85e900d
--- /dev/null
+++ b/utils/doxy_templates/header.tmpl
@@ -0,0 +1,5 @@
+{% if exists("title") -%}
+# {{title}}
+{% else if exists("kind") and kind != "page" -%}
+# {{name}} {{title(kind)}} Reference
+{% endif %}
diff --git a/utils/doxy_templates/index.tmpl b/utils/doxy_templates/index.tmpl
new file mode 100644
index 00000000..9d4d98dd
--- /dev/null
+++ b/utils/doxy_templates/index.tmpl
@@ -0,0 +1,10 @@
+
+{% for child0 in children %}* **{{child0.kind}} [{{child0.title}}]({{child0.url}})** {% if existsIn(child0, "brief") %}
{{child0.brief}}{% endif %}{% if existsIn(child0, "children") %}{% for child1 in child0.children %}
+ * **{{child1.kind}} [{{last(stripNamespace(child1.title))}}]({{child1.url}})** {% if existsIn(child1, "brief") %}
{{child1.brief}}{% endif %}{% if existsIn(child1, "children") %}{% for child2 in child1.children %}
+ * **{{child2.kind}} [{{last(stripNamespace(child2.title))}}]({{child2.url}})** {% if existsIn(child2, "brief") %}
{{child2.brief}}{% endif %}{% if existsIn(child2, "children") %}{% for child3 in child2.children %}
+ * **{{child3.kind}} [{{last(stripNamespace(child3.title))}}]({{child3.url}})** {% if existsIn(child3, "brief") %}
{{child3.brief}}{% endif %}{% if existsIn(child3, "children") %}{% for child4 in child3.children %}
+ * **{{child4.kind}} [{{last(stripNamespace(child4.title))}}]({{child4.url}})** {% if existsIn(child4, "brief") %}
{{child4.brief}}{% endif %}{% if existsIn(child4, "children") %}{% for child5 in child4.children %}
+ * **{{child5.kind}} [{{last(stripNamespace(child5.title))}}]({{child5.url}})** {% if existsIn(child5, "brief") %}
{{child5.brief}}{% endif %}{% if existsIn(child5, "children") %}{% for child6 in child5.children %}
+ * **{{child6.kind}} [{{last(stripNamespace(child6.title))}}]({{child6.url}})** {% if existsIn(child6, "brief") %}
{{child6.brief}}{% endif %}{% if existsIn(child6, "children") %}{% for child7 in child6.children %}
+ * **{{child7.kind}} [{{last(stripNamespace(child7.title))}}]({{child7.url}})** {% if existsIn(child7, "brief") %}
{{child7.brief}}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}{% endfor %}{% endif %}
+{% endfor %}
diff --git a/utils/doxy_templates/index_classes.tmpl b/utils/doxy_templates/index_classes.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_classes.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/index_examples.tmpl b/utils/doxy_templates/index_examples.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_examples.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/index_files.tmpl b/utils/doxy_templates/index_files.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_files.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/index_groups.tmpl b/utils/doxy_templates/index_groups.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_groups.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/index_namespaces.tmpl b/utils/doxy_templates/index_namespaces.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_namespaces.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/index_pages.tmpl b/utils/doxy_templates/index_pages.tmpl
new file mode 100644
index 00000000..468824a9
--- /dev/null
+++ b/utils/doxy_templates/index_pages.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% include "index" %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/kind_class.tmpl b/utils/doxy_templates/kind_class.tmpl
new file mode 100644
index 00000000..6841b1fb
--- /dev/null
+++ b/utils/doxy_templates/kind_class.tmpl
@@ -0,0 +1,40 @@
+{% include "header" -%}
+
+{% include "breadcrumbs" %}
+
+{% if exists("brief") %}{{brief}}
+
+{% endif -%}
+
+{% if exists("includes") %}
+`#include {{includes}}`
+
+{% endif -%}
+
+{%- if exists("baseClasses") %}Inherits from {% for child in baseClasses %}{% if existsIn(child, "url") %}[{{child.name}}]({{child.url}}){% else %}{{child.name}}{% endif %}{% if not loop.is_last %}, {% endif %}{% endfor %}
+
+{% endif -%}
+{%- if exists("derivedClasses") %}Inherited by {% for child in derivedClasses %}{% if existsIn(child, "url") %}[{{child.name}}]({{child.url}}){% else %}{{child.name}}{% endif %}{% if not loop.is_last %}, {% endif %}{% endfor %}
+
+{% endif -%}
+
+{%- include "class_members_tables" -%}
+
+{% if hasAdditionalMembers %}## Additional inherited members
+
+{% include "class_members_inherited_tables" %}
+{% endif -%}
+
+{% if hasDetails %}## Detailed Description
+
+```cpp{% if exists("templateParams") %}
+template <{% for param in templateParams %}{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif %}{% if not loop.is_last %},
+{% endif %}{% endfor %}>{% endif %}
+{% if kind == "interface" %}class{% else %}{{kind}}{% endif %} {{name}};
+```
+
+{% include "details" %}{% endif -%}
+
+{% include "class_members_details" -%}
+
+{% include "footer" %}
\ No newline at end of file
diff --git a/utils/doxy_templates/kind_example.tmpl b/utils/doxy_templates/kind_example.tmpl
new file mode 100644
index 00000000..1ce6706c
--- /dev/null
+++ b/utils/doxy_templates/kind_example.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% if exists("details") %}{{details}}{% endif %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/kind_file.tmpl b/utils/doxy_templates/kind_file.tmpl
new file mode 100644
index 00000000..153411b2
--- /dev/null
+++ b/utils/doxy_templates/kind_file.tmpl
@@ -0,0 +1,22 @@
+{% include "header" -%}
+
+{% if exists("brief") %}{{brief}}
+
+{% endif -%}
+
+{% include "nonclass_members_tables" -%}
+
+{% if hasDetails %}## Detailed Description
+
+{% include "details" %}{% endif -%}
+
+{% include "nonclass_members_details" -%}
+
+{% if exists("programlisting")%}## Source code
+
+```cpp
+{{programlisting}}
+```
+{% endif %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/kind_group.tmpl b/utils/doxy_templates/kind_group.tmpl
new file mode 100644
index 00000000..f765e1cc
--- /dev/null
+++ b/utils/doxy_templates/kind_group.tmpl
@@ -0,0 +1,17 @@
+{% include "header" -%}
+
+{% include "breadcrumbs" -%}
+
+{% if exists("brief") %}{{brief}}
+
+{% endif -%}
+
+{% include "nonclass_members_tables" -%}
+
+{% if hasDetails %}## Detailed Description
+
+{% include "details" %}{% endif -%}
+
+{% include "nonclass_members_details" -%}
+
+{% include "footer" -%}
diff --git a/utils/doxy_templates/kind_nonclass.tmpl b/utils/doxy_templates/kind_nonclass.tmpl
new file mode 100644
index 00000000..2bc9a75c
--- /dev/null
+++ b/utils/doxy_templates/kind_nonclass.tmpl
@@ -0,0 +1,17 @@
+{% include "header" -%}
+
+{% include "breadcrumbs" -%}
+
+{% if exists("brief") %}{{brief}}
+
+{% endif -%}
+
+{% include "nonclass_members_tables" -%}
+
+{% if hasDetails %}## Detailed Description
+
+{% include "details" %}{% endif -%}
+
+{% include "nonclass_members_details" %}
+
+{% include "footer" %}
\ No newline at end of file
diff --git a/utils/doxy_templates/kind_page.tmpl b/utils/doxy_templates/kind_page.tmpl
new file mode 100644
index 00000000..1ce6706c
--- /dev/null
+++ b/utils/doxy_templates/kind_page.tmpl
@@ -0,0 +1,5 @@
+{% include "header" %}
+
+{% if exists("details") %}{{details}}{% endif %}
+
+{% include "footer" %}
diff --git a/utils/doxy_templates/member_details.tmpl b/utils/doxy_templates/member_details.tmpl
new file mode 100644
index 00000000..5332d893
--- /dev/null
+++ b/utils/doxy_templates/member_details.tmpl
@@ -0,0 +1,86 @@
+{% if kind in ["function", "slot", "signal", "event"] -%}
+```cpp
+{% if exists("templateParams") -%}
+template <{% for param in templateParams %}{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},
+{% endif %}{% endfor %}>
+{% endif -%}
+
+{% if static %}static {% endif -%}
+{% if inline %}inline {% endif -%}
+{% if explicit %}explicit {% endif -%}
+{% if virtual %}virtual {% endif -%}
+
+{% if exists("typePlain") %}{{typePlain}} {% endif %}{{name}}{% if length(params) > 0 -%}
+(
+{% for param in params %} {{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif %}
+{% endfor -%}
+){% else -%}
+(){% endif -%}
+
+{% if const %} const{% endif -%}
+{% if override %} override{% endif -%}
+{% if default %} =default{% endif -%}
+{% if deleted %} =deleted{% endif -%}
+{% if pureVirtual %} =0{% endif %}
+```{% endif -%}
+
+{% if kind == "enum" -%}
+| Enumerator | Value | Description |
+| ---------- | ----- | ----------- |
+{% for enumvalue in enumvalues %}| {{enumvalue.name}} | {% if existsIn(enumvalue, "initializer") -%}
+{{replace(enumvalue.initializer, "= ", "")}}{% endif -%}
+| {% if existsIn(enumvalue, "brief") %}{{enumvalue.brief}}{% endif %} {% if existsIn(enumvalue, "details") %}{{enumvalue.details}}{% endif %} |
+{% endfor %}
+{% endif -%}
+
+{% if kind in ["variable", "property"] -%}
+```cpp
+{% if static %}static {% endif -%}
+{% if exists("typePlain") %}{{typePlain}} {% endif -%}{{name}}{% if exists("initializer") %} {{initializer}}{% endif %};
+```{% endif -%}
+
+{% if kind == "typedef" -%}
+```cpp
+{{definition}};
+```{% endif -%}
+
+{% if kind == "using" -%}
+```cpp
+{% if exists("templateParams") -%}
+template <{% for param in templateParams %}{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},
+{% endif %}{% endfor %}>
+{% endif -%}
+{{definition}};
+```{% endif -%}
+
+{% if kind == "friend" -%}
+```cpp
+friend {% if exists("typePlain") %}{{typePlain}} {% endif -%}
+{{name}}{% if exists("params") %}{% endif -%}
+{% if length(params) > 0 -%}
+(
+{% for param in params %} {{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},
+{% endif %}
+{% endfor -%}
+){% else if typePlain != "class" -%}
+(){% endif %};
+```{% endif -%}
+
+{% if kind == "define" -%}
+```cpp
+#define {{name}}{% if exists("params") -%}
+(
+{% for param in params %} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},
+{% endif -%}
+{% endfor %}
+)
+{% else %} {% endif -%}
+{% if exists("initializer") %}{{initializer}}{% endif %}
+```{% endif %}
+
+{% include "details" -%}
\ No newline at end of file
diff --git a/utils/doxy_templates/meta.tmpl b/utils/doxy_templates/meta.tmpl
new file mode 100644
index 00000000..e69de29b
diff --git a/utils/doxy_templates/nonclass_members_details.tmpl b/utils/doxy_templates/nonclass_members_details.tmpl
new file mode 100644
index 00000000..dd1b08cd
--- /dev/null
+++ b/utils/doxy_templates/nonclass_members_details.tmpl
@@ -0,0 +1,24 @@
+{% if exists("publicTypes") %}## Types Documentation
+
+{% for child in publicTypes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif %}
+{% if exists("publicFunctions") %}## Functions Documentation
+
+{% for child in publicFunctions %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif %}
+{% if exists("publicAttributes") %}## Attributes Documentation
+
+{% for child in publicAttributes %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif %}
+{% if exists("defines") %}## Macro Documentation
+
+{% for child in defines %}### {{child.kind}} {{child.name}}
+
+{{ render("member_details", child) }}
+{% endfor %}{% endif %}
\ No newline at end of file
diff --git a/utils/doxy_templates/nonclass_members_tables.tmpl b/utils/doxy_templates/nonclass_members_tables.tmpl
new file mode 100644
index 00000000..fb8093df
--- /dev/null
+++ b/utils/doxy_templates/nonclass_members_tables.tmpl
@@ -0,0 +1,147 @@
+{% if exists("groups") %}## Modules
+
+| Name |
+| -------------- |
+{% for child in groups -%}
+| **[{{child.title}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{%- endfor %}
+{% endif -%}
+
+{% if exists("dirs") %}## Directories
+
+| Name |
+| -------------- |
+{% for child in dirs -%}
+| **[{{child.title}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{%- endfor %}
+{% endif -%}
+
+{% if exists("files") %}## Files
+
+| Name |
+| -------------- |
+{% for child in files -%}
+| **[{{child.title}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{%- endfor %}
+{% endif -%}
+
+{%- if exists("namespaces") %}## Namespaces
+
+| Name |
+| -------------- |
+{% for child in namespaces -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicClasses") %}## Classes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicClasses -%}
+| {{child.kind}} | **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicTypes") %}## Types
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicTypes -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{{child.kind}}{% if existsIn(child, "type") %} {{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if child.kind == "enum" %}{ {% for enumvalue in child.enumvalues -%}
+{{enumvalue.name}}{% if existsIn(enumvalue, "initializer") %} {{enumvalue.initializer}}{% endif -%}
+{% if not loop.is_last %}, {% endif %}{% endfor -%}
+ }{% endif -%}
+{% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicSlots") %}## Slots
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicSlots -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicSignals") %}## Signals
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicSignals -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicFunctions") %}## Functions
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicFunctions -%}
+| {% if existsIn(child, "templateParams") -%}
+template <{% for param in child.templateParams -%}
+{{param.typePlain}} {{param.name}}{% if existsIn(param, "defvalPlain") %} ={{param.defvalPlain}}{% endif -%}
+{% if not loop.is_last %},{% endif -%}
+{% endfor %}\>
{% endif -%}
+{% if child.virtual %}virtual {% endif -%}
+{% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}](#function-{{child.name}})**({% for param in child.params -%}
+{{param.type}} {{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif -%}
+{% if not loop.is_last %}, {% endif -%}
+{% endfor %}){% if child.const %} const{% endif -%}
+{% if child.override %} override{% endif -%}
+{% if child.default %} =default{% endif -%}
+{% if child.deleted %} =deleted{% endif -%}
+{% if child.pureVirtual %} =0{% endif -%}
+ {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("publicAttributes") %}## Attributes
+
+| | Name |
+| -------------- | -------------- |
+{% for child in publicAttributes -%}
+| {% if existsIn(child, "type") %}{{child.type}} {% endif -%}
+| **[{{child.name}}]({{child.url}})** {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}
+{%- if exists("defines") %}## Defines
+
+| | Name |
+| -------------- | -------------- |
+{% for child in defines -%}
+| {% if existsIn(child, "type") %}{{child.type}}{% endif %} | **[{{child.name}}]({{child.url}})**{% if existsIn(child, "params") %}({% for param in child.params %}{{param.name}}{% if existsIn(param, "defval") %} ={{param.defval}}{% endif %}{% if not loop.is_last %}, {% endif %}{% endfor %}){% endif %} {% if existsIn(child, "brief") %}
{{child.brief}}{% endif %} |
+{% endfor %}
+{% endif -%}