{% capture workspace %}
{% assign min = include.min | default: 2 %} {% assign max = include.max | default: 3 %} {% assign nodes = include.html | strip | split: '<h' %} {% for node in nodes %} {% if node == '' or node contains 'omit-in-toc' %}{% continue %}{% endif %} {% assign level = node | slice: 0, 1 | to_integer %} {% if level < min or max < level %}{% continue %}{% endif %} {% assign title = node | split: '</h'| first | split: 'id="' | shift | join: '' | split: '"' | first %} {% if title == '' or title == nil %}{% continue %}{% endif %} {% if output == nil %} {% assign min = level %} {% assign id = include.id | default: 'toc' %} {% assign class = include.class | default: 'toc' %} {% capture output %}<{% if include.ordered %}ol{% else %}ul{% endif %}{% endcapture %} {% capture output %}{{ output }} id="{{ id }}" class="{{ class }}">{% endcapture %} {% elsif lastLevel < level %} {% assign sub = include.sub | default: 'toc-sub-%level%' %} {% assign subLevel = level | minus: 1 %} {% capture output %}{{ output }}<{% if include.ordered %}ol{% else %}ul{% endif %}{% endcapture %} {% capture output %}{{ output }} class="{{ sub | replace: '%level%', subLevel }}">{% endcapture %} {% elsif level < lastLevel %} {% assign count = lastLevel | minus: level %} {% for index in (1..count) %} {% capture output %}{{ output }}</li>{% if include.ordered %}</ol>{% else %}</ul>{% endif %}{% endcapture %} {% endfor %} {% capture output %}{{ output }}</li>{% endcapture %} {% else %} {% capture output %}{{ output }}</li>{% endcapture %} {% endif %} {% capture a_body_temp %}{{ node | split: '</h' | first }}{% endcapture %} {% capture a_body_prev %}{{ a_body_temp | split: '>' | first }}>{% endcapture %} {% capture a_body %}{{ a_body_temp | replace: a_body_prev, '' }}{% endcapture %} {% capture a_class %}{{ include.a | default: 'toc-a' }}{% endcapture %} {% capture a_href %}{{ include.base | default: '' }}#{{ title }}{% endcapture %} {% capture a %}<a class="{{ a_class }}" href="{{ a_href }}">{{ a_body | strip_html }}</a>{% endcapture %} {% capture liClass %}{{ include.li | default: 'toc-li-%level%' | replace: '%level%', level }}{% endcapture %} {% capture output %}{{ output }}<li class="{{ liClass }}">{{ a }}{% endcapture %} {% assign lastLevel = level %} {% endfor %} {% assign count = lastLevel | minus: min | plus: 1 %} {% for index in (1..count) %} {% capture output %}{{ output }}</li>{% if include.ordered %}</ol>{% else %}</ul>{% endif %}{% endcapture %} {% endfor %}
{% endcapture %}{{ output }}