summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-02-28 20:58:46 +0000
committerKarl Berry <karl@freefriends.org>2023-02-28 20:58:46 +0000
commitd81371e938b8b6a457f8d18dba05988cb76aea14 (patch)
tree2f2150f0414f5c349be3ee28a0047682488db548 /Master/texmf-dist/tex
parent5bb5421117595253f49df10c66cabffa61f8c4f2 (diff)
fistrum (28feb23)
git-svn-id: svn://tug.org/texlive/trunk@66258 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/fistrum/fistrum.sty434
1 files changed, 434 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fistrum/fistrum.sty b/Master/texmf-dist/tex/latex/fistrum/fistrum.sty
new file mode 100644
index 00000000000..77f5e72c3d8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/fistrum/fistrum.sty
@@ -0,0 +1,434 @@
+%%
+%% This is file `fistrum.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fistrum.dtx (with options: `package')
+%%
+%% This file is part of the package fistrum for use with LaTeX2e.
+%%
+%% Function: Access to 150 paragraphs of pecadorrr text.
+%%
+%% This program may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% Please send error reports and suggestions for improvements to
+%% https://github.com/daviddavo/fistrum
+%%
+\def\fistrumversion{0.1}
+\def\fistrumdate{2023-02-28}
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{l3keys2e}
+\@ifundefined{NewDocumentCommand}
+ {\RequirePackage{xparse}}{}
+\ProvidesExplPackage {fistrum} {\fistrumdate} {\fistrumversion}
+ {150 paragraphs of Lorem Fistrum dummy text}
+\int_new:N \g__fistrum_par_int
+\tl_new:N \g__fistrum_language_tl
+\tl_new:N \g_fistrum_default_range_tl
+\tl_new:N \l__fistrum_output_tl
+\str_new:N \g__fistrum_text_str
+\str_new:N \l__fistrum_sep_set_str
+\bool_new:N \l__fistrum_autolang_bool
+\quark_new:N \q__fistrum_mark
+\scan_new:N \s__fistrum
+\str_new:N \l__fistrum_tmpa_str
+\int_new:N \l__fistrum_a_int
+\int_new:N \l__fistrum_b_int
+\cs_new_eq:NN \__fistrum_tmp:w ?
+\clist_map_inline:nn { start, itemstart, itemseparator, itemend, end }
+ {
+ \clist_map_inline:nn { par, sentence }
+ {
+ \clist_map_inline:nn { { }, star, nostar }
+ { \tl_new:c { l__fistrum_##1_#1_####1_tl } }
+ }
+ \tl_new:c { l__fistrum_par_#1_parsepar_tl }
+ }
+\tl_set:Nn \l__fistrum_par_itemseparator_parsepar_tl { ~ }
+\cs_new_protected:Npn \__fistrum_parse_par_range:nNN #1 #2 #3
+ {
+ \tl_if_blank:nTF {#1}
+ { \exp_args:NV \__fistrum_parse_range_arg:nNNn \g_fistrum_default_range_tl }
+ { \__fistrum_parse_range_arg:nNNn {#1} }
+ #2 #3 { \g__fistrum_par_int }
+ }
+\cs_new_protected:Npn \__fistrum_parse_sentence_range:nNN #1 #2 #3
+ { \__fistrum_parse_range_arg:nNNn {#1} #2 #3 { \c_max_int } }
+\cs_new_protected:Npn \__fistrum_parse_range_arg:nNNn #1
+ {
+ \exp_last_unbraced:No \__fistrum_parse_range_arg:wnNNn
+ \tl_to_str:n { #1 - - } \s__fistrum {#1}
+ }
+\cs_new_protected:Npn \__fistrum_parse_range_arg:wnNNn
+ #1 - #2 - #3 \s__fistrum #4 #5#6 #7
+ {
+ \str_if_eq:nnTF {#3} { - }
+ {
+ \__fistrum_int_set:Nnn #5 {#1} { 1 }
+ \__fistrum_int_set:Nnn #6 {#2} {#7}
+ }
+ {
+ \tl_if_empty:nTF {#3}
+ {
+ \__fistrum_int_set:Nnn #5 {#1} { \ERROR }
+ \int_set_eq:NN #6 #5
+ }
+ {
+ \msg_error:nnn { fistrum } { invalid-range } {#4}
+ \__fistrum_parse_range_arg:nNNn { 2 - 1 } #5 #6 {#7}
+ }
+ }
+ }
+\cs_new_protected:Npn \__fistrum_int_set:Nnn #1 #2 #3
+ { \int_set:Nn #1 { \tl_if_blank:nT {#2} {#3} #2 } }
+\cs_generate_variant:Nn \__fistrum_parse_par_range:nNN { e }
+\cs_generate_variant:Nn \__fistrum_parse_sentence_range:nNN { e }
+\cs_new:Npn \__fistrum_sep_item:nn #1 #2
+ { \exp_not:v { l__fistrum_#1_#2_ \l__fistrum_sep_set_str _tl } }
+\cs_new:Npn \fistrum_get_range:nn #1 #2
+ {
+ \__fistrum_sep_item:nn { par } { start }
+ \use:e
+ {
+ \exp_not:N \__fistrum_get_paragraph:ww
+ \__fistrum_build_list:nn {#1} {#2}
+ \exp_not:N \q__fistrum_mark ;
+ \exp_not:N \q__fistrum_mark ; \s__fistrum
+ }
+ \__fistrum_sep_item:nn { par } { end }
+ }
+\cs_new:Npn \__fistrum_build_list:nn #1 #2
+ {
+ \int_step_function:nnN
+ { \int_max:nn {#1} { 1 } }
+ { \int_min:nn {#2} { \g__fistrum_par_int } }
+ \__fistrum_build_list_aux:n
+ }
+\cs_new:Npn \__fistrum_build_list_aux:n #1 { #1 ; }
+\cs_new:Npn \__fistrum_get_paragraph:ww #1 ; #2 ;
+ {
+ \if_meaning:w \q__fistrum_mark #2
+ \if_meaning:w \q__fistrum_mark #1
+ \__fistrum_get_paragraph_end:w
+ \else:
+ \fistrum_get_paragraph:n {#1}
+ \fi:
+ \else:
+ \fistrum_get_paragraph:n {#1}
+ \__fistrum_sep_item:nn { par } { itemseparator }
+ \fi:
+ \__fistrum_get_paragraph:ww #2 ;
+ }
+\cs_new:Npn \__fistrum_get_paragraph_end:w #1 \s__fistrum { \fi: \fi: }
+\cs_new:Npn \fistrum_get_paragraph:n #1
+ {
+ \__fistrum_sep_item:nn { par } { itemstart }
+ \__fistrum_unexpanded_par:n {#1}
+ \__fistrum_sep_item:nn { par } { itemend }
+ }
+\cs_new:Npn \__fistrum_unexpanded_par:n #1
+ {
+ \bool_lazy_and:nnT
+ { \int_compare_p:nNn { 0 } < {#1} }
+ { \int_compare_p:nNn {#1} < { \g__fistrum_par_int + 1 } }
+ { \exp_not:v { g__fistrum_par_#1_tl } }
+ }
+\cs_new:Npn \fistrum_get_sentences:nnn #1 #2 #3
+ {
+ \__fistrum_sep_item:nn { sentence } { start }
+ \exp_args:Ne \use_ii_i:nn { { \int_max:nn {#1} { 1 } } }
+ { \__fistrum_get_sentences:nnnw { 1 } } {#2}
+ #3 ~ \q__fistrum_mark .~ \s__fistrum
+ \__fistrum_sep_item:nn { sentence } { end }
+ }
+\cs_new:Npn \__fistrum_get_sentences:nnnw #1 #2 #3 #4 .~
+ {
+ \int_compare:nNnT {#1} > {#3} { \__fistrum_get_sentences_end:w }
+ \use:nn { \if_meaning:w \q__fistrum_mark } #4
+ \exp_after:wN \__fistrum_get_sentences_end:w
+ \else:
+ \int_compare:nNnF {#1} < {#2}
+ {
+ \int_compare:nNnF {#1} = {#2}
+ { \__fistrum_sep_item:nn { sentence } { itemseparator } }
+ \__fistrum_sep_item:nn { sentence } { itemstart }
+ \exp_not:n { #4 . }
+ \__fistrum_sep_item:nn { sentence } { itemend }
+ }
+ \fi:
+ \exp_args:Nf \__fistrum_get_sentences:nnnw { \int_eval:n { #1 + 1 } }
+ {#2} {#3}
+ }
+\cs_new:Npn \__fistrum_get_sentences_end:w #1 \s__fistrum { }
+\cs_generate_variant:Nn \fistrum_get_sentences:nnn { nnV }
+\NewDocumentCommand \fistrumPar { m }
+ {
+ \__fistrum_deprecated:n { FistrumPar }
+ \__fistrum_unexpanded_par:n {#1} \par
+ }
+\cs_new_protected:Npn \__fistrum_element_set:nnn #1 #2 #3
+ { \tl_set:cn { l__fistrum_ #1 _ \IfBooleanF {#2} { no } star _tl } {#3} }
+\cs_new_protected:Npn \__fistrum_deprecated:n #1
+ {
+ \msg_warning:nnn { fistrum } { cmd-deprecated } {#1}
+ \cs_gset_eq:NN \__fistrum_deprecated:n \use_none:n
+ }
+\cs_set_protected:Npn \__fistrum_tmp:w #1 #2 #3 #4
+ {
+ \str_set:Nx \l__fistrum_tmpa_str
+ { #2 \tl_if_empty:nTF {#4} {#3} { start } }
+ \use:e
+ {
+ \NewDocumentCommand \exp_not:c { SetFistrum #1 List #2 #3 }
+ { s +m \tl_if_empty:nF {#4} { +m } }
+ {
+ \__fistrum_deprecated:n { SetFistrum #1 List #2 #3 }
+ \__fistrum_element_set:nnn
+ { \exp_args:Ne \str_lowercase:n { #1_\l__fistrum_tmpa_str } }
+ {##1} {##2}
+ \tl_if_empty:nT {#4} { \use_none:nnnn }
+ \__fistrum_element_set:nnn { \str_lowercase:n { #1_#2 #4 } }
+ {##1} {##3}
+ }
+ }
+ }
+\clist_map_inline:nn { Par, Sentence }
+ {
+ \clist_map_inline:nn
+ { { Start } { }, { End } { }, { Surrounders } { end } }
+ { \__fistrum_tmp:w {#1} { Item } ##1 \__fistrum_tmp:w {#1} { } ##1 }
+ \__fistrum_tmp:w {#1} { Item } { Separator } { }
+ }
+\NewDocumentCommand \SetFistrumDefault { m }
+ {
+ \__fistrum_parse_par_range:eNN {#1} \l__fistrum_a_int \l__fistrum_b_int
+ \tl_gset:Nx \g_fistrum_default_range_tl
+ { \int_use:N \l__fistrum_a_int - \int_use:N \l__fistrum_b_int }
+ }
+\NewDocumentCommand \fistrum { s O { \g_fistrum_default_range_tl } o }
+ {
+ \__fistrum_do:nnnn {#1} {#2} {#3}
+ {
+ \__fistrum_set_hyphens:
+ \tl_use:N ##1
+ \__fistrum_restore_hyphens:
+ }
+ }
+\NewDocumentCommand \unpackfistrum { s O { \g_fistrum_default_range_tl } o }
+ { \__fistrum_do:nnnn {#1} {#2} {#3} { \tl_gset_eq:NN \fistrumexp ##1 } }
+\cs_new_eq:NN \fistrumexp \prg_do_nothing:
+\cs_new_protected:Npn \__fistrum_do:nnnn #1 #2 #3 #4
+ {
+ \cs_set_protected:Npn \__fistrum_do:N ##1 {#4}
+ \__fistrum_parse_par_range:eNN {#2} \l__fistrum_a_int \l__fistrum_b_int
+ \str_set_eq:NN \l__fistrum_tmpa_str \l__fistrum_sep_set_str
+ \str_set:Nx \l__fistrum_sep_set_str { \IfBooleanF {#1} { no } star }
+ \bool_lazy_or:nnTF
+ { \tl_if_novalue_p:n {#3} }
+ { \tl_if_blank_p:n {#3} }
+ {
+ \tl_set:Nx \l__fistrum_output_tl
+ { \fistrum_get_range:nn { \l__fistrum_a_int } { \l__fistrum_b_int } }
+ }
+ {
+ \str_set:Nn \l__fistrum_sep_set_str { parsepar }
+ \tl_set:Nx \l__fistrum_output_tl
+ { \fistrum_get_range:nn { \l__fistrum_a_int } { \l__fistrum_b_int } }
+ \str_set:Nx \l__fistrum_sep_set_str { \IfBooleanF {#1} { no } star }
+ \__fistrum_parse_sentence_range:eNN {#3} \l__fistrum_a_int \l__fistrum_b_int
+ \tl_set:Nx \l__fistrum_output_tl
+ {
+ \fistrum_get_sentences:nnV { \l__fistrum_a_int } { \l__fistrum_b_int }
+ \l__fistrum_output_tl
+ }
+ }
+ \str_set_eq:NN \l__fistrum_sep_set_str \l__fistrum_tmpa_str
+ \__fistrum_do:N \l__fistrum_output_tl
+ }
+\cs_new_eq:NN \__fistrum_do:N ?
+\cs_new_protected:Npn \__fistrum_set_hyphens:
+ {
+ \bool_if:NTF \l__fistrum_autolang_bool
+ { \use:n } { \use_none:n }
+ {
+ \cs_if_exist:NTF \hyphenrules
+ {
+ \cs_if_exist:cTF { ver@polyglossia.sty }
+ { \__fistrum_set_hyphens_polyglossia: }
+ { \__fistrum_set_hyphens_babel: }
+ }
+ { \__fistrum_set_hyphens_raw: }
+ }
+ }
+\cs_new_protected:Npn \__fistrum_restore_hyphens:
+ { \prg_do_nothing: }
+\cs_new_protected:Npn \__fistrum_set_hyphens_babel:
+ {
+ \cs_if_exist:cTF { l@ \g__fistrum_language_tl }
+ {
+ \exp_args:NV \hyphenrules \g__fistrum_language_tl
+ \cs_set_protected:Npx \__fistrum_restore_hyphens:
+ { \exp_not:N \hyphenrules { \languagename } }
+ }
+ { \__fistrum_lang_not_available: }
+ }
+\cs_new_protected:Npn \__fistrum_set_hyphens_polyglossia:
+ {
+ \cs_if_exist:cTF { \g__fistrum_language_tl @loaded }
+ {
+ \exp_args:NnV \begin{hyphenrules} \g__fistrum_language_tl
+ \cs_set_protected:Npn \__fistrum_restore_hyphens:
+ { \end{hyphenrules} }
+ }
+ { \__fistrum_set_hyphens_raw: }
+ }
+\cs_new_protected:Npn \__fistrum_set_hyphens_raw:
+ {
+ \cs_if_exist:cTF { l@ \g__fistrum_language_tl }
+ {
+ \use:x
+ {
+ \language \use:c { l@ \g__fistrum_language_tl }
+ \cs_set_protected:Npn \__fistrum_restore_hyphens:
+ { \language \int_eval:n { \language } \scan_stop: }
+ }
+ }
+ { \__fistrum_lang_not_available: }
+ }
+\cs_new_protected:Npn \__fistrum_lang_not_available:
+ {
+ \str_if_eq:VVF \g__fistrum_language_tl \languagename
+ {
+ \msg_warning:nnx { fistrum } { missing-language }
+ { \g__fistrum_language_tl }
+ \tl_gset_eq:NN \g__fistrum_language_tl \languagename
+ }
+ }
+\cs_new_protected:Npn \NewFistrumPar #1
+ {
+ \int_gincr:N \g__fistrum_par_int
+ \tl_gclear_new:c { g__fistrum_par_ \int_use:N \g__fistrum_par_int _tl }
+ \tl_gset:cn { g__fistrum_par_ \int_use:N \g__fistrum_par_int _tl } {#1}
+ }
+\NewDocumentCommand \SetFistrumText { m }
+ {
+ \str_if_eq:VnF \g__fistrum_text_str {#1}
+ {
+ \tl_gset:Nn \g__fistrum_language_tl { english }
+ \int_gzero:N \g__fistrum_par_int
+ \file_input:n { #1.ftd }
+ \str_gset:Nn \g__fistrum_text_str {#1}
+ }
+ }
+\NewDocumentCommand \SetFistrumLanguage { m }
+ { \tl_gset:Nn \g__fistrum_language_tl {#1} }
+\cs_new_protected:Npn \__fistrum_delim_restore:nnn #1 #2 #3
+ {
+ \keys_set:nn { fistrum }
+ {
+ #1-before = , #1-begin = , #1-end = , #1-after = ,
+ #1-before* = , #1-begin* = , #1-end* = , #1-after* = ,
+ #1-sep = {#2}, #1-sep* = {#3}
+ }
+ }
+\cs_new_protected:Nn \__fistrum_restore_sentence_list:
+ { \__fistrum_delim_restore:nnn { sentence } { ~ } { ~ } }
+\cs_new_eq:NN \__fistrum_restore_par_list: ?
+\cs_new_protected:Npn \fistrumRestoreParList
+ {
+ \__fistrum_deprecated:n { FistrumRestoreParList }
+ \__fistrum_restore_par_list:
+ }
+\cs_new_protected:Npn \fistrumRestoreSentenceList
+ {
+ \__fistrum_deprecated:n { FistrumRestoreSentenceList }
+ \__fistrum_restore_sentence_list:
+ }
+\cs_new_protected:Npn \fistrumRestoreAll
+ {
+ \__fistrum_deprecated:n { FistrumRestoreAll }
+ \__fistrum_restore_par_list: \__fistrum_restore_sentence_list:
+ }
+\NewDocumentCommand \setfistrum { +m }
+ { \keys_set:nn { fistrum } {#1} }
+\keys_define:nn { fistrum }
+ {
+ nopar .choice: ,
+ nopar / true .code:n =
+ {
+ \cs_gset_protected:Npn \__fistrum_restore_par_list:
+ { \__fistrum_delim_restore:nnn { par } { ~ } { \par } }
+ } ,
+ nopar / false .code:n =
+ {
+ \cs_gset_protected:Nn \__fistrum_restore_par_list:
+ { \__fistrum_delim_restore:nnn { par } { \par } { ~ } }
+ } ,
+ nopar .initial:n = false ,
+ nopar .default:n = true ,
+ auto-lang .bool_set:N = \l__fistrum_autolang_bool ,
+ auto-lang .initial:n = true ,
+ auto-lang .default:n = true ,
+ text .code:n = \SetFistrumText{#1} ,
+ text .value_required:n = true ,
+ language .tl_gset:N = \g__fistrum_language_tl ,
+ language .value_required:n = true ,
+ default-range .code:n = \SetFistrumDefault{#1} ,
+ default-range .initial:n = 1-7 ,
+ default-range .default:n = 1-7 ,
+ }
+\cs_set_protected:Npn \__fistrum_tmp:w #1 #2 #3
+ {
+ \keys_define:nn { fistrum }
+ {
+ #1-before #2 .tl_set:c = l__fistrum_#1_start _#3star_tl ,
+ #1-begin #2 .tl_set:c = l__fistrum_#1_itemstart _#3star_tl ,
+ #1-sep #2 .tl_set:c = l__fistrum_#1_itemseparator _#3star_tl ,
+ #1-end #2 .tl_set:c = l__fistrum_#1_itemend _#3star_tl ,
+ #1-after #2 .tl_set:c = l__fistrum_#1_end _#3star_tl ,
+ }
+ }
+\__fistrum_tmp:w { par } { } { no } \__fistrum_tmp:w { sentence } { } { no }
+\__fistrum_tmp:w { par } * { } \__fistrum_tmp:w { sentence } * { }
+\ExplSyntaxOff
+\setfistrum{text=fistrum-es}
+\ProcessKeysOptions{fistrum}
+\ExplSyntaxOn
+\__fistrum_restore_par_list:
+\__fistrum_restore_sentence_list:
+\msg_new:nnn { fistrum } { invalid-range }
+ { Invalid~number~or~range~'#1'. }
+\msg_new:nnn { fistrum } { cmd-deprecated }
+ {
+ Command~'\iow_char:N\\#1'~deprecated. \\
+ See~the~fistrum~documentation~for~help.
+ }
+\msg_new:nnn { fistrum } { missing-language }
+ {
+ Unknown~language~'#1'.~Hyphenation~patterns~for~
+ '\languagename'~will~be~used~instead.
+ \sys_if_engine_luatex:T
+ {
+ \\ \\
+ \cs_if_exist:cTF { ver@polyglossia.sty }
+ {
+ With~polyglossia,~you~have~to~explicitly~load~languages~
+ with~\iow_char:N\\setotherlanguage{#1}~or~similar.
+ }
+ {
+ With~LuaTeX,~fistrum~requires~babel~to~get~proper~
+ hyphenation~(you~can~use~
+ \iow_char:N\\usepackage[base]{babel}).
+ }
+ }
+ }
+%%
+%%
+%% End of file `fistrum.sty'.