diff options
author | Karl Berry <karl@freefriends.org> | 2022-10-23 20:38:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-10-23 20:38:58 +0000 |
commit | e6d9042f87c853bdb51128b143b354976be349c2 (patch) | |
tree | 2d518806c05486eacb40ff02995d0d077df0630f /Master/texmf-dist/tex/lualatex | |
parent | ca6c52a267964f90dad17c9b7e4ddaff34d50b68 (diff) |
piton (23oct22)
git-svn-id: svn://tug.org/texlive/trunk@64794 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/piton/piton.sty | 168 |
1 files changed, 149 insertions, 19 deletions
diff --git a/Master/texmf-dist/tex/lualatex/piton/piton.sty b/Master/texmf-dist/tex/lualatex/piton/piton.sty index 537e0694a93..f175cadc24e 100644 --- a/Master/texmf-dist/tex/lualatex/piton/piton.sty +++ b/Master/texmf-dist/tex/lualatex/piton/piton.sty @@ -18,8 +18,9 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{0.7} -\def\myfiledate{2022/10/08} +\def\myfileversion{0.8} +\def\myfiledate{2022/10/23} + \NeedsTeXFormat{LaTeX2e} @@ -33,8 +34,12 @@ { The~package~'piton'~must~be~used~with~LuaLaTeX.\\ It~won't~be~loaded. } \sys_if_engine_luatex:F { \msg_critical:nn { piton } { LuaLaTeX~mandatory } } \RequirePackage { luatexbase } +\bool_new:N \c__piton_footnotehyper_bool +\bool_new:N \c__piton_footnote_bool \keys_define:nn { piton / package } { + footnote .bool_set:N = \c__piton_footnote_bool , + footnotehyper .bool_set:N = \c__piton_footnotehyper_bool , escape-inside .tl_set:N = \c__piton_escape_inside_tl , escape-inside .initial:n = , unknown .code:n = \msg_error:nn { piton } { unknown~key~for~package } @@ -42,9 +47,9 @@ \msg_new:nnn { piton } { unknown~key~for~package } { Unknown~key.\\ - You~have~used~the~key~'\l_keys_key_str'~but~the~only~key~available~here~ - is~the~key~'escape-inside'.~Other~keys~are~available~in~\token_to_str:N - \PitonOptions.\\ + You~have~used~the~key~'\l_keys_key_str'~but~the~only~keys~available~here~ + are~'escape-inside',~'footnote'~and~'footnotehyper'.~Other~keys~are~ + available~in~\token_to_str:N \PitonOptions.\\ That~key~will~be~ignored. } \ProcessKeysOptions { piton / package } @@ -71,17 +76,73 @@ The~package~'xcolor'~is~required~by~'piton'.\\ This~error~is~fatal. } +\msg_new:nnn { piton } { footnote~with~footnotehyper~package } + { + Footnote~forbidden.\\ + You~can't~use~the~option~'footnote'~because~the~package~ + footnotehyper~has~already~been~loaded.~ + If~you~want,~you~can~use~the~option~'footnotehyper'~and~the~footnotes~ + within~the~environments~of~piton~will~be~extracted~with~the~tools~ + of~the~package~footnotehyper.\\ + If~you~go~on,~the~package~footnote~won't~be~loaded. + } +\msg_new:nnn { piton } { footnotehyper~with~footnote~package } + { + You~can't~use~the~option~'footnotehyper'~because~the~package~ + footnote~has~already~been~loaded.~ + If~you~want,~you~can~use~the~option~'footnote'~and~the~footnotes~ + within~the~environments~of~piton~will~be~extracted~with~the~tools~ + of~the~package~footnote.\\ + If~you~go~on,~the~package~footnotehyper~won't~be~loaded. + } +\bool_if:NT \c__piton_footnote_bool + { + \@ifclassloaded { beamer } + { \bool_set_false:N \c__piton_footnote_bool } + { + \@ifpackageloaded { footnotehyper } + { \__piton_error:n { footnote~with~footnotehyper~package } } + { \usepackage { footnote } } + } + } +\bool_if:NT \c__piton_footnotehyper_bool + { + \@ifclassloaded { beamer } + { \bool_set_false:N \c__piton_footnote_bool } + { + \@ifpackageloaded { footnote } + { \__piton_error:n { footnotehyper~with~footnote~package } } + { \usepackage { footnotehyper } } + \bool_set_true:N \c__piton_footnote_bool + } + } +\tl_new:N \g__piton_aux_tl \bool_new:N \l__piton_splittable_bool \str_new:N \l__piton_background_color_str +\dim_new:N \l__piton_width_dim +\dim_new:N \l__piton_width_on_aux_dim +\int_new:N \g__piton_env_int +\bool_new:N \l__piton_slim_bool +\dim_new:N \l__piton_left_margin_dim \int_new:N \l__piton_gobble_int \cs_new_protected:Npn \__piton_define_gobble_syntax:n #1 { \lua_now:n { define_gobble_syntax(#1) } } \cs_set_protected:Npn \__piton_begin_line: #1 \__piton_end_line: { - \str_if_empty:NTF \l__piton_background_color_str + \bool_lazy_and:nnT \l__piton_splittable_bool \c__piton_footnote_bool + { \begin { savenotes } } + \bool_if:NTF \l__piton_slim_bool { \hbox_set:Nn \l_tmpa_box } - { \hbox_set_to_wd:Nnn \l_tmpa_box \linewidth } { + \str_if_empty:NTF \l__piton_background_color_str + { \hbox_set_to_wd:Nnn \l_tmpa_box \linewidth } + { + \hbox_set_to_wd:Nnn \l_tmpa_box + { \dim_eval:n { \linewidth - 0.5 em } } + } + } + { + \skip_horizontal:N \l__piton_left_margin_dim \bool_if:NT \l__piton_line_numbers_bool { \bool_if:NF \l__piton_all_line_numbers_bool @@ -90,26 +151,31 @@ } \strut \str_if_empty:NF \l__piton_background_color_str \space - #1 \hfill + #1 \hfil } - \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + 1 pt } - \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + 1.5 pt } + \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l__piton_width_dim + { \dim_set:Nn \l__piton_width_dim { \box_wd:N \l_tmpa_box } } + \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + 1.25 pt } + \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + 1.25 pt } \tl_if_empty:NTF \l__piton_background_color_str { \box_use_drop:N \l_tmpa_box } { \vbox_top:n { - \hbox_to_wd:nn \linewidth + \hbox:n { \exp_args:NV \color \l__piton_background_color_str \vrule height \box_ht:N \l_tmpa_box depth \box_dp:N \l_tmpa_box - width \linewidth + width \l__piton_width_on_aux_dim } \skip_vertical:n { - \box_ht_plus_dp:N \l_tmpa_box } + \box_set_wd:Nn \l_tmpa_box \l__piton_width_on_aux_dim \box_use_drop:N \l_tmpa_box } } + \bool_lazy_and:nnT \l__piton_splittable_bool \c__piton_footnote_bool + { \end { savenotes } } \vspace { - 2.5 pt } } \bool_new:N \l__piton_line_numbers_bool @@ -131,10 +197,14 @@ all-line-numbers .value_forbidden:n = true , resume .bool_set:N = \l__piton_resume_bool , resume .value_forbidden:n = true , - splittable .bool_set:N = \l__piton_splittable_bool , - splittable .default:n = true , + splittable .bool_set:N = \l__piton_splittable_bool , + splittable .default:n = true , background-color .str_set:N = \l__piton_background_color_str , background-color .value_required:n = true , + slim .bool_set:N = \l__piton_slim_bool , + slim .default:n = true , + left-margin .dim_set:N = \l__piton_left_margin_dim , + left-margin .value_required:n = true , unknown .code:n = \msg_error:nn { piton } { Unknown~key~for~PitonOptions } } @@ -143,7 +213,7 @@ Unknown~key. \\ The~key~'\l_keys_key_str'~is~unknown~for~\token_to_str:N \PitonOptions.~The~ available~keys~are:~all-line-numbers,~auto-gobble,~env-gobble,~gobble,~ - line-numbers,~resume~and~splittable.\\ + left-margin,~line-numbers,~resume,~slim~and~splittable.\\ If~you~go~on,~that~key~will~be~ignored. } \NewDocumentCommand \PitonOptions { } { \keys_set:nn { PitonOptions } } @@ -154,7 +224,35 @@ \hbox_overlap_left:n { { \color { gray } \footnotesize \int_to_arabic:n \g__piton_line_int } - \quad + \skip_horizontal:n { 0.4 em } + } + } +\cs_new_protected:Npn \__piton_write_aux: + { + \tl_if_empty:NF \g__piton_aux_tl + { + \iow_now:Nn \@mainaux { \ExplSyntaxOn } + \iow_now:Nx \@mainaux + { + \tl_gset:cn { c__piton_ \int_use:N \g__piton_env_int _ tl } + { \exp_not:V \g__piton_aux_tl } + } + \iow_now:Nn \@mainaux { \ExplSyntaxOff } + } + \tl_gclear:N \g__piton_aux_tl + } +\cs_new_protected:Npn \__piton_width_to_aux: + { + \bool_if:NT \l__piton_slim_bool + { + \str_if_empty:NF \l__piton_background_color_str + { + \tl_gput_right:Nx \g__piton_aux_tl + { + \dim_set:Nn \l__piton_width_on_aux_dim + { \dim_use:N \l__piton_width_dim + 0.5 em } + } + } } } \NewDocumentCommand { \piton } { v } @@ -176,15 +274,28 @@ } \NewDocumentCommand { \PitonInputFile } { m } { + \int_gincr:N \g__piton_env_int + \tl_gclear:N \g__piton_aux_tl + \tl_if_exist:cT { c__piton _ \int_use:N \g__piton_env_int _ tl } + { \use:c { c__piton _ \int_use:N \g__piton_env_int _ tl } } + \bool_if:NF \l__piton_splittable_bool + { \bool_if:NT \c__piton_footnote_bool { \begin { savenotes } } } + \dim_compare:nNnT \l__piton_width_on_aux_dim = \c_zero_dim + { \dim_set_eq:NN \l__piton_width_on_aux_dim \linewidth } \bool_if:NF \l__piton_resume_bool { \int_gzero:N \g__piton_line_int } \group_begin: \dim_set_eq:NN \parindent \c_zero_dim \ttfamily \lua_now:e { ParseFile(token.scan_argument()) } { #1 } + \__piton_width_to_aux: \group_end: + \__piton_write_aux: + \bool_if:NF \l__piton_splittable_bool + { \bool_if:NT \c__piton_footnote_bool { \end { savenotes } } } } \NewDocumentCommand { \NewPitonEnvironment } { m m m m } { + \dim_zero:N \parindent \use:x { \cs_set_protected:Npn @@ -194,8 +305,14 @@ } { \group_end: - \mode_if_vertical:TF \mode_leave_vertical: \newline - \bool_if:NF \l__piton_splittable_bool \vbox_top:n + \mode_if_vertical:TF + { \mode_leave_vertical: } + \newline + \bool_if:NF \l__piton_splittable_bool + { + \bool_if:NT \c__piton_footnote_bool { \begin { savenotes } } + \vbox_top:n + } { \ttfamily \dim_zero:N \lineskip @@ -214,12 +331,22 @@ } { ##1 } \vspace { 2.5 pt } + \__piton_width_to_aux: } + \bool_if:NF \l__piton_splittable_bool + { \bool_if:NT \c__piton_footnote_bool { \end { savenotes } } } \end { #1 } + \__piton_write_aux: } \NewDocumentEnvironment { #1 } { #2 } { #3 + \int_gincr:N \g__piton_env_int + \tl_gclear:N \g__piton_aux_tl + \tl_if_exist:cT { c__piton _ \int_use:N \g__piton_env_int _ tl } + { \use:c { c__piton _ \int_use:N \g__piton_env_int _ tl } } + \dim_compare:nNnT \l__piton_width_on_aux_dim = \c_zero_dim + { \dim_set_eq:NN \l__piton_width_on_aux_dim \linewidth } \bool_if:NF \l__piton_resume_bool { \int_gzero:N \g__piton_line_int } \group_begin: \box_clear:N \l_tmpa_box @@ -383,7 +510,10 @@ lpeg.locale(lpeg) -- mandatory local alpha , digit , space , punct = lpeg.alpha , lpeg.digit , lpeg.space , lpeg.punct -local letter = alpha + S"âàçéèêëïîôûüÂÀÇÉÈÊËÏÎÔÛÜ_" +-- Remember that à, â, ç, etc. are strings of length 2 (2 bytes) +local letter = alpha + P "_" + + P "â" + P "à" + P "ç" + P "é" + P "è" + P "ê" + P "ë" + P "ï" + P "î" + P "ô" + P "û" + P "ü" + + P "Â" + P "À" + P "Ç" + P "É" + P "È" + P "Ê" + P "Ë" + P "Ï" + P "Î" + P "Ô" + P "Û" + P "Ü" local alphanum = letter + digit |