"$schema": "../../schema/segment.schema.json"
"identifier": "nbsphinx-standard-content"
"description": "standard sphinx nbsphinx content"
"segments":

    "notebook_input_all": |
        {%- if cell.metadata.nbsphinx != 'hidden' %}
        {{ super() }}
        {% endif %}

    "notebook_input_code": |
        .. nbinput:: {% if cell.metadata.magics_language -%}
        {{ cell.metadata.magics_language }}
        {%- elif nb.metadata.language_info -%}
        {{ nb.metadata.language_info.pygments_lexer or nb.metadata.language_info.name }}
        {%- else -%}
        {{ resources.codecell_lexer }}
        {%- endif -%}
        {{ insert_empty_lines(cell.source) }}
        {%- if cell.execution_count %}
            :execution-count: {{ cell.execution_count }}
        {%- endif %}
        {%- if not cell.outputs %}
            :no-output:
        {%- endif %}
        {%- if cell.source.strip() %}

        {{ cell.source.strip('\n') | indent }}
        {%- endif %}

    "notebook_input_markdown": |
        {%- if 'nbsphinx-toctree' in cell.metadata %}
        {{ cell | extract_toctree }}
        {%- else %}
        {{ cell | save_attachments or cell.source | convert_pandoc("markdown", "rst") | replace_attachments }}
        {% endif %}

    "notebook_input_raw": |
        {%- set raw_mimetype = cell.metadata.get('raw_mimetype', '').lower() %}
        {%- if raw_mimetype == '' %}
        .. raw:: html

        {{ cell.source | indent }}

        .. raw:: latex

        {{ cell.source | indent }}
        {%- elif raw_mimetype == 'text/html' %}
        .. raw:: html

        {{ cell.source | indent }}
        {%- elif raw_mimetype == 'text/latex' %}
        .. raw:: latex

        {{ cell.source | indent }}
        {%- elif raw_mimetype == 'text/markdown' %}
        ..
        {# Empty comment to make sure the preceding directive (if any) is closed #}
        {{ cell.source | markdown2rst }}
        {%- elif raw_mimetype == 'text/restructuredtext' %}
        ..
        {# Empty comment to make sure the preceding directive (if any) is closed #}
        {{ cell.source }}
        {% endif %}

    "notebook_input_heading": |
        {{ ("#" * cell.level + cell.source) | replace('\n', ' ') | convert_pandoc("markdown", "rst") }}

    "notebook_input_unknown": |
        .. unknown type  {{cell.type}}

    "notebook_output_all": |
        {{ super() }}

    "new_blocks": |
        {% block nboutput -%}
        {%- set html_datatype, latex_datatype = output | get_output_type %}
        {%- if html_datatype == latex_datatype %}
        {{ insert_nboutput(html_datatype, output, cell) }}
        {% else %}
        .. only:: html

        {{ insert_nboutput(html_datatype, output, cell) | indent }}
        .. only:: latex

        {{ insert_nboutput(latex_datatype, output, cell) | indent }}
        {% endif %}
        {% endblock nboutput %}

    "notebook_output_error": |
        {{ self.nboutput() }}

    "notebook_output_stream": |
        {{ self.nboutput() }}

    "notebook_output_data_all": |
        {{ self.nboutput() }}

    "jinja_macros": |
        {% macro insert_empty_lines(text) %}
        {%- set before, after = text | get_empty_lines %}
        {%- if before %}
            :empty-lines-before: {{ before }}
        {%- endif %}
        {%- if after %}
            :empty-lines-after: {{ after }}
        {%- endif %}
        {%- endmacro %}

        {% macro insert_nboutput(datatype, output, cell) -%}
        .. nboutput::
        {%- if datatype == 'text/plain' %}{# nothing #}
        {%- elif datatype == 'ansi' %} ansi
        {%- else %} rst
        {%- endif %}
        {%- if output.output_type == 'execute_result' and cell.execution_count %}
            :execution-count: {{ cell.execution_count }}
        {%- endif %}
        {%- if output != cell.outputs[-1] %}
            :more-to-come:
        {%- endif %}
        {%- if output.name == 'stderr' %}
            :class: stderr
        {%- endif %}
        {%- if datatype == 'text/plain' -%}
        {{ insert_empty_lines(output.data[datatype]) }}

        {{ output.data[datatype].strip('\n') | indent }}
        {%- elif datatype in ['image/svg+xml', 'image/png', 'image/jpeg', 'application/pdf'] %}

            .. image:: {{ output.metadata.filenames[datatype] | posix_path }}
        {%- if datatype in output.metadata %}
        {%- set width = output.metadata[datatype].width %}
        {%- if width %}
                :width: {{ width }}
        {%- endif %}
        {%- set height = output.metadata[datatype].height %}
        {%- if height %}
                :height: {{ height }}
        {% endif %}
        {% endif %}
        {%- elif datatype in ['text/markdown'] %}

        {{ output.data['text/markdown'] | markdown2rst | indent }}
        {%- elif datatype in ['text/latex'] %}

            .. math::
                :nowrap:

        {{ output.data['text/latex'] | indent | indent }}
        {%- elif datatype == 'text/html' %}
            :class: rendered_html

            .. raw:: html

        {{ output.data['text/html'] | indent | indent }}
        {%- elif datatype == 'application/javascript' %}

            .. raw:: html

                <div></div>
                <script type="text/javascript">
                var element = document.currentScript.previousSibling.previousSibling;
        {{ output.data['application/javascript'] | indent | indent }}
                </script>
        {%- elif datatype.startswith('application/vnd.jupyter') and datatype.endswith('+json') %}

            .. raw:: html

                <script type="{{ datatype }}">{{ output.data[datatype] | json_dumps }}</script>
        {%- elif datatype == 'ansi' %}

            .. rst-class:: highlight

            .. raw:: html

                <pre>
        {{ output.data[datatype] | ansi2html | indent | indent }}
                </pre>

            .. raw:: latex

                %
                {
                \\kern-\\sphinxverbatimsmallskipamount\\kern-\\baselineskip
                \\kern+\\FrameHeightAdjust\\kern-\\fboxrule
                \\vspace{\\nbsphinxcodecellspacing}
                \\sphinxsetup{VerbatimBorderColor={named}{nbsphinx-code-border}}
            {%- if output.name == 'stderr' %}
                \\sphinxsetup{VerbatimColor={named}{nbsphinx-stderr}}
            {%- else %}
                \\sphinxsetup{VerbatimColor={named}{white}}
            {%- endif %}
                \\fvset{hllines={, ,}}%
                \\begin{sphinxVerbatim}[commandchars=\\\\\\{\\}]
        {{ output.data[datatype] | escape_latex | ansi2latex | indent | indent }}
                \\end{sphinxVerbatim}
                }
                % The following \\relax is needed to avoid problems with adjacent ANSI
                % cells and some other stuff (e.g. bullet lists) following ANSI cells.
                % See https://github.com/sphinx-doc/sphinx/issues/3594
                \\relax
        {% else %}

            .. nbwarning:: Data type cannot be displayed: {{ datatype }}
        {%- endif %}
        {% endmacro %}

    "footer": |
        {% if 'application/vnd.jupyter.widget-state+json' in nb.metadata.widgets %}

        .. raw:: html

            <script type="application/vnd.jupyter.widget-state+json">
            {{ nb.metadata.widgets['application/vnd.jupyter.widget-state+json'] | json_dumps }}
            </script>
        {% endif %}
