summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-10-23 20:38:58 +0000
committerKarl Berry <karl@freefriends.org>2022-10-23 20:38:58 +0000
commite6d9042f87c853bdb51128b143b354976be349c2 (patch)
tree2d518806c05486eacb40ff02995d0d077df0630f /Master/texmf-dist/tex/lualatex
parentca6c52a267964f90dad17c9b7e4ddaff34d50b68 (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.sty168
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