From 4c2b93bc3bf719cd449e25b544d2db6a3ce71123 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 12 May 2021 20:04:18 +0000 Subject: unravel (12may21) git-svn-id: svn://tug.org/texlive/trunk@59175 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/unravel/unravel.sty | 1014 ++++++++++++++++------- 1 file changed, 701 insertions(+), 313 deletions(-) (limited to 'Master/texmf-dist/tex/latex/unravel') diff --git a/Master/texmf-dist/tex/latex/unravel/unravel.sty b/Master/texmf-dist/tex/latex/unravel/unravel.sty index ec8a48459e8..97037b2a7f0 100644 --- a/Master/texmf-dist/tex/latex/unravel/unravel.sty +++ b/Master/texmf-dist/tex/latex/unravel/unravel.sty @@ -11,7 +11,7 @@ %% Communicate any suggestions for changing this package %% to Bruno Le Floch (blflatex+unravel@gmail.com). %% -%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019 Bruno Le Floch +%% File: unravel.dtx Copyright (C) 2013, 2015, 2018-2019, 2021 Bruno Le Floch %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -146,16 +146,20 @@ \newlinechar = 10 ~ } \expandafter \endgroup \__unravel_setup_latexe: -\RequirePackage{expl3,xparse}[2018/02/21] +\RequirePackage{expl3,xparse}[2021/01/01] \RequirePackage{gtl}[2018/12/28] \csname cs_if_exist:cF\endcsname{str_range:nnn}{\RequirePackage{l3str}} \csname use:n\endcsname {% \csname __unravel_setup_restore:\endcsname \ProvidesExplPackage - {unravel} {2019/11/15} {0.2h} {Watching TeX digest tokens}% + {unravel} {2021/05/11} {0.3a} {Watching TeX digest tokens}% \csname __unravel_setup_unravel:\endcsname }% +\cs_gset:Npn \group_align_safe_begin: + { \exp:w \if_false: { \fi: -`} \exp_stop_f: } +\cs_gset:Npn \group_align_safe_end: + { \if_int_compare:w `{ = \c_zero_int } \fi: } \cs_new_eq:NN \__unravel_currentgrouptype: \tex_currentgrouptype:D \cs_new_protected:Npn \__unravel_set_escapechar:n { \int_set:Nn \tex_escapechar:D } @@ -176,6 +180,7 @@ \cs_generate_variant:Nn \tl_to_str:n { o } \cs_generate_variant:Nn \tl_if_eq:nnTF { o } \cs_generate_variant:Nn \tl_if_head_eq_meaning:nNT { V } +\cs_generate_variant:Nn \tl_if_head_eq_meaning:nNTF { V } \cs_generate_variant:Nn \tl_if_single_token:nT { V } \cs_generate_variant:Nn \gtl_gput_right:Nn { NV } \cs_generate_variant:Nn \gtl_if_empty:NTF { c } @@ -249,23 +254,27 @@ } #1 } -\cs_new_protected:Npn \__unravel_prepare_mag: +\cs_new:Npn \__unravel_use_ii_i:nn #1#2 { #2 #1 } +\cs_new_protected:Npn \__unravel_prompt_input:Nn #1#2 { - \int_compare:nNnT { \g__unravel_mag_set_int } > { 0 } - { - \int_compare:nNnF { \__unravel_mag: } = { \g__unravel_mag_set_int } - { - \__unravel_tex_error:nn { incompatible-mag } { } - \int_gset_eq:NN \__unravel_mag: \g__unravel_mag_set_int - } - } - \int_compare:nF { 1 <= \__unravel_mag: <= 32768 } - { - \__unravel_tex_error:nV { illegal-mag } \l__unravel_head_tl - \int_gset:Nn \__unravel_mag: { 1000 } - } - \int_gset_eq:NN \g__unravel_mag_set_int \__unravel_mag: + \clist_gset:Nx #1 + { \__unravel_prompt_input:w \prg_do_nothing: #2 , \q__unravel_recursion_tail , } + } +\cs_new:Npn \__unravel_prompt_input:w #1 , + { + \tl_trim_spaces_apply:oN {#1} \__unravel_use_ii_i:nn + \__unravel_prompt_input_aux:w , + } +\cs_new:Npn \__unravel_prompt_input_aux:w #1 , + { + \__unravel_use_none_delimit_by_q_recursion_tail:w #1 + \use_none:nnnnn \q__unravel_recursion_tail + { \tl_to_str:n {#1} } , + \__unravel_prompt_input:w \prg_do_nothing: } +\cs_new:Npn \__unravel_use_none_delimit_by_q_recursion_tail:w + #1 \q__unravel_recursion_tail { } +\quark_new:N \q__unravel_recursion_tail \cs_new:Npn \__unravel_strip_escape:w { \tex_romannumeral:D @@ -275,25 +284,14 @@ \cs_new:Npn \__unravel_strip_escape_aux:N #1 { \c_zero_int } \cs_new:Npn \__unravel_strip_escape_aux:w #1#2 { - \__unravel_number:w #1 \c_zero_int } -\cs_new:Npn \__unravel_to_str:n #1 +\cs_new:Npn \__unravel_to_str:Nn #1 { - \tl_if_head_eq_meaning:nNTF {#1} \scan_stop: - { \__unravel_to_str_auxi:w #1 ? \q_stop } - { \tl_to_str:n } - {#1} - } -\cs_set:Npn \__unravel_tmp:w #1 - { - \cs_new:Npn \__unravel_to_str_auxi:w ##1##2 \q_stop - { - \exp_after:wN \__unravel_to_str_auxii:w \token_to_str:N ##1 \q_mark - #1 tl \q_mark \q_stop - } - \cs_new:Npn \__unravel_to_str_auxii:w ##1 #1 ##2 \q_mark ##3 \q_stop - { \cs_if_exist_use:cF { __unravel_ ##2 _to_str:n } { \tl_to_str:n } } + \if_meaning:w T #1 + \exp_after:wN \tl_to_str:n + \else: + \exp_after:wN \gtl_to_str:n + \fi: } -\exp_args:No \__unravel_tmp:w { \tl_to_str:n { s _ _ } } -\cs_new:Npn \__unravel_gtl_to_str:n { \gtl_to_str:n } \cs_new:Npn \__unravel_str_truncate_left:nn #1#2 { \exp_args:Nf \__unravel_str_truncate_left_aux:nnn @@ -340,6 +338,16 @@ { \prg_return_true: } } } +\cs_new_protected:Npn \__unravel_active_do:nn #1#2 + { + \group_begin: + \char_set_active_eq:nN {#1} \scan_stop: + \use:x + { + \group_end: + \exp_not:n {#2} { \char_generate:nn {#1} { 13 } } + } + } \cs_new:Npn \__unravel_meaning_to_char:n #1 { \__unravel_meaning_to_char_auxi:w #1 \q_mark ~ {} ~ \q_mark \q_stop } \cs_new:Npn \__unravel_meaning_to_char_auxi:w #1 ~ #2 ~ #3 \q_mark #4 \q_stop @@ -430,21 +438,46 @@ } } \cs_new:Npn \__unravel_prev_input_count_aux:n #1 - { \tl_if_empty:nF {#1} { + 1 } } -\cs_new_protected:Npn \__unravel_prev_input_get:N - { \seq_get_right:NN \g__unravel_prev_input_seq } + { \__unravel_prev_input_count_aux:Nn #1 } +\cs_new:Npn \__unravel_prev_input_count_aux:Nn #1#2 + { + \if_meaning:w T #1 + \exp_after:wN \tl_if_empty:nF + \else: + \exp_after:wN \str_if_eq:onF \exp_after:wN \c_empty_gtl + \fi: + {#2} { + 1 } + } \cs_new_protected:Npn \__unravel_prev_input_gpush: - { \seq_gput_right:Nn \g__unravel_prev_input_seq { } } + { \seq_gput_right:Nn \g__unravel_prev_input_seq { T { } } } \cs_new_protected:Npn \__unravel_prev_input_gpush:N - { \seq_gput_right:NV \g__unravel_prev_input_seq } -\cs_new_protected:Npn \__unravel_prev_input_gpop:N - { \seq_gpop_right:NN \g__unravel_prev_input_seq } + { \__unravel_prev_input_gpush_aux:NN T } \cs_new_protected:Npn \__unravel_prev_input_gpush_gtl: - { \seq_gput_right:NV \g__unravel_prev_input_seq \c_empty_gtl } + { \__unravel_prev_input_gpush_gtl:N \c_empty_gtl } \cs_new_protected:Npn \__unravel_prev_input_gpush_gtl:N - { \seq_gput_right:NV \g__unravel_prev_input_seq } + { \__unravel_prev_input_gpush_aux:NN G } +\cs_new_protected:Npn \__unravel_prev_input_gpush_aux:NN #1#2 + { \seq_gput_right:Nx \g__unravel_prev_input_seq { #1 { \exp_not:o {#2} } } } +\tl_new:N \l__unravel_prev_aux_tl +\cs_new_protected:Npn \__unravel_prev_input_get:N + { \__unravel_prev_input_aux:NNN \seq_get_right:NN T } +\cs_new_protected:Npn \__unravel_prev_input_gpop:N + { \__unravel_prev_input_aux:NNN \seq_gpop_right:NN T } \cs_new_protected:Npn \__unravel_prev_input_gpop_gtl:N - { \seq_gpop_right:NN \g__unravel_prev_input_seq } + { \__unravel_prev_input_aux:NNN \seq_gpop_right:NN G } +\cs_new_protected:Npn \__unravel_prev_input_aux:NNN #1#2#3 + { + #1 \g__unravel_prev_input_seq \l__unravel_prev_aux_tl + \exp_after:wN \__unravel_prev_input_aux:NNNn + \exp_after:wN #2 \exp_after:wN #3 \l__unravel_prev_aux_tl + } +\cs_new_protected:Npn \__unravel_prev_input_aux:NNNn #1#2#3 + { + \token_if_eq_meaning:NNTF #1#3 + { \tl_set:Nn } + { \msg_error:nnnnnn { unravel } { prev-input } {#1} {#3} } + #2 + } \cs_new_protected:Npn \__unravel_prev_input_silent:n #1 { \__unravel_prev_input_gpop:N \l__unravel_prev_input_tl @@ -552,6 +585,7 @@ \tl_new:N \l__unravel_defined_tl \tl_new:N \l__unravel_defining_tl \cs_new_eq:NN \__unravel_inaccessible:w ? +\tl_new:N \g__unravel_lastnamedcs_tl \gtl_new:N \g__unravel_after_assignment_gtl \bool_new:N \g__unravel_set_box_allowed_bool \bool_new:N \g__unravel_name_in_progress_bool @@ -583,6 +617,23 @@ \tl_const:Nn \c__unravel_point_tl { . } \gtl_const:Nx \c__unravel_frozen_relax_gtl { \if_int_compare:w 0 = 0 \fi: } \int_new:N \g__unravel_mag_set_int +\cs_new_protected:Npn \__unravel_prepare_mag: + { + \int_compare:nNnT { \g__unravel_mag_set_int } > { 0 } + { + \int_compare:nNnF { \__unravel_mag: } = { \g__unravel_mag_set_int } + { + \__unravel_tex_error:nn { incompatible-mag } { } + \int_gset_eq:NN \__unravel_mag: \g__unravel_mag_set_int + } + } + \int_compare:nF { 1 <= \__unravel_mag: <= 32768 } + { + \__unravel_tex_error:nV { illegal-mag } \l__unravel_head_tl + \int_gset:Nn \__unravel_mag: { 1000 } + } + \int_gset_eq:NN \g__unravel_mag_set_int \__unravel_mag: + } \cs_new_protected:Npn \__unravel_tex_const:nn #1#2 { \int_const:cn { c__unravel_tex_#1_int } {#2} } \cs_new:Npn \__unravel_tex_use:n #1 { \int_use:c { c__unravel_tex_#1_int } } @@ -591,6 +642,12 @@ \tl_const:cx { c__unravel_tex_#1_tl } { { \__unravel_tex_use:n {#2} } {#3} } } +\cs_new_protected:Npn \__unravel_tex_primitive_pdf:nnn #1#2#3 + { + \sys_if_engine_pdftex:F + { \__unravel_tex_primitive:nnn {#1} {#2} {#3} } + \__unravel_tex_primitive:nnn { pdf #1 } {#2} {#3} + } \cs_new_protected:Npn \__unravel_new_tex_cmd:nn #1#2 { \cs_new_protected:cpn @@ -811,6 +868,11 @@ \__unravel_tex_primitive:nnn { / } { ital_corr } { 0 } \__unravel_tex_primitive:nnn { accent } { accent } { 0 } \__unravel_tex_primitive:nnn { mathaccent } { math_accent } { 0 } +\sys_if_engine_luatex:T + { + \__unravel_tex_primitive:nnn + { explicitdiscretionary } { discretionary } { 1 } + } \__unravel_tex_primitive:nnn { - } { discretionary } { 1 } \__unravel_tex_primitive:nnn { discretionary } { discretionary } { 0 } \__unravel_tex_primitive:nnn { eqno } { eq_no } { 0 } @@ -854,42 +916,42 @@ \__unravel_tex_primitive:nnn { special } { extension } { 3 } \__unravel_tex_primitive:nnn { immediate } { extension } { 4 } \__unravel_tex_primitive:nnn { setlanguage } { extension } { 5 } -\__unravel_tex_primitive:nnn { pdfliteral } { extension } { 6 } -\__unravel_tex_primitive:nnn { pdfobj } { extension } { 7 } -\__unravel_tex_primitive:nnn { pdfrefobj } { extension } { 8 } -\__unravel_tex_primitive:nnn { pdfxform } { extension } { 9 } -\__unravel_tex_primitive:nnn { pdfrefxform } { extension } { 10 } -\__unravel_tex_primitive:nnn { pdfximage } { extension } { 11 } -\__unravel_tex_primitive:nnn { pdfrefximage } { extension } { 12 } -\__unravel_tex_primitive:nnn { pdfannot } { extension } { 13 } -\__unravel_tex_primitive:nnn { pdfstartlink } { extension } { 14 } -\__unravel_tex_primitive:nnn { pdfendlink } { extension } { 15 } -\__unravel_tex_primitive:nnn { pdfoutline } { extension } { 16 } -\__unravel_tex_primitive:nnn { pdfdest } { extension } { 17 } -\__unravel_tex_primitive:nnn { pdfthread } { extension } { 18 } -\__unravel_tex_primitive:nnn { pdfstartthread } { extension } { 19 } -\__unravel_tex_primitive:nnn { pdfendthread } { extension } { 20 } -\__unravel_tex_primitive:nnn { pdfsavepos } { extension } { 21 } -\__unravel_tex_primitive:nnn { pdfinfo } { extension } { 22 } -\__unravel_tex_primitive:nnn { pdfcatalog } { extension } { 23 } -\__unravel_tex_primitive:nnn { pdfnames } { extension } { 24 } -\__unravel_tex_primitive:nnn { pdffontattr } { extension } { 25 } -\__unravel_tex_primitive:nnn { pdfincludechars } { extension } { 26 } -\__unravel_tex_primitive:nnn { pdfmapfile } { extension } { 27 } -\__unravel_tex_primitive:nnn { pdfmapline } { extension } { 28 } -\__unravel_tex_primitive:nnn { pdftrailer } { extension } { 29 } -\__unravel_tex_primitive:nnn { pdfresettimer } { extension } { 30 } -\__unravel_tex_primitive:nnn { pdffontexpand } { extension } { 31 } -\__unravel_tex_primitive:nnn { pdfsetrandomseed } { extension } { 32 } -\__unravel_tex_primitive:nnn { pdfsnaprefpoint } { extension } { 33 } -\__unravel_tex_primitive:nnn { pdfsnapy } { extension } { 34 } -\__unravel_tex_primitive:nnn { pdfsnapycomp } { extension } { 35 } -\__unravel_tex_primitive:nnn { pdfglyphtounicode } { extension } { 36 } -\__unravel_tex_primitive:nnn { pdfcolorstack } { extension } { 37 } -\__unravel_tex_primitive:nnn { pdfsetmatrix } { extension } { 38 } -\__unravel_tex_primitive:nnn { pdfsave } { extension } { 39 } -\__unravel_tex_primitive:nnn { pdfrestore } { extension } { 40 } -\__unravel_tex_primitive:nnn { pdfnobuiltintounicode } { extension } { 41 } +\__unravel_tex_primitive_pdf:nnn { literal } { extension } { 6 } +\__unravel_tex_primitive_pdf:nnn { obj } { extension } { 7 } +\__unravel_tex_primitive_pdf:nnn { refobj } { extension } { 8 } +\__unravel_tex_primitive_pdf:nnn { xform } { extension } { 9 } +\__unravel_tex_primitive_pdf:nnn { refxform } { extension } { 10 } +\__unravel_tex_primitive_pdf:nnn { ximage } { extension } { 11 } +\__unravel_tex_primitive_pdf:nnn { refximage } { extension } { 12 } +\__unravel_tex_primitive_pdf:nnn { annot } { extension } { 13 } +\__unravel_tex_primitive_pdf:nnn { startlink } { extension } { 14 } +\__unravel_tex_primitive_pdf:nnn { endlink } { extension } { 15 } +\__unravel_tex_primitive_pdf:nnn { outline } { extension } { 16 } +\__unravel_tex_primitive_pdf:nnn { dest } { extension } { 17 } +\__unravel_tex_primitive_pdf:nnn { thread } { extension } { 18 } +\__unravel_tex_primitive_pdf:nnn { startthread } { extension } { 19 } +\__unravel_tex_primitive_pdf:nnn { endthread } { extension } { 20 } +\__unravel_tex_primitive_pdf:nnn { savepos } { extension } { 21 } +\__unravel_tex_primitive_pdf:nnn { info } { extension } { 22 } +\__unravel_tex_primitive_pdf:nnn { catalog } { extension } { 23 } +\__unravel_tex_primitive_pdf:nnn { names } { extension } { 24 } +\__unravel_tex_primitive_pdf:nnn { fontattr } { extension } { 25 } +\__unravel_tex_primitive_pdf:nnn { includechars } { extension } { 26 } +\__unravel_tex_primitive_pdf:nnn { mapfile } { extension } { 27 } +\__unravel_tex_primitive_pdf:nnn { mapline } { extension } { 28 } +\__unravel_tex_primitive_pdf:nnn { trailer } { extension } { 29 } +\__unravel_tex_primitive_pdf:nnn { resettimer } { extension } { 30 } +\__unravel_tex_primitive_pdf:nnn { fontexpand } { extension } { 31 } +\__unravel_tex_primitive_pdf:nnn { setrandomseed } { extension } { 32 } +\__unravel_tex_primitive_pdf:nnn { snaprefpoint } { extension } { 33 } +\__unravel_tex_primitive_pdf:nnn { snapy } { extension } { 34 } +\__unravel_tex_primitive_pdf:nnn { snapycomp } { extension } { 35 } +\__unravel_tex_primitive_pdf:nnn { glyphtounicode} { extension } { 36 } +\__unravel_tex_primitive_pdf:nnn { colorstack } { extension } { 37 } +\__unravel_tex_primitive_pdf:nnn { setmatrix } { extension } { 38 } +\__unravel_tex_primitive_pdf:nnn { save } { extension } { 39 } +\__unravel_tex_primitive_pdf:nnn { restore } { extension } { 40 } +\__unravel_tex_primitive_pdf:nnn { nobuiltintounicode } { extension } { 41 } \__unravel_tex_primitive:nnn { openin } { in_stream } { 1 } \__unravel_tex_primitive:nnn { closein } { in_stream } { 0 } \__unravel_tex_primitive:nnn { begingroup } { begin_group } { 0 } @@ -905,20 +967,20 @@ \__unravel_tex_primitive:nnn { lastnodetype } { last_item } { 3 } \__unravel_tex_primitive:nnn { inputlineno } { last_item } { 4 } \__unravel_tex_primitive:nnn { badness } { last_item } { 5 } -\__unravel_tex_primitive:nnn { pdftexversion } { last_item } { 6 } -\__unravel_tex_primitive:nnn { pdflastobj } { last_item } { 7 } -\__unravel_tex_primitive:nnn { pdflastxform } { last_item } { 8 } -\__unravel_tex_primitive:nnn { pdflastximage } { last_item } { 9 } -\__unravel_tex_primitive:nnn { pdflastximagepages } { last_item } { 10 } -\__unravel_tex_primitive:nnn { pdflastannot } { last_item } { 11 } -\__unravel_tex_primitive:nnn { pdflastxpos } { last_item } { 12 } -\__unravel_tex_primitive:nnn { pdflastypos } { last_item } { 13 } -\__unravel_tex_primitive:nnn { pdfretval } { last_item } { 14 } -\__unravel_tex_primitive:nnn { pdflastximagecolordepth } { last_item } { 15 } -\__unravel_tex_primitive:nnn { pdfelapsedtime } { last_item } { 16 } -\__unravel_tex_primitive:nnn { pdfshellescape } { last_item } { 17 } -\__unravel_tex_primitive:nnn { pdfrandomseed } { last_item } { 18 } -\__unravel_tex_primitive:nnn { pdflastlink } { last_item } { 19 } +\__unravel_tex_primitive_pdf:nnn { texversion } { last_item } { 6 } +\__unravel_tex_primitive_pdf:nnn { lastobj } { last_item } { 7 } +\__unravel_tex_primitive_pdf:nnn { lastxform } { last_item } { 8 } +\__unravel_tex_primitive_pdf:nnn { lastximage } { last_item } { 9 } +\__unravel_tex_primitive_pdf:nnn { lastximagepages } { last_item } { 10 } +\__unravel_tex_primitive_pdf:nnn { lastannot } { last_item } { 11 } +\__unravel_tex_primitive_pdf:nnn { lastxpos } { last_item } { 12 } +\__unravel_tex_primitive_pdf:nnn { lastypos } { last_item } { 13 } +\__unravel_tex_primitive_pdf:nnn { retval } { last_item } { 14 } +\__unravel_tex_primitive_pdf:nnn { lastximagecolordepth } { last_item } { 15 } +\__unravel_tex_primitive_pdf:nnn { elapsedtime } { last_item } { 16 } +\__unravel_tex_primitive_pdf:nnn { shellescape } { last_item } { 17 } +\__unravel_tex_primitive_pdf:nnn { randomseed } { last_item } { 18 } +\__unravel_tex_primitive_pdf:nnn { lastlink } { last_item } { 19 } \__unravel_tex_primitive:nnn { eTeXversion } { last_item } { 20 } \__unravel_tex_primitive:nnn { currentgrouplevel } { last_item } { 21 } \__unravel_tex_primitive:nnn { currentgrouptype } { last_item } { 22 } @@ -952,10 +1014,10 @@ \__unravel_tex_primitive:nnn { everyjob } { assign_toks } { 7 } \__unravel_tex_primitive:nnn { everycr } { assign_toks } { 8 } \__unravel_tex_primitive:nnn { errhelp } { assign_toks } { 9 } -\__unravel_tex_primitive:nnn { pdfpagesattr } { assign_toks } { 10 } -\__unravel_tex_primitive:nnn { pdfpageattr } { assign_toks } { 11 } -\__unravel_tex_primitive:nnn { pdfpageresources } { assign_toks } { 12 } -\__unravel_tex_primitive:nnn { pdfpkmode } { assign_toks } { 13 } +\__unravel_tex_primitive_pdf:nnn { pagesattr } { assign_toks } { 10 } +\__unravel_tex_primitive_pdf:nnn { pageattr } { assign_toks } { 11 } +\__unravel_tex_primitive_pdf:nnn { pageresources } { assign_toks } { 12 } +\__unravel_tex_primitive_pdf:nnn { pkmode } { assign_toks } { 13 } \__unravel_tex_primitive:nnn { everyeof } { assign_toks } { 14 } \__unravel_tex_primitive:nnn { pretolerance } { assign_int } { 0 } \__unravel_tex_primitive:nnn { tolerance } { assign_int } { 1 } @@ -1013,38 +1075,38 @@ \__unravel_tex_primitive:nnn { holdinginserts } { assign_int } { 53 } \__unravel_tex_primitive:nnn { errorcontextlines } { assign_int } { 54 } \__unravel_tex_primitive:nnn { pdfoutput } { assign_int } { 55 } -\__unravel_tex_primitive:nnn { pdfcompresslevel } { assign_int } { 56 } -\__unravel_tex_primitive:nnn { pdfdecimaldigits } { assign_int } { 57 } -\__unravel_tex_primitive:nnn { pdfmovechars } { assign_int } { 58 } -\__unravel_tex_primitive:nnn { pdfimageresolution } { assign_int } { 59 } -\__unravel_tex_primitive:nnn { pdfpkresolution } { assign_int } { 60 } -\__unravel_tex_primitive:nnn { pdfuniqueresname } { assign_int } { 61 } -\__unravel_tex_primitive:nnn - { pdfoptionalwaysusepdfpagebox } { assign_int } { 62 } -\__unravel_tex_primitive:nnn - { pdfoptionpdfinclusionerrorlevel } { assign_int } { 63 } -\__unravel_tex_primitive:nnn - { pdfoptionpdfminorversion } { assign_int } { 64 } -\__unravel_tex_primitive:nnn { pdfminorversion } { assign_int } { 64 } -\__unravel_tex_primitive:nnn { pdfforcepagebox } { assign_int } { 65 } -\__unravel_tex_primitive:nnn { pdfpagebox } { assign_int } { 66 } -\__unravel_tex_primitive:nnn - { pdfinclusionerrorlevel } { assign_int } { 67 } -\__unravel_tex_primitive:nnn { pdfgamma } { assign_int } { 68 } -\__unravel_tex_primitive:nnn { pdfimagegamma } { assign_int } { 69 } -\__unravel_tex_primitive:nnn { pdfimagehicolor } { assign_int } { 70 } -\__unravel_tex_primitive:nnn { pdfimageapplygamma } { assign_int } { 71 } -\__unravel_tex_primitive:nnn { pdfadjustspacing } { assign_int } { 72 } -\__unravel_tex_primitive:nnn { pdfprotrudechars } { assign_int } { 73 } -\__unravel_tex_primitive:nnn { pdftracingfonts } { assign_int } { 74 } -\__unravel_tex_primitive:nnn { pdfobjcompresslevel } { assign_int } { 75 } -\__unravel_tex_primitive:nnn - { pdfadjustinterwordglue } { assign_int } { 76 } -\__unravel_tex_primitive:nnn { pdfprependkern } { assign_int } { 77 } -\__unravel_tex_primitive:nnn { pdfappendkern } { assign_int } { 78 } -\__unravel_tex_primitive:nnn { pdfgentounicode } { assign_int } { 79 } -\__unravel_tex_primitive:nnn { pdfdraftmode } { assign_int } { 80 } -\__unravel_tex_primitive:nnn { pdfinclusioncopyfonts } { assign_int } { 81 } +\__unravel_tex_primitive_pdf:nnn { compresslevel } { assign_int } { 56 } +\__unravel_tex_primitive_pdf:nnn { decimaldigits } { assign_int } { 57 } +\__unravel_tex_primitive_pdf:nnn { movechars } { assign_int } { 58 } +\__unravel_tex_primitive_pdf:nnn { imageresolution } { assign_int } { 59 } +\__unravel_tex_primitive_pdf:nnn { pkresolution } { assign_int } { 60 } +\__unravel_tex_primitive_pdf:nnn { uniqueresname } { assign_int } { 61 } +\__unravel_tex_primitive_pdf:nnn + { optionalwaysusepdfpagebox } { assign_int } { 62 } +\__unravel_tex_primitive_pdf:nnn + { optionpdfinclusionerrorlevel } { assign_int } { 63 } +\__unravel_tex_primitive_pdf:nnn + { optionpdfminorversion } { assign_int } { 64 } +\__unravel_tex_primitive_pdf:nnn { minorversion } { assign_int } { 64 } +\__unravel_tex_primitive_pdf:nnn { forcepagebox } { assign_int } { 65 } +\__unravel_tex_primitive_pdf:nnn { pagebox } { assign_int } { 66 } +\__unravel_tex_primitive_pdf:nnn + { inclusionerrorlevel } { assign_int } { 67 } +\__unravel_tex_primitive_pdf:nnn { gamma } { assign_int } { 68 } +\__unravel_tex_primitive_pdf:nnn { imagegamma } { assign_int } { 69 } +\__unravel_tex_primitive_pdf:nnn { imagehicolor } { assign_int } { 70 } +\__unravel_tex_primitive_pdf:nnn { imageapplygamma } { assign_int } { 71 } +\__unravel_tex_primitive_pdf:nnn { adjustspacing } { assign_int } { 72 } +\__unravel_tex_primitive_pdf:nnn { protrudechars } { assign_int } { 73 } +\__unravel_tex_primitive_pdf:nnn { tracingfonts } { assign_int } { 74 } +\__unravel_tex_primitive_pdf:nnn { objcompresslevel } { assign_int } { 75 } +\__unravel_tex_primitive_pdf:nnn + { adjustinterwordglue } { assign_int } { 76 } +\__unravel_tex_primitive_pdf:nnn { prependkern } { assign_int } { 77 } +\__unravel_tex_primitive_pdf:nnn { appendkern } { assign_int } { 78 } +\__unravel_tex_primitive_pdf:nnn { gentounicode } { assign_int } { 79 } +\__unravel_tex_primitive_pdf:nnn { draftmode } { assign_int } { 80 } +\__unravel_tex_primitive_pdf:nnn { inclusioncopyfonts } { assign_int } { 81 } \__unravel_tex_primitive:nnn { tracingassigns } { assign_int } { 82 } \__unravel_tex_primitive:nnn { tracinggroups } { assign_int } { 83 } \__unravel_tex_primitive:nnn { tracingifs } { assign_int } { 84 } @@ -1076,19 +1138,19 @@ \__unravel_tex_primitive:nnn { hoffset } { assign_dimen } { 18 } \__unravel_tex_primitive:nnn { voffset } { assign_dimen } { 19 } \__unravel_tex_primitive:nnn { emergencystretch } { assign_dimen } { 20 } -\__unravel_tex_primitive:nnn { pdfhorigin } { assign_dimen } { 21 } -\__unravel_tex_primitive:nnn { pdfvorigin } { assign_dimen } { 22 } -\__unravel_tex_primitive:nnn { pdfpagewidth } { assign_dimen } { 23 } -\__unravel_tex_primitive:nnn { pdfpageheight } { assign_dimen } { 24 } -\__unravel_tex_primitive:nnn { pdflinkmargin } { assign_dimen } { 25 } -\__unravel_tex_primitive:nnn { pdfdestmargin } { assign_dimen } { 26 } -\__unravel_tex_primitive:nnn { pdfthreadmargin } { assign_dimen } { 27 } -\__unravel_tex_primitive:nnn { pdffirstlineheight } { assign_dimen } { 28 } -\__unravel_tex_primitive:nnn { pdflastlinedepth } { assign_dimen } { 29 } -\__unravel_tex_primitive:nnn { pdfeachlineheight } { assign_dimen } { 30 } -\__unravel_tex_primitive:nnn { pdfeachlinedepth } { assign_dimen } { 31 } -\__unravel_tex_primitive:nnn { pdfignoreddimen } { assign_dimen } { 32 } -\__unravel_tex_primitive:nnn { pdfpxdimen } { assign_dimen } { 33 } +\__unravel_tex_primitive_pdf:nnn { horigin } { assign_dimen } { 21 } +\__unravel_tex_primitive_pdf:nnn { vorigin } { assign_dimen } { 22 } +\__unravel_tex_primitive_pdf:nnn { pagewidth } { assign_dimen } { 23 } +\__unravel_tex_primitive_pdf:nnn { pageheight } { assign_dimen } { 24 } +\__unravel_tex_primitive_pdf:nnn { linkmargin } { assign_dimen } { 25 } +\__unravel_tex_primitive_pdf:nnn { destmargin } { assign_dimen } { 26 } +\__unravel_tex_primitive_pdf:nnn { threadmargin } { assign_dimen } { 27 } +\__unravel_tex_primitive_pdf:nnn { firstlineheight } { assign_dimen } { 28 } +\__unravel_tex_primitive_pdf:nnn { lastlinedepth } { assign_dimen } { 29 } +\__unravel_tex_primitive_pdf:nnn { eachlineheight } { assign_dimen } { 30 } +\__unravel_tex_primitive_pdf:nnn { eachlinedepth } { assign_dimen } { 31 } +\__unravel_tex_primitive_pdf:nnn { ignoreddimen } { assign_dimen } { 32 } +\__unravel_tex_primitive_pdf:nnn { pxdimen } { assign_dimen } { 33 } \__unravel_tex_primitive:nnn { lineskip } { assign_glue } { 0 } \__unravel_tex_primitive:nnn { baselineskip } { assign_glue } { 1 } \__unravel_tex_primitive:nnn { parskip } { assign_glue } { 2 } @@ -1114,7 +1176,7 @@ \__unravel_tex_primitive:nnn { rpcode } { assign_font_int } { 3 } \__unravel_tex_primitive:nnn { efcode } { assign_font_int } { 4 } \__unravel_tex_primitive:nnn { tagcode } { assign_font_int } { 5 } -\__unravel_tex_primitive:nnn { pdfnoligatures } { assign_font_int } { 6 } +\__unravel_tex_primitive_pdf:nnn { noligatures } { assign_font_int } { 6 } \__unravel_tex_primitive:nnn { knbscode } { assign_font_int } { 7 } \__unravel_tex_primitive:nnn { stbscode } { assign_font_int } { 8 } \__unravel_tex_primitive:nnn { shbscode } { assign_font_int } { 9 } @@ -1187,12 +1249,12 @@ \__unravel_tex_primitive:nnn { scrollmode } { set_interaction } { 2 } \__unravel_tex_primitive:nnn { errorstopmode } { set_interaction } { 3 } \__unravel_tex_primitive:nnn { letterspacefont } { letterspace_font } { 0 } -\__unravel_tex_primitive:nnn { pdfcopyfont } { pdf_copy_font } { 0 } +\__unravel_tex_primitive_pdf:nnn { copyfont } { pdf_copy_font } { 0 } \__unravel_tex_primitive:nnn { undefined } { undefined_cs } { 0 } \__unravel_tex_primitive:nnn { ndefined } { undefined_cs } { 0 } \__unravel_tex_primitive:nnn { expandafter } { expand_after } { 0 } \__unravel_tex_primitive:nnn { unless } { expand_after } { 1 } -\__unravel_tex_primitive:nnn { pdfprimitive } { no_expand } { 1 } +\__unravel_tex_primitive_pdf:nnn { primitive } { no_expand } { 1 } \__unravel_tex_primitive:nnn { noexpand } { no_expand } { 0 } \__unravel_tex_primitive:nnn { input } { input } { 0 } \__unravel_tex_primitive:nnn { endinput } { input } { 1 } @@ -1203,12 +1265,12 @@ \__unravel_tex_primitive:nnn { ifdim } { if_test } { 3 } \__unravel_tex_primitive:nnn { ifodd } { if_test } { 4 } \__unravel_tex_primitive:nnn { ifvmode } { if_test } { 5 } -\__unravel_tex_primitive:nnn { ifhmode } { if_test } { 6 } -\__unravel_tex_primitive:nnn { ifmmode } { if_test } { 7 } -\__unravel_tex_primitive:nnn { ifinner } { if_test } { 8 } +\__unravel_tex_primitive:nnn { ifhmode } { if_test } { 5 } +\__unravel_tex_primitive:nnn { ifmmode } { if_test } { 5 } +\__unravel_tex_primitive:nnn { ifinner } { if_test } { 5 } \__unravel_tex_primitive:nnn { ifvoid } { if_test } { 9 } -\__unravel_tex_primitive:nnn { ifhbox } { if_test } { 10 } -\__unravel_tex_primitive:nnn { ifvbox } { if_test } { 11 } +\__unravel_tex_primitive:nnn { ifhbox } { if_test } { 9 } +\__unravel_tex_primitive:nnn { ifvbox } { if_test } { 9 } \__unravel_tex_primitive:nnn { ifx } { if_test } { 12 } \__unravel_tex_primitive:nnn { ifeof } { if_test } { 13 } \__unravel_tex_primitive:nnn { iftrue } { if_test } { 14 } @@ -1218,46 +1280,62 @@ \__unravel_tex_primitive:nnn { ifcsname } { if_test } { 18 } \__unravel_tex_primitive:nnn { iffontchar } { if_test } { 19 } \__unravel_tex_primitive:nnn { ifincsname } { if_test } { 20 } +\__unravel_tex_primitive:nnn { ifprimitive } { if_test } { 21 } \__unravel_tex_primitive:nnn { ifpdfprimitive } { if_test } { 21 } +\__unravel_tex_primitive:nnn { ifabsnum } { if_test } { 22 } \__unravel_tex_primitive:nnn { ifpdfabsnum } { if_test } { 22 } +\__unravel_tex_primitive:nnn { ifabsdim } { if_test } { 23 } \__unravel_tex_primitive:nnn { ifpdfabsdim } { if_test } { 23 } +\bool_if:nT { \sys_if_engine_ptex_p: || \sys_if_engine_uptex_p: } + { + \__unravel_tex_primitive:nnn { iftdir } { if_test } { 5 } + \__unravel_tex_primitive:nnn { ifydir } { if_test } { 5 } + \__unravel_tex_primitive:nnn { ifddir } { if_test } { 5 } + \__unravel_tex_primitive:nnn { ifmdir } { if_test } { 5 } + \__unravel_tex_primitive:nnn { iftbox } { if_test } { 9 } + \__unravel_tex_primitive:nnn { ifybox } { if_test } { 9 } + \__unravel_tex_primitive:nnn { ifdbox } { if_test } { 9 } + \__unravel_tex_primitive:nnn { ifmbox } { if_test } { 9 } + \__unravel_tex_primitive:nnn { ifjfont } { if_test } { 24 } + \__unravel_tex_primitive:nnn { iftfont } { if_test } { 24 } + } \__unravel_tex_primitive:nnn { fi } { fi_or_else } { 2 } \__unravel_tex_primitive:nnn { else } { fi_or_else } { 3 } \__unravel_tex_primitive:nnn { or } { fi_or_else } { 4 } \__unravel_tex_primitive:nnn { csname } { cs_name } { 0 } +\__unravel_tex_primitive:nnn { lastnamedcs } { cs_name } { 1 } \__unravel_tex_primitive:nnn { number } { convert } { 0 } \__unravel_tex_primitive:nnn { romannumeral } { convert } { 1 } \__unravel_tex_primitive:nnn { string } { convert } { 2 } \__unravel_tex_primitive:nnn { meaning } { convert } { 3 } \__unravel_tex_primitive:nnn { fontname } { convert } { 4 } \__unravel_tex_primitive:nnn { eTeXrevision } { convert } { 5 } -\__unravel_tex_primitive:nnn { pdftexrevision } { convert } { 6 } -\__unravel_tex_primitive:nnn { pdftexbanner } { convert } { 7 } +\__unravel_tex_primitive_pdf:nnn { texrevision } { convert } { 6 } +\__unravel_tex_primitive_pdf:nnn { texbanner } { convert } { 7 } \__unravel_tex_primitive:nnn { pdffontname } { convert } { 8 } -\__unravel_tex_primitive:nnn { pdffontobjnum } { convert } { 9 } -\__unravel_tex_primitive:nnn { pdffontsize } { convert } { 10 } -\__unravel_tex_primitive:nnn { pdfpageref } { convert } { 11 } -\__unravel_tex_primitive:nnn { pdfxformname } { convert } { 12 } -\__unravel_tex_primitive:nnn { pdfescapestring } { convert } { 13 } -\__unravel_tex_primitive:nnn { pdfescapename } { convert } { 14 } +\__unravel_tex_primitive_pdf:nnn { fontobjnum } { convert } { 9 } +\__unravel_tex_primitive_pdf:nnn { fontsize } { convert } { 10 } +\__unravel_tex_primitive_pdf:nnn { pageref } { convert } { 11 } +\__unravel_tex_primitive_pdf:nnn { xformname } { convert } { 12 } +\__unravel_tex_primitive_pdf:nnn { escapestring } { convert } { 13 } +\__unravel_tex_primitive_pdf:nnn { escapename } { convert } { 14 } \__unravel_tex_primitive:nnn { leftmarginkern } { convert } { 15 } \__unravel_tex_primitive:nnn { rightmarginkern } { convert } { 16 } -\__unravel_tex_primitive:nnn - { \sys_if_engine_xetex:F { pdf } strcmp } { convert } { 17 } -\__unravel_tex_primitive:nnn { pdfcolorstackinit } { convert } { 18 } -\__unravel_tex_primitive:nnn { pdfescapehex } { convert } { 19 } -\__unravel_tex_primitive:nnn { pdfunescapehex } { convert } { 20 } -\__unravel_tex_primitive:nnn { pdfcreationdate } { convert } { 21 } -\__unravel_tex_primitive:nnn { pdffilemoddate } { convert } { 22 } -\__unravel_tex_primitive:nnn { pdffilesize } { convert } { 23 } -\__unravel_tex_primitive:nnn { pdfmdfivesum } { convert } { 24 } -\__unravel_tex_primitive:nnn { pdffiledump } { convert } { 25 } -\__unravel_tex_primitive:nnn { pdfmatch } { convert } { 26 } -\__unravel_tex_primitive:nnn { pdflastmatch } { convert } { 27 } -\__unravel_tex_primitive:nnn { pdfuniformdeviate } { convert } { 28 } -\__unravel_tex_primitive:nnn { pdfnormaldeviate } { convert } { 29 } -\__unravel_tex_primitive:nnn { pdfinsertht } { convert } { 30 } -\__unravel_tex_primitive:nnn { pdfximagebbox } { convert } { 31 } +\__unravel_tex_primitive_pdf:nnn { strcmp } { convert } { 17 } +\__unravel_tex_primitive_pdf:nnn { colorstackinit } { convert } { 18 } +\__unravel_tex_primitive_pdf:nnn { escapehex } { convert } { 19 } +\__unravel_tex_primitive_pdf:nnn { unescapehex } { convert } { 20 } +\__unravel_tex_primitive_pdf:nnn { creationdate } { convert } { 21 } +\__unravel_tex_primitive_pdf:nnn { filemoddate } { convert } { 22 } +\__unravel_tex_primitive_pdf:nnn { filesize } { convert } { 23 } +\__unravel_tex_primitive_pdf:nnn { mdfivesum } { convert } { 24 } +\__unravel_tex_primitive_pdf:nnn { filedump } { convert } { 25 } +\__unravel_tex_primitive_pdf:nnn { match } { convert } { 26 } +\__unravel_tex_primitive_pdf:nnn { lastmatch } { convert } { 27 } +\__unravel_tex_primitive_pdf:nnn { uniformdeviate } { convert } { 28 } +\__unravel_tex_primitive_pdf:nnn { normaldeviate } { convert } { 29 } +\__unravel_tex_primitive_pdf:nnn { insertht } { convert } { 30 } +\__unravel_tex_primitive_pdf:nnn { ximagebbox } { convert } { 31 } \__unravel_tex_primitive:nnn { jobname } { convert } { 32 } \sys_if_engine_luatex:T { \__unravel_tex_primitive:nnn { directlua } { convert } { 33 } } @@ -1426,12 +1504,29 @@ \int_set:Nn \l__unravel_head_cmd_int { \__unravel_tex_use:n { call } } \int_zero:N \l__unravel_head_char_int } -\cs_new_protected:Npn \__unravel_set_cmd_aux_unknown: +\sys_if_engine_luatex:TF + { + \cs_new_protected:Npn \__unravel_set_cmd_aux_unknown: + { + \exp_last_unbraced:NV \__unravel_set_cmd_aux_primitive:nn + \c__unravel_tex_relax_tl + \__unravel_tl_if_in:ooTF \l__unravel_head_meaning_tl + { \tl_to_str:n { xpandable~luacall } } + { } + { + \__unravel_error:nxxxx { unknown-primitive } + { \l__unravel_head_meaning_tl } { } { } { } + } + } + } { - \exp_last_unbraced:NV \__unravel_set_cmd_aux_primitive:nn - \c__unravel_tex_relax_tl - \__unravel_error:nxxxx { unknown-primitive } - { \l__unravel_head_meaning_tl } { } { } { } + \cs_new_protected:Npn \__unravel_set_cmd_aux_unknown: + { + \exp_last_unbraced:NV \__unravel_set_cmd_aux_primitive:nn + \c__unravel_tex_relax_tl + \__unravel_error:nxxxx { unknown-primitive } + { \l__unravel_head_meaning_tl } { } { } { } + } } \cs_new_protected:Npn \__unravel_set_cmd_aux_cs: { @@ -1820,8 +1915,7 @@ { \__unravel_error:nxxxx { internal } { expandable } { } { } { } } } { - \__unravel_error:nxxxx { unknown-primitive } - { \l__unravel_head_meaning_tl } { } { } { } + \__unravel_set_cmd_aux_unknown: \__unravel_input_gpop_tl:N \l__unravel_tmpa_tl \tl_put_right:NV \l__unravel_head_tl \l__unravel_tmpa_tl \exp_args:NV \__unravel_back_input:o \l__unravel_head_tl @@ -2006,7 +2100,7 @@ \__unravel_scan_int: \__unravel_scan_font_ident: } -\cs_new_protected:Npn \__unravel_scan_something_internal:n #1 +\cs_new_protected:Npn \__unravel_rescan_something_internal:n #1 { \__unravel_set_cmd: \__unravel_set_action_text: @@ -2021,13 +2115,13 @@ \__unravel_back_input: \__unravel_tex_error:nV { missing-number } \l__unravel_head_tl \__unravel_thing_use_get:nnNN { 1 } {#3} \c_zero_dim \l__unravel_tmpa_tl - \__unravel_scan_something_internal_auxii:Vn \l__unravel_tmpa_tl { 1 } + \__unravel_rescan_something_internal_auxii:Vn \l__unravel_tmpa_tl { 1 } \__unravel_break:w } \int_compare:nNnT {#1} = { 8 } { \__unravel_tex_error:nV { the-cannot } \l__unravel_head_tl - \__unravel_scan_something_internal_auxii:nn 0 { 0 } + \__unravel_rescan_something_internal_auxii:nn 0 { 0 } \__unravel_break:w } \tl_if_empty:nF {#2} @@ -2040,11 +2134,11 @@ \int_compare:nNnTF {#3} < { 4 } { \__unravel_thing_use_get:nnNN {#1} {#3} \l__unravel_head_tl \l__unravel_tmpa_tl } { \tl_set:Nx \l__unravel_tmpa_tl { \__unravel_the:w \l__unravel_head_tl } } - \__unravel_scan_something_internal_auxii:Vn \l__unravel_tmpa_tl {#1} + \__unravel_rescan_something_internal_auxii:Vn \l__unravel_tmpa_tl {#1} \__unravel_break_point: \int_compare:nNnT {#3} < { 4 } { \__unravel_print_action: } } -\cs_new_protected:Npn \__unravel_scan_something_internal_auxii:nn #1#2 +\cs_new_protected:Npn \__unravel_rescan_something_internal_auxii:nn #1#2 { \__unravel_prev_input_silent:n {#1} \__unravel_set_action_text: @@ -2052,7 +2146,7 @@ { \g__unravel_action_text_str \use:n { ~ => ~ } \tl_to_str:n {#1} } \int_gset:Nn \g__unravel_val_level_int {#2} } -\cs_generate_variant:Nn \__unravel_scan_something_internal_auxii:nn { V } +\cs_generate_variant:Nn \__unravel_rescan_something_internal_auxii:nn { V } \cs_new:Npn \__unravel_thing_case: { \int_case:nnF \l__unravel_head_cmd_int @@ -2259,7 +2353,7 @@ \__unravel_scan_signs: \__unravel_set_cmd: \__unravel_cmd_if_internal:TF - { \__unravel_scan_something_internal:n { 0 } } + { \__unravel_rescan_something_internal:n { 0 } } { \__unravel_scan_int_char: } } \cs_new_protected:Npn \__unravel_scan_int_char: @@ -2330,8 +2424,8 @@ \__unravel_cmd_if_internal:TF { \int_compare:nNnTF {#1} = { 3 } - { \__unravel_scan_something_internal:n { 3 } } - { \__unravel_scan_something_internal:n { 1 } } + { \__unravel_rescan_something_internal:n { 3 } } + { \__unravel_rescan_something_internal:n { 1 } } \int_compare:nNnT \g__unravel_val_level_int = { 0 } { \__unravel_scan_dim_unit:nN {#1} #2 } } @@ -2384,7 +2478,7 @@ \__unravel_cmd_if_internal:TF { \__unravel_prev_input_gpush: - \__unravel_scan_something_internal:n {#1} + \__unravel_rescan_something_internal:n {#1} \int_compare:nNnTF \g__unravel_val_level_int = { 0 } { \__unravel_prev_input_join_get:nnN {#1} { sp } \l__unravel_tmpa_tl } { \__unravel_prev_input_join_get:nnN {#1} { } \l__unravel_tmpa_tl } @@ -2451,7 +2545,7 @@ \__unravel_set_cmd: \__unravel_cmd_if_internal:TF { - \__unravel_scan_something_internal:n {#1} + \__unravel_rescan_something_internal:n {#1} \int_case:nnF \g__unravel_val_level_int { { 0 } { \__unravel_scan_dim_unit:nN {#1} \c_false_bool } @@ -2473,11 +2567,18 @@ } \cs_new_protected:Npn \__unravel_scan_file_name: { - \bool_gset_true:N \g__unravel_name_in_progress_bool - \__unravel_get_x_non_blank: - \__unravel_scan_file_name_loop: - \bool_gset_false:N \g__unravel_name_in_progress_bool - \__unravel_prev_input_silent:n { ~ } + \__unravel_get_x_non_relax: + \token_if_eq_catcode:NNTF \l__unravel_head_token \c_group_begin_token + { \__unravel_scan_group_x:N \c_false_bool } + { + \__unravel_back_input: + \bool_gset_true:N \g__unravel_name_in_progress_bool + \bool_gset_false:N \g__unravel_quotes_bool + \__unravel_get_x_non_blank: + \__unravel_scan_file_name_loop: + \bool_gset_false:N \g__unravel_name_in_progress_bool + \__unravel_prev_input_silent:n { ~ } + } } \cs_new_protected:Npn \__unravel_scan_file_name_loop: { @@ -2486,7 +2587,13 @@ { \tl_set:Nx \l__unravel_tmpa_tl { \__unravel_token_to_char:N \l__unravel_head_token } - \tl_if_eq:NNF \l__unravel_tmpa_tl \c_space_tl + \tl_if_eq:NNT \l__unravel_tmpa_tl \c__unravel_dq_tl + { + \bool_if:NTF \g__unravel_quotes_bool + { \bool_set_false:N } { \bool_set_true:N } \g__unravel_quotes_bool + } + \bool_if:NTF \g__unravel_quotes_bool + { \use:n } { \tl_if_eq:NNF \l__unravel_tmpa_tl \c_space_tl } { \__unravel_prev_input_silent:V \l__unravel_tmpa_tl \__unravel_get_x_next: @@ -2494,6 +2601,7 @@ } } } +\bool_new:N \g__unravel_quotes_bool \cs_new_protected:Npn \__unravel_scan_r_token: { \bool_do_while:nn @@ -2734,7 +2842,6 @@ \token_if_eq_meaning:NNTF \l__unravel_head_token \__unravel_hbox:w { \__unravel_box_hook:N \tex_everyhbox:D } { \__unravel_box_hook:N \tex_everyvbox:D } - % ^^A todo: TeX calls |normal_paragraph| here. \__unravel_scan_spec: \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_set_action_text:x @@ -2795,24 +2902,31 @@ { \tex_char:D #1 \scan_stop: \__unravel_charcode_if_safe:nTF {#1} - { \tl_set:Nx \l__unravel_tmpa_tl { \char_generate:nn {#1} { 12 } } } + { + \tl_set:Nx \l__unravel_tmpa_tl { \char_generate:nn {#1} { 12 } } + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_tmpa_tl + \__unravel_print_action:x { \tl_to_str:N \l__unravel_tmpa_tl } + } { \tl_set:Nx \l__unravel_tmpa_tl { \exp_not:N \char \int_eval:n {#1} ~ } + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_tmpa_tl + \__unravel_print_action:x + { " \char_generate:nn {#1} { 12 } " = \tl_to_str:N \l__unravel_tmpa_tl } } - \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_tmpa_tl - \__unravel_print_action:x { \tl_to_str:N \l__unravel_tmpa_tl } } \cs_generate_variant:Nn \__unravel_char:n { V } \cs_new_protected:Npn \__unravel_char:x { \__unravel_exp_args:Nx \__unravel_char:n } \cs_new_protected:Npn \__unravel_char_in_mmode:n #1 { - \int_compare:nNnTF { \tex_mathcode:D #1 } = { "8000 } + \int_compare:nNnTF { \tex_mathcode:D #1 } + = { \sys_if_engine_luatex:TF { "1000000 } { "8000 } } { % math active - \__unravel_exp_args:NNx \gtl_set:Nn \l__unravel_head_gtl - { \char_generate:nn {#1} { 12 } } + \__unravel_active_do:nn {#1} { \gtl_set:Nn \l__unravel_head_gtl } \__unravel_back_input: + \__unravel_print_action:x + { \char_generate:nn {#1} { 12 } ~ active } } { \__unravel_char:n {#1} } } @@ -2823,7 +2937,7 @@ { \tex_mathchar:D #1 \scan_stop: \tl_set:Nx \l__unravel_tmpa_tl - { \exp_not:N \mathchar \int_eval:n {#1} ~ } + { \exp_not:N \mathchar " \int_to_hex:n {#1} ~ } \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_tmpa_tl \__unravel_print_action:x { \tl_to_str:N \l__unravel_tmpa_tl } } @@ -2842,9 +2956,9 @@ \token_to_str:N \everypar = { \tl_to_str:N \l__unravel_tmpa_tl } } } -\cs_new_protected:Npn \__unravel_end_graf: - { \mode_if_horizontal:T { \__unravel_normal_paragraph: } } -\cs_new_protected:Npn \__unravel_normal_paragraph: +\cs_new_protected:Npn \__unravel_par_if_hmode: + { \mode_if_horizontal:T { \__unravel_par: } } +\cs_new_protected:Npn \__unravel_par: { \tex_par:D \gtl_gput_right:Nn \g__unravel_output_gtl { \par } @@ -2853,28 +2967,34 @@ \cs_new_protected:Npn \__unravel_build_page: { } +\int_new:N \l__unravel_choice_int \cs_new_protected:Npn \__unravel_handle_right_brace: { \int_compare:nTF { 1 <= \__unravel_currentgrouptype: <= 13 } { \gtl_gconcat:NNN \g__unravel_output_gtl \g__unravel_output_gtl \c_group_end_gtl - \__unravel_back_input_gtl:N \l__unravel_after_group_gtl + \int_case:nnF \__unravel_currentgrouptype: + { + { 10 } { } % disc + { 13 } { } % math_choice + } + { \__unravel_back_input_gtl:N \l__unravel_after_group_gtl } \int_case:nn \__unravel_currentgrouptype: { { 1 } { \__unravel_end_simple_group: } % simple { 2 } { \__unravel_end_box_group: } % hbox { 3 } { \__unravel_end_box_group: } % adjusted_hbox - { 4 } { \__unravel_end_graf: \__unravel_end_box_group: } % vbox - { 5 } { \__unravel_end_graf: \__unravel_end_box_group: } % vtop + { 4 } { \__unravel_par_if_hmode: \__unravel_end_box_group: } % vbox + { 5 } { \__unravel_par_if_hmode: \__unravel_end_box_group: } % vtop { 6 } { \__unravel_end_align_group: } % align { 7 } { \__unravel_end_no_align_group: } % no_align { 8 } { \__unravel_end_output_group: } % output { 9 } { \__unravel_end_simple_group: } % math - { 10 } { \__unravel_end_disc_group: } % disc - { 11 } { \__unravel_end_graf: \__unravel_end_simple_group: } % insert - { 12 } { \__unravel_end_graf: \__unravel_end_simple_group: } % vcenter - { 13 } { \__unravel_end_math_choice_group: } % math_choice + { 10 } { \__unravel_end_choice_group:NN 2 \discretionary } % disc + { 11 } { \__unravel_par_if_hmode: \__unravel_end_simple_group: } % insert + { 12 } { \__unravel_par_if_hmode: \__unravel_end_simple_group: } % vcenter + { 13 } { \__unravel_end_choice_group:NN 3 \mathchoice } % math_choice } } { % bottom_level, semi_simple, math_shift, math_left @@ -2912,6 +3032,49 @@ } } } +\cs_new_protected:Npn \__unravel_end_align_group: + { + \__unravel_not_implemented:n { end_align_group } + \__unravel_end_simple_group: + } +\cs_new_protected:Npn \__unravel_end_no_align_group: + { + \__unravel_not_implemented:n { end_no_align_group } + \__unravel_end_simple_group: + } +\cs_new_protected:Npn \__unravel_end_output_group: + { + \__unravel_not_implemented:n { end_output_group } + \__unravel_end_simple_group: + } +\cs_new_protected:Npn \__unravel_end_choice_group:NN #1#2 + { + \int_compare:nNnTF \l__unravel_choice_int > {#1} + { + \__unravel_back_input_gtl:N \l__unravel_after_group_gtl + \c_group_end_token + \__unravel_print_action:x + { \token_to_str:N #2 \prg_replicate:nn { #1 + 1 } { {...} } } + } + { \exp_args:NV \__unravel_end_choice_group:nN \l__unravel_choice_int #2 } + } +\cs_new_protected:Npn \__unravel_end_choice_group:nN #1#2 + { + \__unravel_scan_left_brace: + \gtl_gconcat:NNN \g__unravel_output_gtl + \g__unravel_output_gtl \c_group_begin_gtl + \__unravel_back_input_gtl:N \l__unravel_after_group_gtl + \use:n \c_group_end_token + \use:n \c_group_begin_token + \int_set:Nn \l__unravel_choice_int { #1 + 1 } + \gtl_clear:N \l__unravel_after_group_gtl + \__unravel_print_action:x + { + \token_to_str:N #2 + \prg_replicate:nn {#1} { { ... } } + \iow_char:N \{ + } + } \cs_new_protected:Npn \__unravel_off_save: { \int_compare:nNnTF \__unravel_currentgrouptype: = { 0 } @@ -2984,11 +3147,8 @@ \cs_new_protected:Npn \__unravel_after_math: { \mode_if_inner:TF - { - \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl - \__unravel_back_input_gtl:N \l__unravel_after_group_gtl - $ % $ - } + { \int_compare:nNnTF \l__unravel_choice_int > 0 } + { \use_i:nn } { \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl \__unravel_get_x_next: @@ -3003,6 +3163,11 @@ \__unravel_back_input_gtl:N \l__unravel_after_group_gtl $ $ } + { + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \__unravel_back_input_gtl:N \l__unravel_after_group_gtl + $ % $ + } \__unravel_print_action: } \cs_new_protected:Npn \__unravel_forbidden_case: @@ -3073,6 +3238,10 @@ { \__unravel_prev_input_gpush:N \l__unravel_head_tl \__unravel_print_action: + \__unravel_do_one_atom: + } +\cs_new_protected:Npn \__unravel_do_one_atom: + { \__unravel_get_x_non_relax: \__unravel_set_cmd: \int_case:nnTF \l__unravel_head_cmd_int @@ -3115,7 +3284,12 @@ \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } } \__unravel_new_tex_cmd:nn { endv } % 9 - { \__unravel_not_implemented:n { alignments } } + { + \__unravel_mode_non_math:n + { + \__unravel_not_implemented:n { alignments } + } + } \__unravel_new_tex_cmd:nn { blank_char } % 10 { \mode_if_horizontal:T @@ -3142,10 +3316,10 @@ \__unravel_mode_non_math:n { \mode_if_vertical:TF - { \__unravel_normal_paragraph: } + { \__unravel_par: } { % if align_state<0 then off_save; - \__unravel_end_graf: + \__unravel_par_if_hmode: \mode_if_vertical:T { \mode_if_inner:F { \__unravel_build_page: } } } @@ -3252,7 +3426,7 @@ { 2 } { % showthe \__unravel_get_x_next: - \__unravel_scan_something_internal:n { 5 } + \__unravel_rescan_something_internal:n { 5 } \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_exp_args:Nx \use:n { \tex_showtokens:D { \tl_tail:N \l__unravel_head_tl } } @@ -3351,14 +3525,16 @@ { \__unravel_prev_input_gpush:N \l__unravel_head_tl \__unravel_print_action: - \__unravel_do_box:N \c_true_bool + \tl_if_head_eq_meaning:VNTF \l__unravel_head_tl \tex_shipout:D + { \__unravel_do_box:N \c_false_bool } + { \__unravel_do_box:N \c_true_bool } } \__unravel_new_tex_cmd:nn { halign } % 32 { \__unravel_not_implemented:n { halign } } \__unravel_new_tex_cmd:nn { valign } % 33 { \__unravel_not_implemented:n { valign } } \__unravel_new_tex_cmd:nn { no_align } % 34 - { \__unravel_not_implemented:n { noalign } } + { \l__unravel_head_token \__unravel_print_action: } \__unravel_new_tex_cmd:nn { vrule } % 35 { \__unravel_mode_non_vertical:n { \__unravel_do_rule: } } \__unravel_new_tex_cmd:nn { hrule } % 36 @@ -3373,11 +3549,33 @@ \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } } \__unravel_new_tex_cmd:nn { insert } % 37 - { \__unravel_begin_insert_or_adjust: } + { + \__unravel_prev_input_gpush:N \l__unravel_head_tl + \__unravel_print_action: + \__unravel_scan_int: + \__unravel_begin_insert_or_adjust: + } \__unravel_new_tex_cmd:nn { vadjust } % 38 { \mode_if_vertical:TF - { \__unravel_forbidden_case: } { \__unravel_begin_insert_or_adjust: } + { \__unravel_forbidden_case: } + { + \__unravel_prev_input_gpush:N \l__unravel_head_tl + \__unravel_print_action: + \__unravel_scan_keyword:nTF { pPrReE } + \__unravel_begin_insert_or_adjust: + } + } +\cs_new_protected:Npn \__unravel_begin_insert_or_adjust: + { + \__unravel_scan_left_brace: + \__unravel_prev_input_gpop:N \l__unravel_head_tl + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \gtl_gconcat:NNN \g__unravel_output_gtl + \g__unravel_output_gtl \c_group_begin_gtl + \tl_use:N \l__unravel_head_tl \c_group_begin_token + \__unravel_print_action:x + { \tl_to_str:N \l__unravel_head_tl \iow_char:N \{ } } \__unravel_new_tex_cmd:nn { ignore_spaces } % 39 { @@ -3492,11 +3690,7 @@ \__unravel_prev_input_gpush:N \l__unravel_head_tl \__unravel_print_action: \__unravel_scan_int: - \__unravel_scan_math: - \__unravel_prev_input_gpop:N \l__unravel_head_tl - \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl - \tl_use:N \l__unravel_head_tl \scan_stop: - \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } + \__unravel_do_one_atom: } \__unravel_new_tex_cmd:nn { accent } % 45 { @@ -3509,25 +3703,129 @@ \__unravel_new_tex_cmd:nn { math_accent } % 46 { \__unravel_mode_math:n { \__unravel_do_math_accent: } } \__unravel_new_tex_cmd:nn { discretionary } % 47 - { \__unravel_not_implemented:n { discretionary } } + { + \__unravel_mode_non_vertical:n + { + \int_compare:nNnTF \l__unravel_head_char_int = { 1 } + { \__unravel_output_head_token: } + { \__unravel_do_choice: } + } + } \__unravel_new_tex_cmd:nn { eq_no } % 48 - { \__unravel_not_implemented:n { eqno } } + { + \mode_if_math:TF + { + \mode_if_inner:TF + { \__unravel_off_save: } + { + \int_compare:nNnTF \tex_currentgrouptype:D = { 15 } + { + \__unravel_box_hook:N \tex_everymath:D + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \l__unravel_head_token + \__unravel_box_hook_end: + \int_set:Nn \l__unravel_choice_int { 1 } + } + { \__unravel_off_save: } + } + } + { \__unravel_forbidden_case: } + } \__unravel_new_tex_cmd:nn { left_right } % 49 - { \__unravel_not_implemented:n { left/right } } + { + \__unravel_mode_math:n + { + \__unravel_prev_input_gpush:N \l__unravel_head_tl + \__unravel_print_action: + \__unravel_scan_delimiter: + \__unravel_prev_input_gpop:N \l__unravel_head_tl + \tl_if_head_eq_meaning:nNTF \l__unravel_head_tl \tex_left:D + { + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \tl_use:N \l__unravel_head_tl \scan_stop: + \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } + } + { + \int_case:nnF \tex_currentgrouptype:D + { + { 16 } + { + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \__unravel_back_input_gtl:N \l__unravel_after_group_gtl + \tl_if_head_eq_meaning:nNTF \l__unravel_head_tl \tex_middle:D + { + \tl_use:N \l__unravel_head_tl \scan_stop: + \gtl_clear:N \l__unravel_after_group_gtl + } + { \tl_use:N \l__unravel_head_tl \scan_stop: } + \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } + } + { 15 } + { % todo: this is a TeX error + \tl_use:N \l__unravel_head_tl \scan_stop: + } + } + { \__unravel_off_save: } + } + } + } +\cs_new_protected:Npn \__unravel_scan_delimiter: + { + \__unravel_get_x_non_relax: + \__unravel_set_cmd: + \int_case:nnF \l__unravel_head_cmd_int + { + { \__unravel_tex_use:n { the_char } } + { \__unravel_prev_input:V \l__unravel_head_tl } + { \__unravel_tex_use:n { other_char } } + { \__unravel_prev_input:V \l__unravel_head_tl } + { \__unravel_tex_use:n { delim_num } } + { + \__unravel_prev_input:V \l__unravel_head_tl + \__unravel_scan_int: + } + } + { + \__unravel_back_input: + \__unravel_tex_error:nV { missing-delim } \l__unravel_head_tl + \__unravel_prev_input:n { . } + } + } \__unravel_new_tex_cmd:nn { math_comp } % 50 - { \__unravel_not_implemented:n { math~comp } } + { \__unravel_mode_math:n { \__unravel_sub_sup: } } \__unravel_new_tex_cmd:nn { limit_switch } % 51 - { \__unravel_not_implemented:n { limits } } + { \__unravel_mode_math:n { \__unravel_output_head_token: } } +\cs_new_protected:Npn \__unravel_output_head_token: + { + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \l__unravel_head_token + \__unravel_print_action: + } \__unravel_new_tex_cmd:nn { above } % 52 - { \__unravel_not_implemented:n { above } } + { \__unravel_mode_math:n { \__unravel_not_implemented:n { above } } } \__unravel_new_tex_cmd:nn { math_style } % 53 - { \__unravel_not_implemented:n { math~style } } + { \__unravel_mode_math:n { \__unravel_output_head_token: } } \__unravel_new_tex_cmd:nn { math_choice } % 54 - { \__unravel_not_implemented:n { math~choice } } + { \__unravel_mode_math:n { \__unravel_do_choice: } } +\cs_new_protected:Npn \__unravel_do_choice: + { + \__unravel_prev_input_gpush:N \l__unravel_head_tl + \__unravel_print_action: + \__unravel_scan_left_brace: + \__unravel_prev_input_gpop:N \l__unravel_head_tl + \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl + \gtl_gconcat:NNN \g__unravel_output_gtl + \g__unravel_output_gtl \c_group_begin_gtl + \tl_use:N \l__unravel_head_tl \c_group_begin_token + \gtl_clear:N \l__unravel_after_group_gtl + \int_set:Nn \l__unravel_choice_int { 1 } + \__unravel_print_action:x + { \tl_to_str:N \l__unravel_head_tl \iow_char:N \{ } + } \__unravel_new_tex_cmd:nn { non_script } % 55 - { \__unravel_not_implemented:n { non~script } } + { \__unravel_mode_math:n { \__unravel_output_head_token: } } \__unravel_new_tex_cmd:nn { vcenter } % 56 - { \__unravel_not_implemented:n { vcenter } } + { \__unravel_mode_math:n { \__unravel_not_implemented:n { vcenter } } } \__unravel_new_tex_cmd:nn { case_shift } % 57 { \__unravel_prev_input_gpush:N \l__unravel_head_tl @@ -3589,7 +3887,7 @@ \__unravel_print_action: } \__unravel_new_tex_cmd:nn { omit } % 63 - { \__unravel_not_implemented:n { omit } } + { \l__unravel_head_token \__unravel_print_action: } \__unravel_new_tex_cmd:nn { ex_space } % 64 { \__unravel_mode_non_vertical:n @@ -3601,19 +3899,7 @@ { \l__unravel_head_token \__unravel_print_action: } } \__unravel_new_tex_cmd:nn { radical } % 66 - { - \__unravel_mode_math:n - { - \__unravel_prev_input_gpush:N \l__unravel_head_tl - \__unravel_print_action: - \__unravel_scan_int: - \__unravel_scan_math: - \__unravel_prev_input_gpop:N \l__unravel_head_tl - \gtl_gput_right:NV \g__unravel_output_gtl \l__unravel_head_tl - \tl_use:N \l__unravel_head_tl \scan_stop: - \__unravel_print_action:x { \tl_to_str:N \l__unravel_head_tl } - } - } + { \__unravel_mode_math:n { \__unravel_do_math_accent: } } \__unravel_new_tex_cmd:nn { end_cs_name } % 67 { \__unravel_tex_error:nV { extra-endcsname } \l__unravel_head_tl @@ -3895,7 +4181,11 @@ \int_case:nnF \l__unravel_head_char_int { { 7 } { \__unravel_scan_extension_operands_aux: } % pdfobj - { 9 } { \__unravel_scan_extension_operands_aux: } % pdfxform + { 9 } + { + \__unravel_prepare_mag: + \__unravel_scan_extension_operands_aux: + } % pdfxform { 11 } { \__unravel_scan_extension_operands_aux: } %pdfximage } { \__unravel_scan_immediate_operands_bad: } @@ -4216,6 +4506,7 @@ \__unravel_print_action:x { \l__unravel_prev_action_tl \tl_to_str:N \l__unravel_defined_tl } \exp_after:wN \cs_set_eq:NN \l__unravel_defined_tl \scan_stop: + \__unravel_just_print_assigned_token: \__unravel_scan_optional_equals: \__unravel_scan_int: \__unravel_assign_token:n { } @@ -4313,6 +4604,7 @@ \__unravel_print_action:x { \g__unravel_action_text_str \tl_to_str:N \l__unravel_defined_tl } \exp_after:wN \cs_set_eq:NN \l__unravel_defined_tl \__unravel_nullfont: + \__unravel_just_print_assigned_token: \__unravel_scan_optional_equals: \__unravel_scan_font_ident: \__unravel_scan_int: @@ -4326,6 +4618,7 @@ \__unravel_print_action:x { \g__unravel_action_text_str \tl_to_str:N \l__unravel_defined_tl } \exp_after:wN \cs_set_eq:NN \l__unravel_defined_tl \__unravel_nullfont: + \__unravel_just_print_assigned_token: \__unravel_scan_optional_equals: \__unravel_scan_font_ident: \__unravel_assign_token:n { } @@ -4456,7 +4749,7 @@ \__unravel_token_if_expandable:NTF \l__unravel_head_token { \__unravel_expand_do:N \prg_do_nothing: } { \__unravel_back_input: } - \__unravel_prev_input_gpop:N \l__unravel_head_gtl + \__unravel_prev_input_gpop_gtl:N \l__unravel_head_gtl \__unravel_set_action_text:x { back_input: ~ \gtl_to_str:N \l__unravel_head_gtl } \gtl_pop_left:N \l__unravel_head_gtl @@ -4566,12 +4859,21 @@ } \__unravel_new_tex_expandable:nn { cs_name } % 109 { - \__unravel_prev_input_gpush:N \l__unravel_head_tl - \__unravel_print_expansion: - \__unravel_csname_loop: - \__unravel_prev_input_silent:V \l__unravel_head_tl - \__unravel_prev_input_gpop:N \l__unravel_head_tl - \__unravel_back_input_tl_o: + \int_compare:nNnTF \l__unravel_head_char_int = 0 + { + \__unravel_prev_input_gpush:N \l__unravel_head_tl + \__unravel_print_expansion: + \__unravel_csname_loop: + \__unravel_prev_input_silent:V \l__unravel_head_tl + \__unravel_get_lastnamedcs: + \__unravel_prev_input_gpop:N \l__unravel_head_tl + \__unravel_back_input_tl_o: + } + { + \__unravel_back_input:V \g__unravel_lastnamedcs_tl + \__unravel_print_expansion:x + { \tl_to_str:N \l__unravel_head_tl = \tl_to_str:N \g__unravel_lastnamedcs_tl } + } } \cs_new_protected:Npn \__unravel_csname_loop: { @@ -4591,6 +4893,14 @@ \__unravel_csname_loop: } } +\cs_new_protected:Npn \__unravel_get_lastnamedcs: + { + \group_begin: + \__unravel_prev_input_get:N \l__unravel_head_tl + \tl_gset:No \g__unravel_lastnamedcs_tl + { \cs:w \exp_after:wN \use_none:n \l__unravel_head_tl } + \group_end: + } \__unravel_new_tex_expandable:nn { convert } % 110 { \__unravel_prev_input_gpush:N \l__unravel_head_tl @@ -4600,7 +4910,7 @@ 0 \__unravel_scan_int: 1 \__unravel_scan_int: 2 \__unravel_convert_string: - 3 \__unravel_convert_meaning: + 3 \__unravel_convert_meaning:w 4 \__unravel_scan_font_ident: 8 \__unravel_scan_font_ident: 9 \__unravel_scan_font_ident: @@ -4648,12 +4958,28 @@ { \__unravel_prev_input:x { \gtl_to_str:N \l__unravel_head_gtl } } { \__unravel_prev_input:V \l__unravel_head_tl } } -\cs_new_protected:Npn \__unravel_convert_meaning: +\cs_new_protected:Npn \__unravel_convert_meaning:w + \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_back_input_tl_o: { \__unravel_get_next: \tl_if_empty:NTF \l__unravel_head_tl - { \__unravel_prev_input:n { \l__unravel_head_token } } - { \__unravel_prev_input:V \l__unravel_head_tl } + { + \gtl_set_eq:NN \l__unravel_tmpb_gtl \l__unravel_head_gtl + \__unravel_prev_input_gpop:N \l__unravel_prev_input_tl + \exp_args:NNV \gtl_put_left:Nn \l__unravel_tmpb_gtl \l__unravel_prev_input_tl + \__unravel_prev_input_gpush_gtl:N \l__unravel_tmpb_gtl + \__unravel_print_action:x { \gtl_to_str:N \l__unravel_tmpb_gtl } + \__unravel_prev_input_gpop_gtl:N \l__unravel_tmpb_gtl + \tl_set:Nx \l__unravel_tmpa_tl { \gtl_head_do:NN \l__unravel_head_gtl \tex_meaning:D } + \__unravel_back_input:V \l__unravel_tmpa_tl + \__unravel_print_expansion:x + { \gtl_to_str:N \l__unravel_tmpb_gtl = \tl_to_str:N \l__unravel_tmpa_tl } + } + { + \__unravel_prev_input:V \l__unravel_head_tl + \__unravel_prev_input_gpop:N \l__unravel_head_tl + \__unravel_back_input_tl_o: + } } \cs_new_protected:Npn \__unravel_scan_pdfstrcmp: { @@ -4713,7 +5039,7 @@ } { % \the \__unravel_get_x_next: - \__unravel_scan_something_internal:n { 5 } + \__unravel_rescan_something_internal:n { 5 } \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_set_action_text:x { @@ -4746,10 +5072,7 @@ \__unravel_new_tex_expandable:nn { top_bot_mark } % 112 { \__unravel_back_input_tl_o: } \__unravel_new_tex_expandable:nn { end_template } % 117 - { - \__unravel_not_implemented:n { end-template } { } { } { } - \__unravel_back_input_tl_o: - } + { \__unravel_back_input_tl_o: } \cs_new_protected:Npn \__unravel_pass_text: { \__unravel_input_if_empty:TF @@ -4812,6 +5135,7 @@ } \cs_new_protected:Npn \__unravel_cond_pop: { + \fi: \int_gset:Nn \g__unravel_if_limit_int { \tl_head:N \g__unravel_if_limit_tl } \tl_gset:Nx \g__unravel_if_limit_tl @@ -4848,7 +5172,8 @@ { 1 } { \__unravel_test_two_chars:nn { 1 } {#1} } % ifcat { 12 } { \__unravel_test_ifx:n {#1} } { 16 } { \__unravel_test_case:n {#1} } - { 21 } { \__unravel_test_pdfprimitive:n {#1} } % ^^A todo and \unless + { 20 } { \if_true: \__unravel_test_incsname:n {#1} } + { 21 } { \if_true: \__unravel_test_pdfprimitive:n {#1} } } { \__unravel_prev_input_gpush:N \l__unravel_head_tl @@ -4860,13 +5185,8 @@ { 3 } % ifdim { \__unravel_test_two_vals:N \__unravel_scan_normal_dimen: } { 4 } { \__unravel_scan_int: } % ifodd - % { 5 } { } % ifvmode - % { 6 } { } % ifhmode - % { 7 } { } % ifmmode - % { 8 } { } % ifinner - { 9 } { \__unravel_scan_int: } % ifvoid - { 10 } { \__unravel_scan_int: } % ifhbox - { 11 } { \__unravel_scan_int: } % ifvbox + % { 5 } { } % if[hvm]mode, ifinner, if[tydm]dir + { 9 } { \__unravel_scan_int: } % ifvoid, ifhbox, ifvbox etc { 13 } { \__unravel_scan_int: } % ifeof % { 14 } { } % iftrue % { 15 } { } % iffalse @@ -4874,30 +5194,30 @@ { 18 } { \__unravel_test_ifcsname: } % ifcsname { 19 } % iffontchar { \__unravel_scan_font_ident: \__unravel_scan_int: } - % { 20 } { } % ifincsname % ^^A todo: something? - { 22 } % ifpdfabsnum + { 22 } % ifabsnum { \__unravel_test_two_vals:N \__unravel_scan_int: } - { 23 } % ifpdfabsdim + { 23 } % ifabsdim { \__unravel_test_two_vals:N \__unravel_scan_normal_dimen: } + { 24 } { \__unravel_scan_font_ident: } % ifjfont, iftfont } \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_set_action_text:x { \tl_to_str:N \l__unravel_head_tl } \l__unravel_head_tl \scan_stop: - \exp_after:wN \__unravel_cond_true:n + \__unravel_cond_true:NNNn \else: - \exp_after:wN \__unravel_cond_false:n + \__unravel_cond_false:Nn \fi: {#1} } } -\cs_new_protected:Npn \__unravel_cond_true:n #1 +\cs_new_protected:Npn \__unravel_cond_true:NNNn #1#2#3#4 { - \__unravel_change_if_limit:nn { 3 } {#1} % wait for else/fi + \__unravel_change_if_limit:nn { 3 } {#4} % wait for else/fi \__unravel_print_expansion:x { \g__unravel_action_text_str = true } } -\cs_new_protected:Npn \__unravel_cond_false:n #1 +\cs_new_protected:Npn \__unravel_cond_false:Nn #1#2 { - \__unravel_cond_false_loop:n {#1} + \__unravel_cond_false_loop:n {#2} \__unravel_cond_false_common: \__unravel_print_expansion:x { @@ -4943,6 +5263,7 @@ } \cs_new_protected:Npn \__unravel_test_two_chars:nn #1 { + \exp_args:NNo \gtl_set:Nn \l__unravel_head_gtl { \l__unravel_head_tl } \__unravel_prev_input_gpush_gtl:N \l__unravel_head_gtl \__unravel_print_expansion: \__unravel_test_two_chars_get:n {#1} @@ -4950,13 +5271,18 @@ \__unravel_prev_input_gpop_gtl:N \l__unravel_head_gtl \__unravel_set_action_text:x { \gtl_to_str:N \l__unravel_head_gtl } \gtl_pop_left_item:NNTF \l__unravel_head_gtl \l__unravel_head_tl { } { } + \exp_args:No \tl_if_head_eq_meaning:nNT \l__unravel_head_tl \reverse_if:N + { + \gtl_pop_left_item:NNTF \l__unravel_head_gtl \l__unravel_head_tl { } { } + \tl_put_left:Nn \l__unravel_head_tl { \reverse_if:N } + } \gtl_pop_left:NN \l__unravel_head_gtl \l__unravel_tmpb_gtl \__unravel_test_two_chars_gtl:N \l__unravel_tmpb_gtl \__unravel_test_two_chars_gtl:N \l__unravel_head_gtl \l__unravel_head_tl \scan_stop: - \exp_after:wN \__unravel_cond_true:n + \__unravel_cond_true:NNNn \else: - \exp_after:wN \__unravel_cond_false:n + \__unravel_cond_false:Nn \fi: } \cs_new_protected:Npn \__unravel_test_two_chars_get:n #1 @@ -5001,9 +5327,9 @@ } \__unravel_test_ifx_aux:NNN \l__unravel_tmpb_token \l__unravel_tmpb_gtl \__unravel_test_ifx_aux:w - \exp_after:wN \__unravel_cond_true:n + \__unravel_cond_true:NNNn \else: - \exp_after:wN \__unravel_cond_false:n + \__unravel_cond_false:Nn \fi: {#1} } @@ -5029,6 +5355,7 @@ } \cs_new_protected:Npn \__unravel_test_case:n #1 { + \if_case:w 0 ~ \__unravel_prev_input_gpush:N \l__unravel_head_tl \__unravel_print_expansion: \bool_if:NT \g__unravel_internal_debug_bool { \iow_term:n { {\ifcase level~#1} } } @@ -5036,6 +5363,12 @@ \__unravel_prev_input_get:N \l__unravel_head_tl \tl_set:Nx \l__unravel_head_tl { \tl_tail:N \l__unravel_head_tl } % ^^A does text_case_aux use prev_input_seq? + \int_compare:nNnF { \l__unravel_head_tl } = 0 + { + \int_compare:nNnTF { \l__unravel_head_tl } > 0 + { \fi: \if_case:w 1 ~ \or: } + { \fi: \if_case:w -1 ~ \else: } + } \exp_args:No \__unravel_test_case_aux:nn { \l__unravel_head_tl } {#1} \__unravel_prev_input_gpop:N \l__unravel_head_tl \__unravel_print_expansion:x { \tl_to_str:N \l__unravel_head_tl } @@ -5062,6 +5395,10 @@ } } } +\cs_new_protected:Npn \__unravel_test_incsname:n #1 + { \__unravel_not_implemented:n { ifincsname } } +\cs_new_protected:Npn \__unravel_test_pdfprimitive:n #1 + { \__unravel_not_implemented:n { ifpdfprimitive } } \cs_new_protected:Npn \__unravel_test_ifdefined: { \__unravel_input_if_empty:TF @@ -5085,6 +5422,7 @@ { \__unravel_csname_loop: \__unravel_prev_input:V \l__unravel_head_tl + \__unravel_get_lastnamedcs: } \__unravel_new_tex_expandable:nn { fi_or_else } % 108 { @@ -5200,8 +5538,8 @@ } \cs_new_protected:Npn \__unravel_print_state_prev: { - \seq_set_map:NNn \l__unravel_tmpa_seq \g__unravel_prev_input_seq - { \__unravel_to_str:n {##1} } + \seq_set_map_x:NNn \l__unravel_tmpa_seq \g__unravel_prev_input_seq + { \__unravel_to_str:Nn ##1 } \seq_remove_all:Nn \l__unravel_tmpa_seq { } \seq_if_empty:NTF \l__unravel_tmpa_seq { \__unravel_print_message:nn { || ~ } { } } @@ -5281,19 +5619,23 @@ \__unravel_prompt: } } -\cs_new_protected:Npn \__unravel_print_assigned_token: +\cs_new_protected:Npn \__unravel_just_print_assigned_token: { - \__unravel_after_assignment: % ^^A todo: simplify \__unravel_print_assignment:x { Set~ \exp_after:wN \token_to_str:N \l__unravel_defined_tl = \exp_after:wN \token_to_meaning:N \l__unravel_defined_tl } + } +\cs_new_protected:Npn \__unravel_print_assigned_token: + { + \__unravel_after_assignment: + \__unravel_just_print_assigned_token: \__unravel_omit_after_assignment:w } \cs_new_protected:Npn \__unravel_print_assigned_register: { - \__unravel_after_assignment: % ^^A todo: simplify + \__unravel_after_assignment: \__unravel_exp_args:Nx \__unravel_print_assignment:x { \exp_not:n @@ -5571,8 +5913,9 @@ max-input .int_gset:N = \g__unravel_default_max_input_int , number-steps .bool_gset:N = \g__unravel_default_number_steps_bool , online .int_gset:N = \g__unravel_default_online_int , - prompt-input .clist_gset:N = \g__unravel_default_prompt_input_clist , - trace-assigns .bool_gset:N = \g__unravel_default_trace_assign_bool , + prompt-input .code:n + = \__unravel_prompt_input:Nn \g__unravel_default_prompt_input_clist {#1} , + trace-assigns .bool_gset:N = \g__unravel_default_trace_assigns_bool , trace-expansion .bool_gset:N = \g__unravel_default_trace_expansion_bool , trace-other .bool_gset:N = \g__unravel_default_trace_other_bool , welcome-message .bool_gset:N = \g__unravel_default_welcome_message_bool , @@ -5586,7 +5929,8 @@ max-input .int_gset:N = \g__unravel_max_input_int , number-steps .bool_gset:N = \g__unravel_number_steps_bool , online .int_gset:N = \g__unravel_online_int , - prompt-input .clist_gset:N = \g__unravel_prompt_input_clist , + prompt-input .code:n + = \__unravel_prompt_input:Nn \g__unravel_prompt_input_clist {#1} , trace-assigns .bool_gset:N = \g__unravel_trace_assigns_bool , trace-expansion .bool_gset:N = \g__unravel_trace_expansion_bool , trace-other .bool_gset:N = \g__unravel_trace_other_bool , @@ -5638,7 +5982,6 @@ \__unravel_exit_point: \__unravel_print_outcome: \__unravel_final_test: - \__unravel_final_after_assignment: \__unravel_exit_point: } \cs_new_protected:Npn \unravel_get:nnN #1#2#3 @@ -5648,6 +5991,7 @@ } \cs_new_protected:Npn \__unravel_init_key_vars: { + \sys_if_engine_luatex:T { \tl_gset:No \g__unravel_lastnamedcs_tl { \tex_lastnamedcs:D } } \bool_gset_eq:NN \g__unravel_explicit_prompt_bool \g__unravel_default_explicit_prompt_bool \bool_gset_eq:NN \g__unravel_internal_debug_bool \g__unravel_default_internal_debug_bool \bool_gset_eq:NN \g__unravel_number_steps_bool \g__unravel_default_number_steps_bool @@ -5700,26 +6044,57 @@ } \cs_new_protected:Npn \__unravel_final_test: { - \bool_if:nTF + \__unravel_input_if_empty:TF { - \tl_if_empty_p:N \g__unravel_if_limit_tl - && \int_compare_p:nNn \g__unravel_if_limit_int = 0 - && \int_compare_p:nNn \g__unravel_if_depth_int = 0 - && \seq_if_empty_p:N \g__unravel_prev_input_seq + \seq_if_empty:NTF \g__unravel_prev_input_seq + { + \tl_if_empty:NTF \g__unravel_if_limit_tl + { \int_compare:nNnF \g__unravel_if_limit_int = 0 { \__unravel_final_bad: } } + { \__unravel_final_conditionals: } + } + { \__unravel_final_bad: } } - { \__unravel_input_if_empty:TF { } { \__unravel_final_bad: } } { \__unravel_final_bad: } + \__unravel_final_after_assignment: } \cs_new_protected:Npn \__unravel_final_bad: { \__unravel_error:nnnnn { internal } { the-last-unravel-finished-badly } { } { } { } } +\cs_new_protected:Npn \__unravel_final_conditionals: + { + \group_begin: + \msg_warning:nnx { unravel } { dangling-conditionals } + { \tl_count:N \g__unravel_if_limit_tl } + \group_end: + \tl_greverse:N \g__unravel_if_limit_tl + \tl_gput_right:NV \g__unravel_if_limit_tl \g__unravel_if_limit_int + \tl_gset:Nx \g__unravel_if_limit_tl { \tl_tail:N \g__unravel_if_limit_tl } % remove the {0} + \prg_replicate:nn { \tl_count:N \g__unravel_if_limit_tl } { \fi: } + \tl_map_function:NN \g__unravel_if_limit_tl \__unravel_final_cond_aux:n + } +\cs_new:Npn \__unravel_final_cond_aux:n #1 + { + \int_case:nnF {#1} + { + { 2 } { \if_false: \else: } + { 3 } { \if_true: } + { 4 } { \if_case:w 0 ~ } + } + { \__unravel_final_bad: } + } \cs_new_protected:Npn \__unravel_final_after_assignment: { \gtl_if_empty:NF \g__unravel_after_assignment_gtl { \gtl_head_do:NN \g__unravel_after_assignment_gtl \tex_afterassignment:D } } +\msg_new:nnnn { unravel } { prev-input } + { Internal~error:~unexpected~type~of~``prev_input''~entry. } + { + Found~type~#2~instead~of~#1~to~assign~to~variable~#3.~Contents:\\ + \iow_indent:n {#4} + } \msg_new:nnn { unravel } { unknown-primitive } { Internal~error:~the~primitive~'#1'~is~not~known. } \msg_new:nnn { unravel } { extra-fi-or-else } @@ -5810,6 +6185,8 @@ Some~TeX~command~expects~input~beyond~the~end~of~ the~argument~of~\iow_char:N\\unravel. } +\msg_new:nnn { unravel } { dangling-conditionals } + { Attempting~to~issue~#1~dangling~conditionals. } \__unravel_tex_msg_new:nnn { forbidden-case } { You~can't~use~`\exp_after:wN \token_to_str:N \l__unravel_head_tl'~in~ @@ -5891,6 +6268,17 @@ not~appear~between~\token_to_str:c{csname}~and~ \token_to_str:c{endcsname}. } +\__unravel_tex_msg_new:nnn { missing-delim } + { Missing~delimiter~(.~inserted) } + { + I~was~expecting~to~see~something~like~`('~or~`\token_to_str:N\{'~or~ + `\token_to_str:N\}'~here.~If~you~typed,~e.g.,~ + `\{'~instead~of~`\token_to_str:N\{',~you~ + should~probably~delete~the~`\{'~by~typing~`1'~now,~so~that~ + braces~don't~get~unbalanced.~Otherwise~just~proceed.~ + Acceptable~delimiters~are~characters~whose~\token_to_str:c{delcode}~is~ + nonnegative,~or~you~can~use~`\token_to_str:c{delimiter}~'. + } \__unravel_tex_msg_new:nnn { cannot-read } { ***~(cannot~\iow_char:N\\read~from~terminal~in~nonstop~modes) } { } -- cgit v1.2.3