diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty | 417 |
1 files changed, 298 insertions, 119 deletions
diff --git a/Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty b/Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty index 548f5351512..e2819da5521 100644 --- a/Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty +++ b/Master/texmf-dist/tex/latex/zhlipsum/zhlipsum.sty @@ -6,7 +6,7 @@ %% %% zhlipsum.dtx (with options: `package') %% -%% Copyright (C) 2017, 2018 by Xiangdong Zeng <pssysrq@163.com> +%% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com> %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -22,23 +22,21 @@ %% %% The Current Maintainer of this work is Xiangdong Zeng. %% -%% This work consists of the file zhlipsum.dtx, -%% and the derived files zhlipsum.ins, -%% zhlipsum.sty, -%% zhlipsum-utf8.def, -%% zhlipsum-gbk.def, -%% zhlipsum-big5.def, -%% zhlipsum-example-utf8.tex, -%% zhlipsum-example-gbk.tex, -%% zhlipsum-example-big5.tex, -%% zhlipsum-en.tex, -%% zhlipsum.pdf, -%% zhlipsum-en.pdf, -%% and README.md. +%% This work consists of the files zhlipsum.dtx, +%% zhlipsum-text.dtx, +%% and the derived files zhlipsum.ins, +%% zhlipsum.sty, +%% zhlipsum-utf8.def, +%% zhlipsum-gbk.def, +%% zhlipsum-big5.def, +%% zhlipsum-en.tex, +%% zhlipsum.pdf, +%% zhlipsum-en.pdf, +%% and README.md. %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo $Id: zhlipsum.dtx 0.5 2018-01-06 12:00:00Z Xiangdong Zeng <pssysrq@163.com> $ +\GetIdInfo $Id: zhlipsum.dtx 1.0.0 2018-04-03 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $ {Chinese dummy text} \ProvidesExplPackage{\ExplFileName} {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -55,161 +53,342 @@ \@ifpackagelater {#1} { 2017/12/16 } { } { \msg_error:nnn { zhlipsum } { l3-too-old } {#1} } } -\str_new:N \l__zhlipsum_tmpa_str +\tl_new:N \l__zhlipsum_tmpa_tl +\seq_new:N \l__zhlipsum_tmpa_seq +\seq_new:N \l__zhlipsum_tmpb_seq \tl_new:N \g__zhlipsum_encoding_tl -\int_const:Nn \c__zhlipsum_max_par_number_int { 50 } +\seq_new:N \g_zhlipsum_seq +\seq_new:N \c_zhlipsum_simp_seq +\seq_new:N \c_zhlipsum_trad_seq +\seq_set_from_clist:Nn \c_zhlipsum_simp_seq { simp, zhufu, aspirin } +\seq_set_from_clist:Nn \c_zhlipsum_trad_seq { trad, xiangyu, nanshanjing } +\cs_generate_variant:Nn \file_input:n { x } \prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF } -\bool_lazy_any:nTF +\prg_new_protected_conditional:Npnn \__zhlipsum_if_unicode_engine: { T, F, TF } { - { \sys_if_engine_xetex_p: } - { \sys_if_engine_luatex_p: } - { \sys_if_engine_uptex_p: } + \bool_lazy_any:nTF + { + { \sys_if_engine_xetex_p: } + { \sys_if_engine_luatex_p: } + { \sys_if_engine_uptex_p: } + } + { \prg_return_true: } + { \prg_return_false: } + } +\prg_new_protected_conditional:Npnn \__zhlipsum_if_encoding:n #1 { T, F, TF } + { + \tl_if_eq:VnTF \g__zhlipsum_encoding_tl {#1} + { \prg_return_true: } { \prg_return_false: } } - { \cs_new_eq:NN \__zhlipsum_if_unicode_engine:TF \use_i:nn } - { \cs_new_eq:NN \__zhlipsum_if_unicode_engine:TF \use_ii:nn } -\cs_new:Npn \__zhlipsum_input_def_file:n #1 - { \file_input:n { zhlipsum- #1 .def } } -\cs_generate_variant:Nn \__zhlipsum_input_def_file:n { V } +\cs_new:Npn \__zhlipsum_msg_new:nn { \msg_new:nnn { zhlipsum } } +\cs_new:Npn \__zhlipsum_error:n { \msg_error:nn { zhlipsum } } +\cs_new:Npn \__zhlipsum_error:nn { \msg_error:nnn { zhlipsum } } +\cs_new:Npn \__zhlipsum_warning:nn { \msg_warning:nnn { zhlipsum } } +\cs_new:Npn \__zhlipsum_warning:nnn { \msg_warning:nnnn { zhlipsum } } +\cs_new:Npn \__zhlipsum_warning:nxxx { \msg_warning:nnxxx { zhlipsum } } +\cs_new:Npn \__zhlipsum_info:nn { \msg_info:nnn { zhlipsum } } \cs_new_eq:NN \__zhlipsum_par: \tex_par:D \keys_define:nn { zhlipsum / option } { - encoding .choice:, - encoding / utf8 .code:n = - { \tl_set:Nn \g__zhlipsum_encoding_tl { utf8 } }, - encoding / gbk .code:n = - { - \__zhlipsum_if_unicode_engine:TF - { - \tl_set:Nn \g__zhlipsum_encoding_tl { utf8 } - \msg_warning:nnn { zhlipsum } { unicode-engine } { gbk } - } - { \tl_set:Nn \g__zhlipsum_encoding_tl { gbk } } - }, - encoding / big5 .code:n = + encoding .choices:nn = + { utf8, gbk, big5 } { - \__zhlipsum_if_unicode_engine:TF + \tl_gset_eq:NN \g__zhlipsum_encoding_tl \l_keys_choice_tl + \__zhlipsum_if_unicode_engine:T { - \tl_set:Nn \g__zhlipsum_encoding_tl { utf8 } - \msg_warning:nnn { zhlipsum } { unicode-engine } { big5 } + \__zhlipsum_if_encoding:nF { utf8 } + { + \tl_gset:Nn \g__zhlipsum_encoding_tl { utf8 } + \__zhlipsum_warning:nn { unicode-engine } {#1} + } } - { \tl_set:Nn \g__zhlipsum_encoding_tl { big5 } } + \__zhlipsum_if_ctex_valid_encoding:F + { \__zhlipsum_error:nn { ctex-invalid-encoding } {#1} } }, encoding / unknown .code:n = - { \msg_error:nnn { zhlipsum } { encoding-invalid } {#1} }, + { \__zhlipsum_error:nn { invalid-encoding } {#1} }, encoding .value_required:n = true, - encoding .initial:n = { utf8 }, - unknown .code:n = - { \msg_error:nn { zhlipsum } { unknown-option } } + unknown .code:n = { \__zhlipsum_error:n { unknown-option } } } -\msg_new:nnn { zhlipsum } { unicode-engine } +\__zhlipsum_msg_new:nn { unicode-engine } { You~ are~ now~ using~ Unicode~ engine~ \c_sys_engine_str. \\ Encoding~ "#1"~ is~ invalid.~ Changed~ into~ "utf8". } -\msg_new:nnn { zhlipsum } { encoding-invalid } +\__zhlipsum_msg_new:nn { ctex-invalid-encoding } + { + Package~ option~ "encoding=#1"~ is~ in~ conflict~ with~ ctex's~ + option~ "\tl_use:N \l__ctex_encoding_tl".\\\\ + Please~ check~ the~ package~ options. + } +\__zhlipsum_msg_new:nn { invalid-encoding } { Encoding~ "#1"~ is~ invalid. \\ Available~ encodings~ are~ "utf8",~ "gbk"~ and~ "big5". } -\msg_new:nnn { zhlipsum } { unknown-option } +\__zhlipsum_msg_new:nn { unknown-option } { Package~ option~ "\l_keys_key_tl"~ is~ unknown. } +\prg_new_protected_conditional:Npnn \__zhlipsum_if_ctex_valid_encoding: { F } + { + \tl_if_exist:NTF \l__ctex_encoding_tl + { + \tl_set:Nx \l__zhlipsum_tmpa_tl + { \str_lower_case:f { \l__ctex_encoding_tl } } + \str_if_eq:NNTF \g__zhlipsum_encoding_tl \l__zhlipsum_tmpa_tl + { \prg_return_true: } { \prg_return_false: } + } + { \prg_return_true: } + } +\tl_if_exist:NTF \l__ctex_encoding_tl + { + \tl_if_eq:VnTF \l__ctex_encoding_tl { UTF8 } + { \tl_gset:Nn \g__zhlipsum_encoding_tl { utf8 } } + { + \tl_if_eq:VnT \l__ctex_encoding_tl { GBK } + { \tl_gset:Nn \g__zhlipsum_encoding_tl { gbk } } + } + } + { \tl_gset:Nn \g__zhlipsum_encoding_tl { utf8 } } \ProcessKeysOptions { zhlipsum / option } -\__zhlipsum_input_def_file:V \g__zhlipsum_encoding_tl -\str_new:N \l__zhlipsum_script_str +\tl_new:N \l__zhlipsum_name_tl +\tl_new:N \l__zhlipsum_before_tl +\tl_new:N \l__zhlipsum_after_tl +\tl_new:N \l__zhlipsum_inter_tl \keys_define:nn { zhlipsum } { - script .choice:, - script / simp .code:n = + name .code:n = { - \str_set:Nn \l__zhlipsum_script_str { simp } - \tl_if_eq:VnT \g__zhlipsum_encoding_tl { big5 } + \tl_set:Nn \l__zhlipsum_name_tl {#1} + \__zhlipsum_if_encoding:nT { big5 } { - \str_set:Nn \l__zhlipsum_script_str { trad } - \msg_warning:nn { zhlipsum } { big5-require-trad } + \seq_if_in:NVT \c_zhlipsum_simp_seq \l__zhlipsum_name_tl + { + \__zhlipsum_warning:nn { big5-require-trad } {#1} + \tl_set:Nn \l__zhlipsum_name_tl { trad } + } } }, - script / trad .code:n = - { \str_set:Nn \l__zhlipsum_script_str { trad } }, - script / unknown .code:n = - { \msg_error:nnn { zhlipsum } { script-invalid } {#1} }, - script .value_required:n = true - } -\msg_new:nnn { zhlipsum } { big5-require-trad } - { - "script=simp"~ is~ not~ available~ in~ "BIG5"~ encoding.\\ - Changed~ into~ "script=trad". + script .code:n = + { + \__zhlipsum_warning:nn { deprecated-option } + { Option~ "name=#1"~ will~ be~ set. } + \keys_set:nn { zhlipsum } { name = #1 } + }, + before .tl_set:N = \l__zhlipsum_before_tl, + after .tl_set:N = \l__zhlipsum_after_tl, + inter .tl_set:N = \l__zhlipsum_inter_tl } -\msg_new:nnn { zhlipsum } { script-invalid } +\__zhlipsum_msg_new:nn { big5-require-trad } { - Script~ "#1"~ is~ unknown. \\ - Available~ scripts~ are~ "simp"~ and~ "trad". + Name~ "#1"~ is~ not~ available~ in~ "Big5"~ encoding. \\ + Changed~ into~ "trad". } -\tl_if_eq:VnTF \g__zhlipsum_encoding_tl { big5 } - { \keys_set:nn { zhlipsum } { script = trad } } - { \keys_set:nn { zhlipsum } { script = simp } } -\NewDocumentCommand \zhlipsum - { s >{ \SplitArgument { 1 } { - } } O{ 1 - 3 } o } +\__zhlipsum_msg_new:nn { deprecated-option } + { Option~ "\l_keys_key_tl"~ is~ deprecated. \\ #1 } +\__zhlipsum_if_encoding:nTF { big5 } + { \keys_set:nn { zhlipsum } { name = trad } } + { \keys_set:nn { zhlipsum } { name = simp } } +\NewDocumentCommand \zhlipsum { s G { 1 - 3 } +o } { \group_begin: - \__zhlipsum_process_par_number:nn #2 - \IfValueT {#3} { \keys_set:nn { zhlipsum } {#3} } - \__zhlipsum_par: - \IfBooleanTF {#1} - { - \zhlipsum_print_multi_no_par:VVV - \l__zhlipsum_begin_int - \l__zhlipsum_step_int - \l__zhlipsum_end_int - \__zhlipsum_par: - } + \IfBooleanF {#1} { - \zhlipsum_print_multi:VVV - \l__zhlipsum_begin_int - \l__zhlipsum_step_int - \l__zhlipsum_end_int + \tl_set:Nn \l__zhlipsum_before_tl { \__zhlipsum_par: } + \tl_set:Nn \l__zhlipsum_after_tl { \__zhlipsum_par: } + \tl_set:Nn \l__zhlipsum_inter_tl { \__zhlipsum_par: } } + \IfValueT {#3} { \keys_set:nn { zhlipsum } {#3} } + \zhlipsum_use:Vn \l__zhlipsum_name_tl {#2} \group_end: } +\seq_new:N \l__zhlipsum_par_num_seq +\cs_new_protected:Npn \zhlipsum_use:nn #1#2 + { + \__zhlipsum_if_cjk_valid_encoding:TF + { + \zhlipsum_if_exist:nTF {#1} + { + \__zhlipsum_parse_par:nn {#1} {#2} + \seq_pop_right:NN \l__zhlipsum_par_num_seq \l__zhlipsum_tmpa_tl + \tl_use:N \l__zhlipsum_before_tl + \seq_map_inline:Nn \l__zhlipsum_par_num_seq + { + \__zhlipsum_use:nn {#1} {##1} + \tl_use:N \l__zhlipsum_inter_tl + } + \__zhlipsum_use:nn {#1} { \tl_use:N \l__zhlipsum_tmpa_tl } + \tl_use:N \l__zhlipsum_after_tl + } + { \__zhlipsum_error:nn { invalid-name } {#1} } + } + { \__zhlipsum_error:n { CJK-invalid-encoding } } + } +\cs_generate_variant:Nn \zhlipsum_use:nn { Vn } +\__zhlipsum_msg_new:nn { invalid-name } + { + Name~ "#1"~ is~ unknown. \\\\ + Please~ use~ the~ pre-defined~ Chinese~ dummy~ texts~ or~ + declare~ new~ one. + } +\__zhlipsum_msg_new:nn { CJK-invalid-encoding } + { + The~ current~ CJK~ environment~ uses~ "\tl_use:N \CJK@@@enc"~ + encoding,\\ + but~ zhlipsum~ package~ has~ been~ loaded~ with~ the~ option~ + "encoding=\tl_use:N \g__zhlipsum_encoding_tl".\\\\ + Please~ check~ the~ package~ options. + } +\prg_new_protected_conditional:Npnn \__zhlipsum_if_cjk_valid_encoding: { TF } + { + \tl_if_exist:NTF \CJK@@@enc + { + \tl_set:Nx \l__zhlipsum_tmpa_tl { \str_lower_case:f { \CJK@@@enc } } + \str_if_eq:NNTF \g__zhlipsum_encoding_tl \l__zhlipsum_tmpa_tl + { \prg_return_true: } + { + \__zhlipsum_if_encoding:nTF { gbk } + { + \str_if_eq:VnTF \l__zhlipsum_tmpa_tl { gb } + { \prg_return_true: } { \prg_return_false: } + } + { + \__zhlipsum_if_encoding:nTF { big5 } + { + \str_if_eq:VnTF \l__zhlipsum_tmpa_tl { bg5 } + { \prg_return_true: } { \prg_return_false: } + } + { \prg_return_false: } + } + } + } + { \prg_return_true: } + } +\prg_new_protected_conditional:Npnn \zhlipsum_if_exist:n #1 { T, F, TF } + { + \seq_if_in:NnTF \g_zhlipsum_seq {#1} + { \prg_return_true: } { \prg_return_false: } + } \int_new:N \l__zhlipsum_begin_int \int_new:N \l__zhlipsum_end_int -\int_new:N \l__zhlipsum_step_int -\cs_new:Npn \__zhlipsum_process_par_number:nn #1#2 +\int_new:N \l__zhlipsum_max_int +\bool_new:N \l__zhlipsum_modified_range_bool +\bool_new:N \l__zhlipsum_invalid_range_bool +\cs_new_protected:Npn \__zhlipsum_parse_par:nn #1#2 { - \__zhlipsum_process_par_number_aux:Nn \l__zhlipsum_begin_int {#1} - \IfNoValueTF {#2} - { \int_set_eq:NN \l__zhlipsum_end_int \l__zhlipsum_begin_int } - { \__zhlipsum_process_par_number_aux:Nn \l__zhlipsum_end_int {#2} } - \int_compare:nTF - { \l__zhlipsum_begin_int <= \l__zhlipsum_end_int } - { \int_set_eq:NN \l__zhlipsum_step_int \c_one } - { \int_set:Nn \l__zhlipsum_step_int { -1 } } + \seq_clear:N \l__zhlipsum_par_num_seq + \int_set_eq:Nc \l__zhlipsum_max_int { g__zhlipsum_ #1 _int } + \clist_map_inline:nn {#2} + { + \__zhlipsum_parse_par_aux:n {##1} + \bool_if:NTF \l__zhlipsum_invalid_range_bool + { \__zhlipsum_warning:nnn { invalid-range } {##1} {#2} } + { + \bool_if:NT \l__zhlipsum_modified_range_bool + { + \__zhlipsum_warning:nxxx { modified-range } + {##1} {#2} { \__zhlipsum_par_range: } + } + \seq_concat:NNN \l__zhlipsum_par_num_seq + \l__zhlipsum_par_num_seq \l__zhlipsum_tmpa_seq + } + } } -\cs_new:Npn \__zhlipsum_process_par_number_aux:Nn #1#2 +\cs_new_protected:Npn \__zhlipsum_parse_par_aux:n #1 { - \int_compare:nTF { #2 <= \c__zhlipsum_max_par_number_int } - { \int_set:Nn #1 {#2} } - { \int_set_eq:NN #1 \c__zhlipsum_max_par_number_int } + \bool_set_false:N \l__zhlipsum_modified_range_bool + \bool_set_false:N \l__zhlipsum_invalid_range_bool + \seq_clear:N \l__zhlipsum_tmpa_seq + \tl_if_in:nnTF {#1} { - } + { + \seq_set_split:Nnn \l__zhlipsum_tmpb_seq { - } {#1} + \seq_pop_left:NN \l__zhlipsum_tmpb_seq \l__zhlipsum_tmpa_tl + \tl_if_empty:NTF \l__zhlipsum_tmpa_tl + { \int_set_eq:NN \l__zhlipsum_begin_int \c_one } + { + \int_set:Nn \l__zhlipsum_begin_int { \l__zhlipsum_tmpa_tl } + \int_compare:nNnT \l__zhlipsum_begin_int < \c_one + { + \int_set_eq:NN \l__zhlipsum_begin_int \c_one + \bool_set_true:N \l__zhlipsum_modified_range_bool + } + } + \seq_pop_left:NN \l__zhlipsum_tmpb_seq \l__zhlipsum_tmpa_tl + \tl_if_empty:NTF \l__zhlipsum_tmpa_tl + { \int_set_eq:NN \l__zhlipsum_end_int \l__zhlipsum_max_int } + { + \int_set:Nn \l__zhlipsum_end_int { \l__zhlipsum_tmpa_tl } + \int_compare:nNnT \l__zhlipsum_end_int > \l__zhlipsum_max_int + { + \int_set_eq:NN \l__zhlipsum_end_int \l__zhlipsum_max_int + \bool_set_true:N \l__zhlipsum_modified_range_bool + } + } + \bool_lazy_or:nnTF + { \int_compare_p:nNn \l__zhlipsum_begin_int > \l__zhlipsum_max_int } + { \int_compare_p:nNn \l__zhlipsum_begin_int > \l__zhlipsum_end_int } + { \bool_set_true:N \l__zhlipsum_invalid_range_bool } + { + \int_step_inline:nnnn + { \l__zhlipsum_begin_int } { \c_one } { \l__zhlipsum_end_int } + { \seq_put_right:Nn \l__zhlipsum_tmpa_seq {##1} } + } + } + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn {#1} > { \l__zhlipsum_max_int } } + { \int_compare_p:nNn {#1} < { \c_one } } + { \bool_set_true:N \l__zhlipsum_invalid_range_bool } + { \seq_put_right:Nn \l__zhlipsum_tmpa_seq {#1} } + } + } +\cs_new:Npn \__zhlipsum_par_range: + { + \int_compare:nNnTF \l__zhlipsum_begin_int = \l__zhlipsum_end_int + { \int_use:N \l__zhlipsum_begin_int } + { \int_use:N \l__zhlipsum_begin_int - \int_use:N \l__zhlipsum_end_int } + } +\__zhlipsum_msg_new:nn { modified-range } + { + Your~ required~ range~ "#1"~ in~ "#2"~ will~ be~ modified. \\ + Changed~ into~ "#3". + } +\__zhlipsum_msg_new:nn { invalid-range } + { + Your~ required~ range~ "#1"~ in~ "#2"~ is~ invalid. \\ + Nothing~ will~ be~ output. + } +\cs_new_protected:Npn \__zhlipsum_use:nn #1#2 + { \tl_use:c { c__zhlipsum_ #1 @ #2 _tl } } +\NewDocumentCommand \newzhlipsum { m m } + { \zhlipsum_new:nn {#1} {#2} } +\cs_new_protected:Npn \zhlipsum_new:nn #1#2 + { + \zhlipsum_if_exist:nTF {#1} + { \__zhlipsum_error:nn { already-defined } {#1} } + { + \seq_gput_left:Nn \g_zhlipsum_seq {#1} + \int_new:c { g__zhlipsum_ #1 _int } + \clist_map_inline:nn {#2} { \__zhlipsum_new:nn {#1} {##1} } + \__zhlipsum_info:nn { defining-text } {#1} + } } -\cs_new:Npn \zhlipsum_print_multi:nnn #1#2#3 +\__zhlipsum_msg_new:nn { already-defined } { - \int_step_inline:nnnn {#1} {#2} {#3} - { \__zhlipsum_print_single:n {##1} \__zhlipsum_par: } + Chinese~ dummy~ text~ "#1"~ has~ been~ used.~ + Please~ use~ another~ name. } -\cs_generate_variant:Nn \zhlipsum_print_multi:nnn { VVV } -\cs_new:Npn \zhlipsum_print_multi_no_par:nnn #1#2#3 +\__zhlipsum_msg_new:nn { defining-text } { - \int_step_inline:nnnn {#1} {#2} {#3} - { \__zhlipsum_print_single:n {##1} } + Chinese~ dummy~ text~ "#1"~ is~ created.~ + It~ has~ \int_use:c { g__zhlipsum_ #1 _int }~ paragraphs. } -\cs_generate_variant:Nn \zhlipsum_print_multi_no_par:nnn { VVV } -\cs_new:Npn \__zhlipsum_print_single:n #1 +\cs_new_protected:Npn \__zhlipsum_new:nn #1#2 { - \str_set:Nx \l__zhlipsum_tmpa_str { \int_to_roman:n {#1} } - \str_put_left:Nx \l__zhlipsum_tmpa_str - { c__zhlipsum_text_ \l__zhlipsum_script_str _ } - \str_put_right:Nn \l__zhlipsum_tmpa_str { _tl } - \use:c { \str_use:N \l__zhlipsum_tmpa_str } + \int_gincr:c { g__zhlipsum_ #1 _int } + \tl_const:cn + { c__zhlipsum_ #1 @ \int_use:c { g__zhlipsum_ #1 _int } _tl } {#2} } +\file_input:x { zhlipsum- \g__zhlipsum_encoding_tl .def } \endinput %% %% End of file `zhlipsum.sty'. |