diff options
author | Karl Berry <karl@freefriends.org> | 2023-02-28 20:58:46 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-02-28 20:58:46 +0000 |
commit | d81371e938b8b6a457f8d18dba05988cb76aea14 (patch) | |
tree | 2f2150f0414f5c349be3ee28a0047682488db548 /Master/texmf-dist/tex | |
parent | 5bb5421117595253f49df10c66cabffa61f8c4f2 (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.sty | 434 |
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'. |