diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/scontents/scontents-code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/scontents/scontents-code.tex | 344 |
1 files changed, 226 insertions, 118 deletions
diff --git a/Master/texmf-dist/tex/generic/scontents/scontents-code.tex b/Master/texmf-dist/tex/generic/scontents/scontents-code.tex index 49e87eba3e0..f417191f680 100644 --- a/Master/texmf-dist/tex/generic/scontents/scontents-code.tex +++ b/Master/texmf-dist/tex/generic/scontents/scontents-code.tex @@ -27,7 +27,7 @@ %% t-scontents.mkiv and %% scontents-code.tex. %% -\def\ScontentsCoreFileDate{2019-10-29}% +\def\ScontentsCoreFileDate{2019-11-18}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -87,6 +87,9 @@ force-eol .bool_set:N = \l__scontents_forced_eol_bool, force-eol .initial:n = false, force-eol .default:n = true, + overwrite .bool_set:N = \l__scontents_overwrite_bool, + overwrite .initial:n = false, + overwrite .default:n = true, width-tab .int_set:N = \l__scontents_tab_width_int, width-tab .initial:n = 1, width-tab .value_required:n = true, @@ -151,6 +154,8 @@ store-env .meta:nn = { scontents } { store-env = #1 }, force-eol .meta:nn = { scontents } { force-eol = #1 }, force-eol .default:n = true, + overwrite .meta:nn = { scontents } { overwrite = #1 }, + overwrite .default:n = true, unknown .code:n = { \__scontents_parse_environment_keys:n {#1} } } \keys_define:nn { scontents / Scontents } @@ -187,7 +192,8 @@ step .initial:n = 1, wrapper .code:n = { \bool_set_true:N \l__scontents_foreach_wrapper_bool - \cs_set_protected:Npn \__scontents_foreach_wrapper:n ##1 {#1} + \cs_set_protected:Npn + \__scontents_foreach_wrapper:n ##1 {#1} }, wrapper .value_required:n = true, sep .tl_set:N = \l__scontents_foreach_sep_tl, @@ -280,12 +286,29 @@ \tl_log:N #1 \__scontents_append_contents:Vx #2 { \exp_not:V #1 } } -\cs_new_protected:Npn \__scontents_scontents_env_begin: +\tl_new:N \l__scontents_env_name_tl +\cs_new_protected:Npn \__scontents_scontents_setenv:nn #1 #2 + { + \cs_new_protected:cpn { __scontents_#1_env_begin: } + { + \tl_set:Nn \l__scontents_env_name_tl {#1} + \keys_set:nn { scontents } {#2} + \__scontents_setup_verb_processor: + \__scontents_env_generic_begin: + } + \cs_new_protected:cpn { __scontents_#1_env_end: } + { \__scontents_env_generic_end: } + \exp_args:Nooo % http://nooooooooooooooo.com :) jeje + \__scontents_env_define:nnn { \tl_to_str:n {#1} } + { \cs:w __scontents_#1_env_begin: \cs_end: } + { \cs:w __scontents_#1_env_end: \cs_end: } + } +\cs_new_protected:Npn \__scontents_env_generic_begin: { \char_set_catcode_active:N \^^M \__scontents_start_environment:w } -\cs_new_protected:Npn \__scontents_scontents_env_end: +\cs_new_protected:Npn \__scontents_env_generic_end: { \__scontents_stop_environment: \__scontents_atend_environment: @@ -312,45 +335,52 @@ { \str_if_eq:eeTF { \tl_head:n {#1} } { [ } { \__scontents_grab_optional:w #1 ^^M } - { \__scontents_check_line_and_process:xn { } {#1} } + { \__scontents_check_line_process:xn { } {#1} } } - { \__scontents_check_line_and_process:xn { } {#1} } + { \__scontents_check_line_process:xn { } {#1} } } \cs_new_protected:Npn \__scontents_start_after_option:w #1 ^^M - { \__scontents_check_line_and_process:xn { [...] } {#1} } - \cs_new_protected:Npn \__scontents_check_line_and_process:xn #1 #2 + { \__scontents_check_line_process:xn { [...] } {#1} } + \cs_new_protected:Npn \__scontents_check_line_process:xn #1 #2 { \tl_if_blank:nF {#2} { \msg_error:nnxn { scontents } { junk-after-begin } - { after~\c_backslash_str begin{scontents} #1 } {#2} + { after~\c_backslash_str begin { \l__scontents_env_name_tl } #1 } {#2} } \__scontents_make_control_chars_active: - \group_begin: - \__scontents_file_tl_write_start:V \l__scontents_fname_out_tl + \__scontents_file_tl_write_start:V \l__scontents_fname_out_tl } \cs_new_protected:Npn \__scontents_stop_environment: { - \__scontents_file_write_stop:N \l__scontents_macro_tmp_tl - \exp_args:NNNV - \group_end: - \tl_set:Nn \l__scontents_macro_tmp_tl \l__scontents_macro_tmp_tl - \tl_if_empty:NT \l__scontents_macro_tmp_tl - { \msg_warning:nnn { scontents } { empty-environment } } + \__scontents_file_write_stop:N \l__scontents_macro_tmp_tl + \bool_lazy_and:nnT + { \l__scontents_storing_bool } + { \tl_if_empty_p:N \l__scontents_macro_tmp_tl } + { + \msg_warning:nnx { scontents } { empty-environment } + { \l__scontents_env_name_tl } + } } \cs_new_protected:Npn \__scontents_file_tl_write_start:n #1 { \group_begin: - \bool_if:NT \l__scontents_writing_bool + \bool_if:nT { \l__scontents_writing_bool && \l__scontents_overwrite_bool } { - \file_if_exist:nTF {#1} - { \msg_warning:nnx { scontents } { rewriting-file } {#1} } - { \msg_warning:nnx { scontents } { writing-file } {#1} } - \iow_open:Nn \l__scontents_file_iow {#1} + \file_if_exist:nTF {#1} + { \msg_warning:nnx { scontents } { overwrite-file } {#1} } + { \msg_warning:nnx { scontents } { writing-file } {#1} } + \iow_open:Nn \l__scontents_file_iow {#1} + } + \bool_if:nT { \l__scontents_writing_bool && !\l__scontents_overwrite_bool } + { + \file_if_exist:nF {#1} + { \msg_warning:nnx { scontents } { writing-file } {#1} } + \iow_open:Nn \l__scontents_file_iow {#1} } \tl_clear:N \l__scontents_file_tl \seq_map_function:NN \l_char_special_seq \char_set_catcode_other:N - \int_step_function:nnN { 128 } { 255 } \char_set_catcode_letter:n + \int_step_function:nnnN { 128 } { 1 } { 255 } \char_set_catcode_letter:n \cs_set_protected:Npx \__scontents_ret:w ##1 ^^M { \exp_not:N \__scontents_verb_processor_iterate:w @@ -361,48 +391,65 @@ \__scontents_make_control_chars_active: \__scontents_ret:w } - \use:x + \cs_new:Npn \__scontents_setup_verb_processor: { - \cs_new:Npn \exp_not:N \__scontents_verb_processor_iterate:w - ##1 \c__scontents_end_env_tl - ##2 \c__scontents_end_env_tl - ##3 \exp_not:N \q__scontents_stop - } { - \tl_if_blank:nTF {#3} - { - \__scontents_analyse_nesting:n {#1} - \__scontents_verb_processor_output:n {#1} - } - { - \__scontents_if_nested:TF - { - \__scontents_nesting_decr: - \__scontents_verb_processor_output:x - { \exp_not:n {#1} \c__scontents_end_env_tl \exp_not:n {#2} } - } - { - \tl_if_blank:nF {#1} - { \__scontents_verb_processor_output:n {#1} } - \cs_set_protected:Npx \__scontents_ret:w - { - \__scontents_format_case:nnn - { \exp_not:N \end{scontents} } % LaTeX - { \endscontents } % Plain/Generic - { \stopscontents } % ConTeXt - \bool_lazy_or:nnF - { \tl_if_blank_p:n {#2} } - { \str_if_eq_p:ee {#2} { \c_percent_str } } - { - \str_if_eq:VnF \c__scontents_hidden_space_str {#2} - { \msg_warning:nnn { scontents } { rescanning-text } {#2} } - \__scontents_rescan_tokens:n {#2} - } - } - \char_set_active_eq:NN ^^M \__scontents_ret:w - } - } - ^^M - } + \use:x + { + \cs_set:Npn \exp_not:N \__scontents_verb_processor_iterate:w + ####1 \c__scontents_end_env_tl + ####2 \c__scontents_end_env_tl + ####3 \exp_not:N \q__scontents_stop + } { \__scontents_verb_processor_iterate:nnn {##1} {##2} {##3} } + } + \cs_new:Npn \__scontents_verb_processor_iterate:nnn #1 #2 #3 + { + \tl_if_blank:nTF {#3} + { + \__scontents_analyse_nesting:n {#1} + \__scontents_verb_processor_output:n {#1} + } + { + \__scontents_if_nested:TF + { + \__scontents_nesting_decr: + \__scontents_verb_processor_output:x + { \exp_not:n {#1} \c__scontents_end_env_tl \exp_not:n {#2} } + } + { + \tl_if_blank:nF {#1} + { \__scontents_verb_processor_output:n {#1} } + \cs_set_protected:Npx \__scontents_ret:w + { + \__scontents_env_end_function: + \bool_lazy_or:nnF + { \tl_if_blank_p:n {#2} } + { \str_if_eq_p:ee {#2} { \c_percent_str } } + { + \str_if_eq:VnF \c__scontents_hidden_space_str {#2} + { + \msg_warning:nnnn { scontents } { rescanning-text } + {#2} { \tl_use:N \l__scontents_env_name_tl } + } + \__scontents_rescan_tokens:n {#2} + } + } + \char_set_active_eq:NN ^^M \__scontents_ret:w + } + } + ^^M + } + \cs_new:Npn \__scontents_env_end_function: + { + \__scontents_format_case:nnn + { \exp_not:N \end { \if_false: } \fi: } + { \exp_after:wN \exp_not:N \cs:w end } + { \exp_after:wN \exp_not:N \cs:w stop } + \tl_use:N \l__scontents_env_name_tl + \__scontents_format_case:nnn + { \if_false: { \fi: } } + { \cs_end: } + { \cs_end: } + } \cs_new_protected:Npn \__scontents_file_write_stop:N #1 { \bool_if:NT \l__scontents_writing_bool @@ -441,56 +488,92 @@ \bool_if:NT \l__scontents_storing_bool { \tl_put_right:Nn \l__scontents_file_tl { ^^J #1 } } } - \cs_generate_variant:Nn \__scontents_verb_processor_output:n { x } - \cs_new_protected:Npx \__scontents_analyse_nesting:n #1 - { - \int_zero:N \l__scontents_tmpa_int - \exp_not:N \__scontents_analyse_nesting:w #1 - \c_backslash_str begin - \c_left_brace_str \exp_not:N \q__scontents_mark \c_right_brace_str - \exp_not:N \q__scontents_stop - \int_compare:nNnT { \l__scontents_tmpa_int } > { 1 } - { \msg_warning:nn { scontents } { multiple-begin } } - } - \use:x - { - \cs_new_protected:Npn \exp_not:N \__scontents_analyse_nesting:w ##1 - \c_backslash_str begin \c_left_brace_str ##2 \c_right_brace_str - } { - \if_meaning:w \q__scontents_mark #2 - \exp_after:wN \use_i:nn - \else: - \exp_after:wN \use_ii:nn - \fi: - { \__scontents_use_none_delimit_by_q_stop:w } - { - \str_if_eq:eeT {#2} {scontents} - { - \int_incr:N \l__scontents_env_nesting_int - \int_incr:N \l__scontents_tmpa_int - \__scontents_analyse_nesting:w - } - \__scontents_analyse_nesting:w - } - } - \cs_new_protected:Npn \__scontents_nesting_decr: - { \int_decr:N \l__scontents_env_nesting_int } - \prg_new_protected_conditional:Npnn \__scontents_if_nested: { TF } - { - \int_compare:nNnTF { \l__scontents_env_nesting_int } > { \c_zero_int } - { \prg_return_true: } - { \prg_return_false: } - } - \cs_new:Npn \__scontents_use_none_delimit_by_q_stop:w #1 \q__scontents_stop { } \group_end: +\cs_generate_variant:Nn \__scontents_verb_processor_output:n { x } \cs_generate_variant:Nn \__scontents_file_tl_write_start:n { V } +\cs_new_protected:Npn \__scontents_analyse_nesting:n #1 + { + \int_zero:N \l__scontents_tmpa_int + \__scontents_analyse_nesting_format:n {#1} + \int_compare:nNnT { \l__scontents_tmpa_int } > { 1 } + { \msg_warning:nn { scontents } { multiple-begin } } + } +\cs_new_protected:Npn \__scontents_nesting_incr: + { + \int_incr:N \l__scontents_env_nesting_int + \int_incr:N \l__scontents_tmpa_int + } +\cs_new_protected:Npn \__scontents_nesting_decr: + { \int_decr:N \l__scontents_env_nesting_int } +\prg_new_protected_conditional:Npnn \__scontents_if_nested: { TF } + { + \int_compare:nNnTF { \l__scontents_env_nesting_int } > { \c_zero_int } + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new:Npn \__scontents_use_none_delimit_by_q_stop:w #1 \q__scontents_stop { } +\use:x + { + \cs_new_protected:Npn \exp_not:N \__scontents_analyse_nesting_latex:w ##1 + \c_backslash_str begin \c_left_brace_str ##2 \c_right_brace_str + } { + \__scontents_tl_if_head_is_q_mark:nTF {#2} + { \__scontents_use_none_delimit_by_q_stop:w } + { + \str_if_eq:VnT \l__scontents_env_name_tl {#2} + { \__scontents_nesting_incr: } + \__scontents_analyse_nesting_latex:w + } + } +\cs_new_protected:Npx \__scontents_analyse_nesting_latex:n #1 + { + \__scontents_analyse_nesting_latex:w #1 + \c_backslash_str begin + \c_left_brace_str \exp_not:N \q__scontents_mark \c_right_brace_str + \exp_not:N \q__scontents_stop + } +\cs_new_protected:Npn \__scontents_analyse_nesting_generic_process:nn #1 #2 + { + \tl_if_head_is_N_type:nTF {#2} + { + \__scontents_tl_if_head_is_q_mark:nF {#2} + { + \__scontents_nesting_incr: + \__scontents_analyse_nesting_generic:w #2 \q__scontents_stop + } + } + { \__scontents_analyse_nesting_generic:w #2 \q__scontents_stop } + } +\cs_new_protected:Npn \__scontents_analyse_nesting_generic:nn #1 #2 + { + \__scontents_define_generic_nesting_function:n {#1} + \use:x + { + \exp_not:N \__scontents_analyse_nesting_generic:w #2 + \c_backslash_str #1 \tl_use:N \l__scontents_env_name_tl + \exp_not:N \q__scontents_mark \exp_not:N \q__scontents_stop + } + } +\cs_new_protected:Npn \__scontents_define_generic_nesting_function:n #1 + { + \use:x + { + \cs_set_protected:Npn \exp_not:N \__scontents_analyse_nesting_generic:w ####1 + \c_backslash_str #1 \tl_use:N \l__scontents_env_name_tl + ####2 \exp_not:N \q__scontents_stop + } { \__scontents_analyse_nesting_generic_process:nn {##1} {##2} } + } \cs_new_protected:Npn \__scontents_atend_environment: { \bool_if:NT \l__scontents_storing_bool { \bool_if:NF \l__scontents_forced_eol_bool - { \tl_put_right:Nx \l__scontents_macro_tmp_tl { \c__scontents_hidden_space_str } } - \__scontents_store_to_seq:NN \l__scontents_macro_tmp_tl \l__scontents_name_seq_env_tl + { + \tl_put_right:Nx \l__scontents_macro_tmp_tl + { \c__scontents_hidden_space_str } + } + \__scontents_store_to_seq:NN \l__scontents_macro_tmp_tl + \l__scontents_name_seq_env_tl \bool_if:NT \l__scontents_print_env_bool { \__scontents_lastfrom_seq:n \l__scontents_name_seq_env_tl } } @@ -557,7 +640,10 @@ { \l__scontents_foreach_stop_int } \__scontents_foreach_add_body:n \tl_gset:Nx \g__scontents_temp_tl - { \seq_use:Nn \l__scontents_foreach_print_seq { \tl_use:N \l__scontents_foreach_sep_tl } } + { + \seq_use:Nn \l__scontents_foreach_print_seq + { \tl_use:N \l__scontents_foreach_sep_tl } + } \group_end: \exp_after:wN \tl_gclear:N \exp_after:wN \g__scontents_temp_tl @@ -632,6 +718,15 @@ \char_generate:nn { `#1 } { 12 } } } +\prg_new_protected_conditional:Npnn \__scontents_tl_if_head_is_q_mark:n #1 + { T, F, TF } + { + \if_meaning:w \q__scontents_mark #1 \scan_stop: + \prg_return_true: + \else: + \prg_return_false: + \fi: + } \cs_new_protected:Npn \__scontents_set_active_eq:NN #1 { \char_set_catcode_active:N #1 @@ -675,18 +770,25 @@ \\ \\ #2 } +\msg_new:nnnn { scontents } { env-already-defined } + { Environment~'#1'~already~defined! } + { + You~have~used~\newenvsc + with~an~environment~that~already~has~a~definition. \\ \\ + The~existing~definition~of~'#1'~will~not~be~altered. + } \msg_new:nnn { scontents } { empty-stored-content } { Empty~value~for~key~'getstored'~\msg_line_context:. } \msg_new:nnn { scontents } { empty-variable } { Variable~'#1'~empty~\msg_line_context:. } -\msg_new:nnn { scontents } { rewriting-file } - { Overwriting ~ file ~ '#1' } +\msg_new:nnn { scontents } { overwrite-file } + { Overwriting~file~'#1'. } \msg_new:nnn { scontents } { writing-file } - { Writing ~ file ~ '#1' } + { Writing~file~'#1'. } \msg_new:nnn { scontents } { rescanning-text } - { Rescanning~text~'#1'~after~\c_backslash_str end{scontents}~\msg_line_context:.} + { Rescanning~text~'#1'~after~\c_backslash_str end{#2}~\msg_line_context:.} \msg_new:nnn { scontents } { multiple-begin } - { Multiple~\c_backslash_str begin{scontents}~\msg_line_context:.} + { Multiple~\c_backslash_str begin{ \l__scontents_env_name_tl }~\msg_line_context:.} \msg_new:nnn { scontents } { undefined-storage } { Storage~named~'#1'~is~not~defined. } \msg_new:nnn { scontents } { index-out-of-range } @@ -700,15 +802,21 @@ } } \msg_new:nnnn { scontents } { env-key-unknown } - { The~key~'#1'~is~unknown~by~environment~'scontents'~and~is~being~ignored.} { - The~environment~'scontents'~does~not~have~a~key~called~'#1'.\\ + The~key~'#1'~is~unknown~by~environment~ + '\l__scontents_env_name_tl'~and~is~being~ignored. + } + { + The~environment~'\l__scontents_env_name_tl'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { env-key-value-unknown } - { The~key~'#1=#2'~is~unknown~by~environment~'scontents'~and~is~being~ignored. } { - The~environment~'scontents'~does~not~have~a~key~called~'#1'.\\ + The~key~'#1=#2'~is~unknown~by~environment~ + '\l__scontents_env_name_tl'~and~is~being~ignored. + } + { + The~environment~'\l__scontents_env_name_tl'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { cmd-key-unknown } @@ -748,7 +856,7 @@ This~command~only~accepts~the~key~'width-tab'. } \msg_new:nnn { scontents } { empty-environment } - { scontents~environment~empty~\msg_line_context:. } + { environment~'#1'~empty~\msg_line_context:. } \msg_new:nnnn { scontents } { verbatim-newline } { Verbatim~argument~of~#1~ended~by~end~of~line. } { |