\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 }