diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty index 2bb94e7c62a..b56100853ab 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty @@ -50,48 +50,56 @@ {L3 Experimental Flags} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} -\tl_new:N \g_flag_list_tl -\cs_new_protected:Npn \flag_new:N #1 +\cs_new_protected:Npn \flag_new:n #1 { - \cs_new_eq:NN #1 \c_undefined:D - \tl_if_in:NnTF \g_flag_list_tl {#1} - { - \msg_kernel_error:nnx - { flag } { already-defined } - { \token_to_str:N #1 } - } - { \tl_gput_right:Nn \g_flag_list_tl {#1} } + \cs_new:cpn { flag_trap_#1:w } ##1 ; + { \exp_after:wN \use_none:n \cs:w l_#1_##1_flag \cs_end: } } -\cs_generate_variant:Nn \flag_new:N { c } -\prg_new_conditional:Npnn \flag_test:N #1 { p , T , F , TF } +\cs_new_protected:Npn \flag_clear:n #1 + { \flag_clear_aux:ww 0 ; #1 \q_stop } +\cs_new_protected:Npn \flag_clear_aux:ww #1 ; #2 \q_stop { - \if_cs_exist:N #1 - \prg_return_true: + \if_cs_exist:w l_#2_#1_flag \cs_end: \else: - \prg_return_false: + \exp_after:wN \use_none_delimit_by_q_stop:w \fi: + \cs_set_eq:cN { l_#2_#1_flag } \c_undefined:D + \exp_after:wN \flag_clear_aux:ww + \int_use:N \int_eval:w \c_one + #1 ; + #2 \q_stop + } +\cs_new_protected:Npn \flag_clear_new:n #1 + { \flag_if_exist:nTF {#1} { \flag_clear:n } { \flag_new:n } {#1} } +\cs_new_protected:Npn \flag_set_trap:nn #1#2 + { \cs_set:cpn { flag_trap_#1:w } ##1 ; {#2} } +\prg_new_conditional:Npnn \flag_if_exist:n #1 { p , T , F , TF } + { + \cs_if_exist:cTF { flag_trap_#1:w } + { \prg_return_true: } { \prg_return_false: } } -\prg_new_conditional:Npnn \flag_test:c #1 { p , T , F , TF } +\prg_new_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF } { - \if_cs_exist:w #1 \cs_end: + \if_cs_exist:w l_#1_0_flag \cs_end: \prg_return_true: \else: \prg_return_false: \fi: } -\cs_new:Npn \flag_raise:N #1 - { \exp_after:wN \use_none:n \cs:w \cs_to_str:N #1 \cs_end: } -\cs_new:Npn \flag_raise:c #1 - { \exp_after:wN \use_none:n \cs:w #1 \cs_end: } -\cs_new_protected:Npn \flag_lower:N #1 - { \cs_set_eq:NN #1 \c_undefined:D } -\cs_generate_variant:Nn \flag_lower:N { c } -\msg_kernel_new:nnnn { flag } { already-defined } - { The~control~sequence~#1~is~already~declared~as~a~flag. } +\cs_new:Npn \flag_height:n #1 { \flag_height_loop:ww 0; #1 \q_stop } +\cs_new:Npn \flag_height_loop:ww #1 ; #2 \q_stop + { + \if_cs_exist:w l_#2_#1_flag \cs_end: + \exp_after:wN \flag_height_loop:ww \int_use:N \int_eval:w \c_one + + \else: + \exp_after:wN \flag_height_end:ww + \fi: + #1 ; #2 \q_stop + } +\cs_new:Npn \flag_height_end:ww #1 ; #2 \q_stop { #1 } +\cs_new:Npn \flag_raise:n #1 { - LaTeX~was~asked~to~define~the~flag~#1,~but~it~has~already~ - been~defined~as~a~flag.~The~flag~module~is~mostly~meant~ - for~kernel~use,~and~booleans~should~be~preferred. + \cs:w flag_trap_#1:w \exp_after:wN \cs_end: + \int_value:w \flag_height:n {#1} ; } %% %% |