%%
%% This is file `l3msg.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3msg.dtx  (with options: `package')
%% 
%% EXPERIMENTAL CODE
%% 
%% Do not distribute this file without also distributing the
%% source files specified above.
%% 
%% Do not distribute a modified version of this file.
%% 
%% File: l3msg.dtx Copyright (C) 2009-2013 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/svnroot/experimental/trunk/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
\GetIdInfo$Id: l3msg.dtx 4412 2013-01-08 12:23:19Z joseph $
  {L3 Messages}
\ProvidesExplPackage
  {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\__expl_package_check:
\tl_new:N \l__msg_internal_tl
\tl_const:Nn \c__msg_text_prefix_tl      { msg~text~>~ }
\tl_const:Nn \c__msg_more_text_prefix_tl { msg~extra~text~>~ }
\prg_new_conditional:Npnn \msg_if_exist:nn #1#2 { p , T , F , TF }
  {
    \cs_if_exist:cTF { \c__msg_text_prefix_tl #1 / #2 }
      { \prg_return_true: } { \prg_return_false: }
  }
\cs_new_protected:Npn \__chk_if_free_msg:nn #1#2
  {
    \msg_if_exist:nnT {#1} {#2}
      {
        \__msg_kernel_error:nnxx { kernel } { message-already-defined }
          {#1} {#2}
      }
  }
\tex_ifodd:D \l@expl@log@functions@bool
  \cs_gset_protected:Npn \__chk_if_free_msg:nn #1#2
    {
      \msg_if_exist:nnT {#1} {#2}
        {
          \__msg_kernel_error:nnxx { kernel } { message-already-defined }
            {#1} {#2}
        }
      \iow_log:x { Defining~message~ #1 / #2 ~\msg_line_context: }
    }
\fi:
\cs_new_protected:Npn \msg_new:nnnn #1#2
  {
    \__chk_if_free_msg:nn {#1} {#2}
    \msg_gset:nnnn {#1} {#2}
  }
\cs_new_protected:Npn \msg_new:nnn #1#2#3
  { \msg_new:nnnn {#1} {#2} {#3} { } }
\cs_new_protected:Npn \msg_set:nnnn #1#2#3#4
  {
    \cs_set:cpn { \c__msg_text_prefix_tl #1 / #2 }
      ##1##2##3##4 {#3}
    \cs_set:cpn { \c__msg_more_text_prefix_tl #1 / #2 }
      ##1##2##3##4 {#4}
  }
\cs_new_protected:Npn \msg_set:nnn #1#2#3
  { \msg_set:nnnn {#1} {#2} {#3} { } }
\cs_new_protected:Npn \msg_gset:nnnn #1#2#3#4
  {
    \cs_gset:cpn { \c__msg_text_prefix_tl #1 / #2 }
      ##1##2##3##4 {#3}
    \cs_gset:cpn { \c__msg_more_text_prefix_tl #1 / #2 }
      ##1##2##3##4 {#4}
  }
\cs_new_protected:Npn \msg_gset:nnn #1#2#3
  { \msg_gset:nnnn {#1} {#2} {#3} { } }
\tl_const:Nn \c_msg_coding_error_text_tl
  {
    This~is~a~coding~error.
    \\ \\
  }
\tl_const:Nn \c_msg_continue_text_tl
  { Type~<return>~to~continue }
\tl_const:Nn \c_msg_critical_text_tl
  { Reading~the~current~file~will~stop }
\tl_const:Nn \c_msg_fatal_text_tl
  { This~is~a~fatal~error:~LaTeX~will~abort }
\tl_const:Nn \c_msg_help_text_tl
  { For~immediate~help~type~H~<return> }
\tl_const:Nn \c_msg_no_info_text_tl
  {
    LaTeX~does~not~know~anything~more~about~this~error,~sorry.
    \c_msg_return_text_tl
  }
\tl_const:Nn \c_msg_on_line_text_tl { on~line }
\tl_const:Nn \c_msg_return_text_tl
  {
    \\ \\
    Try~typing~<return>~to~proceed.
    \\
    If~that~doesn't~work,~type~X~<return>~to~quit.
  }
\tl_const:Nn \c_msg_trouble_text_tl
  {
    \\ \\
    More~errors~will~almost~certainly~follow: \\
    the~LaTeX~run~should~be~aborted.
  }
\cs_new_nopar:Npn \msg_line_number: { \int_use:N \tex_inputlineno:D }
\cs_gset_nopar:Npn \msg_line_context:
  {
    \c_msg_on_line_text_tl
    \c_space_tl
    \msg_line_number:
  }
\cs_new_protected:Npn \msg_interrupt:nnn #1#2#3
  {
    \tl_if_empty:nTF {#3}
      {
        \__msg_interrupt_wrap:nn { \\ \c_msg_no_info_text_tl }
          {#1 \\\\ #2 \\\\ \c_msg_continue_text_tl }
      }
      {
        \__msg_interrupt_wrap:nn { \\ #3 }
          {#1 \\\\ #2 \\\\ \c_msg_help_text_tl }
      }
  }
\cs_new_protected:Npn \__msg_interrupt_wrap:nn #1#2
  {
    \iow_wrap:nnnN {#1} { | ~ } { } \__msg_interrupt_more_text:n
    \iow_wrap:nnnN {#2} { ! ~ } { } \__msg_interrupt_text:n
  }
\cs_new_protected:Npn \__msg_interrupt_more_text:n #1
  {
    \exp_args:Nx \tex_errhelp:D
      {
        |'''''''''''''''''''''''''''''''''''''''''''''''
        #1 \iow_newline:
        |...............................................
      }
  }
\group_begin:
  \char_set_lccode:nn {`\{} {`\ }
  \char_set_lccode:nn {`\}} {`\ }
  \char_set_lccode:nn {`\&} {`\!}
  \char_set_catcode_active:N \&
\tl_to_lowercase:n
  {
    \group_end:
    \cs_new_protected:Npn \__msg_interrupt_text:n #1
      {
        \iow_term:x
          {
            \iow_newline:
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            \iow_newline:
            !
          }
        \group_begin:
          \cs_set_protected_nopar:Npn &
            {
              \tex_errmessage:D
                {
                  #1
                  \use_none:n
                    { ............................................ }
                }
            }
          \exp_after:wN
        \group_end:
        &
      }
  }
\cs_new_protected:Npn \msg_log:n #1
  {
    \iow_log:n { ................................................. }
    \iow_wrap:nnnN { . ~ #1} { . ~ } { } \iow_log:n
    \iow_log:n { ................................................. }
  }
\cs_new_protected:Npn \msg_term:n #1
  {
    \iow_term:n { ************************************************* }
    \iow_wrap:nnnN { * ~ #1} { * ~ } { } \iow_term:n
    \iow_term:n { ************************************************* }
  }
\cs_new:Npn \msg_fatal_text:n #1 { Fatal~#1~error }
\cs_new:Npn \msg_critical_text:n #1 { Critical~#1~error }
\cs_new:Npn \msg_error_text:n #1 { #1~error }
\cs_new:Npn \msg_warning_text:n #1 { #1~warning }
\cs_new:Npn \msg_info_text:n #1 { #1~info }
\cs_new:Npn \msg_see_documentation_text:n #1
  {
    \\ \\ See~the~
    \str_if_eq:nnTF {#1} { LaTeX } { LaTeX3 } {#1} ~
    documentation~for~further~information.
  }
\group_begin:
  \cs_set_protected:Npn \__msg_class_new:nn #1#2
    {
      \prop_new:c { l__msg_redirect_ #1 _prop }
      \cs_new_protected:cpn { __msg_ #1 _code:nnnnnn } ##1##2##3##4##5##6 {#2}
      \cs_new_protected:cpn { msg_ #1 :nnnnnn } ##1##2##3##4##5##6
        {
          \use:x
            {
              \exp_not:n { \__msg_use:nnnnnnn {#1} {##1} {##2} }
                { \tl_to_str:n {##3} } { \tl_to_str:n {##4} }
                { \tl_to_str:n {##5} } { \tl_to_str:n {##6} }
            }
        }
      \cs_new_protected:cpx { msg_ #1 :nnnnn } ##1##2##3##4##5
        { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} {##5} { } }
      \cs_new_protected:cpx { msg_ #1 :nnnn } ##1##2##3##4
        { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} { } { } }
      \cs_new_protected:cpx { msg_ #1 :nnn } ##1##2##3
        { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
      \cs_new_protected:cpx { msg_ #1 :nn } ##1##2
        { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
      \cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6
        {
          \use:x
            {
              \exp_not:N \exp_not:n
                { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} }
                {##3} {##4} {##5} {##6}
            }
        }
      \cs_new_protected:cpx { msg_ #1 :nnxxx } ##1##2##3##4##5
        { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} {##5} { } }
      \cs_new_protected:cpx { msg_ #1 :nnxx } ##1##2##3##4
        { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} { } { } }
      \cs_new_protected:cpx { msg_ #1 :nnx } ##1##2##3
        { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} { } { } { } }
    }
  \__msg_class_new:nn { fatal }
    {
      \msg_interrupt:nnn
        { \msg_fatal_text:n {#1} : ~ "#2" }
        {
          \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6}
          \msg_see_documentation_text:n {#1}
        }
        { \c_msg_fatal_text_tl }
      \tex_end:D
    }
  \__msg_class_new:nn { critical }
    {
      \msg_interrupt:nnn
        { \msg_critical_text:n {#1} : ~ "#2" }
        {
          \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6}
          \msg_see_documentation_text:n {#1}
        }
        { \c_msg_critical_text_tl }
      \tex_endinput:D
    }
  \__msg_class_new:nn { error }
    {
      \__msg_error:cnnnnn
        { \c__msg_more_text_prefix_tl #1 / #2 }
        {#3} {#4} {#5} {#6}
        {
          \msg_interrupt:nnn
            { \msg_error_text:n {#1} : ~ "#2" }
            {
              \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6}
              \msg_see_documentation_text:n {#1}
            }
       }
    }
  \cs_new_protected:Npn \__msg_error:cnnnnn #1#2#3#4#5#6
    {
      \cs_if_eq:cNTF {#1} \__msg_no_more_text:nnnn
        { #6 { } }
        { #6 { \use:c {#1} {#2} {#3} {#4} {#5} } }
    }
  \cs_new:Npn \__msg_no_more_text:nnnn #1#2#3#4 { }
  \__msg_class_new:nn { warning }
    {
      \msg_term:n
        {
          \msg_warning_text:n {#1} : ~ "#2" \\ \\
          \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6}
        }
    }
  \__msg_class_new:nn { info }
    {
      \msg_log:n
        {
          \msg_info_text:n {#1} : ~ "#2" \\ \\
          \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6}
        }
    }
  \__msg_class_new:nn { log }
    {
      \iow_wrap:nnnN
        { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
        { } { } \iow_log:n
    }
  \__msg_class_new:nn { none } { }
\group_end:
\cs_new:Npn \__msg_class_chk_exist:nT #1
  {
    \cs_if_free:cTF { __msg_ #1 _code:nnnnnn }
      { \__msg_kernel_error:nnx { kernel } { message-class-unknown } {#1} }
  }
\tl_new:N \l__msg_class_tl
\tl_new:N \l__msg_current_class_tl
\prop_new:N \l__msg_redirect_prop
\seq_new:N \l__msg_hierarchy_seq
\seq_new:N \l__msg_class_loop_seq
\cs_new_protected:Npn \__msg_use:nnnnnnn #1#2#3#4#5#6#7
  {
    \msg_if_exist:nnTF {#2} {#3}
      {
        \__msg_class_chk_exist:nT {#1}
          {
            \tl_set:Nn \l__msg_current_class_tl {#1}
            \cs_set_protected_nopar:Npx \__msg_use_code:
              {
                \exp_not:n
                  {
                    \use:c { __msg_ \l__msg_class_tl _code:nnnnnn }
                      {#2} {#3} {#4} {#5} {#6} {#7}
                  }
              }
            \__msg_use_redirect_name:n { #2 / #3 }
          }
      }
      { \__msg_kernel_error:nnxx { kernel } { message-unknown } {#2} {#3} }
  }
\cs_new_protected_nopar:Npn \__msg_use_code: { }
\cs_new_protected:Npn \__msg_use_redirect_name:n #1
  {
    \prop_get:NnNTF \l__msg_redirect_prop { / #1 } \l__msg_class_tl
      { \__msg_use_code: }
      {
        \seq_clear:N \l__msg_hierarchy_seq
        \__msg_use_hierarchy:nwwN { }
          #1 \q_mark \__msg_use_hierarchy:nwwN
          /  \q_mark \use_none_delimit_by_q_stop:w
          \q_stop
        \__msg_use_redirect_module:n { }
      }
  }
\cs_new_protected:Npn \__msg_use_hierarchy:nwwN #1#2 / #3 \q_mark #4
  {
    \seq_put_left:Nn \l__msg_hierarchy_seq {#1}
    #4 { #1 / #2 } #3 \q_mark #4
  }
\cs_new_protected:Npn \__msg_use_redirect_module:n #1
  {
    \seq_map_inline:Nn \l__msg_hierarchy_seq
      {
        \prop_get:cnNTF { l__msg_redirect_ \l__msg_current_class_tl _prop }
          {##1} \l__msg_class_tl
          {
            \seq_map_break:n
              {
                \tl_if_eq:NNTF \l__msg_current_class_tl \l__msg_class_tl
                  { \__msg_use_code: }
                  {
                    \tl_set_eq:NN \l__msg_current_class_tl \l__msg_class_tl
                    \__msg_use_redirect_module:n {##1}
                  }
              }
          }
          {
            \str_if_eq:nnT {##1} {#1}
              {
                \tl_set_eq:NN \l__msg_class_tl \l__msg_current_class_tl
                \seq_map_break:n { \__msg_use_code: }
              }
          }
      }
  }
\cs_new_protected:Npn \msg_redirect_name:nnn #1#2#3
  {
    \tl_if_empty:nTF {#3}
      { \prop_remove:Nn \l__msg_redirect_prop { / #1 / #2 } }
      {
        \__msg_class_chk_exist:nT {#3}
          { \prop_put:Nnn \l__msg_redirect_prop { / #1 / #2 } {#3} }
      }
  }
\cs_new_protected_nopar:Npn \msg_redirect_class:nn
  { \__msg_redirect:nnn { } }
\cs_new_protected:Npn \msg_redirect_module:nnn #1
  { \__msg_redirect:nnn { / #1 } }
\cs_new_protected:Npn \__msg_redirect:nnn #1#2#3
  {
    \__msg_class_chk_exist:nT {#2}
      {
        \tl_if_empty:nTF {#3}
          { \prop_remove:cn { l__msg_redirect_ #2 _prop } {#1} }
          {
            \__msg_class_chk_exist:nT {#3}
              {
                \prop_put:cnn { l__msg_redirect_ #2 _prop } {#1} {#3}
                \tl_set:Nn \l__msg_current_class_tl {#2}
                \seq_clear:N \l__msg_class_loop_seq
                \__msg_redirect_loop_chk:nnn {#2} {#3} {#1}
              }
          }
      }
  }
\cs_new_protected:Npn \__msg_redirect_loop_chk:nnn #1#2#3
  {
    \seq_put_right:Nn \l__msg_class_loop_seq {#1}
    \prop_get:cnNT { l__msg_redirect_ #1 _prop } {#3} \l__msg_class_tl
      {
        \str_if_eq_x:nnF { \l__msg_class_tl } {#1}
          {
            \tl_if_eq:NNTF \l__msg_class_tl \l__msg_current_class_tl
              {
                \prop_put:cnn { l__msg_redirect_ #2 _prop } {#3} {#2}
                \__msg_kernel_warning:nnxxxx { kernel } { message-redirect-loop }
                  { \seq_item:Nn \l__msg_class_loop_seq { \c_one } }
                  { \seq_item:Nn \l__msg_class_loop_seq { \c_two } }
                  {#3}
                  {
                    \seq_map_function:NN \l__msg_class_loop_seq
                      \__msg_redirect_loop_list:n
                    { \seq_item:Nn \l__msg_class_loop_seq { \c_one } }
                  }
              }
              { \__msg_redirect_loop_chk:onn \l__msg_class_tl {#2} {#3} }
          }
      }
  }
\cs_generate_variant:Nn \__msg_redirect_loop_chk:nnn { o }
\cs_new:Npn \__msg_redirect_loop_list:n #1 { {#1} ~ => ~ }
\cs_new_protected:Npn \__msg_kernel_new:nnnn #1#2
  { \msg_new:nnnn { LaTeX } { #1 / #2 } }
\cs_new_protected:Npn \__msg_kernel_new:nnn #1#2
  { \msg_new:nnn { LaTeX } { #1 / #2 } }
\cs_new_protected:Npn \__msg_kernel_set:nnnn #1#2
  { \msg_set:nnnn { LaTeX } { #1 / #2 } }
\cs_new_protected:Npn \__msg_kernel_set:nnn #1#2
  { \msg_set:nnn { LaTeX } { #1 / #2 } }
\group_begin:
  \cs_set_protected:Npn \__msg_kernel_class_new:nN #1
    { \__msg_kernel_class_new_aux:nN { kernel_ #1 } }
  \cs_set_protected:Npn \__msg_kernel_class_new_aux:nN #1#2
    {
      \cs_new_protected:cpn { __msg_ #1 :nnnnnn } ##1##2##3##4##5##6
        {
          \use:x
            {
              \exp_not:n { #2 { LaTeX } { ##1 / ##2 } }
                { \tl_to_str:n {##3} } { \tl_to_str:n {##4} }
                { \tl_to_str:n {##5} } { \tl_to_str:n {##6} }
            }
        }
      \cs_new_protected:cpx { __msg_ #1 :nnnnn } ##1##2##3##4##5
        { \exp_not:c { __msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} {##5} { } }
      \cs_new_protected:cpx { __msg_ #1 :nnnn } ##1##2##3##4
        { \exp_not:c { __msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} { } { } }
      \cs_new_protected:cpx { __msg_ #1 :nnn } ##1##2##3
        { \exp_not:c { __msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
      \cs_new_protected:cpx { __msg_ #1 :nn } ##1##2
        { \exp_not:c { __msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
      \cs_new_protected:cpx { __msg_ #1 :nnxxxx } ##1##2##3##4##5##6
        {
          \use:x
            {
              \exp_not:N \exp_not:n
                { \exp_not:c { __msg_ #1 :nnnnnn } {##1} {##2} }
                {##3} {##4} {##5} {##6}
            }
        }
      \cs_new_protected:cpx { __msg_ #1 :nnxxx } ##1##2##3##4##5
        { \exp_not:c { __msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} {##5} { } }
      \cs_new_protected:cpx { __msg_ #1 :nnxx } ##1##2##3##4
        { \exp_not:c { __msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} { } { } }
      \cs_new_protected:cpx { __msg_ #1 :nnx } ##1##2##3
        { \exp_not:c { __msg_ #1 :nnxxxx } {##1} {##2} {##3} { } { } { } }
    }
  \__msg_kernel_class_new:nN { fatal } \__msg_fatal_code:nnnnnn
  \cs_undefine:N \__msg_kernel_error:nnxx
  \cs_undefine:N \__msg_kernel_error:nnx
  \cs_undefine:N \__msg_kernel_error:nn
  \__msg_kernel_class_new:nN { error } \__msg_error_code:nnnnnn
  \__msg_kernel_class_new:nN { warning } \msg_warning:nnxxxx
  \__msg_kernel_class_new:nN { info } \msg_info:nnxxxx
\group_end:
\__msg_kernel_new:nnnn { kernel } { message-already-defined }
  { Message~'#2'~for~module~'#1'~already~defined. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~was~asked~to~define~a~new~message~called~'#2'\
    by~the~module~'#1':~this~message~already~exists.
    \c_msg_return_text_tl
  }
\__msg_kernel_new:nnnn { kernel } { message-unknown }
  { Unknown~message~'#2'~for~module~'#1'. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~was~asked~to~display~a~message~called~'#2'\\
    by~the~module~'#1':~this~message~does~not~exist.
    \c_msg_return_text_tl
  }
\__msg_kernel_new:nnnn { kernel } { message-class-unknown }
  { Unknown~message~class~'#1'. }
  {
    LaTeX~has~been~asked~to~redirect~messages~to~a~class~'#1':\\
    this~was~never~defined.
    \c_msg_return_text_tl
  }
\__msg_kernel_new:nnnn { kernel } { message-redirect-loop }
  {
    Message~redirection~loop~caused~by~ {#1} ~=>~ {#2}
    \tl_if_empty:nF {#3} { ~for~module~' \use_none:n #3 ' } .
  }
  {
    Adding~the~message~redirection~ {#1} ~=>~ {#2}
    \tl_if_empty:nF {#3} { ~for~the~module~' \use_none:n #3 ' } ~
    created~an~infinite~loop\\\\
    \iow_indent:n { #4 \\\\ }
  }
\__msg_kernel_new:nnnn { kernel } { bad-number-of-arguments }
  { Function~'#1'~cannot~be~defined~with~#2~arguments. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~define~a~function~'#1'~with~
    #2~arguments.~
    TeX~allows~between~0~and~9~arguments~for~a~single~function.
  }
\__msg_kernel_new:nnnn { kernel } { command-already-defined }
  { Control~sequence~#1~already~defined. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~create~a~new~control~sequence~'#1'~
    but~this~name~has~already~been~used~elsewhere. \\ \\
    The~current~meaning~is:\\
    \ \ #2
  }
\__msg_kernel_new:nnnn { kernel } { command-not-defined }
  { Control~sequence~#1~undefined. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~use~a~command~#1,~but~this~has~not~
    been~defined~yet.
  }
\__msg_kernel_new:nnnn { kernel } { empty-search-pattern }
  { Empty~search~pattern. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~replace~an~empty~pattern~by~'#1':~that~
    would~lead~to~an~infinite~loop!
  }
\__msg_kernel_new:nnnn { kernel } { out-of-registers }
  { No~room~for~a~new~#1. }
  {
    TeX~only~supports~\int_use:N \c_max_register_int \
    of~each~type.~All~the~#1~registers~have~been~used.~
    This~run~will~be~aborted~now.
  }
\__msg_kernel_new:nnnn { kernel } { missing-colon }
  { Function~'#1'~contains~no~':'. }
  {
    \c_msg_coding_error_text_tl
    Code-level~functions~must~contain~':'~to~separate~the~
    argument~specification~from~the~function~name.~This~is~
    needed~when~defining~conditionals~or~variants,~or~when~building~a~
    parameter~text~from~the~number~of~arguments~of~the~function.
  }
\__msg_kernel_new:nnnn { kernel } { protected-predicate }
  { Predicate~'#1'~must~be~expandable. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~define~'#1'~as~a~protected~predicate.~
    Only~expandable~tests~can~have~a~predicate~version.
  }
\__msg_kernel_new:nnnn { kernel } { conditional-form-unknown }
  { Conditional~form~'#1'~for~function~'#2'~unknown. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~
    the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist.
  }
\__msg_kernel_new:nnnn { kernel } { scanmark-already-defined }
  { Scan~mark~#1~already~defined. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~create~a~new~scan~mark~'#1'~
    but~this~name~has~already~been~used~for~a~scan~mark.
  }
\__msg_kernel_new:nnnn { kernel } { variable-not-defined }
  { Variable~#1~undefined. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~show~a~variable~#1,~but~this~has~not~
    been~defined~yet.
  }
\__msg_kernel_new:nnnn { kernel } { variant-too-long }
  { Variant~form~'#1'~longer~than~base~signature~of~'#2'. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~
    with~a~signature~starting~with~'#1',~but~that~is~longer~than~
    the~signature~(part~after~the~colon)~of~'#2'.
  }
\__msg_kernel_new:nnnn { kernel } { invalid-variant }
  { Variant~form~'#1'~invalid~for~base~form~'#2'. }
  {
    \c_msg_coding_error_text_tl
    LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~
    with~a~signature~starting~with~'#1',~but~cannot~change~an~argument~
    from~type~'#3'~to~type~'#4'.
  }
\__msg_kernel_new:nnn { kernel } { bad-variable }
  { Erroneous~variable~#1 used! }
\__msg_kernel_new:nnn { kernel } { misused-sequence }
  { A~sequence~was~misused. }
\__msg_kernel_new:nnn { kernel } { negative-replication }
  { Negative~argument~for~\prg_replicate:nn. }
\__msg_kernel_new:nnn { kernel } { unknown-comparison }
  { Relation~symbol~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. }
\__msg_kernel_new:nnn { kernel } { zero-step }
  { Zero~step~size~for~step~function~#1. }
\__msg_kernel_new:nnn { kernel } { show-clist }
  {
    The~comma~list~
    \str_if_eq:nnF {#1} { \l__clist_internal_clist } { \token_to_str:N #1~}
    \clist_if_empty:NTF #1
      { is~empty }
      { contains~the~items~(without~outer~braces): }
  }
\__msg_kernel_new:nnn { kernel } { show-prop }
  {
    The~property~list~\token_to_str:N #1~
    \prop_if_empty:NTF #1
      { is~empty }
      { contains~the~pairs~(without~outer~braces): }
  }
\__msg_kernel_new:nnn { kernel } { show-seq }
  {
    The~sequence~\token_to_str:N #1~
    \seq_if_empty:NTF #1
      { is~empty }
      { contains~the~items~(without~outer~braces): }
  }
\__msg_kernel_new:nnn { kernel } { show-no-stream }
  { No~ #1 ~streams~are~open }
\__msg_kernel_new:nnn { kernel } { show-open-streams }
  { The~following~ #1 ~streams~are~in~use: }
\group_begin:
\char_set_catcode_math_superscript:N \^
\char_set_lccode:nn { `^ } { `\  }
\char_set_lccode:nn { `L } { `L }
\char_set_lccode:nn { `T } { `T }
\char_set_lccode:nn { `X } { `X }
\tl_to_lowercase:n
  {
    \cs_new:Npx \__msg_expandable_error:n #1
      {
        \exp_not:n
          {
            \tex_romannumeral:D
            \exp_after:wN \exp_after:wN
            \exp_after:wN \__msg_expandable_error:w
            \exp_after:wN \exp_after:wN
            \exp_after:wN \c_zero
          }
        \exp_not:N \use:n { \exp_not:c { LaTeX3~error: } ^ #1 } ^
      }
    \cs_new:Npn \__msg_expandable_error:w #1 ^ #2 ^ { #1 }
  }
\group_end:
\cs_new:Npn \__msg_kernel_expandable_error:nnnnnn #1#2#3#4#5#6
  {
    \exp_args:Nf \__msg_expandable_error:n
      {
        \exp_args:NNc \exp_after:wN \exp_stop_f:
          { \c__msg_text_prefix_tl LaTeX / #1 / #2 }
          {#3} {#4} {#5} {#6}
      }
  }
\cs_new:Npn \__msg_kernel_expandable_error:nnnnn #1#2#3#4#5
  {
    \__msg_kernel_expandable_error:nnnnnn
      {#1} {#2} {#3} {#4} {#5} { }
  }
\cs_new:Npn \__msg_kernel_expandable_error:nnnn #1#2#3#4
  {
    \__msg_kernel_expandable_error:nnnnnn
      {#1} {#2} {#3} {#4} { } { }
  }
\cs_new:Npn \__msg_kernel_expandable_error:nnn #1#2#3
  {
    \__msg_kernel_expandable_error:nnnnnn
      {#1} {#2} {#3} { } { } { }
  }
\cs_new:Npn \__msg_kernel_expandable_error:nn #1#2
  {
    \__msg_kernel_expandable_error:nnnnnn
      {#1} {#2} { } { } { } { }
  }
\cs_new_protected:Npn \__msg_term:nnnnnn #1#2#3#4#5#6
  {
    \iow_wrap:nnnN
      { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
      { } { } \iow_term:n
  }
\cs_generate_variant:Nn \__msg_term:nnnnnn { nnnnnV }
\cs_new_protected:Npn \__msg_term:nnnnn #1#2#3#4#5
  { \__msg_term:nnnnnn {#1} {#2} {#3} {#4} {#5} { } }
\cs_new_protected:Npn \__msg_term:nnn #1#2#3
  { \__msg_term:nnnnnn {#1} {#2} {#3} { } { } { } }
\cs_new_protected:Npn \__msg_term:nn #1#2
  { \__msg_term:nnnnnn {#1} {#2} { } { } { } { } }
\cs_new_protected:Npn \__msg_show_variable:Nnn #1#2#3
  {
    \cs_if_exist:NTF #1
      {
        \__msg_term:nnn { LaTeX / kernel } { show- #2 } {#1}
        \__msg_show_variable:n {#3}
      }
      {
        \__msg_kernel_error:nnx { kernel } { variable-not-defined }
          { \token_to_str:N #1 }
      }
  }
\cs_new_protected:Npn \__msg_show_variable:n #1
  { \iow_wrap:nnnN {#1} { } { } \__msg_show_variable_aux:n }
\cs_new_protected:Npn \__msg_show_variable_aux:n #1
  {
    \tl_if_empty:nTF {#1}
      { \tl_clear:N \l__msg_internal_tl }
      { \tl_set:Nf \l__msg_internal_tl { \__msg_show_variable_aux:w #1 } }
    \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
      { \exp_after:wN \l__msg_internal_tl }
  }
\cs_new:Npn \__msg_show_variable_aux:w #1 > { }
\cs_new:Npn \__msg_show_item:n #1
  {
    \\ > \ \ \{ \tl_to_str:n {#1} \}
  }
\cs_new:Npn \__msg_show_item:nn #1#2
  {
    \\ > \ \ \{ \tl_to_str:n {#1} \}
    \ \ => \ \ \{ \tl_to_str:n {#2} \}
  }
\cs_new:Npn \__msg_show_item_unbraced:nn #1#2
  {
    \\ > \ \ \tl_to_str:n {#1}
    \ \ => \ \ \tl_to_str:n {#2}
  }
%% 
%%
%% End of file `l3msg.sty'.
