diff options
author | Karl Berry <karl@freefriends.org> | 2016-10-19 20:37:37 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-10-19 20:37:37 +0000 |
commit | 97a401ad817da2dafd1069df9d87a28ed39df69b (patch) | |
tree | f1555539115424980d80f573f5d17ded80989dd8 /Master/texmf-dist/source | |
parent | 8bd51564ec4daf2be1c0e6767abbd5215cb8b21a (diff) |
l3experimental (18oct16)
git-svn-id: svn://tug.org/texlive/trunk@42305 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
8 files changed, 299 insertions, 291 deletions
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx index c6a0962d867..ed4eb58736d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx @@ -37,8 +37,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/05/14] -%<package>\@ifpackagelater{expl3}{2016/05/14} +\RequirePackage{expl3}[2016/10/19] +%<package>\@ifpackagelater{expl3}{2016/10/19} %<package> {} %<package> {% %<package> \PackageError{l3sort}{Support package l3kernel too old} @@ -50,7 +50,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: l3sort.dtx 6492 2016-05-14 20:27:55Z joseph $ +\GetIdInfo$Id: l3sort.dtx 6730 2016-10-19 11:19:38Z joseph $ {L3 Experimental sorting functions} %</driver|package> %<*driver> @@ -147,6 +147,8 @@ % \meta{clist var}. % \end{function} % +% {\renewcommand{\thefootnote}{}\footnotetext{\CodedocExplainEXP}} +% % \begin{function}[EXP]{\tl_sort:nN} % \begin{syntax} % \cs{tl_sort:nN} \Arg{token list} \meta{conditional} @@ -302,13 +304,13 @@ % arguments are the variable to sort, and the sorting method % as inline code. % \begin{macrocode} -\cs_new_protected_nopar:Npn \seq_sort:Nn +\cs_new_protected:Npn \seq_sort:Nn { \@@_main:NNNnNn \tl_set:Nn \seq_map_inline:Nn \seq_map_break: { \s__seq \@@_toks:NNw \exp_not:N \__seq_item:n 0 ; } } -\cs_new_protected_nopar:Npn \seq_gsort:Nn +\cs_new_protected:Npn \seq_gsort:Nn { \@@_main:NNNnNn \tl_gset:Nn \seq_map_inline:Nn \seq_map_break: @@ -324,13 +326,13 @@ % the token list is very similar to sequences, removing % \cs{seq_item:Nn}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \tl_sort:Nn +\cs_new_protected:Npn \tl_sort:Nn { \@@_main:NNNnNn \tl_set:Nn \tl_map_inline:Nn \tl_map_break: { \@@_toks:NNw \prg_do_nothing: \prg_do_nothing: 0 ; } } -\cs_new_protected_nopar:Npn \tl_gsort:Nn +\cs_new_protected:Npn \tl_gsort:Nn { \@@_main:NNNnNn \tl_gset:Nn \tl_map_inline:Nn \tl_map_break: @@ -353,9 +355,9 @@ % argument to that function; hence we need to expand this argument % once to unpack the register. % \begin{macrocode} -\cs_new_protected_nopar:Npn \clist_sort:Nn +\cs_new_protected:Npn \clist_sort:Nn { \@@_clist:NNn \tl_set:Nn } -\cs_new_protected_nopar:Npn \clist_gsort:Nn +\cs_new_protected:Npn \clist_gsort:Nn { \@@_clist:NNn \tl_gset:Nn } \cs_new_protected:Npn \@@_clist:NNn #1#2#3 { @@ -409,7 +411,7 @@ % empty list or a list with one item). Otherwise, go through pairs % of blocks starting from $0$, then double the block size, and repeat. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_level: +\cs_new_protected:Npn \@@_level: { \if_int_compare:w \l_@@_block_int < \l_@@_length_int \l_@@_end_int \c_zero @@ -439,7 +441,7 @@ % those ranges. Of course, once that pair of blocks is merged, % move on to the next pair. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_merge_blocks: +\cs_new_protected:Npn \@@_merge_blocks: { \l_@@_begin_int \l_@@_end_int \tex_advance:D \l_@@_end_int \l_@@_block_int @@ -469,7 +471,7 @@ % (excluded) into a new range starting at the initial value % of \cs{l_@@_C_int}, namely \cs{l_@@_length_int}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \sort_copy_block: +\cs_new_protected:Npn \sort_copy_block: { \tex_toks:D \l_@@_C_int \tex_toks:D \l_@@_B_int \tex_advance:D \l_@@_C_int \c_one @@ -496,7 +498,7 @@ % means the arguments need to be given in the order they % appear originally in the list. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_merge_blocks_aux: +\cs_new_protected:Npn \@@_merge_blocks_aux: { \exp_after:wN \sort_compare:nn \exp_after:wN { \tex_the:D \tex_toks:D \exp_after:wN \l_@@_A_int \exp_after:wN } @@ -517,7 +519,7 @@ % is already in the correct register and we are done % with merging those two blocks. % \begin{macrocode} -\cs_new_protected_nopar:Npn \sort_ordered: +\cs_new_protected:Npn \sort_ordered: { \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_C_int \tex_advance:D \l_@@_B_int \c_minus_one @@ -541,7 +543,7 @@ % the second block, indexed by $C$, should be copied % to the merger (see \cs{@@_merge_blocks_end:}). % \begin{macrocode} -\cs_new_protected_nopar:Npn \sort_reversed: +\cs_new_protected:Npn \sort_reversed: { \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_A_int \tex_advance:D \l_@@_B_int \c_minus_one @@ -561,7 +563,7 @@ % the threshold \texttt{begin}, or when $C$ reaches % \texttt{length}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_merge_blocks_end: +\cs_new_protected:Npn \@@_merge_blocks_end: { \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_C_int \tex_advance:D \l_@@_B_int \c_minus_one diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx index d929259efaa..446504ae65b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/05/14] -%<package>\@ifpackagelater{expl3}{2016/05/14} +\RequirePackage{expl3}[2016/10/19] +%<package>\@ifpackagelater{expl3}{2016/10/19} %<package> {} %<package> {% %<package> \PackageError{l3flag}{Support package l3kernel too old} @@ -49,7 +49,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: l3flag.dtx 6492 2016-05-14 20:27:55Z joseph $ +\GetIdInfo$Id: l3flag.dtx 6730 2016-10-19 11:19:38Z joseph $ {L3 Experimental flags} %</driver|package> %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx index e9fc42c8cf2..41969971c69 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/05/14] -%<package>\@ifpackagelater{expl3}{2016/05/14} +\RequirePackage{expl3}[2016/10/19] +%<package>\@ifpackagelater{expl3}{2016/10/19} %<package> {} %<package> {% %<package> \PackageError{l3regex}{Support package l3kernel too old} @@ -49,7 +49,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: l3regex.dtx 6492 2016-05-14 20:27:55Z joseph $ +\GetIdInfo$Id: l3regex.dtx 6730 2016-10-19 11:19:38Z joseph $ {L3 Experimental regular expressions} %</driver|package> %<*driver> @@ -1038,7 +1038,7 @@ % $[65,90]$ (upper-case), then add $32$, making it lowercase. If it is % in the lower-case letter range $[97,122]$, subtract $32$. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_compute_case_changed_char: +\cs_new_protected:Npn \@@_compute_case_changed_char: { \int_set_eq:NN \l_@@_case_changed_char_int \l_@@_current_char_int \if_int_compare:w \l_@@_current_char_int < \c_ninety_one @@ -1182,14 +1182,14 @@ % order in which the various tests appear is optimized for usual % mostly lower case letter text. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_prop_d: +\cs_new_protected:Npn \@@_prop_d: { \@@_item_caseful_range:nn \c_forty_eight { 57 } } % 0--9 -\cs_new_protected_nopar:Npn \@@_prop_h: +\cs_new_protected:Npn \@@_prop_h: { \@@_item_caseful_equal:n \c_thirty_two % space \@@_item_caseful_equal:n \c_nine % tab } -\cs_new_protected_nopar:Npn \@@_prop_s: +\cs_new_protected:Npn \@@_prop_s: { \@@_item_caseful_equal:n \c_thirty_two % space \@@_item_caseful_equal:n \c_nine % tab @@ -1197,16 +1197,16 @@ \@@_item_caseful_equal:n \c_twelve % ff \@@_item_caseful_equal:n \c_thirteen % cr } -\cs_new_protected_nopar:Npn \@@_prop_v: +\cs_new_protected:Npn \@@_prop_v: { \@@_item_caseful_range:nn \c_ten \c_thirteen } % lf, vtab, ff, cr -\cs_new_protected_nopar:Npn \@@_prop_w: +\cs_new_protected:Npn \@@_prop_w: { \@@_item_caseful_range:nn \c_ninety_seven { 122 } % a--z \@@_item_caseful_range:nn \c_sixty_five { 90 } % A--Z \@@_item_caseful_range:nn \c_forty_eight { 57 } % 0--9 \@@_item_caseful_equal:n { 95 } % _ } -\cs_new_protected_nopar:Npn \@@_prop_N: +\cs_new_protected:Npn \@@_prop_N: { \@@_item_reverse:n { \@@_item_caseful_equal:n \c_ten } } % \end{macrocode} % \end{macro} @@ -1221,41 +1221,41 @@ % } % \textsc{posix} properties. No surprise. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_posix_alnum: +\cs_new_protected:Npn \@@_posix_alnum: { \@@_posix_alpha: \@@_posix_digit: } -\cs_new_protected_nopar:Npn \@@_posix_alpha: +\cs_new_protected:Npn \@@_posix_alpha: { \@@_posix_lower: \@@_posix_upper: } -\cs_new_protected_nopar:Npn \@@_posix_ascii: +\cs_new_protected:Npn \@@_posix_ascii: { \@@_item_caseful_range:nn \c_zero \c_one_hundred_twenty_seven } \cs_new_eq:NN \@@_posix_blank: \@@_prop_h: -\cs_new_protected_nopar:Npn \@@_posix_cntrl: +\cs_new_protected:Npn \@@_posix_cntrl: { \@@_item_caseful_range:nn \c_zero { 31 } \@@_item_caseful_equal:n \c_one_hundred_twenty_seven } \cs_new_eq:NN \@@_posix_digit: \@@_prop_d: -\cs_new_protected_nopar:Npn \@@_posix_graph: +\cs_new_protected:Npn \@@_posix_graph: { \@@_item_caseful_range:nn { 33 } { 126 } } -\cs_new_protected_nopar:Npn \@@_posix_lower: +\cs_new_protected:Npn \@@_posix_lower: { \@@_item_caseful_range:nn \c_ninety_seven { 122 } } -\cs_new_protected_nopar:Npn \@@_posix_print: +\cs_new_protected:Npn \@@_posix_print: { \@@_item_caseful_range:nn \c_thirty_two { 126 } } -\cs_new_protected_nopar:Npn \@@_posix_punct: +\cs_new_protected:Npn \@@_posix_punct: { \@@_item_caseful_range:nn { 33 } { 47 } \@@_item_caseful_range:nn { 58 } { 64 } \@@_item_caseful_range:nn { 91 } { 96 } \@@_item_caseful_range:nn { 123 } { 126 } } -\cs_new_protected_nopar:Npn \@@_posix_space: +\cs_new_protected:Npn \@@_posix_space: { \@@_item_caseful_equal:n \c_thirty_two \@@_item_caseful_range:nn \c_nine \c_thirteen } -\cs_new_protected_nopar:Npn \@@_posix_upper: +\cs_new_protected:Npn \@@_posix_upper: { \@@_item_caseful_range:nn \c_sixty_five { 90 } } \cs_new_eq:NN \@@_posix_word: \@@_prop_w: -\cs_new_protected_nopar:Npn \@@_posix_xdigit: +\cs_new_protected:Npn \@@_posix_xdigit: { \@@_posix_digit: \@@_item_caseful_range:nn \c_sixty_five { 70 } @@ -1306,9 +1306,9 @@ { %<trace> \trace_push:nnn { regex } { 1 } { @@_escape_use:nnnn } \__tl_build:Nw \l_@@_internal_a_tl - \cs_set_nopar:Npn \@@_escape_unescaped:N ##1 { #1 } - \cs_set_nopar:Npn \@@_escape_escaped:N ##1 { #2 } - \cs_set_nopar:Npn \@@_escape_raw:N ##1 { #3 } + \cs_set:Npn \@@_escape_unescaped:N ##1 { #1 } + \cs_set:Npn \@@_escape_escaped:N ##1 { #2 } + \cs_set:Npn \@@_escape_raw:N ##1 { #3 } \int_set:Nn \tex_escapechar:D { 92 } \__str_gset_other:Nn \g_@@_internal_tl { #4 } \tl_set:Nx \l_@@_internal_b_tl @@ -1337,7 +1337,7 @@ { \@@_escape_unescaped:N #1 } \@@_escape_loop:N } -\cs_new_nopar:cpn { @@_escape_ \c_backslash_str :w } +\cs_new:cpn { @@_escape_ \c_backslash_str :w } \@@_escape_loop:N #1 { \cs_if_exist_use:cF { @@_escape_/\token_to_str:N #1:w } @@ -1372,24 +1372,24 @@ % |\t| take their meaning here. % \begin{macrocode} \cs_new_eq:NN \@@_escape_break:w \__prg_break: -\cs_new_nopar:cpn { @@_escape_/break:w } +\cs_new:cpn { @@_escape_/break:w } { \if_false: { \fi: } \__msg_kernel_error:nn { regex } { trailing-backslash } \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } -\cs_new_nopar:cpn { @@_escape_~:w } { } -\cs_new_nopar:cpx { @@_escape_/a:w } +\cs_new:cpn { @@_escape_~:w } { } +\cs_new:cpx { @@_escape_/a:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^G } -\cs_new_nopar:cpx { @@_escape_/t:w } +\cs_new:cpx { @@_escape_/t:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^I } -\cs_new_nopar:cpx { @@_escape_/n:w } +\cs_new:cpx { @@_escape_/n:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^J } -\cs_new_nopar:cpx { @@_escape_/f:w } +\cs_new:cpx { @@_escape_/f:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^L } -\cs_new_nopar:cpx { @@_escape_/r:w } +\cs_new:cpx { @@_escape_/r:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^M } -\cs_new_nopar:cpx { @@_escape_/e:w } +\cs_new:cpx { @@_escape_/e:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^[ } % \end{macrocode} % \end{macro} @@ -1444,7 +1444,7 @@ % \end{macrocode} % \end{macro} % \end{macro} -% +% ^^A todo: use char_generate in above and rest of file % \begin{macro}[aux]{\@@_escape_x_test:N, \@@_escape_x_testii:N} % Find out whether the first character is a left brace (allowing any % number of hexadecimal digits), or not (allowing up to two @@ -1812,7 +1812,7 @@ % and special characters are normal. Also, for every raw character, we % must look ahead for a possible raw dash. % \begin{macrocode} -\cs_new_nopar:Npn \@@_if_in_class:TF +\cs_new:Npn \@@_if_in_class:TF { \if_int_odd:w \l_@@_mode_int \exp_after:wN \use_i:nn @@ -1827,7 +1827,7 @@ % Right braces are special only directly inside control sequences (at % the inner-most level of nesting, not counting groups). % \begin{macrocode} -\cs_new_nopar:Npn \@@_if_in_cs:TF +\cs_new:Npn \@@_if_in_cs:TF { \if_int_odd:w \l_@@_mode_int \exp_after:wN \use_ii:nn @@ -1846,7 +1846,7 @@ % Assertions are only allowed in modes $0$, $-2$, and $-6$, % \emph{i.e.}, even, non-positive modes. % \begin{macrocode} -\cs_new_nopar:Npn \@@_if_in_class_or_catcode:TF +\cs_new:Npn \@@_if_in_class_or_catcode:TF { \if_int_odd:w \l_@@_mode_int \exp_after:wN \use_i:nn @@ -1867,7 +1867,7 @@ % it applies (modes $23$ and $63$). This is used to tweak how left % brackets behave in modes $2$ and $6$. % \begin{macrocode} -\cs_new_nopar:Npn \@@_if_within_catcode:TF +\cs_new:Npn \@@_if_within_catcode:TF { \if_int_compare:w \l_@@_mode_int > \c_zero \exp_after:wN \use_i:nn @@ -1925,17 +1925,17 @@ % the end, make sure there are no dangling classes nor groups, close % the last branch: we are done building \cs{l_@@_internal_regex}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_compile:w +\cs_new_protected:Npn \@@_compile:w { \__tl_build_x:Nw \l_@@_internal_regex \int_zero:N \l_@@_group_level_int \int_set_eq:NN \l_@@_default_catcodes_int \c_@@_all_catcodes_int \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int - \cs_set_nopar:Npn \@@_item_equal:n { \@@_item_caseful_equal:n } - \cs_set_nopar:Npn \@@_item_range:nn { \@@_item_caseful_range:nn } + \cs_set:Npn \@@_item_equal:n { \@@_item_caseful_equal:n } + \cs_set:Npn \@@_item_range:nn { \@@_item_caseful_range:nn } \__tl_build_one:n { \@@_branch:n { \if_false: } \fi: } } -\cs_new_protected_nopar:Npn \@@_compile_end: +\cs_new_protected:Npn \@@_compile_end: { \@@_if_in_class:TF { @@ -2146,11 +2146,11 @@ % arguments to \cs{@@_compile_quantifier_lazyness:nnNN}, $-1$ means % that there is no upper bound on the number of repetitions. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_quantifier_?:w } +\cs_new_protected:cpn { @@_compile_quantifier_?:w } { \@@_compile_quantifier_lazyness:nnNN { 0 } { 1 } } -\cs_new_protected_nopar:cpn { @@_compile_quantifier_*:w } +\cs_new_protected:cpn { @@_compile_quantifier_*:w } { \@@_compile_quantifier_lazyness:nnNN { 0 } { -1 } } -\cs_new_protected_nopar:cpn { @@_compile_quantifier_+:w } +\cs_new_protected:cpn { @@_compile_quantifier_+:w } { \@@_compile_quantifier_lazyness:nnNN { 1 } { -1 } } % \end{macrocode} % \end{macro} @@ -2348,13 +2348,13 @@ % \cs{@@_prop_.:}, which matches any character or control % sequence, and refuses $-2$ (end-marker). % \begin{macrocode} -\cs_new_protected_nopar:cpx { @@_compile_.: } +\cs_new_protected:cpx { @@_compile_.: } { \exp_not:N \@@_if_in_class:TF { \@@_compile_raw:N . } { \@@_compile_one:x \exp_not:c { @@_prop_.: } } } -\cs_new_protected_nopar:cpn { @@_prop_.: } +\cs_new_protected:cpn { @@_prop_.: } { \if_int_compare:w \l_@@_current_char_int > - \c_two \exp_after:wN \@@_break_true:w @@ -2379,9 +2379,9 @@ % \begin{macrocode} \cs_set_protected:Npn \@@_tmp:w #1#2 { - \cs_new_protected_nopar:cpx { @@_compile_/#1: } + \cs_new_protected:cpx { @@_compile_/#1: } { \@@_compile_one:x \exp_not:c { @@_prop_#1: } } - \cs_new_protected_nopar:cpx { @@_compile_/#2: } + \cs_new_protected:cpx { @@_compile_/#2: } { \@@_compile_one:x { \@@_item_reverse:n \exp_not:c { @@_prop_#1: } } @@ -2392,7 +2392,7 @@ \@@_tmp:w s S \@@_tmp:w v V \@@_tmp:w w W -\cs_new_protected_nopar:cpn { @@_compile_/N: } +\cs_new_protected:cpn { @@_compile_/N: } { \@@_compile_one:x \@@_prop_N: } % \end{macrocode} % \end{macro} @@ -2420,7 +2420,7 @@ } \cs_set_protected:Npn \@@_tmp:w #1#2 { - \cs_new_protected_nopar:cpn { @@_compile_/#1: } + \cs_new_protected:cpn { @@_compile_/#1: } { \@@_compile_anchor:NF #2 { \@@_compile_raw_error:N #1 } } } \@@_tmp:w A \l_@@_min_pos_int @@ -2429,7 +2429,7 @@ \@@_tmp:w z \l_@@_max_pos_int \cs_set_protected:Npn \@@_tmp:w #1#2 { - \cs_new_protected_nopar:cpn { @@_compile_#1: } + \cs_new_protected:cpn { @@_compile_#1: } { \@@_compile_anchor:NF #2 { \@@_compile_raw:N #1 } } } \exp_args:Nx \@@_tmp:w { \iow_char:N \^ } \l_@@_min_pos_int @@ -2446,7 +2446,7 @@ % knowing what precedes in the token list, this requires more % information, namely, the knowledge of the last character code. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_/b: } +\cs_new_protected:cpn { @@_compile_/b: } { \@@_if_in_class_or_catcode:TF { \@@_compile_raw_error:N b } @@ -2455,7 +2455,7 @@ { \@@_assertion:Nn \c_true_bool { \@@_b_test: } } } } -\cs_new_protected_nopar:cpn { @@_compile_/B: } +\cs_new_protected:cpn { @@_compile_/B: } { \@@_if_in_class_or_catcode:TF { \@@_compile_raw_error:N B } @@ -2501,7 +2501,7 @@ % pre-expand the catcode as an optimization. Otherwise (modes $0$, % $-2$ and $-6$) just parse the class. The mode is updated later. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_[: } +\cs_new_protected:cpn { @@_compile_[: } { \@@_if_in_class:TF { \@@_compile_class_posix_test:w } @@ -2524,7 +2524,7 @@ % leading |^|. The auxiliary \cs{@@_compile_class:TFNN} also % checks for a leading |]| which has a special meaning. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_compile_class_normal:w +\cs_new_protected:Npn \@@_compile_class_normal:w { \@@_compile_class:TFNN { \@@_class:NnnnN \c_true_bool } @@ -2710,7 +2710,7 @@ % denoting special groups, and run the code for the corresponding % special group. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_(: } +\cs_new_protected:cpn { @@_compile_(: } { \@@_if_in_class:TF { \@@_compile_raw:N ( } { \@@_compile_lparen:w } @@ -2740,7 +2740,7 @@ % In a class, the pipe is not special. Otherwise, end the current % branch and open another one. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_|: } +\cs_new_protected:cpn { @@_compile_|: } { \@@_if_in_class:TF { \@@_compile_raw:N | } { @@ -2754,7 +2754,7 @@ % \begin{macro}[aux]{\@@_compile_):} % Within a class, parentheses are not special. Outside, close a group. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_): } +\cs_new_protected:cpn { @@_compile_): } { \@@_if_in_class:TF { \@@_compile_raw:N ) } { \@@_compile_group_end: } @@ -2768,9 +2768,9 @@ % compilation; for those groups, the harder parts will come when % building. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_special_group_::w } +\cs_new_protected:cpn { @@_compile_special_group_::w } { \@@_compile_group_begin:N \@@_group_no_capture:nnnN } -\cs_new_protected_nopar:cpn { @@_compile_special_group_|:w } +\cs_new_protected:cpn { @@_compile_special_group_|:w } { \@@_compile_group_begin:N \@@_group_resetting:nnnN } % \end{macrocode} % \end{macro} @@ -2786,8 +2786,8 @@ { \str_if_eq:nnTF { #1 #2 } { \@@_compile_special:N ) } { - \cs_set_nopar:Npn \@@_item_equal:n { \@@_item_caseless_equal:n } - \cs_set_nopar:Npn \@@_item_range:nn { \@@_item_caseless_range:nn } + \cs_set:Npn \@@_item_equal:n { \@@_item_caseless_equal:n } + \cs_set:Npn \@@_item_range:nn { \@@_item_caseless_range:nn } } { \__msg_kernel_warning:nnx { regex } { unknown-option } { (?i #2 } @@ -2797,13 +2797,13 @@ #1 #2 } } -\cs_new_protected_nopar:cpn { @@_compile_special_group_-:w } #1#2#3#4 +\cs_new_protected:cpn { @@_compile_special_group_-:w } #1#2#3#4 { \str_if_eq:nnTF { #1 #2 #3 #4 } { \@@_compile_raw:N i \@@_compile_special:N ) } { - \cs_set_nopar:Npn \@@_item_equal:n { \@@_item_caseful_equal:n } - \cs_set_nopar:Npn \@@_item_range:nn { \@@_item_caseful_range:nn } + \cs_set:Npn \@@_item_equal:n { \@@_item_caseful_equal:n } + \cs_set:Npn \@@_item_range:nn { \@@_item_caseful_range:nn } } { \__msg_kernel_warning:nnx { regex } { unknown-option } { (?-#2#4 } @@ -2901,7 +2901,7 @@ \tex_advance:D \l_@@_catcodes_int #1 \fi: } -\cs_new_protected_nopar:Npn \@@_compile_c_lbrack_end: +\cs_new_protected:Npn \@@_compile_c_lbrack_end: { \if_meaning:w \c_false_bool \l_@@_catcodes_bool \int_set:Nn \l_@@_catcodes_int @@ -2917,7 +2917,7 @@ % to forbid nesting |\c|. Additionally, disable submatch tracking % since groups don't escape the scope of |\c{...}|. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_c_ \c_left_brace_str :w } +\cs_new_protected:cpn { @@_compile_c_ \c_left_brace_str :w } { \@@_compile:w \@@_disable_submatches: @@ -3079,7 +3079,7 @@ % allowed in the same contexts as |\b|. At the compilation stage, we % leave it as a single control sequence, defined later. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_compile_/K: } +\cs_new_protected:cpn { @@_compile_/K: } { \int_compare:nNnTF \l_@@_mode_int = \c_zero { \__tl_build_one:n { \@@_command_K: } } @@ -3098,25 +3098,25 @@ \cs_new_protected:Npn \@@_show:Nx #1#2 { \__tl_build:Nw \l_@@_internal_a_tl - \cs_set_protected_nopar:Npn \@@_branch:n + \cs_set_protected:Npn \@@_branch:n { \seq_pop_right:NN \l_@@_show_prefix_seq \l_@@_internal_a_tl \@@_show_one:n { +-branch } \seq_put_right:No \l_@@_show_prefix_seq \l_@@_internal_a_tl \use:n } - \cs_set_protected_nopar:Npn \@@_group:nnnN + \cs_set_protected:Npn \@@_group:nnnN { \@@_show_group_aux:nnnnN { } } - \cs_set_protected_nopar:Npn \@@_group_no_capture:nnnN + \cs_set_protected:Npn \@@_group_no_capture:nnnN { \@@_show_group_aux:nnnnN { ~(no~capture) } } - \cs_set_protected_nopar:Npn \@@_group_resetting:nnnN + \cs_set_protected:Npn \@@_group_resetting:nnnN { \@@_show_group_aux:nnnnN { ~(resetting) } } \cs_set_eq:NN \@@_class:NnnnN \@@_show_class:NnnnN - \cs_set_protected_nopar:Npn \@@_command_K: + \cs_set_protected:Npn \@@_command_K: { \@@_show_one:n { reset~match~start~(\iow_char:N\\K) } } \cs_set_protected:Npn \@@_assertion:Nn ##1##2 { \@@_show_one:n { \bool_if:NF ##1 { negative~ } assertion:~##2 } } - \cs_set_nopar:Npn \@@_b_test: { word~boundary } + \cs_set:Npn \@@_b_test: { word~boundary } \cs_set_eq:NN \@@_anchor:N \@@_show_anchor_to_str:N \cs_set_protected:Npn \@@_item_caseful_equal:n ##1 { \@@_show_one:n { char~code~\int_eval:n{##1} } } @@ -3449,14 +3449,14 @@ % the left-end and right-end of each group without help from \TeX{}'s % grouping. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_push_lr_states: +\cs_new_protected:Npn \@@_push_lr_states: { \seq_push:No \l_@@_left_state_seq { \int_use:N \l_@@_left_state_int } \seq_push:No \l_@@_right_state_seq { \int_use:N \l_@@_right_state_int } } -\cs_new_protected_nopar:Npn \@@_pop_lr_states: +\cs_new_protected:Npn \@@_pop_lr_states: { \seq_pop:NN \l_@@_left_state_seq \l_@@_internal_a_tl \int_set:Nn \l_@@_left_state_int \l_@@_internal_a_tl @@ -3477,13 +3477,13 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_toks_put_left:Nx #1#2 { - \cs_set_nopar:Npx \@@_tmp:w { #2 } + \cs_set:Npx \@@_tmp:w { #2 } \tex_toks:D #1 \exp_after:wN \exp_after:wN \exp_after:wN { \exp_after:wN \@@_tmp:w \tex_the:D \tex_toks:D #1 } } \cs_new_protected:Npn \@@_toks_put_right:Nx #1#2 { - \cs_set_nopar:Npx \@@_tmp:w {#2} + \cs_set:Npx \@@_tmp:w {#2} \tex_toks:D #1 \exp_after:wN { \tex_the:D \tex_toks:D \exp_after:wN #1 \@@_tmp:w } } @@ -3517,7 +3517,7 @@ % \texttt{right} state is the new empty state, and the \texttt{left} % state points to the previously \enquote{current} state. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_build_new_state: +\cs_new_protected:Npn \@@_build_new_state: { %<*trace> \trace:nnx { regex } { 2 } @@ -3574,7 +3574,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_class:NnnnN #1#2#3#4#5 { - \cs_set_nopar:Npx \@@_tests_action_cost:n ##1 + \cs_set:Npx \@@_tests_action_cost:n ##1 { \exp_not:n { \exp_not:n {#2} } \bool_if:NTF #1 @@ -3718,7 +3718,7 @@ #1 } } -\cs_new_protected_nopar:Npn \@@_group_no_capture:nnnN +\cs_new_protected:Npn \@@_group_no_capture:nnnN { \@@_group_aux:nnnnN { -1 } } % \end{macrocode} % \end{macro} @@ -4001,7 +4001,7 @@ \exp_after:wN \@@_break_true:w \fi: } -\cs_new_protected_nopar:Npn \@@_b_test: +\cs_new_protected:Npn \@@_b_test: { \group_begin: \int_set_eq:NN \l_@@_current_char_int \l_@@_last_char_int @@ -4017,7 +4017,7 @@ % Change the starting point of the $0$-th submatch (full match), and % transition to a new state, pretending that this is a fresh thread. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_command_K: +\cs_new_protected:Npn \@@_command_K: { \@@_build_new_state: \@@_toks_put_right:Nx \l_@@_left_state_int @@ -4294,10 +4294,10 @@ % boundaries. Then call \cs{@@_match_loop:}, which runs through the % query until the end or until a successful match breaks early. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_match_once: +\cs_new_protected:Npn \@@_match_once: { \if_meaning:w \c_true_bool \l_@@_empty_success_bool - \cs_set_nopar:Npn \@@_if_two_empty_matches:F + \cs_set:Npn \@@_if_two_empty_matches:F { \int_compare:nNnF \l_@@_start_pos_int = \l_@@_current_pos_int } \else: \cs_set_eq:NN \@@_if_two_empty_matches:F \use:n @@ -4322,7 +4322,7 @@ % overall matching is successful as soon as any match % succeeds. Perform the action |#1|, then find the next match. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_single_match: +\cs_new_protected:Npn \@@_single_match: { \tl_set:Nn \l_@@_every_match_tl { \bool_gset_eq:NN \g_@@_success_bool \l_@@_match_success_bool } @@ -4355,7 +4355,7 @@ % \cs{@@_match_once:} matches. We explain the \texttt{fresh_thread} % business when describing \cs{@@_action_wildcard:}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_match_loop: +\cs_new_protected:Npn \@@_match_loop: { \tex_advance:D \l_@@_step_int \c_two \int_incr:N \l_@@_current_pos_int @@ -4421,7 +4421,7 @@ % the stretch components, and we need a conversion to avoid \TeX{}'s % \enquote{incompatible glue units} error. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_query_get: +\cs_new_protected:Npn \@@_query_get: { \l_@@_current_char_int = \etex_mutoglue:D \tex_muskip:D \l_@@_current_pos_int @@ -4441,7 +4441,7 @@ % state is marked as $\texttt{step}+1$: any thread hitting it at that % point will be terminated. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_use_state: +\cs_new_protected:Npn \@@_use_state: { %<*trace> \trace:nnx { regex } { 2 } { state~\int_use:N \l_@@_current_state_int } @@ -4484,7 +4484,7 @@ % \cs{l_@@_fresh_thread_bool} may be skipped by a successful % thread, hence we had to add it to \cs{@@_match_loop:} too. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_action_start_wildcard: +\cs_new_protected:Npn \@@_action_start_wildcard: { \bool_set_true:N \l_@@_fresh_thread_bool \@@_action_free:n {1} @@ -4508,9 +4508,9 @@ % \enquote{normal} version will revisit a state when within the thread % itself. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_action_free:n +\cs_new_protected:Npn \@@_action_free:n { \@@_action_free_aux:nn { > \l_@@_step_int \else: } } -\cs_new_protected_nopar:Npn \@@_action_free_group:n +\cs_new_protected:Npn \@@_action_free_group:n { \@@_action_free_aux:nn { < \l_@@_step_int } } \cs_new_protected:Npn \@@_action_free_aux:nn #1#2 { @@ -4562,7 +4562,7 @@ \tex_skip:D \l_@@_max_active_int = #1 sp \scan_stop: \int_incr:N \l_@@_max_active_int } -\cs_new_protected_nopar:Npn \@@_store_submatches: +\cs_new_protected:Npn \@@_store_submatches: { \tex_toks:D \l_@@_max_active_int \exp_after:wN { \l_@@_current_submatches_prop } @@ -4577,9 +4577,9 @@ % relevant functions to remove their argument and do nothing % with it. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_disable_submatches: +\cs_new_protected:Npn \@@_disable_submatches: { - \cs_set_protected_nopar:Npn \@@_store_submatches: { } + \cs_set_protected:Npn \@@_store_submatches: { } \cs_set_protected:Npn \@@_action_submatch:n ##1 { } } % \end{macrocode} @@ -4607,7 +4607,7 @@ % pursued further. The values stored here may be overwritten by a % later success of a path with higher precedence. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_action_success: +\cs_new_protected:Npn \@@_action_success: { \@@_if_two_empty_matches:F { @@ -4939,7 +4939,7 @@ } { \@@_replacement_error:NNN c #1#2 } } -\cs_new_protected_nopar:cpn { @@_replacement_c_ \c_left_brace_str :w } +\cs_new_protected:cpn { @@_replacement_c_ \c_left_brace_str :w } { \if_case:w \l_@@_replacement_csnames_int \__tl_build_one:n @@ -5028,7 +5028,7 @@ % query, and to expand their contents to tokens of the query. % \begin{macrocode} \char_set_catcode_active:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_A:w + \cs_new_protected:Npn \@@_replacement_c_A:w { \@@_replacement_char:nNN { \exp_not:n { \exp_not:N ^^@ } } } % \end{macrocode} % \end{macro} @@ -5043,7 +5043,7 @@ % with \pkg{l3tl-analysis}. % \begin{macrocode} \char_set_catcode_group_begin:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_B:w + \cs_new_protected:Npn \@@_replacement_c_B:w { \if_int_compare:w \l_@@_replacement_csnames_int = \c_zero \int_incr:N \l_@@_balance_int @@ -5070,7 +5070,7 @@ % correct category. % \begin{macrocode} \char_set_catcode_math_subscript:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_D:w + \cs_new_protected:Npn \@@_replacement_c_D:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5080,7 +5080,7 @@ % produces the bare end-group token. % \begin{macrocode} \char_set_catcode_group_end:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_E:w + \cs_new_protected:Npn \@@_replacement_c_E:w { \if_int_compare:w \l_@@_replacement_csnames_int = \c_zero \int_decr:N \l_@@_balance_int @@ -5095,7 +5095,7 @@ % Simply \tn{lowercase} a letter null byte to produce an arbitrary letter. % \begin{macrocode} \char_set_catcode_letter:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_L:w + \cs_new_protected:Npn \@@_replacement_c_L:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5104,7 +5104,7 @@ % No surprise here, we lowercase the null math toggle. % \begin{macrocode} \char_set_catcode_math_toggle:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_M:w + \cs_new_protected:Npn \@@_replacement_c_M:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5113,7 +5113,7 @@ % Lowercase an other null byte. % \begin{macrocode} \char_set_catcode_other:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_O:w + \cs_new_protected:Npn \@@_replacement_c_O:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5127,7 +5127,7 @@ % parameter character would be doubled. % \begin{macrocode} \char_set_catcode_parameter:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_P:w + \cs_new_protected:Npn \@@_replacement_c_P:w { \@@_replacement_char:nNN { \exp_not:n { \exp_not:n { ^^@^^@^^@^^@ } } } @@ -5162,7 +5162,7 @@ % trouble in alignment settings. % \begin{macrocode} \char_set_catcode_alignment:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_T:w + \cs_new_protected:Npn \@@_replacement_c_T:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5172,7 +5172,7 @@ % math superscript |^^@|. % \begin{macrocode} \char_set_catcode_math_superscript:N \^^@ - \cs_new_protected_nopar:Npn \@@_replacement_c_U:w + \cs_new_protected:Npn \@@_replacement_c_U:w { \@@_replacement_char:nNN { ^^@ } } % \end{macrocode} % \end{macro} @@ -5212,17 +5212,17 @@ % Compile, then store the result in the user variable with the % appropriate assignment function. % \begin{macrocode} -\cs_new_protected_nopar:Npn \regex_set:Nn #1#2 +\cs_new_protected:Npn \regex_set:Nn #1#2 { \@@_compile:n {#2} \tl_set_eq:NN #1 \l_@@_internal_regex } -\cs_new_protected_nopar:Npn \regex_gset:Nn #1#2 +\cs_new_protected:Npn \regex_gset:Nn #1#2 { \@@_compile:n {#2} \tl_gset_eq:NN #1 \l_@@_internal_regex } -\cs_new_protected_nopar:Npn \regex_const:Nn #1#2 +\cs_new_protected:Npn \regex_const:Nn #1#2 { \@@_compile:n {#2} \tl_const:Nx #1 { \exp_not:o \l_@@_internal_regex } @@ -5364,7 +5364,7 @@ % \cs{prg_return_true:} as appropriate to whether a match was found or % not. It is used by all user conditionals. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_return: +\cs_new_protected:Npn \@@_return: { \if_meaning:w \c_true_bool \g_@@_success_bool \prg_return_true: @@ -5567,7 +5567,7 @@ % end, store the information about the position at which the match % attempt started, as a shrink component. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_extract: +\cs_new_protected:Npn \@@_extract: { \if_meaning:w \c_true_bool \g_@@_success_bool \int_set_eq:NN \l_@@_zeroth_submatch_int \l_@@_submatch_int @@ -5698,7 +5698,7 @@ % \cs{l_@@_internal_a_tl}, adding the appropriate braces to produce % a balanced result. And end the group. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_group_end_replace:N #1 +\cs_new_protected:Npn \@@_group_end_replace:N #1 { \if_int_compare:w \l_@@_balance_int = \c_zero \else: diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx index cda42b33ccc..2412dead14b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3str-convert.dtx 6443 2016-03-24 10:59:09Z joseph $ +\GetIdInfo$Id: l3str-convert.dtx 6699 2016-09-07 16:03:15Z bruno $ {L3 Experimental string encoding conversions} %</driver|package> %<*driver> @@ -207,11 +207,6 @@ % encoding. Instead, the \meta{false code} is performed. % \end{function} % -% \begin{variable}{\c_max_char_int} -% The maximum valid character code, $255$ for pdf\TeX{}, and $1114111$ -% for \XeTeX{} and \LuaTeX{}. -% \end{variable} -% % \section{Internal string functions} % % \begin{function}{\__str_gset_other:Nn} @@ -313,29 +308,12 @@ % % \subsubsection{Variables and constants} % -% \begin{variable}{\c_max_char_int} -% The maximum valid character code is $255$ for pdf\TeX{}, and -% $1114111$ for other engines. -% \begin{macrocode} -\int_const:Nn \c_max_char_int - { - \bool_if:nTF - { - \sys_if_engine_luatex_p: || - \sys_if_engine_xetex_p: - } - { "10FFFF } - { "FF } - } -% \end{macrocode} -% \end{variable} -% % \begin{macro}{\@@_tmp:w} % \begin{variable}{\l_@@_internal_int} % \begin{variable}{\l_@@_internal_tl} % Internal scratch space for some functions. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_tmp:w { } +\cs_new_protected:Npn \@@_tmp:w { } \tl_new:N \l_@@_internal_tl \int_new:N \l_@@_internal_int % \end{macrocode} @@ -425,7 +403,7 @@ % \end{variable} % % \subsubsection{Escaping spaces} -% +% ^^A todo: use char_generate in this file % \begin{macro}[int]{\@@_gset_other:Nn} % \begin{macro}[aux,EXP]{\@@_gset_other_loop:w} % \begin{macro}[aux,EXP]{\@@_gset_other_end:w} @@ -502,7 +480,7 @@ \fi: \@@_if_contains_char_aux:NN #1 } -\cs_new_nopar:Npn \@@_if_contains_char_true: +\cs_new:Npn \@@_if_contains_char_true: { \__prg_break:n { \prg_return_true: \use_none:n } } % \end{macrocode} % \end{macro} @@ -611,7 +589,7 @@ % \begin{macrocode} \cs_new:Npn \@@_output_byte:n #1 { \@@_output_byte:w #1 \@@_output_end: } -\cs_new_nopar:Npn \@@_output_byte:w +\cs_new:Npn \@@_output_byte:w { \exp_after:wN \exp_after:wN \exp_after:wN \use_i:nnn @@ -619,13 +597,13 @@ } \cs_new:Npn \@@_output_hexadecimal:n #1 { \@@_output_hexadecimal:w #1 \@@_output_end: } -\cs_new_nopar:Npn \@@_output_hexadecimal:w +\cs_new:Npn \@@_output_hexadecimal:w { \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n \cs:w c_@@_byte_ \__int_value:w \__int_eval:w } -\cs_new_nopar:Npn \@@_output_end: +\cs_new:Npn \@@_output_end: { \__int_eval_end: _tl \cs_end: } % \end{macrocode} % \end{macro} @@ -794,9 +772,9 @@ % act on \cs{g_@@_result_tl}. Errors are silenced for the conditional % functions by redefining \cs{@@_if_flag_error:nnx} locally. % \begin{macrocode} -\cs_new_protected_nopar:Npn \str_set_convert:Nnnn +\cs_new_protected:Npn \str_set_convert:Nnnn { \@@_convert:nNNnnn { } \tl_set_eq:NN } -\cs_new_protected_nopar:Npn \str_gset_convert:Nnnn +\cs_new_protected:Npn \str_gset_convert:Nnnn { \@@_convert:nNNnnn { } \tl_gset_eq:NN } \prg_new_protected_conditional:Npnn \str_set_convert:Nnnn #1#2#3#4 { T , F , TF } @@ -1077,7 +1055,7 @@ \sys_if_engine_xetex_p: } { - \cs_new_protected_nopar:Npn \@@_convert_unescape_: + \cs_new_protected:Npn \@@_convert_unescape_: { \flag_clear:n { str_byte } \tl_gset:Nx \g_@@_result_tl @@ -1085,7 +1063,7 @@ \@@_if_flag_error:nnx { str_byte } { non-byte } { bytes } } } - { \cs_new_protected_nopar:Npn \@@_convert_unescape_: { } } + { \cs_new_protected:Npn \@@_convert_unescape_: { } } \cs_new_eq:NN \@@_convert_unescape_bytes: \@@_convert_unescape_: % \end{macrocode} % \end{macro} @@ -1096,7 +1074,7 @@ % The simplest form of escape leaves the bytes from the previous step % of the conversion unchanged. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_convert_escape_: { } +\cs_new_protected:Npn \@@_convert_escape_: { } \cs_new_eq:NN \@@_convert_escape_bytes: \@@_convert_escape_: % \end{macrocode} % \end{macro} @@ -1108,7 +1086,7 @@ % \begin{macro}[aux, rEXP]{\@@_decode_native_char:N} % Convert each character to its character code, one at a time. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_convert_decode_: +\cs_new_protected:Npn \@@_convert_decode_: { \@@_convert_gmap:N \@@_decode_native_char:N } \cs_new:Npn \@@_decode_native_char:N #1 { #1 \s__tl \__int_value:w `#1 \s__tl } @@ -1147,7 +1125,7 @@ % $[0,\hexnum{10FFFF}]$. % \begin{macrocode} { - \cs_new_protected_nopar:Npn \@@_convert_encode_: + \cs_new_protected:Npn \@@_convert_encode_: { \__tl_gbuild_x:Nw \g_@@_result_tl \exp_after:wN \@@_encode_native_loop:w @@ -1172,7 +1150,7 @@ % which then triggers a pdf\TeX{}-specific error. % \begin{macrocode} { - \cs_new_protected_nopar:Npn \@@_convert_encode_: + \cs_new_protected:Npn \@@_convert_encode_: { \flag_clear:n { str_error } \@@_convert_gmap_internal:N \@@_encode_native_char:n @@ -1215,7 +1193,7 @@ % \cs{g_@@_result_tl} into a clist variable, as this avoids problems % with leading or trailing commas. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_convert_decode_clist: +\cs_new_protected:Npn \@@_convert_decode_clist: { \clist_set:No \g_@@_result_tl \g_@@_result_tl \tl_gset:Nx \g_@@_result_tl @@ -1238,7 +1216,7 @@ % empty case, since \cs{tl_tail:N} does not trigger an error in this % case). % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_convert_encode_clist: +\cs_new_protected:Npn \@@_convert_encode_clist: { \@@_convert_gmap_internal:N \@@_encode_clist_char:n \tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl } @@ -1288,9 +1266,9 @@ \cs_new_protected:Npn \@@_declare_eight_bit_encoding:nnn #1#2#3 { \tl_set:Nn \l_@@_internal_tl {#1} - \cs_new_protected_nopar:cpn { @@_convert_decode_#1: } + \cs_new_protected:cpn { @@_convert_decode_#1: } { \@@_convert_decode_eight_bit:n {#1} } - \cs_new_protected_nopar:cpn { @@_convert_encode_#1: } + \cs_new_protected:cpn { @@_convert_encode_#1: } { \@@_convert_encode_eight_bit:n {#1} } \tl_const:cn { c_@@_encoding_#1_tl } {#2} \tl_const:cn { c_@@_encoding_#1_missing_tl } {#3} @@ -1510,7 +1488,7 @@ % appending a |0| in all cases, and dropping it if it is alone. % \begin{macrocode} %<*hex> -\cs_new_protected_nopar:Npn \@@_convert_unescape_hex: +\cs_new_protected:Npn \@@_convert_unescape_hex: { \group_begin: \flag_clear:n { str_error } @@ -1684,7 +1662,7 @@ \char_set_catcode_other:N \^^M \tex_lowercase:D { - \cs_new_protected_nopar:Npn \@@_convert_unescape_string: + \cs_new_protected:Npn \@@_convert_unescape_string: { \group_begin: \flag_clear:n { str_byte } @@ -1782,7 +1760,7 @@ % Loop and convert each byte to hexadecimal. % \begin{macrocode} %<*hex> -\cs_new_protected_nopar:Npn \@@_convert_escape_hex: +\cs_new_protected:Npn \@@_convert_escape_hex: { \@@_convert_gmap:N \@@_escape_hex_char:N } \cs_new:Npn \@@_escape_hex_char:N #1 { \@@_output_hexadecimal:n { `#1 } } @@ -1806,7 +1784,7 @@ %<*name> \str_const:Nn \c_@@_escape_name_not_str { ! " $ & ' } %$ \str_const:Nn \c_@@_escape_name_str { {}/<>[] } -\cs_new_protected_nopar:Npn \@@_convert_escape_name: +\cs_new_protected:Npn \@@_convert_escape_name: { \@@_convert_gmap:N \@@_escape_name_char:N } \cs_new:Npn \@@_escape_name_char:N #1 { @@ -1846,7 +1824,7 @@ %<*string> \str_const:Nx \c_@@_escape_string_str { \c_backslash_str ( ) } -\cs_new_protected_nopar:Npn \@@_convert_escape_string: +\cs_new_protected:Npn \@@_convert_escape_string: { \@@_convert_gmap:N \@@_escape_string_char:N } \cs_new:Npn \@@_escape_string_char:N #1 { @@ -1890,7 +1868,7 @@ % different characters. % \begin{macrocode} %<*url> -\cs_new_protected_nopar:Npn \@@_convert_escape_url: +\cs_new_protected:Npn \@@_convert_escape_url: { \@@_convert_gmap:N \@@_escape_url_char:N } \cs_new:Npn \@@_escape_url_char:N #1 { @@ -1974,7 +1952,7 @@ % construction |\c_minus_one + \c_zero *| removes the spurious initial % continuation byte (better methods welcome). % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_convert_encode_utf8: } +\cs_new_protected:cpn { @@_convert_encode_utf8: } { \@@_convert_gmap_internal:N \@@_encode_utf_viii_char:n } \cs_new:Npn \@@_encode_utf_viii_char:n #1 { @@ -2148,7 +2126,7 @@ % auxiliary, which raises the appropriate error flag before ending the % mapping. % \begin{macrocode} -\cs_new_protected_nopar:cpn { @@_convert_decode_utf8: } +\cs_new_protected:cpn { @@_convert_decode_utf8: } { \flag_clear:n { str_error } \flag_clear:n { str_missing } @@ -2235,7 +2213,7 @@ \flag_raise:n { str_error } \int_use:N \c_@@_replacement_char_int } -\cs_new_nopar:Npn \@@_decode_utf_viii_end: +\cs_new:Npn \@@_decode_utf_viii_end: { \s__tl \flag_raise:n { str_missing } @@ -2295,14 +2273,14 @@ % compute the remainder, and output two bytes for the quotient and % remainder. % \begin{macrocode} - \cs_new_protected_nopar:cpn { @@_convert_encode_utf16: } + \cs_new_protected:cpn { @@_convert_encode_utf16: } { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n \tl_gput_left:Nx \g_@@_result_tl { ^^fe ^^ff } } - \cs_new_protected_nopar:cpn { @@_convert_encode_utf16be: } + \cs_new_protected:cpn { @@_convert_encode_utf16be: } { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n } - \cs_new_protected_nopar:cpn { @@_convert_encode_utf16le: } + \cs_new_protected:cpn { @@_convert_encode_utf16le: } { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_le:n } \cs_new_protected:Npn \@@_encode_utf_xvi_aux:N #1 { @@ -2423,11 +2401,11 @@ % little-endian, then loops over the string using % \cs{@@_decode_utf_xvi_pair:NN} described below. % \begin{macrocode} - \cs_new_protected_nopar:cpn { @@_convert_decode_utf16be: } + \cs_new_protected:cpn { @@_convert_decode_utf16be: } { \@@_decode_utf_xvi:Nw 1 \g_@@_result_tl \s__stop } - \cs_new_protected_nopar:cpn { @@_convert_decode_utf16le: } + \cs_new_protected:cpn { @@_convert_decode_utf16le: } { \@@_decode_utf_xvi:Nw 2 \g_@@_result_tl \s__stop } - \cs_new_protected_nopar:cpn { @@_convert_decode_utf16: } + \cs_new_protected:cpn { @@_convert_decode_utf16: } { \exp_after:wN \@@_decode_utf_xvi_bom:NN \g_@@_result_tl \s__stop \s__stop \s__stop @@ -2606,14 +2584,14 @@ % little-endian encodings are very similar, but the % \cs{@@_output_byte:n} instructions are reversed. % \begin{macrocode} - \cs_new_protected_nopar:cpn { @@_convert_encode_utf32: } + \cs_new_protected:cpn { @@_convert_encode_utf32: } { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n \tl_gput_left:Nx \g_@@_result_tl { ^^00 ^^00 ^^fe ^^ff } } - \cs_new_protected_nopar:cpn { @@_convert_encode_utf32be: } + \cs_new_protected:cpn { @@_convert_encode_utf32be: } { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n } - \cs_new_protected_nopar:cpn { @@_convert_encode_utf32le: } + \cs_new_protected:cpn { @@_convert_encode_utf32le: } { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_le:n } \cs_new:Npn \@@_encode_utf_xxxii_be:n #1 { @@ -2710,11 +2688,11 @@ % In the ending code, we check that there remains no byte: there % should be nothing left until the first \cs{s__stop}. Break the map. % \begin{macrocode} - \cs_new_protected_nopar:cpn { @@_convert_decode_utf32be: } + \cs_new_protected:cpn { @@_convert_decode_utf32be: } { \@@_decode_utf_xxxii:Nw 1 \g_@@_result_tl \s__stop } - \cs_new_protected_nopar:cpn { @@_convert_decode_utf32le: } + \cs_new_protected:cpn { @@_convert_decode_utf32le: } { \@@_decode_utf_xxxii:Nw 2 \g_@@_result_tl \s__stop } - \cs_new_protected_nopar:cpn { @@_convert_decode_utf32: } + \cs_new_protected:cpn { @@_convert_decode_utf32: } { \exp_after:wN \@@_decode_utf_xxxii_bom:NNNN \g_@@_result_tl \s__stop \s__stop \s__stop \s__stop \s__stop diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index 189ea896cc0..309c57a0f2e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3str-format.dtx 6439 2016-03-23 12:03:41Z joseph $ +\GetIdInfo$Id: l3str-format.dtx 6589 2016-06-13 11:11:55Z joseph $ {L3 Experimental string formatting} %</driver|package> %<*driver> @@ -448,7 +448,7 @@ % Call \cs{@@_tl:NNNnnNn} to read the parsed \meta{format % specification}. Then convert the result to a string. % \begin{macrocode} -\cs_new_nopar:Npn \tl_format:Nn { \exp_args:No \tl_format:nn } +\cs_new:Npn \tl_format:Nn { \exp_args:No \tl_format:nn } \cs_generate_variant:Nn \tl_format:Nn { c } \cs_new:Npn \tl_format:nn #1#2 { diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx index b33d81aedb2..838da42e278 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3tl-analysis.dtx 6443 2016-03-24 10:59:09Z joseph $ +\GetIdInfo$Id: l3tl-analysis.dtx 6589 2016-06-13 11:11:55Z joseph $ {L3 Experimental token lists analysis} %</driver|package> %<*driver> @@ -280,7 +280,7 @@ % only be assumed to work for begin-group and end-group character % tokens. It produces a number in the form |`|\meta{char}. % \begin{macrocode} -\cs_new_nopar:Npn \@@_extract_charcode: +\cs_new:Npn \@@_extract_charcode: { \exp_after:wN \@@_extract_charcode_aux:w \token_to_meaning:N \l_@@_token @@ -488,7 +488,7 @@ % \begin{macro}[int]{\@@_a_loop:w} % Read one character and check its type. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_a_loop:w +\cs_new_protected:Npn \@@_a_loop:w { \tex_futurelet:D \l_@@_token \@@_a_type:w } % \end{macrocode} % \end{macro} @@ -510,7 +510,7 @@ % over \cs{l_@@_token} if it matches with one of the % character tokens (hence is not a primitive conditional). % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_a_type:w +\cs_new_protected:Npn \@@_a_type:w { \l_@@_type_int = \if_meaning:w \l_@@_token \c_space_token @@ -558,14 +558,14 @@ % so that the second pass does not need to test the meaning of tokens, % only strings. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_a_space:w +\cs_new_protected:Npn \@@_a_space:w { \tex_afterassignment:D \@@_a_space_test:w \exp_after:wN \cs_set_eq:NN \exp_after:wN \l_@@_char_token \token_to_str:N } -\cs_new_protected_nopar:Npn \@@_a_space_test:w +\cs_new_protected:Npn \@@_a_space_test:w { \if_meaning:w \l_@@_char_token \c_space_token \tex_toks:D \l_@@_index_int { \exp_not:n { ~ } } @@ -597,11 +597,11 @@ \group_begin: \char_set_catcode_group_begin:N \^^@ \char_set_catcode_group_end:N \^^E - \cs_new_protected_nopar:Npn \@@_a_bgroup:w + \cs_new_protected:Npn \@@_a_bgroup:w { \@@_a_group:nw { \exp_after:wN ^^@ \if_false: ^^E \fi: } } \char_set_catcode_group_begin:N \^^B \char_set_catcode_group_end:N \^^@ - \cs_new_protected_nopar:Npn \@@_a_egroup:w + \cs_new_protected:Npn \@@_a_egroup:w { \@@_a_group:nw { \if_false: ^^B \fi: ^^@ } } \group_end: \cs_new_protected:Npn \@@_a_group:nw #1 @@ -616,7 +616,7 @@ \exp_after:wN \l_@@_char_token \token_to_str:N } -\cs_new_protected_nopar:Npn \@@_a_group_test:w +\cs_new_protected:Npn \@@_a_group_test:w { \if_charcode:w \l_@@_token \l_@@_char_token \@@_a_store: @@ -660,7 +660,7 @@ % Finally, we check whether we reached the last closing brace, in which % case we stop by disabling the looping function (locally). % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_a_store: +\cs_new_protected:Npn \@@_a_store: { \tex_advance:D \l_@@_nesting_int \l_@@_type_int \if_int_compare:w \tex_lccode:D \c_zero = \c_thirty_two diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx index db33b260adc..50a67c3858f 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx @@ -36,8 +36,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/05/14] -%<package>\@ifpackagelater{expl3}{2016/05/14} +\RequirePackage{expl3}[2016/10/19] +%<package>\@ifpackagelater{expl3}{2016/10/19} %<package> {} %<package> {% %<package> \PackageError{l3tl-build}{Support package l3kernel too old} @@ -49,7 +49,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: l3tl-build.dtx 6492 2016-05-14 20:27:55Z joseph $ +\GetIdInfo$Id: l3tl-build.dtx 6730 2016-10-19 11:19:38Z joseph $ {L3 Experimental token list construction} %</driver|package> %<*driver> @@ -205,7 +205,7 @@ % expanding to |\the\toks#10...\the\toks#19|, but this should be kept % for much later. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_unpack: +\cs_new_protected:Npn \@@_unpack: { \tl_put_right:Nx \l_@@_result_tl { @@ -240,18 +240,18 @@ % \cs{@@_end:} for details). Then initialize the start index and % the current index at zero, and empty the \texttt{result} token list. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@:Nw +\cs_new_protected:Npn \@@:Nw { \@@_aux:NNw \tl_set:Nn } -\cs_new_protected_nopar:Npn \@@_x:Nw +\cs_new_protected:Npn \@@_x:Nw { \@@_aux:NNw \tl_set:Nx } -\cs_new_protected_nopar:Npn \__tl_gbuild:Nw +\cs_new_protected:Npn \__tl_gbuild:Nw { \@@_aux:NNw \tl_gset:Nn } -\cs_new_protected_nopar:Npn \__tl_gbuild_x:Nw +\cs_new_protected:Npn \__tl_gbuild_x:Nw { \@@_aux:NNw \tl_gset:Nx } \cs_new_protected:Npn \@@_aux:NNw #1#2 { \group_begin: - \cs_set_nopar:Npn \@@_end_assignment:n + \cs_set:Npn \@@_end_assignment:n { \group_end: #1 #2 } \int_zero:N \l_@@_start_index_int \int_zero:N \l_@@_index_int @@ -271,7 +271,7 @@ % set it to a function which would clean up the contents of % \cs{l_@@_result_tl}. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_end: +\cs_new_protected:Npn \@@_end: { \@@_unpack: \exp_args:No diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index a35de8f7643..70147a113d9 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -38,8 +38,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2016/05/14] -%<package>\@ifpackagelater{expl3}{2016/05/14} +\RequirePackage{expl3}[2016/10/19] +%<package>\@ifpackagelater{expl3}{2016/10/19} %<package> {} %<package> {% %<package> \PackageError{l3galley}{Support package l3kernel too old} @@ -51,7 +51,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: l3galley.dtx 6493 2016-05-14 21:08:13Z joseph $ +\GetIdInfo$Id: l3galley.dtx 6730 2016-10-19 11:19:38Z joseph $ {L3 Experimental galley code} %</driver|package> %<*driver> @@ -744,9 +744,16 @@ % Settings for application by the galley respect the usual \TeX{} grouping and % so are all local variables. % +% \begin{variable}{\g_@@_cutout_active_bool, \g_@@_cutout_active_bool} +% \begin{macrocode} +\bool_new:N \g_@@_cutout_active_bool +\bool_new:N \l_@@_cutout_active_bool +% \end{macrocode} +% \end{variable} +% % \begin{variable} % {\l_@@_cutout_left_indent_seq, \l_@@_cutout_right_indent_seq} -% Essentially scratch space, used when setting up a cutout in a paragrph, +% Essentially scratch space, used when setting up a cutout in a paragraph, % but named as there is quite a bit to do in that code. % \begin{macrocode} \seq_new:N \l_@@_cutout_left_indent_seq @@ -982,14 +989,25 @@ % galley level must form a group: galley levels are tied to vertical % boxes and so this is a reasonable requirements. % +% \begin{variable}{\l_@@_group_level_int} +% The top group level for the galley needs to be known to allow +% some data structures to be reset correctly: they can only be +% fully cleared at the outer level. +% \begin{macrocode} +\int_new:N \l_@@_group_level_int +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\@@_initialise_variables:} % At the start of a galley level the global variables need to be reset to % standard values. For example, the measure is set to the galley width and % any paragraph shape is cleared. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_initialise_variables: +\cs_new_protected:Npn \@@_initialise_variables: { + \int_set:Nn \l_@@_group_level_int { \etex_currentgrouplevel:D } \bool_gset_true:N \g_@@_begin_level_bool + \bool_gset_false:N \g_@@_cutout_active_bool \seq_gclear:N \g_@@_cutout_left_seq \seq_gclear:N \g_@@_cutout_right_seq \tl_gclear:N \g_@@_interpar_penalty_user_tl @@ -1012,10 +1030,10 @@ % \begin{macro}{\@@_initialise_settings:} % This sets the local values of the various galley settings. The % flag \cs{l_@@_parshape_multipar_bool} is set \texttt{true} here -% as it allows an efficency saving in parshape setting: only +% as it allows an efficiency saving in parshape setting: only % when it is actively set \texttt{false} is action needed. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_initialise_settings: +\cs_new_protected:Npn \@@_initialise_settings: { \bool_set_true:N \l_@@_parshape_multipar_bool \seq_clear:N \l_@@_parshape_left_indent_seq @@ -1031,10 +1049,12 @@ % Saving and restoring parameters is carried out by a series of copy % functions. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_save_parameters: +\cs_new_protected:Npn \@@_save_parameters: { \bool_set_eq:NN \l_@@_begin_level_bool \g_@@_begin_level_bool + \bool_set_eq:NN \l_@@_cutout_active_bool + \g_@@_cutout_active_bool \seq_set_eq:NN \l_@@_cutout_left_seq \g_@@_cutout_left_seq \seq_set_eq:NN \l_@@_cutout_right_seq @@ -1064,10 +1084,12 @@ \tl_set_eq:NN \l_@@_whatsit_next_tl \g_galley_whatsit_next_tl } -\cs_new_protected_nopar:Npn \@@_restore_parameters: +\cs_new_protected:Npn \@@_restore_parameters: { \bool_gset_eq:NN \g_@@_begin_level_bool \l_@@_begin_level_bool + \bool_gset_eq:NN \g_@@_cutout_active_bool + \l_@@_cutout_active_bool \seq_gset_eq:NN \g_@@_cutout_left_seq \l_@@_cutout_left_seq \seq_gset_eq:NN \g_@@_cutout_right_seq @@ -1106,7 +1128,7 @@ % settings, starting a group then initialising both the local and global % variables. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_level: +\cs_new_protected:Npn \galley_level: { \@@_save_parameters: \group_begin: @@ -1122,7 +1144,7 @@ % must come in a fixed location. All of this relies on the % \enquote{color safe} group used inside a box. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_level_end: +\cs_new_protected:Npn \@@_level_end: { \par \@@_restore_parameters: @@ -1144,13 +1166,13 @@ % \begin{macro}{\galley_par:} % \begin{macro}[aux]{\@@_par_auxi:, \@@_par_auxii:, \@@_par_auxiii:} % \begin{macro}[aux]{\@@_par_aux:N} -% \begin{macro}[int]{\@@_par_set_cutout:, \@@_par_update_cutout:} +% \begin{macro}[int]{\@@_par_update_cutout:} % The idea here is to expand the next token in exactly the same way as \TeX{} % would do anyway. The \texttt{f}-type expansion will ignore any protection, % but will stop at a scan marker. Thus the code can test for an % \enquote{omit paragraph} marker. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_par: +\cs_new_protected:Npn \galley_par: { \s__par_omit \exp_after:wN \@@_par_auxi: \exp:w \exp_end_continue_f:w @@ -1175,7 +1197,7 @@ % \cs{etex_interlinepenalties:D}). In vertical mode, that means just % inserting the primitive. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_par_auxii: +\cs_new_protected:Npn \@@_par_auxii: { \mode_if_vertical:TF { @@ -1194,7 +1216,8 @@ % \begin{macrocode} { \g_galley_par_end_hook_tl - \@@_par_set_cutout: + \bool_if:NT \g_@@_cutout_active_bool + { \@@_parshape_set: } \group_begin: \tex_par:D \group_end: @@ -1221,22 +1244,26 @@ \tex_penalty:D \c_ten_thousand } % \end{macrocode} -% When cutouts are active, there is a need to set the paragraph shape -% \enquote{just in time}. After the typesetting, the lines remaining in -% the cutout has to be updated for the next run. This is all done for -% each paragraph to avoid any grouping issues and without needing to set -% \cs{tex_parshape:n} globally. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_par_set_cutout: - { - \bool_if:nF - { - \seq_if_empty_p:N \g_@@_cutout_left_seq - && \seq_if_empty_p:N \g_@@_cutout_right_seq - } - { \@@_parshape_set: } - } -\cs_new_protected_nopar:Npn \@@_par_update_cutout: +% Once a cutout has been set, properly tidying up needs some work. The +% cutout is applied \enquote{just in time} at the start of each paragraph +% (see above). After the paragraph, the consumed lines are removed from +% the tracking sequences and the paragraph shape is reset. The latter step +% is required as we do not set the paragraph shape for every paragraph. +% Once the two sequences are empty, there is no cutout to apply. However, +% it can still be \enquote{active}. If a cutout is started then we have a +% group, it is possible for the cutout to be entirely applied before the +% end of the group. At that point, the two sequences show there is nothing +% to do \emph{but} the active paragraph shape still has some lines indented. +% As we avoid setting the \tn{parshape} primitive for every paragraph, +% the result of only checking the sequences would be that the cutout would +% reappear after the group! Instead, we use a boolean and only set it +% false once the group level is that of the galley itself. (There is a slight +% inefficiency here in that we thus do set the paragraph shape for each +% paragraph after a cutout until we reach the top group level of the galley. +% That should be an acceptable hit given the extra work needed to track +% reset-in-this-group as well.) +% \begin{macrocode} +\cs_new_protected:Npn \@@_par_update_cutout: { \bool_if:nF { @@ -1251,12 +1278,20 @@ } \@@_parshape_set: } + \int_compare:nNnT \l_@@_group_level_int = \etex_currentgrouplevel:D + { + \bool_if:nT + { + \seq_if_empty_p:N \g_@@_cutout_left_seq + && \seq_if_empty_p:N \g_@@_cutout_right_seq + } + { \bool_gset_false:N \g_@@_cutout_active_bool } + } } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} -% \end{macro} % % \begin{macro}{\galley_par:n} % Inserts tokens such that they are appended to the end of the last @@ -1278,7 +1313,7 @@ % The meaning of the token \cs{par} itself starts off as a standard % paragraph. % \begin{macrocode} -\cs_set_protected_nopar:Npn \par { \galley_par: } +\cs_set_protected:Npn \par { \galley_par: } % \end{macrocode} % \end{macro} % @@ -1304,7 +1339,7 @@ % settings from the surrounding material. They may also start and end with % special spacing values. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_display_begin: +\cs_new_protected:Npn \galley_display_begin: { \group_begin: \@@_save_parameters: @@ -1355,7 +1390,7 @@ % \cs{group_insert_after:N}. Resetting the meaning of the \cs{par} token % needs to be carried out after the group used for the environment. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_display_end: +\cs_new_protected:Npn \galley_display_end: { \par \@@_restore_parameters: @@ -1369,7 +1404,7 @@ % \cs{par} token is then altered so that a check can be made to see if % this assumption was correct. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_display_par_setup: +\cs_new_protected:Npn \@@_display_par_setup: { \bool_gset_false:N \g_galley_omit_next_indent_bool \cs_set_eq:NN \par \@@_display_par: @@ -1388,7 +1423,7 @@ % cutout will have to be updated as it depends on the number of lines % \TeX{} has typeset. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_display_par: +\cs_new_protected:Npn \@@_display_par: { \cs_set_eq:NN \par \galley_par: \mode_if_vertical:TF @@ -1506,7 +1541,7 @@ % tidied up before sorting out any items which have been set on a % single-paragraph basis. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_start_paragraph_std: +\cs_new_protected:Npn \@@_start_paragraph_std: { \@@_start_paragraph_common:N \@@_insert_vertical_items: \@@_insert_horizontal_items: @@ -1523,7 +1558,7 @@ % must not add any vertical space as the start of the box unless there % is a user space to insert. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_start_paragraph_first: +\cs_new_protected:Npn \@@_start_paragraph_first: { \bool_gset_false:N \g_@@_begin_level_bool \mode_if_horizontal:TF @@ -1532,7 +1567,7 @@ \@@_insert_horizontal_items: \@@_restore_running_parameters: } -\cs_new_protected_nopar:Npn \@@_insert_vspace_first: +\cs_new_protected:Npn \@@_insert_vspace_first: { \tl_if_empty:NF \g_@@_interpar_vspace_user_tl { \skip_vertical:n { \g_@@_interpar_vspace_user_tl } } @@ -1553,7 +1588,7 @@ % the inter-paragraph space is applied: only one space is ever added % there. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_insert_vertical_items: +\cs_new_protected:Npn \@@_insert_vertical_items: { \g_galley_whatsit_previous_tl \tl_gclear:N \g_galley_whatsit_previous_tl @@ -1583,7 +1618,7 @@ % Horizontal mode objects start with the whatsits for the next paragraph. An % indent is then included if the removed box was not void. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_insert_horizontal_items: +\cs_new_protected:Npn \@@_insert_horizontal_items: { \g_galley_whatsit_next_tl \tl_gclear:N \g_galley_whatsit_next_tl @@ -1604,7 +1639,7 @@ % variable in which the appropriate assignments are stored. The % list can then be cleared. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_restore_running_parameters: +\cs_new_protected:Npn \@@_restore_running_parameters: { \g_galley_restore_running_tl \tl_gclear:N \g_galley_restore_running_tl @@ -1669,12 +1704,12 @@ % Setting the paragraph shape is mainly a question of converting the input. % First, though, a flag is set. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_parshape_set_multi:nnnN +\cs_new_protected:Npn \galley_parshape_set_multi:nnnN { \bool_set_true:N \l_@@_parshape_multipar_bool \@@_parshape_set:nnnN } -\cs_new_protected_nopar:Npn \galley_parshape_set_single:nnnN +\cs_new_protected:Npn \galley_parshape_set_single:nnnN { \bool_set_false:N \l_@@_parshape_multipar_bool \@@_parshape_set:nnnN @@ -1725,9 +1760,9 @@ % the same idea with one or two very specific points of difference. As such, % the two interface functions both use the same implementation. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_cutout_left:nn +\cs_new_protected:Npn \galley_cutout_left:nn { \@@_cutout:nnn { left } } -\cs_new_protected_nopar:Npn \galley_cutout_right:nn +\cs_new_protected:Npn \galley_cutout_right:nn { \@@_cutout:nnn { right } } % \end{macrocode} % The cutout information needs to be saved in in the appropriate sequence. @@ -1757,6 +1792,8 @@ { \@@_cutout:Nc \g_@@_tmpa_seq { g_@@_cutout_ #1 _seq } } \seq_gset_eq:cN { g_@@_cutout_ #1 _seq } \l_@@_tmp_seq } + \seq_if_empty:cF { g_@@_cutout_ #1 _seq } + { \bool_gset_true:N \g_@@_cutout_active_bool } } \cs_new_protected:Npn \@@_cutout:NN #1#2 { @@ -1796,31 +1833,19 @@ % code, the approach taken here is always to reset the entire shape. This % is done in three stages, one for each conceptual element. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_parshape_set: +\cs_new_protected:Npn \@@_parshape_set: { \@@_parshape_set_margins: \@@_parshape_set_indents: \@@_parshape_set_cutouts: - \tl_set:Nx \l_@@_tmp_tl - { - \__int_value:w \tex_parshape:D - \int_step_function:nnnN \c_one \c_one \tex_parshape:D - \tmp - } -% \tl_show:N \l_@@_tmp_tl } - \def\tmp#1{% - \c_space_tl - \__int_value:w \etex_parshapeindent:D #1 \c_space_tl \c_space_tl - \__int_value:w \etex_parshapelength:D #1 \c_space_tl - } % \end{macrocode} % Setting the margins is simple. Either they are zero, using the full measure, % or they are not. This is always set even if there are other elements to % apply as these settings are very fast, so it is not worth doing a check % at this stage for further parts to apply. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_parshape_set_margins: +\cs_new_protected:Npn \@@_parshape_set_margins: { \bool_if:nTF { @@ -1842,7 +1867,7 @@ % will always apply. The margins are reapplied at this stage as part of % the auxiliary for the calculation of indentation. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_parshape_set_indents: +\cs_new_protected:Npn \@@_parshape_set_indents: { \bool_if:nF { @@ -1878,12 +1903,12 @@ % temporary sequences so that they can safely be \enquote{chomped} by % \cs{@@_cutout:NN}. We then construct the overall list of indents required % and store them in dedicated temporary storage. That is necessary as to get -% the indents corret on both sides is to use a thread mapping. That also +% the indents correct on both sides is to use a thread mapping. That also % means that the two sequences need to be of the same length. That is % done by finding the length difference then applying an auxiliary to % the shorter sequence. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_parshape_set_cutouts: +\cs_new_protected:Npn \@@_parshape_set_cutouts: { \bool_if:nF { @@ -2363,7 +2388,7 @@ % so an \texttt{f}-type expansion is used to make life a little less % complex. % \begin{macrocode} -\cs_new_protected_nopar:Npn \@@_calc_interline_penalties: +\cs_new_protected:Npn \@@_calc_interline_penalties: { \exp_args:Nff \@@_calc_interline_penalties:nn { @@ -2466,7 +2491,10 @@ } } \cs_new:Npn \@@_save_display_widow_penalties:n #1 - { \__int_value:w \etex_displaywidowpenalties:D \__int_eval:w #1 \__int_eval_end: , } + { + \__int_value:w \etex_displaywidowpenalties:D + \__int_eval:w #1 \__int_eval_end: , + } \cs_new_protected:Npn \galley_save_widow_penalties:N #1 { \clist_set:Nx #1 @@ -2483,7 +2511,7 @@ % a simple conversion. The general interline penalty is always the % last value in the primitive array. % \begin{macrocode} -\cs_new_protected_nopar:Npn \galley_interline_penalty: +\cs_new_protected:Npn \galley_interline_penalty: { \__int_value:w \etex_interlinepenalties:D \etex_interlinepenalties:D \c_zero } % \end{macrocode} % \end{macro} @@ -2508,7 +2536,7 @@ % structures rather than directly onto the main vertical list. Other % than that it is the same as the \LaTeXe{} version. % \begin{macrocode} -\cs_set_nopar:Npn \clearpage +\cs_set:Npn \clearpage { \mode_if_vertical:T { @@ -2530,7 +2558,7 @@ % In package mode, some of \LaTeXe{}'s functions are re-implemented using % the galley system. Not all of the optional arguments currently work! % \begin{macrocode} -\cs_set_nopar:Npn \nobreak +\cs_set_protected:Npn \nobreak { \bool_gset_true:N \g_galley_no_break_next_bool } % \end{macrocode} % The \tn{noindent} primitive will causes problems, as it is used by @@ -2539,7 +2567,7 @@ % need leave vertical mode, at the moment we stick with the primitive as % well as setting the galley flag. % \begin{macrocode} -\cs_set_protected_nopar:Npn \noindent +\cs_set_protected:Npn \noindent { \tex_noindent:D \bool_gset_false:N \g_galley_omit_next_indent_bool @@ -2602,15 +2630,15 @@ % \begin{macro}{\addpenalty, \addvspace} % The mechanism here is entirely different, but at least this works! % \begin{macrocode} -\cs_set_nopar:Npn \addpenalty { \galley_penalty_add_single:n } -\cs_set_nopar:Npn \addvspace { \galley_vspace_max_single:n } +\cs_set_protected:Npn \addpenalty { \galley_penalty_add_single:n } +\cs_set_protected:Npn \addvspace { \galley_vspace_max_single:n } % \end{macrocode} %\end{macro} % % \begin{macro}{\@afterheading} % Set some flags and hope for the best! % \begin{macrocode} -\cs_set_nopar:Npn \@afterheading +\cs_set_protected:Npn \@afterheading { \bool_gset_true:N \g_galley_no_break_next_bool \if@afterindent @@ -2626,7 +2654,7 @@ % shape is set in a different way. As a result, the label is part of the % same paragraph as the main body, hence the need to leave vertical mode. % \begin{macrocode} -\cs_set:Npn \@hangfrom #1 +\cs_set_protected:Npn \@hangfrom #1 { \bool_gset_true:N \g_galley_omit_next_indent_bool \leavevmode |