mirror of
https://github.com/boostorg/json.git
synced 2026-01-19 16:22:20 +00:00
965 lines
29 KiB
Django/Jinja
965 lines
29 KiB
Django/Jinja
{%- macro write_entity(entity) -%}
|
|
{% if entity.access != Access.private or Config.include_private -%}
|
|
{%- if entity is Namespace -%}
|
|
{{ write_namespace(entity) }}
|
|
{%- elif entity is Type -%}
|
|
{{ write_type(entity) }}
|
|
{%- elif entity is OverloadSet -%}
|
|
{{ write_overload_set(entity) }}
|
|
{%- elif entity is Variable -%}
|
|
{{ write_variable(entity) }}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro write_namespace(entity) -%}
|
|
{%- for m in entity.members.values() | select("Type") | sort -%}
|
|
{{ write_type(m) }}
|
|
{%- endfor -%}
|
|
|
|
{%- for m in entity.members.values() | select("OverloadSet") | sort -%}
|
|
{{ write_overload_set(m) }}
|
|
{%- endfor -%}
|
|
|
|
{%- for m in entity.members.values() | select("Variable") | sort -%}
|
|
{{ write_variable(m) }}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro write_type(entity) %}
|
|
{% call(segment) section(entity) %}
|
|
{%- if segment == "summary" -%}
|
|
|
|
{%- if entity is Scope -%}
|
|
{#- public members -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.public),
|
|
"Types") }}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.nonstatic),
|
|
"Member Functions") }} {#- -#}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.static),
|
|
"Static Member Functions") }}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.public)
|
|
| rejectattr("is_static"),
|
|
"Data Members") }}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects),
|
|
"Static Data Members") }}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.friend),
|
|
"Friends") }}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.free),
|
|
"Related Non-member Functions") }}
|
|
{#- protected members -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.protected),
|
|
"Protected Types") }} {#- -#}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("kind", "eq", FunctionKind.nonstatic),
|
|
"Protected Member Functions") }} {#- -#}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("kind", "eq", FunctionKind.static),
|
|
"Protected Static Member Functions") }} {#- -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| rejectattr("is_static"),
|
|
"Protected Data Members") }} {#- -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects),
|
|
"Protected Static Members") }} {#- -#}
|
|
{#- private members -#}
|
|
{%- if Config.get("include_private") %}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.private),
|
|
"Private Types") }} {#- -#}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("kind", "eq", FunctionKind.nonetatic),
|
|
"Private Member Functions") }} {#- -#}
|
|
{{ function_summary_table(
|
|
entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("kind", "eq", FunctionKind.static),
|
|
"Private Static Member Functions") }} {#- -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.private)
|
|
| rejectattr("is_static"),
|
|
"Private Data Members") }} {#- -#}
|
|
{{ simple_summary_table(
|
|
entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects),
|
|
"Private Static Members") }} {#- -#}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
|
|
{% if entity is Enum -%}
|
|
{%- call(member) summary_table(entity.objects, "Values") -%}
|
|
|``{{ code_escape(member.name) }}``
|
|
|{{ description(member.brief) | trim }}
|
|
{%- endcall -%}
|
|
{%- else -%}
|
|
{{ simple_summary_table(entity.objects, "Values") }}
|
|
{%- endif -%}
|
|
|
|
{%- elif segment == "members" -%}
|
|
|
|
{%- if entity is Scope -%}
|
|
{#- public member subsections #}
|
|
:leveloffset: +1
|
|
|
|
{% for member in entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.public) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.nonstatic) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.static) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.public)
|
|
| rejectattr("is_static") -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.friend) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.public)
|
|
| selectattr("kind", "eq", FunctionKind.free) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{#- protected member subsections -#}
|
|
{%- for member in entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.protected) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("kind", "eq", FunctionKind.nonstatic) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("kind", "eq", FunctionKind.static) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| rejectattr("is_static") -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.protected)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{#- private members -#}
|
|
{%- if Config.get("include_private") %}
|
|
{%- for member in entity.members.values()
|
|
| select("Type")
|
|
| selectattr("access", "eq", Access.private) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("kind", "eq", FunctionKind.nonstatic) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("OverloadSet")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("kind", "eq", FunctionKind.static) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.private)
|
|
| rejectattr("is_static") -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{%- for member in entity.members.values()
|
|
| select("Variable")
|
|
| selectattr("access", "eq", Access.private)
|
|
| selectattr("is_static")
|
|
| reject("in", entity.objects) -%}
|
|
{{ write_entity(member) }}
|
|
{% endfor %}
|
|
{% endif -%}
|
|
|
|
:leveloffset: -1
|
|
{%- endif -%}
|
|
|
|
{%- endif -%}
|
|
|
|
{% endcall %}
|
|
{% endmacro -%}
|
|
|
|
|
|
{%- macro write_overload_set(oset) -%}
|
|
[id={{ anchor(oset[0]) }}
|
|
{%- if oset.location -%}
|
|
,source-location="include/{{oset.location.file}}"
|
|
{%- endif -%}
|
|
]
|
|
= ``{{ abridged_fqn(oset[0]) }}``
|
|
{{ description(oset[0].brief) }}
|
|
|
|
{{ heading("Synopsis") }}
|
|
{% if oset.location and (oset.scope is Namespace or oset.is_friend) -%}
|
|
Defined in header {{ source_header(oset.location.file) }}.
|
|
{%- endif %}
|
|
|
|
[source,cpp,subs="+macros,+attributes"]
|
|
----
|
|
{{ overload_set_declaration(oset) }}
|
|
----
|
|
|
|
{% if oset[0].description -%}
|
|
{{ oset_description(oset, title="Description") }}
|
|
{%- endif %}
|
|
|
|
{% if Config.get("convenience_header")
|
|
and oset.location
|
|
and (oset.scope is Namespace
|
|
or (oset.kind in (FunctionKind.free, FunctionKind.friend))) -%}
|
|
Convenience header {{ source_header(Config.convenience_header) }}
|
|
{%- endif %}
|
|
|
|
{% endmacro -%}
|
|
|
|
|
|
{%- macro write_variable(entity) -%}
|
|
{%- call(segment) section(entity) %}{% endcall -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro section(entity) %}
|
|
[id={{ anchor(entity) }}
|
|
{%- if entity.location -%}
|
|
,source-location="include/{{entity.location.file}}"
|
|
{%- endif -%}
|
|
]
|
|
= ``{{ abridged_fqn(entity) }}``
|
|
{{ description(entity.brief) }}
|
|
|
|
{{ heading("Synopsis") }}
|
|
{% if entity.location
|
|
and (entity.scope is Namespace
|
|
or (entity is Function and entity.is_friend)) -%}
|
|
Defined in header {{ source_header(entity.location.file) }}.
|
|
{%- endif %}
|
|
|
|
[source,cpp,subs="+macros,+attributes"]
|
|
----
|
|
{{ entity_declaration(entity) }}
|
|
----
|
|
|
|
{{ caller("summary") }}
|
|
|
|
{% if entity.description -%}
|
|
{{ description(entity.description, title="Description") }}
|
|
{%- endif %}
|
|
|
|
{% if entity.location
|
|
and (entity.scope is Namespace
|
|
or (entity is Function
|
|
and entity.kind in (FunctionKind.free, FunctionKind.friend))) -%}
|
|
Convenience header {{ source_header(Config.convenience_header) }}.
|
|
{%- endif %}
|
|
{{ caller("members") }}
|
|
{% endmacro -%}
|
|
|
|
|
|
{% macro description(parts, nesting=1, title=None) -%}
|
|
{%- for part in parts -%}
|
|
{%- if loop.first and title
|
|
and part is not Section and part is not ParameterList
|
|
-%}
|
|
{{ heading(title) }}
|
|
{% endif -%}
|
|
|
|
{%- if part is Paragraph -%}
|
|
{{ phrase(part) }}{{ "\n\n" }}
|
|
{%- elif part is List -%}
|
|
{{ itemised(part, nesting) }}
|
|
{%- elif part is Section -%}
|
|
{{ subsection(part) }}
|
|
{%- elif part is CodeBlock %}
|
|
[source]
|
|
----
|
|
{% for line in part -%}
|
|
{{line}}
|
|
{% endfor -%}
|
|
----
|
|
{% elif part is ParameterList -%}
|
|
{{ parameter_list(part) }}
|
|
{% elif part is Table -%}
|
|
{{ table(part) }}
|
|
{%- else -%}
|
|
{{ part.unhandled_type() }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro oset_description(oset, nesting=1, title=None) -%}
|
|
{%- set ns = namespace(done_parameters=False) -%}
|
|
{%- for part in oset[0].description -%}
|
|
{%- if loop.first and title
|
|
and part is not Section and part is not ParameterList
|
|
-%}
|
|
{{ heading(title) }}
|
|
{% endif -%}
|
|
|
|
|
|
{%- if part is Paragraph -%}
|
|
{{ phrase(part) }}{{ "\n\n" }}
|
|
{%- elif part is List -%}
|
|
{{ itemised(part, nesting) }}
|
|
{%- elif part is Section -%}
|
|
{%- if part.kind == "see" -%}
|
|
{%- if not ns.done_parameters -%}
|
|
{%- set ns.done_parameters = true -%}
|
|
{{ oset_all_parameter_lists(oset) }}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- if not part.kind == "return" %}{{ subsection(part) }}{% endif -%}
|
|
{%- elif part is CodeBlock %}
|
|
[source]
|
|
----
|
|
{% for line in part -%}
|
|
{{line}}
|
|
{% endfor -%}
|
|
----
|
|
{% elif part is ParameterList -%}
|
|
{%- if not ns.done_parameters -%}
|
|
{%- set ns.done_parameters = true -%}
|
|
{{ oset_all_parameter_lists(oset) }}
|
|
{%- endif -%}
|
|
{%- elif part is Table -%}
|
|
{{ table(part) }}
|
|
{%- else -%}
|
|
{{ part.unhandled_type() }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- if not ns.done_parameters -%}
|
|
{{ oset_all_parameter_lists(oset) }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro oset_all_parameter_lists(oset) -%}
|
|
{%- for kind in [
|
|
ParameterList.TemplateParameters,
|
|
ParameterList.ReturnValues,
|
|
ParameterList.Parameters,
|
|
ParameterList.Exceptions] -%}
|
|
{{ oset_parameter_list(oset, kind) }}
|
|
{% endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro itemised(lst, nesting) -%}
|
|
{%- for item in lst -%}
|
|
{%- for mark in range(0, nesting) -%}
|
|
{%- if lst.is_ordered -%}
|
|
.
|
|
{%- else -%}
|
|
*
|
|
{%- endif %}
|
|
{%- endfor %} {{ description(item, nesting + 1) }}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro subsection(sub) -%}
|
|
{%- if sub.kind in ["note", "warning", "attention"] -%}
|
|
{{ admonition(sub) }}
|
|
{% else -%}
|
|
{{ heading("") }}
|
|
{%- if sub.title %}{{ phrase(sub.title) }}
|
|
{%- elif sub.kind -%}
|
|
{%- if sub.kind == "see" %}See Also
|
|
{%- elif sub.kind == "return" %}Return Value
|
|
{%- elif sub.kind == "author" %}Author
|
|
{%- elif sub.kind == "authors" %}Authors
|
|
{%- elif sub.kind == "version" %}Version
|
|
{%- elif sub.kind == "since" %}Since
|
|
{%- elif sub.kind == "date" %}Date
|
|
{%- elif sub.kind == "pre" %}Preconditions
|
|
{%- elif sub.kind == "post" %}Postconditions
|
|
{%- elif sub.kind == "copyright" %}Copyright
|
|
{%- elif sub.kind == "invariant" %}Invariants
|
|
{%- elif sub.kind == "remark" %}Remarks
|
|
{%- elif sub.kind == "par" %}Paragraph
|
|
{%- elif sub.kind == "rcs"%}RCS
|
|
{%- else %}Unknown
|
|
{%- endif -%}
|
|
{%- endif %}
|
|
{{ description(sub) }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro admonition(sub) -%}
|
|
[
|
|
{%- if sub.kind == "warning" %}WARNING
|
|
{%- elif sub.kind == "note" %}NOTE
|
|
{%- elif sub.kind == "attention" %}IMPORTANT
|
|
{%- else %}{{ sub.kind.upper() }}
|
|
{%- endif -%}
|
|
]
|
|
====
|
|
{{ description(sub) }}
|
|
====
|
|
{% endmacro -%}
|
|
|
|
|
|
{%- macro table(part) -%}
|
|
{% if part.caption %}.{{ phrase(part.caption) }}{% endif %}
|
|
|===
|
|
{%- for row in part %}
|
|
{% for cell in row -%}
|
|
a|{{ description(cell) }}
|
|
{%- endfor %}
|
|
{% endfor %}
|
|
|===
|
|
{% endmacro -%}
|
|
|
|
|
|
{%- macro parameter_list(part) -%}
|
|
{%- set ns = namespace(title="", col="") -%}
|
|
{%- if part.kind == ParameterList.Parameters -%}
|
|
{%- set ns.title = "Parameters" -%}
|
|
{%- set ns.col1 = "Name" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- elif part.kind == ParameterList.TemplateParameters -%}
|
|
{%- set ns.title = "Template Parameters" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- elif part.kind == ParameterList.Exceptions -%}
|
|
{%- set ns.title = "Exceptions" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Thrown On" -%}
|
|
{%- elif part.kind == ParameterList.ReturnValues -%}
|
|
{%- set ns.title = "Return Values" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- endif -%}
|
|
{% call(param_block) summary_table(part, ns.title, cols=[ns.col1, ns.col2]) -%}
|
|
{%- set sep = joiner(", ") -%}
|
|
|
|
|
{%- for item in param_block -%}
|
|
{{ sep() }}``
|
|
{%- if item.type %}{{ phrase(item.type) }} {% endif -%}
|
|
{{ phrase(item.name) }}``
|
|
{%- endfor %}
|
|
|{{ description(param_block.description) }}
|
|
{% endcall -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro oset_parameter_list(oset, kind) -%}
|
|
{%- set ns = namespace(title="", col="") -%}
|
|
{%- if kind == ParameterList.Parameters -%}
|
|
{%- set ns.title = "Parameters" -%}
|
|
{%- set ns.col1 = "Name" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- set ns.duplicates = False -%}
|
|
{%- elif kind == ParameterList.TemplateParameters -%}
|
|
{%- set ns.title = "Template Parameters" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- set ns.duplicates = False -%}
|
|
{%- elif kind == ParameterList.Exceptions -%}
|
|
{%- set ns.title = "Exceptions" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Thrown On" -%}
|
|
{%- set ns.duplicates = True -%}
|
|
{%- elif kind == ParameterList.ReturnValues -%}
|
|
{%- set ns.title = "Return Values" -%}
|
|
{%- set ns.col1 = "Type" -%}
|
|
{%- set ns.col2 = "Description" -%}
|
|
{%- set ns.duplicates = True -%}
|
|
{%- endif -%}
|
|
|
|
{%- set params = [] -%}
|
|
{%- for func in oset -%}
|
|
{%- for part in func.description -%}
|
|
{%- if part is ParameterList and part.kind == kind -%}
|
|
{%- for param in part -%}
|
|
{%- set name = param | map(attribute="name")
|
|
| map(attribute="text") | join -%}
|
|
{%- set type = param | map(attribute="type")
|
|
| map(attribute="text") | join -%}
|
|
{%- set names = params | map("map", attribute="name")
|
|
| map("map", attribute="text") | map("join") -%}
|
|
{%- set types = params | map("map", attribute="type")
|
|
| map("map", attribute="text") | map("join") -%}
|
|
{%- if ns.duplicates or (name not in names) or (type not in types) -%}
|
|
{%- set ___ = params.append(param) -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endfor -%}
|
|
|
|
{%- if kind == ParameterList.ReturnValues -%}
|
|
{%- set ns.did_return_values = False -%}
|
|
{%- for func in oset -%}
|
|
{%- for part in func.description -%}
|
|
{%- if not ns.did_return_values
|
|
and part is Section
|
|
and part.kind == "return" -%}
|
|
{%- set ns.did_return_values = True -%}
|
|
{{ subsection(part) }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
|
|
{% call(param_block) summary_table(params, ns.title, cols=[ns.col1, ns.col2]) -%}
|
|
{%- set sep = joiner(", ") -%}
|
|
|
|
|
{%- for item in param_block -%}
|
|
{{ sep() }}``
|
|
{%- if item.type %}{{ phrase(item.type,in_code="line") }} {% endif -%}
|
|
{{ phrase(item.name,in_code="line") }}``
|
|
{%- endfor %}
|
|
|{{ description(param_block.description) }}
|
|
{% endcall -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro phrase(para, in_code=False, in_link=False) -%}
|
|
{%- for part in para -%}{{ phrase_part(part, in_code=in_code, in_link=False) }}{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro phrase_part(part, in_code=False, in_link=False) -%}
|
|
{%- if part is string -%}
|
|
{{ text_helper(part, in_code=in_code, in_link=False) }}
|
|
{%- elif part is EmDash -%}
|
|
--
|
|
{%- elif part is EnDash -%}
|
|
{{ part.text }}
|
|
{%- elif part is Monospaced -%}
|
|
``{{ phrase(part, in_code="line", in_link=in_link) }}``
|
|
{%- elif part is Emphasised -%}
|
|
__{{ phrase(part, in_code=in_code, in_link=in_link) }}__
|
|
{%- elif part is Strong -%}
|
|
**{{ phrase(part, in_code=in_code, in_link=in_link) }}**
|
|
{%- elif part is EntityRef -%}
|
|
{%- set is_external = Config.get("external_marker")
|
|
and (part.entity.brief | map(attribute="text") | join | trim)
|
|
== Config.get("external_marker") -%}
|
|
pass:q,a,m[
|
|
{%- if is_external -%}
|
|
link:
|
|
{%- for part in part.entity.description -%}
|
|
{%- if part is Section and part.kind == Section.See -%}
|
|
{{ part | map(attribute="text") | join | trim }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- else -%}
|
|
xref:{{ link(part.entity) }}
|
|
{%- endif -%}
|
|
[
|
|
{%- if in_code -%}
|
|
{{ abridged_fqn(part.entity) }}
|
|
{%- else -%}
|
|
``{{ phrase(part, in_code="line", in_link=True) }}``
|
|
{%- endif -%}
|
|
\]]
|
|
{%- elif part is UrlLink -%}
|
|
link:pass:a[{{ escape(part.url) }}][{{ phrase(part, in_code=in_code, in_link=True) }}]
|
|
{%- elif part is Linebreak -%}{{ "\n\n" }}
|
|
{%- elif part is Phrase -%}
|
|
{{ phrase(part, in_code=in_code, in_link=in_link) }}
|
|
{%- else -%}
|
|
{{ part.unhandled_type() }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro link(entity) -%}
|
|
{%- if entity is Enumerator -%}
|
|
{{ link(entity.enum) }}
|
|
{%- else -%}
|
|
{{ anchor(entity) }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro anchor(entity) -%}
|
|
{%- set ns = namespace(path=entity.path) -%}
|
|
{%- if entity.fully_qualified_name.startswith(Config.default_namespace) -%}
|
|
{%- set ns.path = ns.path[2:] -%}
|
|
{%- endif -%}
|
|
{{ Config.link_prefix }}
|
|
{%- set sep = joiner("_") -%}
|
|
{%- for segment in ns.path -%}
|
|
{{ sep() }}{{ sanitize_path_segment(segment.name) }}
|
|
{%- endfor -%}
|
|
{%- if entity.scope and not entity.scope is Namespace -%}
|
|
{%- if (entity is Function or entity is OverloadSet) and entity.is_friend -%}_fr{%- endif -%}
|
|
{%- if (entity is Function or entity is OverloadSet) and entity.is_free -%}_fe{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro sanitize_path_segment(segment) -%}
|
|
{{ segment.replace("[", "_lb")
|
|
.replace("]", "_rb")
|
|
.replace("(", "_lp")
|
|
.replace(")", "_rp")
|
|
.replace("<=>", "_spshp")
|
|
.replace("operator~", "operator_bnot")
|
|
.replace("->", "_arrow")
|
|
.replace("=", "_eq")
|
|
.replace("!", "_not")
|
|
.replace("+", "_plus")
|
|
.replace("-", "_minus")
|
|
.replace("&", "_and")
|
|
.replace("|", "_or")
|
|
.replace("^", "_xor")
|
|
.replace("*", "_star")
|
|
.replace("/", "_slash")
|
|
.replace("%", "_mod")
|
|
.replace("<", "_lt")
|
|
.replace(">", "_gt")
|
|
.replace("~", "_dtor")
|
|
.replace(",", "_comma")
|
|
.replace("::", "_")
|
|
.replace(":", "_")
|
|
.replace(" ", "_") }}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro abridged_fqn(entity) -%}
|
|
{%- set ns = namespace(scope=entity.scope) -%}
|
|
{%- if entity is Function
|
|
and (entity.is_free or entity.is_friend)
|
|
and entity.scope
|
|
and entity.scope is not Namespace -%} {#- friend or related -#}
|
|
{%- set ns.scope = ns.scope.scope -%}
|
|
{%- endif -%}
|
|
{%- set s = ns.scope.fully_qualified_name + '::' + entity.name -%}
|
|
|
|
{%- set prefix = Config.default_namespace + "::" -%}
|
|
{%- if s.startswith(prefix) -%}
|
|
{{ code_escape(s[prefix | length:]) }}
|
|
{%- else -%}
|
|
{{ code_escape(s) }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro entity_declaration(entity) -%}
|
|
{{ template_parameters(entity) }}
|
|
{%- if entity is Variable -%}
|
|
{%- set sp = joiner(" ") -%}
|
|
{%- if entity.is_static %}{{ sp() }}static{% endif -%}
|
|
{%- if entity.is_constexpr %}{{ sp() }}constexpr{% endif %}
|
|
{%- if sp() %}
|
|
{% endif -%}
|
|
{{ phrase(entity.type, in_code="block") }}
|
|
{%- if entity.args %}(*{% else %} {% endif -%}
|
|
{%- endif -%}
|
|
{%- if entity is Type %}{{ entity.declarator }} {% endif -%}
|
|
{{ entity.name }}
|
|
{%- if entity is Variable and entity.args -%}
|
|
){{ phrase(entity.args, in_code="block") }}
|
|
{%- endif -%}
|
|
{%- if entity is Class -%}
|
|
{%- set ns = namespace(sep=':') -%}
|
|
{% for entry in entity.bases %}
|
|
{%- if entry.access != Access.private or Config.include_private %}
|
|
{{ ns.sep }} {{ entry.access }} {% set ns.sep = ',' -%}
|
|
{%- if entry.is_virtual %}virtual {% endif -%}
|
|
{{ phrase(entry.base, in_code="block") }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endif -%}
|
|
{%- if entity is Enum and entity.underlying_type %}
|
|
: {{ phrase(entity.underlying_type, in_code="block") }}
|
|
{%- endif -%}
|
|
{%- if entity is TypeAlias %} = {{ phrase(entity.aliased, in_code="block") }}{% endif -%}
|
|
{%- if entity is Variable and entity.value %} {{ phrase(entity.value, in_code="block") }}{% endif -%}
|
|
;
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro overload_set_declaration(oset) -%}
|
|
{%- set sep = joiner("\n") -%}
|
|
{% for func in oset -%}
|
|
{{ sep() }}{{ function_declaration(func) }}
|
|
{%- if (oset | length) > 1 %} // <{{ loop.index }}>{% endif %}
|
|
{% endfor -%}
|
|
{% endmacro -%}
|
|
|
|
|
|
{%- macro function_declaration(entity) -%}
|
|
{{ template_parameters(entity) }}
|
|
{%- set sp = joiner(" ") -%}
|
|
{%- if entity.is_explicit %}{{ sp() }}explicit{% endif -%}
|
|
{%- if entity.is_static %}{{ sp() }}static{% endif -%}
|
|
{%- if entity.is_constexpr %}{{ sp() }}constexpr{% endif %}
|
|
{%- set ret = phrase(entity.return_type, in_code="block") -%}
|
|
{%- if ret %}{{ sp() }}{{ ret }}{% endif -%}
|
|
{%- if sp() %}
|
|
{% endif -%}
|
|
{{ block_code_escape(entity.name) }}(
|
|
{%- for param in entity.parameters %}
|
|
{{ phrase(param.type, in_code="block") }}
|
|
{%- if param.array %} (&{% endif -%}
|
|
{%- if param.name -%}
|
|
{%- if not param.array %} {% endif -%}
|
|
{{ param.name }}
|
|
{%- endif -%}
|
|
{%- if param.array %}) {{ phrase(param.array, in_code="block") }}{% endif -%}
|
|
{%- if param.default_value %} = {{ phrase(param.default_value, in_code="block") }}{% endif -%}
|
|
|
|
{%- if not loop.last %},{% endif -%}
|
|
{%- endfor -%}
|
|
)
|
|
{%- if entity.refqual or entity.is_const -%}
|
|
{{ " " }}
|
|
{%- if entity.is_const %}const{% endif -%}
|
|
{%- if "lvalue" == entity.refqual %}&
|
|
{%- elif "rvalue" == entity.refqual %}&&
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- if entity.is_noexcept and not entity.is_destructor %} noexcept
|
|
{%- if entity.noexcept_condition -%}
|
|
({{ entity.noexcept_condition }})
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- if not entity.is_noexcept and entity.is_destructor %} noexcept(false){% endif -%}
|
|
{%- if entity.is_deleted %} = delete
|
|
{%- elif entity.is_defaulted and Config.get("show_defaulted") %} = default
|
|
{%- endif -%}
|
|
;
|
|
{%- endmacro %}
|
|
|
|
|
|
{%- macro template_parameters(entity) -%}
|
|
{%- if entity.template_parameters or entity.is_specialization -%}template<{%- endif -%}
|
|
{%- for tparam in entity.template_parameters %}
|
|
{{ phrase(tparam.type, in_code="block") }}
|
|
{%- if tparam.array %} (&{% endif -%}
|
|
{%- if tparam.name -%}
|
|
{%- if not tparam.array %} {% endif -%}
|
|
{{ phrase_part(tparam.name, in_code="block") }}
|
|
{%- endif -%}
|
|
{%- if tparam.array %}) {{ phrase(tparam.array, in_code="block") }}{% endif -%}
|
|
{%- if tparam.default_value %} = {{ phrase(tparam.default_value, in_code="block") }}{% endif -%}
|
|
|
|
{%- if loop.last -%}
|
|
>
|
|
{% else -%}
|
|
,
|
|
{%- endif -%}
|
|
|
|
{%- else -%}
|
|
{%- if entity.is_specialization -%}
|
|
>
|
|
{% endif -%}
|
|
{%- endfor %}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro simple_summary_table(sequence, title) -%}
|
|
{%- call(member) summary_table(sequence | sort, title) -%}
|
|
|<<{{ link(member) }},``{{ code_escape(member.name) }}``>>
|
|
|{{ description(member.brief) | trim }}
|
|
{%- endcall -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro function_summary_table(sequence, title) -%}
|
|
{%- call(member) summary_table(
|
|
sequence | sort, title, cols=["Name", "Description"]) -%}
|
|
|<<{{ link(member) }},``{{ code_escape(member.name) }}``>>
|
|
{%- if member.is_constructor %}{nbsp}[.silver]##[constructor]##{% endif -%}
|
|
{%- if member.is_destructor %}{nbsp}[.silver]##[destructor]##{% endif -%}
|
|
|{{ description(member[0].brief) | trim }}
|
|
{% endcall -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
{%- macro summary_table(sequence, title, cols=["Name", "Description"], frame="all") -%}
|
|
{%- for row in sequence -%}
|
|
{% if loop.first -%}
|
|
{{ heading(title) }}
|
|
|===
|
|
{% for col in cols %}|{{col}}{% endfor %}
|
|
|
|
{% endif -%}
|
|
{{ caller(row) }}
|
|
{% if loop.last %}
|
|
|===
|
|
{% endif %}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{% macro heading(title) -%}
|
|
[discrete]
|
|
=== {{ escape(title) }}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro source_header(path) -%}
|
|
https://github.com/boostorg/json/blob/master/include/{{path}}[<{{path}}>]
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro text_helper(s, in_code=False, in_link=False) -%}
|
|
{%- if s -%}
|
|
{%- set replacements=Config.get("replace_strings", {}) if in_code else {} -%}
|
|
|
|
{%- set ns = namespace(s=s) -%}
|
|
{%- if in_code -%}
|
|
{%- set ns.s = re.sub("\\s+", " ", ns.s, re.U) -%}
|
|
{%- if ns.s.endswith(" &") -%}
|
|
{%- set ns.s = ns.s[:-2] + "&" -%}
|
|
{%- elif ns.s.endswith(" *") -%}
|
|
{%- set ns.s = ns.s[:-2] + "*" -%}
|
|
{%- elif ns.s.endswith(" &&") -%}
|
|
{%- set ns.s = ns.s[:-3] + "&&" -%}
|
|
{%- elif ns.s.endswith(" &...") -%}
|
|
{%- set ns.s = ns.s[:-5] + "&..." -%}
|
|
{%- elif ns.s.endswith(" *...") -%}
|
|
{%- set ns.s = ns.s[:-5] + "*..." -%}
|
|
{%- elif ns.s.endswith(" &&...") -%}
|
|
{%- set ns.s = ns.s[:-6] + "&&..." -%}
|
|
{%- endif -%}
|
|
{%- else -%}
|
|
{%- set ns.s = s -%}
|
|
{%- endif -%}
|
|
{%- for src, tgt in replacements.items() -%}
|
|
{%- set ns.s = re.sub(src, tgt, ns.s, flags=re.U) -%}
|
|
{%- endfor -%}
|
|
{%- if in_code == "block" -%}
|
|
{{ block_code_escape(ns.s) }}
|
|
{%- elif in_code == "line" -%}
|
|
{{ code_escape(ns.s, in_link=in_link) }}
|
|
{%- else -%}
|
|
{{ escape(ns.s) }}
|
|
{%- endif -%}
|
|
{%- else -%}
|
|
{{ s }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro escape(s) -%}
|
|
{{ s.replace("++", "{pp}") }}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro block_code_escape(s) -%}
|
|
{{ s }}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{%- macro code_escape(s, in_link=False) -%}
|
|
{{ s.replace("<=", "++<=++")
|
|
.replace("->", "++->++")
|
|
.replace("]", "\\\\]" if in_link else "]")
|
|
.replace("...", "++...++") }}
|
|
{%- endmacro -%}
|
|
|
|
|
|
{% for entity in entities.values() -%}
|
|
{% if entity is not Namespace -%}
|
|
{% continue %}
|
|
{%- endif -%}
|
|
{% if Config.get("default_namespace")
|
|
and entity.fully_qualified_name != Config.default_namespace -%}
|
|
{% continue %}
|
|
{%- endif -%}
|
|
|
|
{{ write_namespace(entity) }}
|
|
{%- endfor %}
|