%% %% This is file `scontents-code.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% scontents.dtx (with options: `core') %% %% Copyright (C) 2019-2022 by Pablo González L %% %% This work may be distributed and/or modified under the conditions of the %% LaTeX Project Public License, either version 1.3c of this license or (at %% your option) any later version. The latest version of this license is in %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.3c or later is part of all distributions of LaTeX version %% 2005/12/01 or later. %% %% This work is "maintained" (as per the LPPL maintenance status) %% by Pablo González Luengo. %% %% This work consists of the files scontents.dtx and %% scontents.ins, %% and the derived files scontents.sty, %% scontents.tex, %% t-scontents.mkiv and %% scontents-code.tex. %% \def\ScontentsCoreFileDate{2022-04-04}% \begingroup \catcode32=10 \endlinechar=32 \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax \begingroup \def\next{\endgroup\endgroup}% \def\PackageError#1#2#3% {% \endgroup \errhelp{#3}% \errmessage{#1 Error: #2!}% }% \fi \expandafter\ifx\csname ScontentsFileDate\endcsname\relax \def\next {% \PackageError{scontents}{No scontents loader detected} {% You have attempted to use the scontents code directly rather than using the correct loader. Loading of scontents will abort. }% \endgroup \endinput }% \else \ifx\ScontentsFileDate\ScontentsCoreFileDate \else \def\next {% \PackageError{scontents}{Mismatched scontents files detected} {% You have attempted to load scontents with mismatched files: probably you have one or more files 'locally installed' which are in conflict. Loading of scontents will abort. }% \endgroup \endinput }% \fi \fi \next \tl_new:N \l__scontents_macro_tmp_tl \tl_new:N \l__scontents_temp_tl \tl_new:N \g__scontents_temp_tl \int_new:N \l__scontents_tmpa_int \bool_new:N \l__scontents_temp_bool \keys_define:nn { scontents } { store-env .tl_set:N = \l__scontents_name_seq_env_tl, store-env .initial:n = contents, store-env .value_required:n = true, store-cmd .tl_set:N = \l__scontents_name_seq_cmd_tl, store-cmd .initial:n = contents, store-cmd .value_required:n = true, verb-font .tl_set:N = \l__scontents_verb_font_tl, verb-font .value_required:n = true, print-env .bool_set:N = \l__scontents_print_env_bool, print-env .initial:n = false, print-env .default:n = true, print-cmd .bool_set:N = \l__scontents_print_cmd_bool, print-cmd .initial:n = false, print-cmd .default:n = true, 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, print-all .meta:n = { print-env = #1 , print-cmd = #1 }, print-all .default:n = true, store-all .meta:n = { store-env = #1 , store-cmd = #1 }, store-all .value_required:n = true } \tl_new:N \l__scontents_fname_out_tl \tl_new:N \l__scontents_every_line_env_tl \iow_new:N \l__scontents_file_iow \tl_new:N \l__scontents_foreach_name_seq_tl \tl_new:N \l__scontents_foreach_before_tl \tl_new:N \l__scontents_foreach_after_tl \int_new:N \l__scontents_foreach_stop_int \int_new:N \l__scontents_seq_item_int \int_new:N \l__scontents_env_nesting_int \bool_new:N \l__scontents_writing_bool \bool_set_false:N \l__scontents_writing_bool \bool_new:N \l__scontents_storing_bool \bool_set_true:N \l__scontents_storing_bool \bool_new:N \l__scontents_writable_bool \bool_new:N \l__scontents_foreach_before_bool \bool_set_false:N \l__scontents_foreach_before_bool \bool_new:N \l__scontents_foreach_after_bool \bool_set_false:N \l__scontents_foreach_after_bool \bool_new:N \l__scontents_foreach_stop_bool \bool_set_false:N \l__scontents_foreach_stop_bool \bool_new:N \l__scontents_foreach_wrapper_bool \bool_set_false:N \l__scontents_foreach_wrapper_bool \seq_new:N \l__scontents_foreach_print_seq \str_const:Nx \c__scontents_hidden_space_str { \c_percent_str \c_circumflex_str \c_circumflex_str A scheol \c_percent_str } \quark_new:N \q__scontents_stop \quark_new:N \q__scontents_mark \int_new:N \l__scontents_save_sf_int \skip_new:N \l__scontents_save_skip \cs_new_protected:Npn \__scontents_rescan_tokens:n #1 { \tex_scantokens:D {#1} } \cs_generate_variant:Nn \__scontents_rescan_tokens:n { V, x } \cs_new:Npx \__scontents_tab: { \c_space_tl } \cs_new:Npn \__scontents_par: { ^^J ^^J } \cs_generate_variant:Nn \tl_remove_once:Nn { NV } \cs_generate_variant:Nn \tl_replace_all:Nnn { Nx, Nxx, Nnx } \cs_generate_variant:Nn \msg_error:nnnn { nnx } \prg_generate_conditional_variant:Nnn \tl_if_empty:n { f } { TF } \keys_define:nn { scontents / scontents } { write-env .code:n = { \bool_set_true:N \l__scontents_writing_bool \tl_set:Nn \l__scontents_fname_out_tl {#1} }, write-out .code:n = { \bool_set_false:N \l__scontents_storing_bool \bool_set_true:N \l__scontents_writing_bool \tl_set:Nn \l__scontents_fname_out_tl {#1} }, write-env .value_required:n = true, write-out .value_required:n = true, print-env .meta:nn = { scontents } { print-env = #1 }, print-env .default:n = true, 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 } { write-cmd .code:n = { \bool_set_true:N \l__scontents_writing_bool \tl_set:Nn \l__scontents_fname_out_tl {#1} }, write-out .code:n = { \bool_set_false:N \l__scontents_storing_bool \bool_set_true:N \l__scontents_writing_bool \tl_set:Nn \l__scontents_fname_out_tl {#1} }, write-cmd .value_required:n = true, write-out .value_required:n = true, print-cmd .meta:nn = { scontents } { print-cmd = #1 }, print-cmd .default:n = true, store-cmd .meta:nn = { scontents } { store-cmd = #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_command_keys:n {#1} } } \keys_define:nn { scontents / foreachsc } { before .code:n = { \bool_set_true:N \l__scontents_foreach_before_bool \tl_set:Nn \l__scontents_foreach_before_tl {#1} }, before .value_required:n = true, after .code:n = { \bool_set_true:N \l__scontents_foreach_after_bool \tl_set:Nn \l__scontents_foreach_after_tl {#1} }, after .value_required:n = true, start .int_set:N = \l__scontents_foreach_start_int, start .value_required:n = true, start .initial:n = 1, stop .code:n = { \bool_set_true:N \l__scontents_foreach_stop_bool \int_set:Nn \l__scontents_foreach_stop_int {#1} }, stop .value_required:n = true, step .int_set:N = \l__scontents_foreach_step_int, step .value_required:n = true, 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} }, wrapper .value_required:n = true, sep .tl_set:N = \l__scontents_foreach_sep_tl, sep .initial:n = {}, sep .value_required:n = true, unknown .code:n = { \__scontents_parse_foreach_keys:n {#1} } } \keys_define:nn { scontents / typemeaning } { width-tab .meta:nn = { scontents } { width-tab = #1 }, unknown .code:n = { \__scontents_parse_type_meaning_key:n {#1} } } \cs_new_protected:Npn \__scontents_parse_environment_keys:n #1 { \exp_args:NV \__scontents_parse_environment_keys:nn \l_keys_key_str {#1} } \cs_new_protected:Npn \__scontents_parse_environment_keys:nn #1#2 { \tl_if_blank:nTF {#2} { \msg_error:nnn { scontents } { env-key-unknown } {#1} } { \msg_error:nnnn { scontents } { env-key-value-unknown } {#1} {#2} } } \cs_new_protected:Npn \__scontents_parse_command_keys:n #1 { \exp_args:NV \__scontents_parse_command_keys:nn \l_keys_key_str {#1} } \cs_new_protected:Npn \__scontents_parse_command_keys:nn #1#2 { \tl_if_blank:nTF {#2} { \msg_error:nnn { scontents } { cmd-key-unknown } {#1} } { \msg_error:nnnn { scontents } { cmd-key-value-unknown } {#1} {#2} } } \cs_new_protected:Npn \__scontents_parse_foreach_keys:nn #1#2 { \tl_if_blank:nTF {#2} { \msg_error:nnn { scontents } { for-key-unknown } {#1} } { \msg_error:nnnn { scontents } { for-key-value-unknown } {#1} {#2} } } \cs_new_protected:Npn \__scontents_parse_foreach_keys:n #1 { \exp_args:NV \__scontents_parse_foreach_keys:nn \l_keys_key_str {#1} } \cs_new_protected:Npn \__scontents_parse_type_meaning_key:n #1 { \exp_args:NV \__scontents_parse_type_meaning_key:nn \l_keys_key_str {#1} } \cs_new_protected:Npn \__scontents_parse_type_meaning_key:nn #1#2 { \tl_if_empty:fTF { \int_to_roman:n { -0 #1 } } { \tl_if_blank:nTF {#2} { \int_set:Nn \l__scontents_seq_item_int {#1} } { \msg_error:nnnn { scontents } { type-key-value-unknown } {#1} {#2} } } { \tl_if_blank:nTF {#2} { \msg_error:nnn { scontents } { type-key-unknown } {#1} } { \msg_error:nnnn { scontents } { type-key-value-unknown } {#1} {#2} } } } \cs_new_protected:Npn \__scontents_append_contents:nn #1#2 { \tl_if_blank:nT {#1} { \msg_error:nn { scontents } { empty-store-cmd } } \seq_if_exist:cF { g__scontents_name_#1_seq } { \seq_new:c { g__scontents_name_#1_seq } } \seq_gput_right:cn { g__scontents_name_#1_seq } {#2} } \cs_generate_variant:Nn \__scontents_append_contents:nn { Vx } \cs_new:Npn \__scontents_getfrom_seq:nn #1#2 { \seq_if_exist:cTF { g__scontents_name_#2_seq } { \exp_args:Nf \__scontents_getfrom_seq:nnn { \seq_count:c { g__scontents_name_#2_seq } } {#1} {#2} } { \msg_expandable_error:nnn { scontents } { undefined-storage } {#2} } } \cs_new:Npn \__scontents_getfrom_seq:nnn #1#2#3 { \bool_lazy_or:nnTF { \int_compare_p:nNn {#2} = { 0 } } { \int_compare_p:nNn { \int_abs:n {#2} } > {#1} } { \msg_expandable_error:nnnnn { scontents } { index-out-of-range } {#2} {#3} {#1} } { \seq_item:cn { g__scontents_name_#3_seq } {#2} } } \cs_new_protected:Npn \__scontents_lastfrom_seq:n #1 { \tl_gset:Nx \g__scontents_temp_tl { \seq_item:cn { g__scontents_name_#1_seq } {-1} } \group_insert_after:N \__scontents_rescan_tokens:V \group_insert_after:N \g__scontents_temp_tl \group_insert_after:N \tl_gclear:N \group_insert_after:N \g__scontents_temp_tl } \cs_generate_variant:Nn \__scontents_lastfrom_seq:n { V } \cs_new_protected:Npn \__scontents_store_to_seq:NN #1#2 { \tl_log:N #1 \__scontents_append_contents:Vx #2 { \exp_not:V #1 } } \cs_new_protected:Npn \__scontents_env_setting: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_env_generic_end: { \__scontents_stop_environment: \__scontents_finish_storing:NNN \l__scontents_macro_tmp_tl \l__scontents_name_seq_env_tl \l__scontents_print_env_bool } \cs_new_protected:Npn \__scontents_grab_optional:n #1 { \tl_if_novalue:nF {#1} { \tl_set:Nn \l__scontents_temp_tl {#1} \__scontents_normalise_line_ends:N \l__scontents_temp_tl \keys_set:nV { scontents / scontents } \l__scontents_temp_tl } \__scontents_start_after_option:w } \group_begin: \char_set_catcode_active:N \^^I \char_set_catcode_active:N \^^L \char_set_catcode_active:N \^^M \cs_new_protected:Npn \__scontents_normalise_line_ends:N #1 { \tl_replace_all:Nnn #1 { ^^M } { ~ } } \cs_new_protected:Npn \__scontents_start_environment:w #1 ^^M { \tl_if_head_is_N_type:nTF {#1} { \str_if_eq:eeTF { \tl_head:n {#1} } { [ } { \__scontents_grab_optional:w #1 ^^M } { \__scontents_check_line_process:xn { } {#1} } } { \__scontents_check_line_process:xn { } {#1} } } \cs_new_protected:Npn \__scontents_start_after_option:w #1 ^^M { \__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 { \l__scontents_env_name_tl } #1 } {#2} } \__scontents_make_control_chars_active: \__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 \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: \__scontents_file_if_writable:nTF {#1} { \bool_set_true:N \l__scontents_writable_bool \iow_open:Nn \l__scontents_file_iow {#1} } { \bool_set_false:N \l__scontents_writable_bool } \tl_clear:N \l__scontents_every_line_env_tl \seq_map_function:NN \l_char_special_seq \char_set_catcode_other: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 ##1 \c__scontents_end_env_tl \c__scontents_end_env_tl \exp_not:N \q__scontents_stop } \__scontents_make_control_chars_active: \__scontents_ret:w } \cs_new:Npn \__scontents_setup_verb_processor: { \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_writable_bool { \iow_close:N \l__scontents_file_iow } \use:x { \group_end: \bool_if:NT \l__scontents_storing_bool { \tl_set:Nn \exp_not:N #1 { \exp_args:NV \__scontents_remove_leading_nl:n \l__scontents_every_line_env_tl } } } } \cs_new:Npn \__scontents_remove_leading_nl:n #1 { \tl_if_head_is_N_type:nTF {#1} { \exp_args:Nf \__scontents_remove_leading_nl:nn { \tl_head:n {#1} } {#1} } { \exp_not:n {#1} } } \cs_new:Npn \__scontents_remove_leading_nl:nn #1 #2 { \token_if_eq_meaning:NNTF ^^J #1 { \exp_not:o { \__scontents_remove_leading_nl:w #2 } } { \exp_not:n {#2} } } \cs_new:Npn \__scontents_remove_leading_nl:w ^^J { } \cs_new_protected:Npn \__scontents_verb_processor_output:n #1 { \bool_if:NT \l__scontents_writable_bool { \iow_now:Nn \l__scontents_file_iow {#1} } \bool_if:NT \l__scontents_storing_bool { \tl_put_right:Nn \l__scontents_every_line_env_tl { ^^J #1 } } } \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_finish_storing:NNN #1 #2 #3 { \bool_if:NT \l__scontents_storing_bool { \bool_if:NF \l__scontents_forced_eol_bool { \tl_put_right:Nx #1 { \c__scontents_hidden_space_str } } \__scontents_store_to_seq:NN #1 #2 \bool_if:NT #3 { \__scontents_lastfrom_seq:V #2 } } } \cs_if_exist:NF \dospecials { \cs_new:Npn \dospecials { \seq_map_function:NN \l_char_special_seq \do } } \cs_new_protected:Npn \__scontents_bsphack: { \scan_stop: \mode_if_horizontal:T { \skip_set_eq:NN \l__scontents_save_skip \tex_lastskip:D \int_set_eq:NN \l__scontents_save_sf_int \tex_spacefactor:D } } \cs_new_protected:Npn \__scontents_esphack: { \scan_stop: \mode_if_horizontal:T { \int_set_eq:NN \tex_spacefactor:D \l__scontents_save_sf_int \dim_compare:nNnT { \l__scontents_save_skip } > { \c_zero_skip } { \skip_if_eq:nnT { \tex_lastskip:D } { \c_zero_skip } { \nobreak \skip_horizontal:n { \c_zero_skip } } \tex_ignorespaces:D } } } \cs_new_protected:Npn \__scontents_Scontents_internal:nn #1 #2 { \__scontents_bsphack: \group_begin: \tl_if_novalue:nF {#2} { \keys_set:nn { scontents / Scontents } {#2} } \char_set_catcode_active:n { 9 } \bool_if:NTF #1 { \__scontents_verb_arg:w } { \__scontents_norm_arg:n } } \cs_new_protected:Npn \__scontents_norm_arg:n #1 { \tl_set:Nn \l__scontents_temp_tl {#1} \__scontents_Scontents_finish: } \cs_new_protected:Npn \__scontents_verb_arg_internal:n #1 { \tl_set:Nn \l__scontents_temp_tl {#1} \tl_replace_all:Nxx \l__scontents_temp_tl { \iow_char:N \^^M } { \iow_char:N \^^J } \__scontents_Scontents_finish: } \cs_new_protected:Npn \__scontents_Scontents_finish: { \__scontents_file_write_cmd:VV \l__scontents_fname_out_tl \l__scontents_temp_tl \__scontents_finish_storing:NNN \l__scontents_temp_tl \l__scontents_name_seq_cmd_tl \l__scontents_print_cmd_bool \use:x { \group_end: \bool_if:NF \l__scontents_print_cmd_bool { \__scontents_esphack: } } } \cs_new_protected:Npn \__scontents_file_write_cmd:nn #1#2 { \__scontents_file_if_writable:nT {#1} { \iow_open:Nn \l__scontents_file_iow {#1} \iow_now:Nn \l__scontents_file_iow {#2} \iow_close:N \l__scontents_file_iow } } \cs_generate_variant:Nn \__scontents_file_write_cmd:nn { VV } \prg_new_protected_conditional:Npnn \__scontents_file_if_writable:n #1 { T, F, TF } { \bool_if:NTF \l__scontents_writing_bool { \file_if_exist:nTF {#1} { \bool_if:NTF \l__scontents_overwrite_bool { \msg_warning:nnx { scontents } { overwrite-file } {#1} \prg_return_true: } { \msg_warning:nnx { scontents } { not-writing } {#1} \prg_return_false: } } { \msg_warning:nnx { scontents } { writing-file } {#1} \prg_return_true: } } { \prg_return_false: } } \cs_new_protected:Npn \__scontents_getstored_internal:nn #1 #2 { \group_begin: \int_set:Nn \tex_newlinechar:D { `\^^J } \__scontents_rescan_tokens:x { \endgroup % This assumes \catcode`\\=0... Things might go off otherwise. \__scontents_getfrom_seq:nn {#1} {#2} } } \cs_new_protected:Npn \__scontents_foreachsc_internal:nn #1 #2 { \group_begin: \tl_if_novalue:nF {#1} { \keys_set:nn { scontents / foreachsc } {#1} } \tl_set:Nn \l__scontents_foreach_name_seq_tl {#2} \seq_clear:N \l__scontents_foreach_print_seq \bool_if:NF \l__scontents_foreach_stop_bool { \int_set:Nn \l__scontents_foreach_stop_int { \seq_count:c { g__scontents_name_#2_seq } } } \int_step_function:nnnN { \l__scontents_foreach_start_int } { \l__scontents_foreach_step_int } { \l__scontents_foreach_stop_int } \__scontents_foreach_add_body:n \tl_gset:Nx \g__scontents_temp_tl { \exp_args:NNV \seq_use:Nn \l__scontents_foreach_print_seq \l__scontents_foreach_sep_tl } \group_end: \exp_after:wN \tl_gclear:N \exp_after:wN \g__scontents_temp_tl \g__scontents_temp_tl } \cs_new_protected:Npn \__scontents_foreach_add_body:n #1 { \seq_put_right:Nx \l__scontents_foreach_print_seq { \bool_if:NT \l__scontents_foreach_before_bool { \exp_not:V \l__scontents_foreach_before_tl } \bool_if:NTF \l__scontents_foreach_wrapper_bool { \__scontents_foreach_wrapper:n } { \use:n } { \getstored [#1] { \tl_use:N \l__scontents_foreach_name_seq_tl } } \bool_if:NT \l__scontents_foreach_after_bool { \exp_not:V \l__scontents_foreach_after_tl } } } \cs_new_protected:Npn \__scontents_typestored_internal:nn #1 #2 { \group_begin: \int_set:Nn \l__scontents_seq_item_int { 1 } \tl_if_novalue:nF {#1} { \keys_set:nn { scontents / typemeaning } {#1} } \tl_set:Nx \l__scontents_temp_tl { \exp_args:NV \__scontents_getfrom_seq:nn \l__scontents_seq_item_int {#2} } \tl_remove_once:NV \l__scontents_temp_tl \c__scontents_hidden_space_str \tl_log:N \l__scontents_temp_tl \tl_if_empty:NF \l__scontents_temp_tl { \__scontents_verb_print:N \l__scontents_temp_tl } \group_end: } \group_begin: \char_set_catcode_active:N \^^M \cs_new_protected:Npn \__scontents_verb_print:N #1 { \tl_if_blank:VT #1 { \msg_error:nnn { scontents } { empty-variable } {#1} } \cs_set_eq:NN \__scontents_verb_print_EOL: ^^M \cs_set_eq:NN ^^M \scan_stop: \cs_set_eq:cN { do@noligs } \__scontents_do_noligs:N \int_set:Nn \tex_newlinechar:D { `\^^J } \__scontents_rescan_tokens:x { \__scontents_format_case:nnn { \exp_not:N \begin{verbatimsc} } % LaTeX { \verbatimsc } % Plain/Generic { \startverbatimsc } % ConTeXt ^^M \exp_not:V #1 ^^M \g__scontents_end_verbatimsc_tl } \cs_set_eq:NN ^^M \__scontents_verb_print_EOL: } \group_end: \cs_new_protected:Npn \__scontents_xverb: { \char_set_catcode_active:n { 9 } \char_set_active_eq:nN { 9 } \__scontents_tabs_to_spaces: \__scontents_xverb:w } \cs_new:Npn \__scontents_tabs_to_spaces: { \prg_replicate:nn { \l__scontents_tab_width_int } { ~ } } \cs_new:Npn \__scontents_do_noligs:N #1 { \char_set_catcode_active:N #1 \char_set_active_eq:Nc #1 { __scontents_active_char_ \token_to_str:N #1 : } \cs_set:cpx { __scontents_active_char_ \token_to_str:N #1 : } { \mode_leave_vertical: \tex_kern:D \c_zero_dim \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 \char_set_active_eq:NN #1 } \group_begin: \char_set_catcode_active:N \* \cs_new_protected:Npn \__scontents_make_control_chars_active: { \__scontents_plain_disable_outer_par: \__scontents_set_active_eq:NN \^^I \__scontents_tab: \__scontents_set_active_eq:NN \^^L \__scontents_par: \__scontents_set_active_eq:NN \^^M \__scontents_ret:w } \group_end: \cs_new_protected:Npn \__scontents_meaningsc_internal:nn #1 #2 { \group_begin: \int_set:Nn \l__scontents_seq_item_int { 1 } \tl_if_novalue:nF {#1} { \keys_set:nn { scontents / typemeaning } {#1} } \__scontents_meaningsc:n {#2} \group_end: } \group_begin: \char_set_catcode_active:N \^^I \cs_new_protected:Npn \__scontents_meaningsc:n #1 { \tl_set:Nx \l__scontents_temp_tl { \exp_args:NV \__scontents_getfrom_seq:nn \l__scontents_seq_item_int {#1} } \tl_replace_all:Nxn \l__scontents_temp_tl { \iow_char:N \^^J } { ~ } \tl_remove_once:NV \l__scontents_temp_tl \c__scontents_hidden_space_str \tl_log:N \l__scontents_temp_tl \tl_use:N \l__scontents_verb_font_tl \tl_replace_all:Nnx \l__scontents_temp_tl { ^^I } { \__scontents_tabs_to_spaces: } \cs_replacement_spec:N \l__scontents_temp_tl } \group_end: \msg_new:nnn { scontents } { junk-after-begin } { Junk~characters~#1~\msg_line_context: : \\ \\ #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 } { overwrite-file } { Overwriting~file~'#1'. } \msg_new:nnn { scontents } { writing-file } { Writing~file~'#1'. } \msg_new:nnn { scontents } { not-writing } { File~`#1'~already~exists.~Not~writing. } \msg_new:nnn { scontents } { rescanning-text } { Rescanning~text~'#1'~after~\c_backslash_str end{#2}~\msg_line_context:.} \msg_new:nnn { scontents } { multiple-begin } { 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 } { \int_compare:nNnTF {#1} = { 0 } { Index~of~sequence~cannot~be~zero. } { Index~'#1'~out~of~range~for~'#2'.~ \int_compare:nNnTF {#1} > { 0 } { Max = } { Min = -} #3. } } \msg_new:nnnn { scontents } { env-key-unknown } { 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~ '\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 } { The~key~'#1'~is~unknown~by~'\c_backslash_str Scontents'~and~is~being~ignored.} { The~command~'\c_backslash_str Scontents'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { cmd-key-value-unknown } { The~key~'#1=#2'~is~unknown~by~'\c_backslash_str Scontents'~and~is~being~ignored. } { The~command~'\c_backslash_str Scontents'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { for-key-unknown } { The~key~'#1'~is~unknown~by~'\c_backslash_str foreachsc'~and~is~being~ignored.} { The~command~'\c_backslash_str foreachsc'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { for-key-value-unknown } { The~key~'#1=#2'~is~unknown~by~'\c_backslash_str foreachsc'~and~is~being~ignored. } { The~command~'\c_backslash_str foreachsc'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \msg_new:nnnn { scontents } { type-key-unknown } { The~key~'#1'~is~unknown~and~is~being~ignored. } { This~command~does~not~have~a~key~called~'#1'.\\ This~command~only~accepts~the~key~'width-tab'. } \msg_new:nnnn { scontents } { type-key-value-unknown } { The~key~'#1'~to~which~you~passed~'#2'~is~unknown~and~is~being~ignored. } { This~command~does~not~have~a~key~called~'#1'.\\ This~command~only~accepts~the~key~'width-tab'. } \msg_new:nnn { scontents } { empty-environment } { environment~'#1'~empty~\msg_line_context:. } \msg_new:nnnn { scontents } { verbatim-newline } { Verbatim~argument~of~#1~ended~by~end~of~line. } { The~verbatim~argument~of~the~#1~cannot~contain~more~than~one~line,~ but~the~end~ of~the~current~line~has~been~reached.~You~may~have~forgotten~the~ closing~delimiter. \\ \\ LaTeX~will~ignore~'#2'. } \msg_new:nnnn { scontents } { verbatim-tokenized } { The~verbatim~#1~cannot~be~used~inside~an~argument. } { The~#1~takes~a~verbatim~argument.~ It~may~not~appear~within~the~argument~of~another~function.~ It~received~an~illegal~token \tl_if_empty:nF {#3} { ~'#3' } . \\ \\ LaTeX~will~ignore~'#2'. } \endinput %% %% End of file `scontents-code.tex'.