summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lipsum/lipsum.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-07-21 20:47:00 +0000
committerKarl Berry <karl@freefriends.org>2021-07-21 20:47:00 +0000
commit14c8a7bfa1be7a8182f139106fe0c7d48f639291 (patch)
tree5cd04d52477e4dcac185c6a252a4b4c37c3666cf /Master/texmf-dist/tex/latex/lipsum/lipsum.sty
parente9d8bd421b2cc4e3ab0e66491c72cbd30be500d1 (diff)
lipsum (21jul21)
git-svn-id: svn://tug.org/texlive/trunk@60008 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lipsum/lipsum.sty')
-rw-r--r--Master/texmf-dist/tex/latex/lipsum/lipsum.sty854
1 files changed, 297 insertions, 557 deletions
diff --git a/Master/texmf-dist/tex/latex/lipsum/lipsum.sty b/Master/texmf-dist/tex/latex/lipsum/lipsum.sty
index 1f8b21526cc..0d72f0a0820 100644
--- a/Master/texmf-dist/tex/latex/lipsum/lipsum.sty
+++ b/Master/texmf-dist/tex/latex/lipsum/lipsum.sty
@@ -8,7 +8,7 @@
%%
%% This file is part of the package lipsum for use with LaTeX2e.
%%
-%% Function: Access to 150 paragraphs of the well known Lorem Ipsum dummy text.
+%% Function: Access to 150 paragraphs of dummy text.
%%
%% This program may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -21,621 +21,361 @@
%% Please send error reports and suggestions for improvements to
%% https://github.com/PhelypeOleinik/lipsum
%%
-\def\lipsumversion{2.3}
-\def\lipsumdate{2021-03-03}
+\def\lipsumversion{2.4}
+\def\lipsumdate{2021-06-03}
\NeedsTeXFormat{LaTeX2e}
-\RequirePackage{expl3}[2018/10/31]
-\RequirePackage{xparse}
-\ProvidesExplPackage
- {lipsum}
- {\lipsumdate}
- {\lipsumversion}
+\RequirePackage{l3keys2e}
+\@ifundefined{NewDocumentCommand}
+ {\RequirePackage{xparse}}{}
+\ProvidesExplPackage {lipsum} {\lipsumdate} {\lipsumversion}
{150 paragraphs of Lorem Ipsum dummy text}
-\@ifpackagelater { expl3 } { 2018/10/31 }
- { }
+\int_new:N \g__lipsum_par_int
+\tl_new:N \g__lipsum_language_tl
+\tl_new:N \g_lipsum_default_range_tl
+\tl_new:N \l__lipsum_output_tl
+\str_new:N \g__lipsum_text_str
+\str_new:N \l__lipsum_sep_set_str
+\bool_new:N \l__lipsum_autolang_bool
+\quark_new:N \q__lipsum_mark
+\scan_new:N \s__lipsum
+\str_new:N \l__lipsum_tmpa_str
+\int_new:N \l__lipsum_a_int
+\int_new:N \l__lipsum_b_int
+\cs_new_eq:NN \__lipsum_tmp:w ?
+\clist_map_inline:nn { start, itemstart, itemseparator, itemend, end }
{
- \PackageError { lipsum } { Package~expl3~too~old }
+ \clist_map_inline:nn { par, sentence }
{
- You~need~to~update~your~installation~of~the~bundles~
- 'l3kernel'~and~'l3packages'.\MessageBreak
- Loading~lipsum~will~abort!
+ \clist_map_inline:nn { { }, star, nostar }
+ { \tl_new:c { l__lipsum_##1_#1_####1_tl } }
}
- \tex_endinput:D
+ \tl_new:c { l__lipsum_par_#1_parsepar_tl }
}
-\cs_new_eq:NN \__lipsum_split_argument_expanded:nnn \SplitArgument
-\cs_generate_variant:Nn \__lipsum_split_argument_expanded:nnn { nne }
-\msg_new:nnnn{lipsum}{DeprecatedCommand}
-{\string#1\msg_line_context:\\
- \string#1~should~be~substituted~by~\string#2.}
-{ The~command~\string#1~is~deprecated~
- and~should~be~substituted~by~
- \string#2.~
- \string#1~might~not~be~available~in~a~
- future~version~of~lipsum.sty.}
-\seq_new:N\g__lipsum_paragraph_seq
-\tl_new:N \g_lipsum_default_range_tl %
-\tl_new:N \l__lipsum_pars_tl
-\tl_new:N \l__lipsum_sentences_tl
-\seq_new:N \l__lipsum_sentences_seq
-\tl_new:N \l__lipsum_par_list_start_nostar_tl
-\tl_new:N \l__lipsum_par_list_end_nostar_tl
-\tl_new:N \l__lipsum_sentence_list_start_nostar_tl
-\tl_new:N \l__lipsum_sentence_list_end_nostar_tl
-
-\tl_new:N \l__lipsum_par_list_start_star_tl
-\tl_new:N \l__lipsum_par_list_end_star_tl
-\tl_new:N \l__lipsum_sentence_list_start_star_tl
-\tl_new:N \l__lipsum_sentence_list_end_star_tl
-\tl_new:N \l__lipsum_par_list_itemseparator_nostar_tl
-\tl_new:N \l__lipsum_sentence_list_itemseparator_nostar_tl
-
-\tl_new:N \l__lipsum_par_list_itemseparator_star_tl
-\tl_new:N \l__lipsum_sentence_list_itemseparator_star_tl
-
-\tl_new:N \l__lipsum_par_list_itemstart_nostar_tl
-\tl_new:N \l__lipsum_par_list_itemend_nostar_tl
-\tl_new:N \l__lipsum_sentence_list_itemstart_nostar_tl
-\tl_new:N \l__lipsum_sentence_list_itemend_nostar_tl
-
-\tl_new:N \l__lipsum_par_list_itemstart_star_tl
-\tl_new:N \l__lipsum_par_list_itemend_star_tl
-\tl_new:N \l__lipsum_sentence_list_itemstart_star_tl
-\tl_new:N \l__lipsum_sentence_list_itemend_star_tl
-
-\tl_new:N\l__lipsum_par_list_start_tl
-\tl_new:N\l__lipsum_par_list_end_tl
-\tl_new:N\l__lipsum_sentence_list_start_tl
-\tl_new:N\l__lipsum_sentence_list_end_tl
-\tl_new:N\l__lipsum_par_list_itemseparator_tl
-\tl_new:N\l__lipsum_sentence_list_itemseparator_tl
-\tl_new:N\l__lipsum_par_list_itemstart_tl
-\tl_new:N\l__lipsum_par_list_itemend_tl
-\tl_new:N\l__lipsum_sentence_list_itemstart_tl
-\tl_new:N\l__lipsum_sentence_list_itemend_tl
-\str_new:N\g__lipsum_text_str
-\cs_new:Npn \lipsum_store_as_temp_ints:nn #1#2{
- \int_set:Nn\l_tmpa_int{#1}
- \IfNoValueTF{#2}
+\tl_set:Nn \l__lipsum_par_itemseparator_parsepar_tl { ~ }
+\cs_new_protected:Npn \__lipsum_parse_par_range:nNN #1 #2 #3
{
- \int_set:Nn\l_tmpb_int{#1}
+ \tl_if_blank:nTF {#1}
+ { \exp_args:NV \__lipsum_parse_range_arg:nNNn \g_lipsum_default_range_tl }
+ { \__lipsum_parse_range_arg:nNNn {#1} }
+ #2 #3 { \g__lipsum_par_int }
}
+\cs_new_protected:Npn \__lipsum_parse_sentence_range:nNN #1 #2 #3
+ { \__lipsum_parse_range_arg:nNNn {#1} #2 #3 { \c_max_int } }
+\cs_new_protected:Npn \__lipsum_parse_range_arg:nNNn #1
{
- \int_set:Nn\l_tmpb_int{#2}
+ \exp_last_unbraced:No \__lipsum_parse_range_arg:wnNNn
+ \tl_to_str:n { #1 - - } \s__lipsum {#1}
}
-}
-\cs_new:Npn \lipsum_get_non_terminated_par:n #1{
- \seq_item:Nn \g__lipsum_paragraph_seq{#1}
-}
-
-\cs_new:Npn \lipsum_get_terminated_par:n #1 {
- \lipsum_get_non_terminated_par:n{#1}\par
-}
-
-\cs_new:Npn \lipsum_add_to_tokenlist:n #1 {
- \tl_put_right:NV
- \l__lipsum_pars_tl
- \l__lipsum_par_list_itemstart_tl
- \tl_put_right:Nn \l__lipsum_pars_tl {
- \lipsum_get_non_terminated_par:n{#1}
- }
- \tl_put_right:NV
- \l__lipsum_pars_tl
- \l__lipsum_par_list_itemend_tl
-}
-\cs_generate_variant:Nn
- \lipsum_add_to_tokenlist:n { V }
-\cs_new:Npn \lipsum_range_to_tokenlist:nn #1#2 {
- \tl_clear:N \l__lipsum_pars_tl
- \tl_put_right:NV
- \l__lipsum_pars_tl
- \l__lipsum_par_list_start_tl
- \int_set:Nn \l_tmpa_int {#1}
- \int_do_until:nNnn
- {\l_tmpa_int} > {#2}
- {
- \int_compare:nNnT
- \l_tmpa_int > {#1}
- {
- \tl_put_right:NV
- \l__lipsum_pars_tl
- \l__lipsum_par_list_itemseparator_tl
- }
- \lipsum_add_to_tokenlist:V {\l_tmpa_int}
- \int_incr:N\l_tmpa_int
- }
- \tl_put_right:NV
- \l__lipsum_pars_tl
- \l__lipsum_par_list_end_tl
-}
-\cs_generate_variant:Nn
- \lipsum_range_to_tokenlist:nn { VV }
-\cs_new_nopar:Nn
- \__lipsum_expanded_paragraphs_terminated_with_space:{}
-\cs_new:Npn \lipsum_sentences_to_tokenlist:nnn #1#2#3{
-
- \tl_clear:N \l__lipsum_sentences_tl
-
- \int_compare:nT {#2 >= #1}
+\cs_new_protected:Npn \__lipsum_parse_range_arg:wnNNn
+ #1 - #2 - #3 \s__lipsum #4 #5#6 #7
{
- \__lipsum_put_sentence_on_tokenlist:nnnw
- {#1}
- {#2}
- {1}
- #3 .. \q_stop
- }
- \tl_put_left:NV
- \l__lipsum_sentences_tl
- \l__lipsum_sentence_list_start_tl
- \tl_put_right:NV
- \l__lipsum_sentences_tl
- \l__lipsum_sentence_list_end_tl
-}
-\cs_generate_variant:Nn
- \lipsum_sentences_to_tokenlist:nnn { VVf }
-
-\cs_new:Npn
- \__lipsum_put_sentence_on_tokenlist:nnnw
- #1#2#3#4 .
- {
- \int_compare:nNnTF{#1} > {#2}
- { % start > end: leave loop
- \use_none_delimit_by_q_stop:w
+ \str_if_eq:nnTF {#3} { - }
+ {
+ \__lipsum_int_set:Nnn #5 {#1} { 1 }
+ \__lipsum_int_set:Nnn #6 {#2} {#7}
}
- { % start <= end: perform loop
- \tl_if_blank:oTF{#4}
- { % Argument #4 blank.
- % Should be from the .. in the calling macro.
- % End reached. Leave loop.
- \use_none_delimit_by_q_stop:w
+ {
+ \tl_if_empty:nTF {#3}
+ {
+ \__lipsum_int_set:Nnn #5 {#1} { \ERROR }
+ \int_set_eq:NN #6 #5
}
- { % Not yet list end
- \int_compare:nNnTF{#3} > {#2}
- { % Counter > End: Leave loop
- \use_none_delimit_by_q_stop:w
- }
- { % Counter <= End: Proceed
- \int_compare:nT{ #3 >= #1}
- { % Counter >= Start: Put item on list
- \int_compare:nNnT{#3}>{#1}
- { % Counter < Start, insert separator
- \tl_put_right:NV
- \l__lipsum_sentences_tl
- \l__lipsum_sentence_list_itemseparator_tl
- } % End Counter < Start true
- % Put item on list
- \tl_put_right:NV
- \l__lipsum_sentences_tl
- \l__lipsum_sentence_list_itemstart_tl
- \tl_put_right:No
- \l__lipsum_sentences_tl
- { \tl_trim_spaces:n{#4}. }
- \tl_put_right:NV
- \l__lipsum_sentences_tl
- \l__lipsum_sentence_list_itemend_tl
- } % End Counter >= Start: Put item on list
- % Call loop again
- \exp_args:Nnnf
- \__lipsum_put_sentence_on_tokenlist:nnnw
- {#1}
- {#2}
- { \int_eval:n{#3+1} }
- } % End Counter > Start: Proceed
- } % End Not yet list end
- } % End Start > End: Perform loop
- } % End definition
-\cs_new:Npn \__lipsum_protect:n #1 {\tex_noexpand:D#1}
-\cs_new:Npn \__lipsum_set_surrounding_tokens_star:
- {
- \tl_set_eq:NN
- \l__lipsum_par_list_start_tl
- \l__lipsum_par_list_start_star_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_end_tl
- \l__lipsum_par_list_end_star_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemseparator_tl
- \l__lipsum_par_list_itemseparator_star_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemstart_tl
- \l__lipsum_par_list_itemstart_star_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemend_tl
- \l__lipsum_par_list_itemend_star_tl
-
- \tl_set_eq:NN
- \l__lipsum_sentence_list_start_tl
- \l__lipsum_sentence_list_start_star_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_end_tl
- \l__lipsum_sentence_list_end_star_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemseparator_tl
- \l__lipsum_sentence_list_itemseparator_star_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemstart_tl
- \l__lipsum_sentence_list_itemstart_star_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemend_tl
- \l__lipsum_sentence_list_itemend_star_tl
+ {
+ \msg_error:nnn { lipsum } { invalid-range } {#4}
+ \__lipsum_parse_range_arg:nNNn { 2 - 1 } #5 #6 {#7}
+ }
+ }
}
- \cs_new:Npn \__lipsum_set_surrounding_tokens_nostar:
- {
- \tl_set_eq:NN
- \l__lipsum_par_list_start_tl
- \l__lipsum_par_list_start_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_end_tl
- \l__lipsum_par_list_end_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemseparator_tl
- \l__lipsum_par_list_itemseparator_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemstart_tl
- \l__lipsum_par_list_itemstart_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_par_list_itemend_tl
- \l__lipsum_par_list_itemend_nostar_tl
-
- \tl_set_eq:NN
- \l__lipsum_sentence_list_start_tl
- \l__lipsum_sentence_list_start_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_end_tl
- \l__lipsum_sentence_list_end_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemseparator_tl
- \l__lipsum_sentence_list_itemseparator_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemstart_tl
- \l__lipsum_sentence_list_itemstart_nostar_tl
- \tl_set_eq:NN
- \l__lipsum_sentence_list_itemend_tl
- \l__lipsum_sentence_list_itemend_nostar_tl
-
- }
-\cs_new:Nn \__lipsum_ensure_parsable_output:
+\cs_new_protected:Npn \__lipsum_int_set:Nnn #1 #2 #3
+ { \int_set:Nn #1 { \tl_if_blank:nT {#2} {#3} #2 } }
+\cs_generate_variant:Nn \__lipsum_parse_par_range:nNN { e }
+\cs_generate_variant:Nn \__lipsum_parse_sentence_range:nNN { e }
+\cs_new:Npn \__lipsum_sep_item:nn #1 #2
+ { \exp_not:v { l__lipsum_#1_#2_ \l__lipsum_sep_set_str _tl } }
+\cs_new:Npn \lipsum_get_range:nn #1 #2
{
- \tl_set:No
- \l__lipsum_par_list_itemseparator_tl{\space}
- \tl_set:No
- \l__lipsum_par_list_item_start_tl{}
- \tl_set:No
- \l__lipsum_par_list_item_end_tl{}
- \tl_set:No
- \l__lipsum_par_list_start_tl{}
- \tl_set:No
- \l__lipsum_par_list_end_tl{}
+ \__lipsum_sep_item:nn { par } { start }
+ \use:e
+ {
+ \exp_not:N \__lipsum_get_paragraph:ww
+ \__lipsum_build_list:nn {#1} {#2}
+ \exp_not:N \q__lipsum_mark ;
+ \exp_not:N \q__lipsum_mark ; \s__lipsum
+ }
+ \__lipsum_sep_item:nn { par } { end }
}
-
-\NewDocumentCommand\NewLipsumPar{m}{
- \seq_gput_right:Nn{\g__lipsum_paragraph_seq}{#1}
-}
-\NewDocumentCommand\LipsumPar{m}{
- \group_begin:
- \lipsum_get_terminated_par:n{#1}
- \group_end:
-}
-\NewDocumentCommand\SetLipsumParListStart{s+m}{
- \IfBooleanTF{#1}
+\cs_new:Npn \__lipsum_build_list:nn #1 #2
{
- \tl_set:No\l__lipsum_par_list_start_star_tl{#2}
+ \int_step_function:nnN
+ { \int_max:nn {#1} { 1 } }
+ { \int_min:nn {#2} { \g__lipsum_par_int } }
+ \__lipsum_build_list_aux:n
}
+\cs_new:Npn \__lipsum_build_list_aux:n #1 { #1 ; }
+\cs_new:Npn \__lipsum_get_paragraph:ww #1 ; #2 ;
{
- \tl_set:No\l__lipsum_par_list_start_nostar_tl{#2}
+ \if_meaning:w \q__lipsum_mark #2
+ \if_meaning:w \q__lipsum_mark #1
+ \__lipsum_get_paragraph_end:w
+ \else:
+ \lipsum_get_paragraph:n {#1}
+ \fi:
+ \else:
+ \lipsum_get_paragraph:n {#1}
+ \__lipsum_sep_item:nn { par } { itemseparator }
+ \fi:
+ \__lipsum_get_paragraph:ww #2 ;
}
-}
-\NewDocumentCommand\SetLipsumSentenceListStart{s+m}{
- \IfBooleanTF{#1}
+\cs_new:Npn \__lipsum_get_paragraph_end:w #1 \s__lipsum { \fi: \fi: }
+\cs_new:Npn \lipsum_get_paragraph:n #1
{
- \tl_set:No\l__lipsum_sentence_list_start_star_tl{#2}
+ \__lipsum_sep_item:nn { par } { itemstart }
+ \__lipsum_unexpanded_par:n {#1}
+ \__lipsum_sep_item:nn { par } { itemend }
}
+\cs_new:Npn \__lipsum_unexpanded_par:n #1
{
- \tl_set:No\l__lipsum_sentence_list_start_nostar_tl{#2}
+ \bool_lazy_and:nnT
+ { \int_compare_p:nNn { 0 } < {#1} }
+ { \int_compare_p:nNn {#1} < { \g__lipsum_par_int + 1 } }
+ { \exp_not:v { g__lipsum_par_#1_tl } }
}
-}
-\NewDocumentCommand\SetLipsumParListEnd{s+m}{
- \IfBooleanTF{#1}
+\cs_new:Npn \lipsum_get_sentences:nnn #1 #2 #3
{
- \tl_set:No\l__lipsum_par_list_end_star_tl{#2}
+ \__lipsum_sep_item:nn { sentence } { start }
+ \exp_args:Ne \use_ii_i:nn { { \int_max:nn {#1} { 1 } } }
+ { \__lipsum_get_sentences:nnnw { 1 } } {#2}
+ #3 ~ \q__lipsum_mark .~ \s__lipsum
+ \__lipsum_sep_item:nn { sentence } { end }
}
+\cs_new:Npn \__lipsum_get_sentences:nnnw #1 #2 #3 #4 .~
{
- \tl_set:No\l__lipsum_par_list_end_nostar_tl{#2}
+ \int_compare:nNnT {#1} > {#3} { \__lipsum_get_sentences_end:w }
+ \use:nn { \if_meaning:w \q__lipsum_mark } #4
+ \exp_after:wN \__lipsum_get_sentences_end:w
+ \else:
+ \int_compare:nNnF {#1} < {#2}
+ {
+ \int_compare:nNnF {#1} = {#2}
+ { \__lipsum_sep_item:nn { sentence } { itemseparator } }
+ \__lipsum_sep_item:nn { sentence } { itemstart }
+ \exp_not:n { #4 . }
+ \__lipsum_sep_item:nn { sentence } { itemend }
+ }
+ \fi:
+ \exp_args:Nf \__lipsum_get_sentences:nnnw { \int_eval:n { #1 + 1 } }
+ {#2} {#3}
}
-}
-\NewDocumentCommand\SetLipsumSentenceListEnd{s+m}{
- \IfBooleanTF{#1}
+\cs_new:Npn \__lipsum_get_sentences_end:w #1 \s__lipsum { }
+\cs_generate_variant:Nn \lipsum_get_sentences:nnn { nnV }
+\NewDocumentCommand \LipsumPar { m }
{
- \tl_set:No\l__lipsum_sentence_list_end_star_tl{#2}
+ \__lipsum_deprecated:n { LipsumPar }
+ \__lipsum_unexpanded_par:n {#1} \par
}
+\cs_new_protected:Npn \__lipsum_element_set:nnn #1 #2 #3
+ { \tl_set:cn { l__lipsum_ #1 _ \IfBooleanF {#2} { no } star _tl } {#3} }
+\cs_new_protected:Npn \__lipsum_deprecated:n #1
{
- \tl_set:No\l__lipsum_sentence_list_end_nostar_tl{#2}
+ \msg_warning:nnn { lipsum } { cmd-deprecated } {#1}
+ \cs_gset_eq:NN \__lipsum_deprecated:n \use_none:n
}
-}
-\NewDocumentCommand\SetLipsumParListSurrounders{s+m+m}{
- \IfBooleanTF{#1}
+\cs_set_protected:Npn \__lipsum_tmp:w #1 #2 #3 #4
{
- \SetLipsumParListStart*{#2}
- \SetLipsumParListEnd*{#3}
+ \str_set:Nx \l__lipsum_tmpa_str
+ { #2 \tl_if_empty:nTF {#4} {#3} { start } }
+ \use:e
+ {
+ \NewDocumentCommand \exp_not:c { SetLipsum #1 List #2 #3 }
+ { s +m \tl_if_empty:nF {#4} { +m } }
+ {
+ \__lipsum_deprecated:n { SetLipsum #1 List #2 #3 }
+ \__lipsum_element_set:nnn
+ { \exp_args:Ne \str_lowercase:n { #1_\l__lipsum_tmpa_str } }
+ {##1} {##2}
+ \tl_if_empty:nT {#4} { \use_none:nnnn }
+ \__lipsum_element_set:nnn { \str_lowercase:n { #1_#2 #4 } }
+ {##1} {##3}
+ }
+ }
}
+\clist_map_inline:nn { Par, Sentence }
{
- \SetLipsumParListStart{#2}
- \SetLipsumParListEnd{#3}
+ \clist_map_inline:nn
+ { { Start } { }, { End } { }, { Surrounders } { end } }
+ { \__lipsum_tmp:w {#1} { Item } ##1 \__lipsum_tmp:w {#1} { } ##1 }
+ \__lipsum_tmp:w {#1} { Item } { Separator } { }
}
-}
-\NewDocumentCommand\SetLipsumSentenceListSurrounders{s+m+m}{
- \IfBooleanTF{#1}
- {
- \SetLipsumSentenceListStart*{#2}
- \SetLipsumSentenceListEnd*{#3}
- }
- {
- \SetLipsumSentenceListStart{#2}
- \SetLipsumSentenceListEnd{#3}
- }
-}
-\NewDocumentCommand\SetLipsumParListItemStart{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_par_list_itemstart_star_tl{#2}
- }
- {
- \tl_set:No
- \l__lipsum_par_list_itemstart_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\SetLipsumSentenceListItemStart{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemstart_star_tl {#2}
- }
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemstart_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\SetLipsumParListItemEnd{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_par_list_itemend_star_tl{#2}
- }
- {
- \tl_set:No
- \l__lipsum_par_list_itemend_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\SetLipsumSentenceListItemEnd{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemend_star_tl{#2}
- }
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemend_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\SetLipsumParListItemSurrounders{s+m+m}{
- \IfBooleanTF{#1}
+\NewDocumentCommand \SetLipsumDefault { m }
{
- \SetLipsumParListItemStart*{#2}
- \SetLipsumParListItemEnd*{#3}
+ \__lipsum_parse_par_range:eNN {#1} \l__lipsum_a_int \l__lipsum_b_int
+ \tl_gset:Nx \g_lipsum_default_range_tl
+ { \int_use:N \l__lipsum_a_int - \int_use:N \l__lipsum_b_int }
}
+\NewDocumentCommand \lipsum { s O { \g_lipsum_default_range_tl } o }
{
- \SetLipsumParListItemStart{#2}
- \SetLipsumParListItemEnd{#3}
+ \__lipsum_do:nnnn {#1} {#2} {#3}
+ {
+ \__lipsum_set_hyphens:
+ \tl_use:N ##1
+ \__lipsum_restore_hyphens:
+ }
}
-}
-
-\NewDocumentCommand\SetLipsumSentenceListItemSurrounders{s+m+m}{
- \IfBooleanTF{#1}
+\NewDocumentCommand \unpacklipsum { s O { \g_lipsum_default_range_tl } o }
+ { \__lipsum_do:nnnn {#1} {#2} {#3} { \tl_gset_eq:NN \lipsumexp ##1 } }
+\cs_new_eq:NN \lipsumexp \prg_do_nothing:
+\cs_new_protected:Npn \__lipsum_do:nnnn #1 #2 #3 #4
{
- \SetLipsumSentenceListItemStart*{#2}
- \SetLipsumSentenceListItemEnd*{#3}
+ \cs_set_protected:Npn \__lipsum_do:N ##1 {#4}
+ \__lipsum_parse_par_range:eNN {#2} \l__lipsum_a_int \l__lipsum_b_int
+ \str_set_eq:NN \l__lipsum_tmpa_str \l__lipsum_sep_set_str
+ \str_set:Nx \l__lipsum_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__lipsum_output_tl
+ { \lipsum_get_range:nn { \l__lipsum_a_int } { \l__lipsum_b_int } }
+ }
+ {
+ \str_set:Nn \l__lipsum_sep_set_str { parsepar }
+ \tl_set:Nx \l__lipsum_output_tl
+ { \lipsum_get_range:nn { \l__lipsum_a_int } { \l__lipsum_b_int } }
+ \str_set:Nx \l__lipsum_sep_set_str { \IfBooleanF {#1} { no } star }
+ \__lipsum_parse_sentence_range:eNN {#3} \l__lipsum_a_int \l__lipsum_b_int
+ \tl_set:Nx \l__lipsum_output_tl
+ {
+ \lipsum_get_sentences:nnV { \l__lipsum_a_int } { \l__lipsum_b_int }
+ \l__lipsum_output_tl
+ }
+ }
+ \str_set_eq:NN \l__lipsum_sep_set_str \l__lipsum_tmpa_str
+ \__lipsum_do:N \l__lipsum_output_tl
}
+\cs_new_eq:NN \__lipsum_do:N ?
+\cs_new_protected:Npn \__lipsum_set_hyphens:
{
- \SetLipsumSentenceListItemStart{#2}
- \SetLipsumSentenceListItemEnd{#3}
+ \bool_if:NTF \l__lipsum_autolang_bool
+ { \use:x } { \use_none:n }
+ {
+ \cs_if_exist:NTF \hyphenrules
+ {
+ \exp_not:N \hyphenrules { \g__lipsum_language_tl }
+ \cs_set_protected:Npn \__lipsum_restore_hyphens:
+ { \exp_not:N \hyphenrules { \languagename } }
+ }
+ {
+ \cs_if_exist:cTF { l@ \g__lipsum_language_tl }
+ { \language \use:c { l@ \g__lipsum_language_tl } }
+ { \msg_error:nn { lipsum } { language-undefined } }
+ \cs_set_protected:Npn \__lipsum_restore_hyphens:
+ { \language \int_eval:n { \language } \scan_stop: }
+ }
+ }
}
-}
-\NewDocumentCommand\SetLipsumParListItemSeparator{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_par_list_itemseparator_star_tl{#2}
- }
- {
- \tl_set:No
- \l__lipsum_par_list_itemseparator_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\SetLipsumSentenceListItemSeparator{s+m}{
- \IfBooleanTF{#1}
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemseparator_star_tl{#2}
- }
- {
- \tl_set:No
- \l__lipsum_sentence_list_itemseparator_nostar_tl{#2}
- }
-}
-\NewDocumentCommand\LipsumProtect{m}{}
-\cs_gset_eq:NN
- \LipsumProtect
- \__lipsum_protect:n
-
-\NewDocumentCommand\SetLipsumDefault{m}{
- \tl_gset:No\g_lipsum_default_range_tl{#1}
-}
-\NewDocumentCommand\setlipsumdefault{m}{%
- \msg_warning:nnnn
- {lipsum}
- {DeprecatedCommand}
- {\setlipsumdefault}
- {\SetLipsumDefault}
- \SetLipsumDefault{#1}
-}
-
-\NewDocumentCommand
- \lipsum{
- s
- >{\__lipsum_split_argument_expanded:nne{1}{-}}
- O{\g_lipsum_default_range_tl}
- >{\__lipsum_split_argument_expanded:nne{1}{-}}
- o
+\cs_new_protected:Npn \__lipsum_restore_hyphens:
+ { \prg_do_nothing: }
+\cs_new_protected:Npn \NewLipsumPar #1
+ {
+ \int_gincr:N \g__lipsum_par_int
+ \tl_gclear_new:c { g__lipsum_par_ \int_use:N \g__lipsum_par_int _tl }
+ \tl_gset:cn { g__lipsum_par_ \int_use:N \g__lipsum_par_int _tl } {#1}
}
+\NewDocumentCommand \SetLipsumText { m }
{
- \group_begin:
- \lipsum_store_as_temp_ints:nn #2
- \IfBooleanTF {#1}
- {
- \__lipsum_set_surrounding_tokens_star:
- }
- {
- \__lipsum_set_surrounding_tokens_nostar:
- }
-
- \IfNoValueTF{#3}
+ \str_if_eq:VnF \g__lipsum_text_str {#1}
{
- \lipsum_range_to_tokenlist:VV
- { \l_tmpa_int }{ \l_tmpb_int }
- \tl_use:N \l__lipsum_pars_tl
+ \tl_gset:Nn \g__lipsum_language_tl { english }
+ \int_gzero:N \g__lipsum_par_int
+ \file_input:n { #1.ltd }
+ \str_gset:Nn \g__lipsum_text_str {#1}
}
+ }
+\NewDocumentCommand \SetLipsumLanguage { m }
+ { \tl_gset:Nn \g__lipsum_language_tl {#1} }
+\cs_new_protected:Npn \__lipsum_delim_restore:nnnnn #1 #2 #3 #4 #5
+ {
+ \keys_set:nn { lipsum }
{
- \__lipsum_ensure_parsable_output:
- \lipsum_range_to_tokenlist:VV
- { \l_tmpa_int }{ \l_tmpb_int }
- \lipsum_store_as_temp_ints:nn #3
- \cs_gset_nopar:Nx
- \__lipsum_expanded_paragraphs_terminated_with_space:
- {\tl_use:N\l__lipsum_pars_tl}
- \lipsum_sentences_to_tokenlist:VVf
- { \l_tmpa_int }
- { \l_tmpb_int }
- \__lipsum_expanded_paragraphs_terminated_with_space:
- \tl_use:N \l__lipsum_sentences_tl
+ #1-before = , #1-begin = , #1-end = {#2}, #1-after = ,
+ #1-before* = , #1-begin* = , #1-end* = {#3}, #1-after* = ,
+ #1-sep = {#4}, #1-sep* = {#5}
}
- \group_end:
}
-\NewDocumentCommand\lipsumexp{}{}
-\cs_new:Nn \__lipsum_expanded: {}
-\NewDocumentCommand
- \unpacklipsum
+\cs_new_protected:Nn \__lipsum_restore_sentence_list:
+ { \__lipsum_delim_restore:nnnnn { sentence } { } { } { ~ } { ~ } }
+\cs_new_eq:NN \__lipsum_restore_par_list: ?
+\cs_new_protected:Npn \LipsumRestoreParList
{
- s
- >{\__lipsum_split_argument_expanded:nne{1}{-}}
- O{\g_lipsum_default_range_tl}
- >{\__lipsum_split_argument_expanded:nne{1}{-}}
- o
+ \__lipsum_deprecated:n { LipsumRestoreParList }
+ \__lipsum_restore_par_list:
}
+\cs_new_protected:Npn \LipsumRestoreSentenceList
{
-
- \group_begin:
- \lipsum_store_as_temp_ints:nn #2
- \IfBooleanTF {#1}
- {
- \__lipsum_set_surrounding_tokens_star:
- }
- {
- \__lipsum_set_surrounding_tokens_nostar:
- }
- \IfNoValueTF{#3}
- {
- \lipsum_range_to_tokenlist:VV
- { \l_tmpa_int } { \l_tmpb_int }
- \cs_gset:Nx
- \__lipsum_expanded: {\tl_use:N\l__lipsum_pars_tl}
- \cs_gset_eq:NN
- \lipsumexp \__lipsum_expanded:
- }
- {
- \__lipsum_ensure_parsable_output:
- \lipsum_range_to_tokenlist:VV
- { \l_tmpa_int } { \l_tmpb_int }
- \cs_gset_nopar:Nx
- \__lipsum_expanded_paragraphs_terminated_with_space:
- { \tl_use:N\l__lipsum_pars_tl }
- \lipsum_store_as_temp_ints:nn #3
- \lipsum_sentences_to_tokenlist:VVf
- { \l_tmpa_int }
- { \l_tmpb_int }
- \__lipsum_expanded_paragraphs_terminated_with_space:
- \cs_gset:Nx
- \__lipsum_expanded:
- { \tl_use:N\l__lipsum_sentences_tl }
- \cs_gset_eq:NN
- \lipsumexp \__lipsum_expanded:
- }
- \group_end:
+ \__lipsum_deprecated:n { LipsumRestoreSentenceList }
+ \__lipsum_restore_sentence_list:
}
-\NewDocumentCommand\IfLipsumText{mmm}{%
- \str_if_eq:VnTF\g__lipsum_text_str{#1}{#2}{#3}
-}
-\NewDocumentCommand\SetLipsumText{m}{%
- \IfLipsumText{#1}{}{
- \seq_gclear:N\g__lipsum_paragraph_seq
- \file_input:n{#1.ltd}
- \str_gset:Nn\g__lipsum_text_str{#1}
+\cs_new_protected:Npn \LipsumRestoreAll
+ {
+ \__lipsum_deprecated:n { LipsumRestoreAll }
+ \__lipsum_restore_par_list: \__lipsum_restore_sentence_list:
}
-}
-
-
-\cs_new:Nn \__lipsum_restore_sentence_list: {
- \SetLipsumSentenceListItemSeparator{\space}
- \SetLipsumSentenceListItemSeparator*{\space}
- \SetLipsumSentenceListSurrounders{}{}
- \SetLipsumSentenceListSurrounders*{}{}
- \SetLipsumSentenceListItemSurrounders*{}{}
- \SetLipsumSentenceListItemSurrounders{}{}
-}
-\cs_new:Nn \__lipsum_restore_par_list: {
- \SetLipsumParListItemSeparator{\par}
- \SetLipsumParListItemSeparator*{\space}
- \SetLipsumParListSurrounders{}{}
- \SetLipsumParListSurrounders*{}{}
- \SetLipsumParListItemSurrounders*{}{}
- \SetLipsumParListItemSurrounders{}{}
-}
-
-\DeclareOption{nopar}{%
- \cs_gset:Nn \__lipsum_restore_sentence_list: {
- \SetLipsumSentenceListItemSeparator{\space}
- \SetLipsumSentenceListItemSeparator*{\space}
- \SetLipsumSentenceListEnd{}
- \SetLipsumSentenceListEnd*{}
- \SetLipsumSentenceListItemSurrounders*{}{}
- \SetLipsumSentenceListItemSurrounders{}{}
+\NewDocumentCommand \setlipsum { +m }
+ { \keys_set:nn { lipsum } {#1} }
+\keys_define:nn { lipsum }
+ {
+ nopar .choice: ,
+ nopar / true .code:n =
+ {
+ \cs_gset_protected:Npn \__lipsum_restore_par_list:
+ { \__lipsum_delim_restore:nnnnn { par } { } { \par } { ~ } { } }
+ } ,
+ nopar / false .code:n =
+ {
+ \cs_gset_protected:Nn \__lipsum_restore_par_list:
+ { \__lipsum_delim_restore:nnnnn { par } { \par } { } { } { ~ } }
+ } ,
+ nopar .initial:n = false ,
+ nopar .default:n = true ,
+ auto-lang .bool_set:N = \l__lipsum_autolang_bool ,
+ auto-lang .initial:n = true ,
+ auto-lang .default:n = true ,
+ text .code:n = \SetLipsumText{#1} ,
+ text .value_required:n = true ,
+ language .tl_gset:N = \g__lipsum_language_tl ,
+ language .value_required:n = true ,
+ default-range .code:n = \SetLipsumDefault{#1} ,
+ default-range .initial:n = 1-7 ,
+ default-range .default:n = 1-7 ,
}
- \cs_gset:Nn \__lipsum_restore_par_list: {
- \SetLipsumParListItemSeparator{\space}
- \SetLipsumParListItemSeparator*{\par}
- \SetLipsumParListEnd{}
- \SetLipsumParListEnd*{}
- \SetLipsumParListItemSurrounders*{}{}
- \SetLipsumParListItemSurrounders{}{}
+\cs_set_protected:Npn \__lipsum_tmp:w #1 #2 #3
+ {
+ \keys_define:nn { lipsum }
+ {
+ #1-before #2 .tl_set:c = l__lipsum_#1_start _#3star_tl ,
+ #1-begin #2 .tl_set:c = l__lipsum_#1_itemstart _#3star_tl ,
+ #1-sep #2 .tl_set:c = l__lipsum_#1_itemseparator _#3star_tl ,
+ #1-end #2 .tl_set:c = l__lipsum_#1_itemend _#3star_tl ,
+ #1-after #2 .tl_set:c = l__lipsum_#1_end _#3star_tl ,
+ }
}
-}
-\ProcessOptions
-\NewDocumentCommand\LipsumRestoreParList{}{}
-\cs_gset_eq:NN
- \LipsumRestoreParList
- \__lipsum_restore_par_list:
-\NewDocumentCommand\LipsumRestoreSentenceList{}{}
-\cs_gset_eq:NN
- \LipsumRestoreSentenceList
- \__lipsum_restore_sentence_list:
-\NewDocumentCommand\LipsumRestoreAll{}{
- \LipsumRestoreParList
- \LipsumRestoreSentenceList
-}
-\LipsumRestoreAll
+\__lipsum_tmp:w { par } { } { no } \__lipsum_tmp:w { sentence } { } { no }
+\__lipsum_tmp:w { par } * { } \__lipsum_tmp:w { sentence } * { }
\ExplSyntaxOff
-
-\SetLipsumDefault{1-7}
-\SetLipsumText{lipsum}
+\setlipsum{text=lipsum}
+\ProcessKeysOptions{lipsum}
+\ExplSyntaxOn
+\__lipsum_restore_par_list:
+\__lipsum_restore_sentence_list:
+\msg_new:nnn { lipsum } { invalid-range }
+ { Invalid~number~or~range~'#1'. }
+\msg_new:nnn { lipsum } { language-undefined }
+ { Language~'\g__lipsum_language_tl'~undefined. }
+\msg_new:nnn { lipsum } { cmd-deprecated }
+ {
+ Command~'\iow_char:N\\#1'~deprecated. \\
+ See~the~lipsum~documentation~for~help.
+ }
%%
%%
%% End of file `lipsum.sty'.