%% %% This is file `l3cctab.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3cctab.dtx (with options: `package') %% %% Copyright (C) 2018-2020 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% http://www.latex-project.org/lppl.txt %% %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3cctab.dtx \RequirePackage{expl3} \ProvidesExplPackage{l3cctab}{2020-05-18}{} {L3 Experimental category code tables} \int_new:N \g__cctab_allocate_int \int_gset:Nn \g__cctab_allocate_int { -1 } \int_new:N \g__cctab_stack_int \seq_new:N \g__cctab_stack_seq \tl_new:N \l__cctab_tmp_tl \sys_if_engine_luatex:TF { \cs_new_protected:Npn \cctab_new:N #1 { \__kernel_chk_if_free_cs:N #1 \newcatcodetable #1 } \cs_new_protected:Npn \__cctab_begin:N #1 { \seq_gpush:Nx \g__cctab_stack_seq { \tex_the:D \tex_catcodetable:D } \tex_catcodetable:D #1 \int_gadd:Nn \g__cctab_stack_int { 2 } \int_compare:nNnT \g__cctab_stack_int > \c_max_register_int { \__kernel_msg_fatal:nn { kernel } { cctab-stack-full } } \tex_savecatcodetable:D \g__cctab_stack_int \tex_catcodetable:D \g__cctab_stack_int } \cs_new_protected:Npn \__cctab_end: { \int_gsub:Nn \g__cctab_stack_int { 2 } \seq_if_empty:NTF \g__cctab_stack_seq { \tl_set:Nn \l__cctab_tmp_tl { 0 } } { \seq_gpop:NN \g__cctab_stack_seq \l__cctab_tmp_tl } \tex_catcodetable:D \l__cctab_tmp_tl \scan_stop: } \cs_new_protected:Npn \cctab_gset:Nn #1#2 { \group_begin: #2 \scan_stop: \tex_savecatcodetable:D #1 \group_end: } } { \cs_new_protected:Npn \__cctab_gstore:Nnn #1#2#3 { \intarray_gset:cnn { g__cctab_ \int_use:N #1 _cctab } { #2 + 1 } {#3} } \cs_new_protected:Npn \cctab_new:N #1 { \int_gadd:Nn \g__cctab_allocate_int { 2 } \int_const:Nn #1 { \g__cctab_allocate_int } \intarray_new:cn { g__cctab_ \int_use:N #1 _cctab } { 256 } \int_step_inline:nn { 256 } { \intarray_gset:cnn { g__cctab_ \int_use:N #1 _cctab } {##1} { 12 } } \__cctab_gstore:Nnn #1 { 0 } { 9 } \__cctab_gstore:Nnn #1 { 13 } { 5 } \__cctab_gstore:Nnn #1 { 32 } { 10 } \__cctab_gstore:Nnn #1 { 37 } { 14 } \int_step_inline:nnn { 65 } { 90 } { \__cctab_gstore:Nnn #1 {##1} { 11 } } \__cctab_gstore:Nnn #1 { 92 } { 0 } \int_step_inline:nnn { 97 } { 122 } { \__cctab_gstore:Nnn #1 {##1} { 11 } } \__cctab_gstore:Nnn #1 { 127 } { 15 } } \cs_new_protected:Npn \__cctab_begin:N #1 { \int_gadd:Nn \g__cctab_stack_int { 2 } \int_compare:nNnT \g__cctab_stack_int > \c_max_register_int { \__kernel_msg_fatal:nn { kernel } { cctab-stack-full } } \cs_if_exist:cF { g__cctab_ \int_use:N \g__cctab_stack_int _cctab } { \intarray_new:cn { g__cctab_ \int_use:N \g__cctab_stack_int _cctab } { 256 } } \int_step_inline:nn { 256 } { \intarray_gset:cnn { g__cctab_ \int_use:N \g__cctab_stack_int _cctab } {##1} { \char_value_catcode:n { ##1 - 1 } } } \int_step_inline:nn { 256 } { \char_set_catcode:nn { ##1 - 1 } { \intarray_item:cn { g__cctab_ \int_use:N #1 _cctab } {##1} } } } \cs_generate_variant:Nn \intarray_new:Nn { c } \cs_generate_variant:Nn \intarray_gset:Nnn { c } \cs_new_protected:Npn \__cctab_end: { \int_step_inline:nn { 256 } { \char_set_catcode:nn { ##1 - 1 } { \intarray_item:cn { g__cctab_ \int_use:N \g__cctab_stack_int _cctab } {##1} } } \int_gsub:Nn \g__cctab_stack_int { 2 } } \cs_generate_variant:Nn \intarray_item:Nn { c } \cs_new_protected:Npn \cctab_gset:Nn #1#2 { \group_begin: #2 \scan_stop: \int_step_inline:nn { 256 } { \intarray_gset:cnn { g__cctab_ \int_use:N #1 _cctab } {##1} { \char_value_catcode:n { ##1 - 1 } } } \group_end: } } \cs_generate_variant:Nn \cctab_new:N { c } \cs_generate_variant:Nn \cctab_gset:Nn { c } \cs_new_protected:Npn \cctab_begin:N #1 { \__cctab_chk_if_valid:NT #1 { \__cctab_begin:N #1 } } \cs_generate_variant:Nn \cctab_begin:N { c } \cs_new_protected:Npn \cctab_end: { \int_compare:nNnTF { \g__cctab_stack_int } = { \c_zero_int } { \__kernel_msg_error:nn { kernel } { cctab-extra-end } } { \__cctab_end: } } \prg_new_eq_conditional:NNn \cctab_if_exist:N \cs_if_exist:N { TF , T , F , p } \prg_new_eq_conditional:NNn \cctab_if_exist:c \cs_if_exist:c { TF , T , F , p } \sys_if_engine_luatex:TF { \prg_new_protected_conditional:Npnn \__cctab_chk_if_valid:N #1 { TF , T , F } { \cctab_if_exist:NTF #1 { \int_compare:nNnTF {#1-1} < { \e@alloc@ccodetable@count } { \prg_return_true: } { \__kernel_msg_error:nnx { kernel } { invalid-cctab } { \token_to_str:N #1 } \prg_return_false: } } { \__kernel_msg_error:nnx { kernel } { command-not-defined } { \token_to_str:N #1 } \prg_return_false: } } } { \prg_new_protected_conditional:Npnn \__cctab_chk_if_valid:N #1 { TF , T , F } { \cctab_if_exist:NTF #1 { \cs_if_exist:cTF { g__cctab_ \int_use:N #1 _cctab } { \prg_return_true: } { \__kernel_msg_error:nnx { kernel } { invalid-cctab } { \token_to_str:N #1 } \prg_return_false: } } { \__kernel_msg_error:nnx { kernel } { command-not-defined } { \token_to_str:N #1 } \prg_return_false: } } } \cs_new_protected:Npn \cctab_const:Nn #1#2 { \cctab_new:N #1 \cctab_gset:Nn #1 {#2} } \cs_generate_variant:Nn \cctab_const:Nn { c } \cctab_new:N \c_initex_cctab \cctab_const:Nn \c_code_cctab { } \cctab_const:Nn \c_document_cctab { \char_set_catcode_space:n { 9 } \char_set_catcode_space:n { 32 } \char_set_catcode_other:n { 58 } \char_set_catcode_math_subscript:n { 95 } \char_set_catcode_active:n { 126 } } \cctab_const:Nn \c_other_cctab { \int_step_inline:nnn { 0 } { 127 } { \char_set_catcode_other:n {#1} } } \cctab_const:Nn \c_str_cctab { \int_step_inline:nnn { 0 } { 127 } { \char_set_catcode_other:n {#1} } \char_set_catcode_space:n { 32 } } \__kernel_msg_new:nnnn { kernel } { cctab-stack-full } { The~category~code~table~stack~is~exhausted. } { LaTeX~has~been~asked~to~switch~to~a~new~category~code~table,~ but~there~is~no~more~space~to~do~this! } \__kernel_msg_new:nnnn { kernel } { cctab-extra-end } { Extra~\iow_char:N\\cctab_end:~ignored~\msg_line_context:. } { LaTeX~came~across~a~\iow_char:N\\cctab_end:~without~a~matching~ \iow_char:N\\cctab_begin:N.~This~command~will~be~ignored. } \__kernel_msg_new:nnnn { kernel } { invalid-cctab } { Invalid~\iow_char:N\\catcode~table. } { You~can~only~switch~to~a~\iow_char:N\\catcode~table~that~is~ initialized~using~\iow_char:N\\cctab_new:N~or~ \iow_char:N\\cctab_const:Nn. } %% %% %% End of file `l3cctab.sty'.