summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty')
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty66
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} ;
}
%%
%%