diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/lipsum/lipsum.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/lipsum/lipsum.sty | 854 |
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'. |