\NeedsTeXFormat{LaTeX2e} \ProvidesExplPackage {markdownthemewitiko_expltools_explcheck_warnings-and-errors}% {2025-06-19}% {0.0.6}% {Snippets for typesetting the documentation of the warnings and errors for % the expl3 analysis tool} \int_new:N \g__expltools_explcheck_subsection_int \tl_new:N \g__expltools_explcheck_subsection_tl \tl_new:N \l__expltools_explcheck_current_label_tl \tl_new:N \l__expltools_explcheck_current_identifier_tl \bool_new:N \l__expltools_explcheck_work_in_progress_bool \prop_new:N \g__expltools_explcheck_labels_prop \RequirePackage { xcolor } \cs_new:Nn \__expltools_explcheck_increment_counters: { \int_gincr:N \g__expltools_explcheck_subsection_int \int_compare:nTF { \g__expltools_explcheck_subsection_int < 10 } { \tl_gset:Nn \g__expltools_explcheck_subsection_tl { 0 } \tl_gput_right:NV \g__expltools_explcheck_subsection_tl \g__expltools_explcheck_subsection_int } { \tl_gset:NV \g__expltools_explcheck_subsection_tl \g__expltools_explcheck_subsection_int } \tl_if_empty:NF \l__expltools_explcheck_current_identifier_tl { \prop_gput:NVV \g__expltools_explcheck_labels_prop \l__expltools_explcheck_current_identifier_tl \l__expltools_explcheck_current_label_tl \exp_args:NV \label \l__expltools_explcheck_current_identifier_tl } \bool_if:NTF \l__expltools_explcheck_work_in_progress_bool { \tl_set:NV \l_tmpa_tl \l__expltools_explcheck_current_label_tl \tl_put_right:Nn \l_tmpa_tl { @ \textcolor { gray } } \tl_put_right:Nx \l_tmpa_tl { { \l__expltools_explcheck_current_label_tl } } \exp_args:NV \index \l_tmpa_tl } { \exp_args:NV \index \l__expltools_explcheck_current_label_tl } } \color_set:nnn { __expltools_explcheck_gray } { gray } { 0.5 } \cs_new:Nn \__expltools_explcheck_display_heading:Nn { \bool_if:NTF \l__expltools_explcheck_work_in_progress_bool { #1 { \textcolor { gray } { #2 } } \markdownSetup { renderers = { headerAttributeContextEnd += { \color_select:n { __expltools_explcheck_gray } \usemintedstyle { bw } }, } } } { #1 { #2 } } \__expltools_explcheck_increment_counters: } \cs_generate_variant:Nn \__expltools_explcheck_display_heading:Nn { NV } \markdownSetupSnippet { body } { citations, content_blocks, definition_lists, fenced_code, notes, header_attributes, html, raw_attribute, relative_references, renderers = { underscore = { \discretionary { _ \textnormal { - } } { } { _ } }, link = { \tl_set:Nn \l_tmpa_tl { #3 } \tl_set:Nx \l_tmpb_tl { \tl_range:Nnn \l_tmpa_tl { 1 } { 1 } } \str_if_eq:NNT \l_tmpb_tl \c_hash_str { \tl_set:Nx \l_tmpb_tl { \tl_range:Nnn \l_tmpa_tl { 2 } { -1 } } \tl_set:Nn \l_tmpa_tl { \hyperref [ } \tl_put_right:NV \l_tmpa_tl \l_tmpb_tl \tl_put_right:Nn \l_tmpa_tl { ] } \prop_get:NVNTF \g__expltools_explcheck_labels_prop \l_tmpb_tl \l_tmpb_tl { \tl_put_right:Nx \l_tmpa_tl { { \l_tmpb_tl } } } { \msg_error:nnV { expltools / explcheck } { unknown-referenced-label } \l_tmpb_tl } \tl_use:N \l_tmpa_tl } }, headingOne = { \section { #1 } \int_gset:Nn \g__expltools_explcheck_subsection_int { 0 } \tl_gset:Nn \g__expltools_explcheck_subsection_tl { 00 } }, headerAttributeContextBegin = { \group_begin: \bool_set_true:N \l__expltools_explcheck_work_in_progress_bool \markdownSetup { renderers = { attributeIdentifier = { \tl_set:Nn \l__expltools_explcheck_current_identifier_tl { ##1 } }, attributeKeyValue = { \str_if_eq:nnT { ##1 } { label } { \bool_set_false:N \l__expltools_explcheck_work_in_progress_bool \tl_set:Nx \l_tmpa_tl { \str_uppercase:n { ##2 } } \str_if_eq:VVF \l_tmpa_tl \l__expltools_explcheck_current_label_tl { \tl_set:Nx \l_tmpb_tl { \tl_tail:V \l_tmpa_tl } % If the provided label is out-of-order, check whether % it had already been used. \bool_if:nTF { \int_compare_p:nNn { \thesection } = { \tl_head:V \l_tmpb_tl } && \int_compare_p:nNn { \g__expltools_explcheck_subsection_int } < { \tl_tail:V \l_tmpb_tl } } { % If not, skip any intermediate labels and use it. \int_gset:Nn \g__expltools_explcheck_subsection_int { \tl_tail:V \l_tmpb_tl } \tl_set:NV \l__expltools_explcheck_current_label_tl \l_tmpa_tl } { % Otherwise, raise an error. \msg_error:nnVV { expltools / explcheck } { unexpected-label } \l_tmpa_tl \l__expltools_explcheck_current_label_tl } } } \str_if_eq:nnT { ##1 } { removed } { % Remove the rest of this section from the output. \markdownSetup { renderers = { heading(Two|Tree) = { \__expltools_explcheck_increment_counters: }, headerAttributeContextEnd += { \cs_set:Npn \next ########1 \markdownRendererSectionEnd { \markdownRendererSectionEnd } \next }, }, } } }, attributeClassName = { \tl_set:Nx \l__expltools_explcheck_current_label_tl { \str_uppercase:n { ##1 } \thesection \g__expltools_explcheck_subsection_tl } \markdownSetup { renderers = { headingTwo = { \tl_set:Nn \l_tmpa_tl { ####1~[ } \tl_put_right:NV \l_tmpa_tl \l__expltools_explcheck_current_label_tl \tl_put_right:Nn \l_tmpa_tl { ] } \__expltools_explcheck_display_heading:NV \subsection \l_tmpa_tl }, headingThree = { \tl_set:Nn \l_tmpa_tl { ####1~[ } \tl_put_right:NV \l_tmpa_tl \l__expltools_explcheck_current_label_tl \tl_put_right:Nn \l_tmpa_tl { ] } \__expltools_explcheck_display_heading:NV \subsubsection \l_tmpa_tl }, }, } } }, } }, headerAttributeContextEnd = { \group_end: }, sectionBegin = { \group_begin: \color_group_begin: }, sectionEnd = { \color_group_end: \group_end: }, contentBlock = { \str_case:nnF { #1 } { { tex } { \markdownRendererInputFencedCode { #3 } { tex } { tex } } } { \markdownInput { #3 } } }, }, } \msg_new:nnn { expltools / explcheck } { unexpected-label } { Expected~section~label~"#1",~but~"#2"~was~generated } \msg_new:nnn { expltools / explcheck } { unknown-referenced-label } { Referenced~section~label~"#1"~does~not~exist~or~is~a~forward-reference }