{#- Siehe https://gitlab.gwdg.de/GAUMI-fginfo/fg-website/-/blob/better-content-renderer/docs/content.md -#} {%- macro render_content(page, lang, header_level_offset, in_footer) -%} {%- set content = page.content -%} {%- set meta = namespace(header_level_offset=header_level_offset, in_footer=in_footer, page=page) -%} {{ render_blocks(content, lang, meta) }} {%- endmacro -%} {%- macro render_link(link, content, lang, attr = None, title = None) -%} {%- call(objtype, obj, url, relation) common.render_link_raw(link, content, lang, attr, title) -%} {%- if content is string or content is none -%} {%- if content is string and content|length -%} {{ common.encoded_span(content) }} {%- else -%} {{ common.encoded_span(obj.title) }} {%- endif -%} {%- else -%} {{ render_inlines(content, lang) }} {%- endif -%} {%- endcall -%} {%- endmacro -%} {%- macro render_header(content, level, attr, lang, in_footer) -%} {%- call common.render_header_raw(content, level, attr, lang, in_footer=in_footer) -%} {%- if content is string -%} {{ common.encoded_span(content) }} {%- else -%} {{ render_inlines(content, lang) }} {%- endif -%} {%- endcall -%} {%- 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(link, alt, lang, attr = None, title = None) -%} {%- call(resolvedlink, objtype, obj) common.resolve_link(link) -%} {%- set ns = namespace(url=resolvedlink.urlwithanchor) -%} {%- if not resolvedlink.is_external -%} {%- if resolvedlink.url|length -%} {%- set ns.url = [siteurl, ns.url]|join("/") -%} {%- endif -%} {%- endif -%} 
			{%- if alt is string -%}
				{{ alt|e }}
			{%- else -%}
				{{ render_inlines(alt, lang)|striptags|e }}
			{%- endif -%}
		{%- endcall -%} {%- endmacro -%} {#- ############################ BLOCKS ################################### -#} {%- macro render_blocks(blocks, lang, meta) -%} {%- for block in blocks -%} {{ render_block(block, lang, meta) }} {%- endfor -%} {%- endmacro -%} {%- macro render_block(block, lang, meta) -%} {%- set etype = block['etype'] -%} {%- if etype == "header" -%} {{ render_block_header(block, lang, meta) }} {%- elif etype == "paragraph" -%} {{ render_block_paragraph(block, lang, meta) }} {%- elif etype == "bulletlist" -%} {{ render_block_bulletlist(block, lang, meta) }} {%- elif etype == "plain" -%} {{ render_block_plain(block, lang, meta) }} {%- elif etype == "codeblock" -%} {{ render_block_codeblock(block, lang, meta) }} {%- elif etype == "blockquote" -%} {{ render_block_blockquote(block, lang, meta) }} {%- elif etype == "blockcontainer" -%} {{ render_block_blockcontainer(block, lang, meta) }} {%- elif etype == "horizontalrule" -%} {{ render_block_horizontalrule(block, lang, meta) }} {%- elif etype == "rawblock" -%} {{ render_block_rawblock(block, lang, meta) }} {%- elif etype == "orderedlist" -%} {{ render_block_orderedlist(block, lang, meta) }} {%- elif etype == "table" -%} {{ render_block_table(block, lang, meta) }} {%- elif etype == "definitionlist" -%} {{ render_block_definitionlist(block, lang, meta) }} {%- elif etype == "lineblock" -%} {{ render_block_lineblock(block, lang, meta) }} {%- elif etype == "toc" -%} {{ render_block_toc(block, lang, meta) }} {%- else -%}
ERROR: Unhandled block type: '{{ etype|e }}'
{%- endif -%} {%- endmacro -%} {%- macro render_block_header(block, lang, meta) -%} {%- set level = block['level'] -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%} {{ render_header(content, level + meta.header_level_offset, attr, lang, meta.in_footer) }} {%- endmacro -%} {%- macro render_block_paragraph(block, lang, meta) -%} {%- set content = block['content'] -%}

{{ render_inlines(content, lang) }}

{%- endmacro -%} {%- macro render_block_bulletlist(block, lang, meta) -%} {%- set items = block['items'] -%} {%- set count = block['count'] -%} {%- endmacro -%} {%- macro render_block_plain(block, lang, meta) -%} {%- set content = block['content'] -%} {{ render_inlines(content, lang) }} {%- endmacro -%} {%- macro render_block_codeblock(block, lang, meta) -%} {%- set attr = block['attr'] -%} {%- set code = block['code'] -%} {%- set code_lines = block['code_lines'] -%}
{{ code|e }}
{%- endmacro -%} {%- macro render_block_blockquote(block, lang, meta) -%} {%- set content = block['content'] -%}
{{ render_blocks(content, lang, meta) }}
{%- endmacro -%} {%- macro render_block_blockcontainer(block, lang, meta) -%} {%- set attr = block['attr'] -%} {%- set content = block['content'] -%}
{{ render_blocks(content, lang, meta) }}
{%- endmacro -%} {%- macro render_block_horizontalrule(block, lang, meta) -%}
{%- endmacro -%} {%- macro render_block_rawblock(block, lang, meta) -%} {%- set format = block['format'] -%} {%- set raw = block['raw'] -%} {%- if format == "html" -%} {#-
-#} {{ raw }} {#-
-#} {%- else -%}
{{ raw | e }}
{%- endif -%} {%- endmacro -%} {%- macro render_block_table_cell(cell, lang, is_header, column_spec) -%} {%- set attr = cell['attr'] -%} {%- set cell_alignment = cell['alignment'] -%} {%- set row_span = cell['row_span'] -%} {%- set column_span = cell['column_span'] -%} {%- set content = cell['content'] -%} {%- set column_alignment = column_spec.alignment -%} {%- set ns = namespace(alignment=column_alignment,classes=[],extra_style={}) -%} {%- if cell_alignment != "default" -%} {%- set ns.alignment=cell_alignment -%} {%- endif -%} {%- set alignment_class = ["align", ns.alignment]|join('_') -%} {%- if column_spec.has_width-%} {%- set ns.classes = [alignment_class, "has_recommended_width"] -%} {%- set ns.extra_style = {"--recommended_width": [column_spec.width.percentage, "%"]|join('')} -%} {#- set ns.extra_style = {"width": [column_spec.width.percentage, "%"]|join('')} -#} {%- else -%} {%- set ns.classes = [alignment_class] -%} {%- endif -%} <{% if is_header %}th{% else %}td{% endif %} {{ common.render_attr(attr, lang, extra_classes=ns.classes, extra={"rowspan": row_span, "colspan": column_span}, extra_style=ns.extra_style) }}> {{ render_blocks(content, lang, meta) }} {%- endmacro -%} {%- macro render_block_table_rows(rows, lang, num_headers,column_specs) -%} {%- for row in rows -%} {{ render_block_table_row(row,lang,num_headers=num_headers,column_specs=column_specs) }} {%- endfor -%} {%- endmacro -%} {%- macro render_block_table_row(row, lang, num_headers, column_specs) -%} {%- set attr = row['attr'] -%} {%- set cells = row['cells'] -%} {%- for cell in cells -%} {%- if loop.index <= num_headers or num_headers == -1 -%} {{ render_block_table_cell(cell,lang,is_header=true,column_spec=column_specs[loop.index0]) }} {%- else -%} {{ render_block_table_cell(cell,lang,is_header=false,column_spec=column_specs[loop.index0]) }} {%- endif -%} {%- endfor -%} {%- endmacro -%} {%- macro render_block_table(block, lang, meta) -%} {#- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table -#} {%- set attr = block['attr'] -%} {%- set caption = block['caption'] -%} {%- set column_specs = block['column_specs'] -%} {%- set head = block['head'] -%} {%- set bodies = block['bodies'] -%} {%- set foot = block['foot'] -%} {%- if caption|length -%} {%- endif -%} {#- TODO: Maybe add colgroup? -#} {%- if head.rows|length -%} {{ render_block_table_rows(head.rows,lang,num_headers=-1,column_specs=column_specs) }} {%- endif -%} {%- for body in bodies -%} {%- if body.intermediate_head|length -%} {{ render_block_table_rows(body.intermediate_head,lang,num_headers=-1,column_specs=column_specs) }} {%- endif -%} {{ render_block_table_rows(body.intermediate_body,lang,num_headers=body.row_head_columns,column_specs=column_specs) }} {%- endfor -%} {%- if foot.rows|length -%} {{ render_block_table_rows(foot.rows,lang,num_headers=bodies[0].row_head_columns,column_specs=column_specs) }} {%- endif -%}
{{ render_blocks(caption, lang, meta) }}
{%- endmacro -%} {%- macro render_block_orderedlist(block, lang, meta) -%} {%- 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, meta) }}
  2. {%- endfor -%}
{%- endmacro -%} {%- macro render_block_definitionlist(block, lang, meta) -%} {%- set items = block['items'] -%}
{%- for item in items -%} {%- set term = item['term'] -%} {%- set definitions = item['definitions'] -%}
{{ render_inlines(term, lang) }}
{%- for def in definitions -%}
{{ render_blocks(def, lang, meta) }}
{%- endfor -%} {%- endfor -%}
{%- endmacro -%} {%- macro render_block_lineblock(block, lang, meta) -%} {%- set lines = block['lines'] -%}
{%- for line in lines -%} {{ render_inlines(line, lang) }} {%- if not loop.last -%}
{%- endif -%} {%- endfor -%}
{%- endmacro -%} {%- macro render_toc(tree, lang, meta) -%} {%- if tree.element is defined -%} {{ render_inlines(tree.element.content, lang) }} {%- endif -%} {%- if tree.children|length -%} {%- endif -%} {%- endmacro -%} {%- macro render_block_toc(block, lang, meta) -%} {%- set toc = block.toc -%} {%- 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['etype'] -%} {%- 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 link = inline['link'] -%} {%- set title = inline['title'] -%} {{ render_link(link, content, lang, attr, title) }} {%- endmacro -%} {%- macro render_inline_image(inline, lang) -%} {%- set attr = inline['attr'] -%} {%- set alt = inline['alt'] -%} {%- set link = inline['link'] -%} {%- set title = inline['title'] -%} {{ render_image(link, 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 -%}