christabor/flask_extras

View on GitHub
flask_extras/macros/extras_code.html

Summary

Maintainability
Test Coverage
{% from 'utils.html' import apply_dattrs, apply_classes %}

{%- macro inline_code(code) %}
    <code>{{ code }}</code>
{% endmacro -%}


{%- macro code(code, lang='json') %}
    <pre class="{{ lang }}">
        <code>{{ code }}</code>
    </pre>
{% endmacro -%}


{%- macro tokenize_code(code, delimiter=' ',
                        use_pre=True,
                        use_code=True,
                        classes=[],
                        token_classes={},
                        token_dattrs={},
                        replacers=[],
                        wrap_all=True) %}
{#
    Convert a code string into a code block with span wrappers for all
    matching tokens specified. All values in `token_classes` will be used as classes to apply to each token wrapper.

    Tokens are determined by splitting on `delimiter`.

    Unmatched tokens will still be wrapped in a span unless `wrap_all` is False.

    Usage:
    tokenize_code(
        'FOO bar BAZ "quux"',
        delimiter=' ',
        token_dattrs={'BAZ': {'val': 'foo'}},
        token_classes={'FOO': ['foocls']},
        replacers=['"'],
        wrap_all=True,
    )

    <pre>
        <code>
            <span class="foocls">FOO</span>
            <span>bar</span>
            <span data-val="foo">BAZ</span>
            <span>quux</span>
        </code>
    </pre>
#}
{% if use_pre %}<pre>{% endif %}
    {% if use_code %}<code>{% endif %}
        {% for token in code.split(delimiter) %}
            {% if wrap_all %}
                {% set tok = token.strip()|cut(replacers) %}
                {% set _dattrs = token_dattrs.get(tok, {})%}
                {% set _classes = token_classes.get(tok, []) + classes%}
                <span{% if _classes %}
                        class="{{ apply_classes(_classes) }}"
                    {% endif %}
                    {{ apply_dattrs(_dattrs) }}>{{ tok }}</span>
            {% endif %}
        {% endfor %}
    {% if use_code %}</code>{% endif %}
{% if use_pre %}</pre>{% endif %}
{% endmacro -%}