{#- Siehe https://gitlab.gwdg.de/GAUMI-fginfo/fg-website/-/blob/better-content-renderer/docs/content.md -#} {%- macro render_content(content, lang) -%} {{ render_blocks(content, lang) }} {%- endmacro -%} {%- macro render_attr_extra(key, value, lang) %} {%- if value != None -%} {%- if value is mapping and value['value'] != None -%} {%- if value['escape'] %} {{ key }}="{{ value['value']|e }}" {%- else %} {{ key }}="{{ value['value'] }}" {%- endif -%} {%- elif value is string %} {{ key }}="{{ value }}" {%- endif -%} {%- endif -%} {%- endmacro -%} {%- macro render_attr(attr, lang, extra_classes = [], extra = {}) -%} {%- set id = attr['id']|d("") -%} {%- set classes = attr['classes']|d([]) + extra_classes -%} {%- set attr_extra = attr['extra']|d({}) -%} {%- if id %} id="{{ id }}"{%- endif -%} {%- if classes|length %} class="{{ classes|join(' ') }}"{%- endif -%} {%- for key, value in attr_extra.items() -%} {%- if key not in extra -%} {{ render_attr_extra(key, value, lang) }} {%- endif -%} {%- endfor -%} {%- for key, value in extra.items() -%} {{ render_attr_extra(key, value, lang) }} {%- endfor -%} {%- endmacro -%} {%- macro render_orderedlist_type(style, delim) -%} {#- TODO also use delim: default | period | one_parenthesis | two_parentheses -#} {%- if style == "default" -%}1 {%- elif style == "lower_alpha" -%}a {%- elif style == "upper_alpha" -%}A {%- elif style == "lower_roman" -%}i {%- elif style == "upper_roman" -%}I {%- elif style == "example" -%}1 {%- else -%}1 {%- endif -%} {%- endmacro -%} {%- macro render_image(url, alt, lang, attr = None, title = None) -%} 
		{%- if alt is string -%}
			{{ alt|e }}
		{%- else -%}
			{{ render_inlines(alt, lang) }}
		{%- endif -%}
	{%- endmacro -%} {%- macro render_blocks_or_inlines(bsois, lang) -%} {%- for boi in bsois -%} {{ render_block_or_inline(boi, lang) }} {%- endfor -%} {%- endmacro -%} {%- macro render_block_or_inline(boi, lang) -%} {%- set eclass = boi['class'] -%} {%- if eclass == "block" -%} {{ render_block(boi,lang) }} {%- elif eclass == "inline" -%} {{ render_inline(boi,lang) }} {%- else -%}
ERROR: Cannot render block or inline: '{{ boi|e }}'
{%- endif -%} {%- endmacro -%} {#- ############################ BLOCKS ################################### -#} {%- macro render_blocks(blocks, lang) -%} {%- for block in blocks -%} {{ render_block(block,lang) }} {%- endfor -%} {%- endmacro -%} {%- macro render_block(block, lang) -%} {%- set etype = block['type'] -%} {%- if etype == "header" -%} {{ render_block_header(block, lang) }} {%- elif etype == "paragraph" -%} {{ render_block_paragraph(block, lang) }} {%- elif etype == "bulletlist" -%} {{ render_block_bulletlist(block, lang) }} {%- elif etype == "plain" -%} {{ render_block_plain(block, lang) }} {%- elif etype == "codeblock" -%} {{ render_block_codeblock(block, lang) }} {%- elif etype == "blockquote" -%} {{ render_block_blockquote(block, lang) }} {%- elif etype == "blockcontainer" -%} {{ render_block_blockcontainer(block, lang) }} {%- elif etype == "horizontalrule" -%} {{ render_block_horizontalrule(block, lang) }} {%- elif etype == "rawblock" -%} {{ render_block_rawblock(block, lang) }} {%- elif etype == "orderedlist" -%} {{ render_block_orderedlist(block, lang) }} {%- else -%}
ERROR: Unhandled block type: '{{ etype|e }}'
{%- endif -%} {%- endmacro -%} {%- macro render_block_header(block, lang) -%} {%- set level = block['level'] -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%}
{{ render_inlines(content, lang) }}
{%- endmacro -%} {%- macro render_block_paragraph(block, lang) -%} {%- set content = block['content'] -%}

{{ render_inlines(content, lang) }}

{%- endmacro -%} {%- macro render_block_bulletlist(block, lang) -%} {%- set items = block['items'] -%} {%- set count = block['count'] -%} {%- endmacro -%} {%- macro render_block_plain(block, lang) -%} {%- set content = block['content'] -%} {{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_block_codeblock(block, lang) -%} {%- set attr = block['attr'] -%} {%- set code = block['code'] -%} {%- set code_lines = block['code_lines'] -%}
{{ code|e }}
{%- endmacro -%} {%- macro render_block_blockquote(block, lang) -%} {%- set content = block['content'] -%}
{{ render_blocks(content, lang) }}
{%- endmacro -%} {%- macro render_block_blockcontainer(block, lang) -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%}
{{ render_blocks(content, lang) }}
{%- endmacro -%} {%- macro render_block_horizontalrule(block, lang) -%}
{%- endmacro -%} {%- macro render_block_rawblock(block, lang) -%} {%- set format = block['format'] -%} {%- set raw = block['raw'] -%} {%- if format == "html" -%}
{{ raw }}
{%- else -%}
{{ raw | e }}
{%- endif -%} {%- endmacro -%} {%- macro render_block_orderedlist(block, lang) -%} {%- set items = block['items'] -%} {%- set count = block['count'] -%} {%- set start = block['start'] -%} {%- set style = block['style'] -%} {%- set delim = block['delim'] -%} {#- ol start="{{ start|e }}" style="list-style-type: {{ render_orderedlist_type(style, delim) }};" -#}
    {%- for item in items -%}
  1. {{ render_blocks(item, lang) }}
  2. {%- endfor -%}
{%- endmacro -%} {#- ############################ INLINES ################################## -#} {%- macro render_inlines(inlines, lang) -%} {%- for inline in inlines -%} {{ render_inline(inline,lang) }} {%- endfor -%} {%- endmacro -%} {%- macro render_inline(inline, lang) -%} {%- set etype = inline['type'] -%} {%- if etype == "space" -%} {{ render_inline_space(inline, lang) }} {%- elif etype == "string" -%} {{ render_inline_string(inline, lang) }} {%- elif etype == "linebreak" -%} {{ render_inline_linebreak(inline, lang) }} {%- elif etype == "strong" -%}{{ render_inline_simple(inline, lang, "b") }} {%- elif etype == "emph" -%}{{ render_inline_simple(inline, lang, "i") }} {%- elif etype == "strikeout" -%}{{ render_inline_simple(inline, lang, "s") }} {%- elif etype == "superscript" -%}{{ render_inline_simple(inline, lang, "sup") }} {%- elif etype == "subscript" -%}{{ render_inline_simple(inline, lang, "sub") }} {%- elif etype == "underline" -%}{{ render_inline_underline(inline, lang) }} {%- elif etype == "smallcaps" -%}{{ render_inline_smallcaps(inline, lang) }} {%- elif etype == "inlinecontainer" -%} {{ render_inline_inlinecontainer(inline, lang) }} {%- elif etype == "rawinline" -%} {{ render_inline_rawinline(inline, lang) }} {%- elif etype == "code" -%} {{ render_inline_code(inline, lang) }} {%- elif etype == "quoted" -%} {{ render_inline_quoted(inline, lang) }} {%- elif etype == "footnote" -%} {{ render_inline_footnote(inline, lang) }} {%- elif etype == "link" -%} {{ render_inline_link(inline, lang) }} {%- elif etype == "image" -%} {{ render_inline_image(inline, lang) }} {%- elif etype == "math" -%} {{ render_inline_math(inline, lang) }} {%- elif etype == "softbreak" -%} {{ render_inline_softbreak(inline, lang) }} {%- else -%}
ERROR: Unhandled inline type: '{{ etype|e }}'
{%- endif -%} {%- endmacro -%} {%- macro render_inline_space(inline, lang) %} {% endmacro -%} {%- macro render_inline_string(inline, lang) -%} {%- set text = inline['text'] -%} {{ text|e }} {%- endmacro -%} {%- macro render_inline_linebreak(inline, lang) -%}
{%- endmacro -%} {%- macro render_inline_simple(inline, lang, tag) -%} {%- set content = inline['content'] -%} <{{ tag }}>{{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_inline_underline(inline, lang) -%} {%- set content = inline['content'] -%} {{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_inline_smallcaps(inline, lang) -%} {%- set content = inline['content'] -%} {{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_inline_inlinecontainer(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set content = inline['content'] -%} {{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_inline_rawinline(inline, lang) -%} {%- set format = inline['format'] -%} {%- set raw = inline['raw'] -%} {%- if format == "html" -%} {{ raw }} {%- else -%} {{ raw | e }} {%- endif -%} {%- endmacro -%} {%- macro render_inline_code(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set code = inline['code'] -%} {%- set code_lines = inline['code_lines'] -%} {{ code|e }} {%- endmacro -%} {%- macro render_inline_quoted(inline, lang) -%} {%- set quotetype = inline['quotetype'] -%} {%- set content = inline['content'] -%} {%- if quotetype == "single" -%} {{ t[lang].quotations.single.left }}{{ render_inlines(content, lang) }}{{ t[lang].quotations.single.right }} {%- elif quotetype == "double" -%} {{ t[lang].quotations.double.left }}{{ render_inlines(content, lang) }}{{ t[lang].quotations.double.right }} {%- else -%} "{{ render_inlines(content, lang) }}" {%- endif -%} {%- endmacro -%} {%- macro render_inline_footnote(inline, lang) -%} {%- set content = inline['content'] -%} [TODO FOOTNOTES] {%- endmacro -%} {%- macro render_inline_link(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set content = inline['content'] -%} {%- set url = inline['url'] -%} {%- set title = inline['title'] -%} {{ link.render(url, content, lang, attr, title) }} {%- endmacro -%} {%- macro render_inline_image(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set alt = inline['alt'] -%} {%- set url = inline['url'] -%} {%- set title = inline['title'] -%} {{ render_image(url, alt, lang, attr, title) }} {%- endmacro -%} {%- macro render_inline_math(inline, lang) -%} {%- set mathtype = inline['mathtype'] -%} {%- set math = inline['math'] -%} {%- if mathtype == "inline" -%} \({{ math|e }}\) {%- elif mathtype == "display" -%} \[{{ math|e }}\] {%- else -%}
ERROR: Unhandled mathtype: '{{ mathtype|e }}'
{%- endif -%} {%- endmacro -%} {%- macro render_inline_softbreak(inline, lang) -%} ­ {%- endmacro -%}