From 63a2bf1ad66c853ca9858eec2ca115d3c2267f43 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 18 Aug 2013 23:36:18 +0000 Subject: xecjk (18aug13) git-svn-id: svn://tug.org/texlive/trunk@31466 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg | 4 +- .../tex/xelatex/xecjk/xeCJK-listings.sty | 6 +- Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 372 ++++++++++----------- Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty | 7 +- .../tex/xelatex/xecjk/xunicode-addon.sty | 118 +++++-- 5 files changed, 283 insertions(+), 224 deletions(-) (limited to 'Master/texmf-dist/tex/xelatex/xecjk') diff --git a/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg b/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg index 2e32945e9bf..e8e4375851b 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg +++ b/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg @@ -6,11 +6,11 @@ %% %% xeCJK.dtx (with options: `config') %% -\GetIdInfo$Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ {Configuration file for xeCJK package} \ProvidesExplFile {\ExplFileName.cfg} - {\ExplFileDate}{3.2.5}{\ExplFileDescription} + {\ExplFileDate}{3.2.6}{\ExplFileDescription} %% %% diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty index a3953c92c43..e07d41cfa1d 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `listings') %% -%% $Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +%% $Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ {xeCJK patch file for listings} \ProvidesExplPackage {xeCJK-listings} - {\ExplFileDate}{3.2.5}{\ExplFileDescription} + {\ExplFileDate}{3.2.6}{\ExplFileDescription} \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { xeCJK } } \ProcessOptions \scan_stop: \RequirePackage { xeCJK } diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 629aaf9d8dd..c52709f906a 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `package') %% -%% $Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +%% $Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ {Typesetting CJK scripts with XeLaTeX} \ProvidesExplPackage {\ExplFileName} - {\ExplFileDate}{3.2.5}{\ExplFileDescription} + {\ExplFileDate}{3.2.6}{\ExplFileDescription} \msg_new:nnn { xeCJK } { Require-XeTeX } { The~xeCJK~package~requires~XeTeX~to~function.\\\\ @@ -81,7 +81,7 @@ using~your~TeX~package~manager~or~from~CTAN.\\ \str_if_eq:nnT {#1} { expl3 } { Loading~xeCJK~will~abort! } } -\@ifpackagelater { expl3 } { 2012/11/10 } { } +\@ifpackagelater { expl3 } { 2013/07/20 } { } { \msg_critical:nnn { xeCJK } { l3-too-old } { expl3 } } \RequirePackage { xtemplate } \@ifpackagelater { xtemplate } { 2012/11/10 } { } @@ -95,6 +95,7 @@ \skip_new:N \l__xeCJK_tmp_skip \clist_new:N \l__xeCJK_tmp_clist \cs_new_protected_nopar:Npn \__xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } +\cs_new_protected_nopar:Npn \__xeCJK_msg_new:nnn { \msg_new:nnnn { xeCJK } } \cs_new_protected_nopar:Npn \__xeCJK_error:n { \msg_error:nn { xeCJK } } \cs_new_protected_nopar:Npn \__xeCJK_error:nx { \msg_error:nnx { xeCJK } } \cs_new_protected_nopar:Npn \__xeCJK_warning:n { \msg_warning:nn { xeCJK } } @@ -838,11 +839,43 @@ space .meta:n = { CJKspace = true } , nospace .meta:n = { CJKspace = false } } -\xeCJK_inter_class_toks:nnn { CJK } { Boundary } +\xeCJK_inter_class_toks:nnn { CJK } { Boundary } { \xeCJK_CJK_and_Boundary:w } +\cs_new_protected_nopar:Npn \xeCJK_CJK_and_Boundary:w { - \xeCJK_class_group_end: - { \xeCJK_make_node:n { CJK } } - \xeCJK_ignore_spaces:w + \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token + { + \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool + { \xeCJK_class_group_end: \xeCJK_space_or_xecglue: } + { \xeCJK_class_group_end: \CJKecglue } + } + { + \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool + { + \bool_if:nTF + { + \token_if_macro_p:N \l_peek_token || + ( \l__xeCJK_reserve_space_bool && \token_if_letter_p:N \l_peek_token ) + } + { + \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK-space } } + \xeCJK_space_or_xecglue: + } + { \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK-space } } } + } + { + \token_if_eq_meaning:NNTF \l_peek_token \scan_stop: + { \__xeCJK_CJK_and_Boundary_relax:N } + { \__xeCJK_CJK_and_Boundary_aux: } + } + } + } +\cs_new_protected_nopar:Npn \__xeCJK_CJK_and_Boundary_aux: + { \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK } } } +\cs_new_protected:Npn \__xeCJK_CJK_and_Boundary_relax:N #1 + { + \__xeCJK_CJK_and_Boundary_aux: + \token_if_eq_meaning:NNTF #1 \scan_stop: + {#1} { \cs_set_eq:NN #1 \scan_stop: #1 } } \cs_new_protected_nopar:Npn \xeCJK_ignore_spaces:w { @@ -852,23 +885,19 @@ { \xeCJK_space_or_xecglue: } { \CJKecglue } } { - \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool + \bool_if:NT \l__xeCJK_peek_ignore_spaces_bool { - \xeCJK_remove_node: - { \xeCJK_make_node:n { CJK-space } } + \xeCJK_if_last_node:nT { CJK } + { \xeCJK_remove_node: { \xeCJK_make_node:n { CJK-space } } } \bool_if:nT { \token_if_macro_p:N \l_peek_token || - ( \l__xeCJK_reserve_space_bool && - \token_if_letter_p:N \l_peek_token ) + ( \l__xeCJK_reserve_space_bool && \token_if_letter_p:N \l_peek_token ) } { \xeCJK_space_or_xecglue: } } - { \__xeCJK_CJK_and_Boundary_aux: } } } -\cs_new_protected_nopar:Npn \__xeCJK_CJK_and_Boundary_aux: - { \cs_if_exist:NF \l_peek_token \exp_not:N } \xeCJK_inter_class_toks:nnn { CJK } { CJK } { \xeCJK_CJK_and_CJK:N } \cs_new_protected_nopar:Npn \xeCJK_CJK_and_CJK:N #1 { \CJKglue \CJKsymbol {#1} } \xeCJK_inter_class_toks:nnn { FullLeft } { CJK } @@ -988,7 +1017,7 @@ } \cs_new_protected_nopar:Npn \__xeCJK_Boundary_and_FullLeft_glue:N #1 { - \int_case:nnn { \etex_lastnodetype:D } + \int_case:nnTF { \etex_lastnodetype:D } { { \c_one } { @@ -1037,7 +1066,7 @@ { \use:n } } } - { \use:n } + { { \__xeCJK_punct_glue:NN \c__xeCJK_left_tl {#1} } } { \__xeCJK_punct_glue:NN \c__xeCJK_left_tl {#1} } } \cs_new_protected_nopar:Npn \xeCJK_Default_and_FullRight:nN #1#2 @@ -1166,11 +1195,15 @@ { \xeCJK_get_punct_bounds:NN \c__xeCJK_right_tl \g__xeCJK_last_punct_tl \__xeCJK_punct_rule:NN \c__xeCJK_right_tl \g__xeCJK_last_punct_tl - \tl_case:Non \l_peek_token { \l__xeCJK_no_break_cs_case_tl } { } + \group_align_safe_begin: + \tl_case:NoTF \l_peek_token + { \l__xeCJK_no_break_cs_case_tl } + { \group_align_safe_end: \xeCJK_no_break: } + { \group_align_safe_end: } \__xeCJK_punct_glue:NN \c__xeCJK_right_tl \g__xeCJK_last_punct_tl \xeCJK_class_group_end: } -\cs_generate_variant:Nn \tl_case:Nnn { No } +\cs_generate_variant:Nn \tl_case:NnTF { No } \cs_new_protected_nopar:Npn \xeCJK_check_FullRight_symbol:Nw #1 { \xeCJK_peek_after_ignore_spaces:nw { \__xeCJK_save_FullRight_symbol:N {#1} } } \cs_new_protected:Npn \xeCJK_cs_case_keys_define:nNNnn #1#2#3#4#5 @@ -1204,7 +1237,7 @@ #4 } \xeCJK_cs_case_keys_define:nNNnn { NoBreakCS } - \l__xeCJK_no_break_cs_case_tl \l__xeCJK_no_break_cs_seq { \xeCJK_no_break: } { } + \l__xeCJK_no_break_cs_case_tl \l__xeCJK_no_break_cs_seq { } { } \NewDocumentCommand \xeCJKnobreak { } { \bool_set_true:N \l__xeCJK_tmp_bool @@ -1245,12 +1278,14 @@ \peek_catcode:NTF \c_catcode_letter_token { \xeCJK_check_single:NNw #1 } { + \group_align_safe_begin: \token_if_other:NTF \l_peek_token - { \xeCJK_check_single:NNw #1 } + { \group_align_safe_end: \xeCJK_check_single:NNw #1 } { + \group_align_safe_end: \bool_if:nTF { - \xeCJK_if_blank_x_p:n { \token_get_arg_spec:N \l_peek_token } && + \str_if_eq_x_p:nn { \token_get_arg_spec:N \l_peek_token } { } && \exp_args:No \tl_if_single_token_p:n \l_peek_token && ( \exp_after:wN \token_if_other_p:N \l_peek_token || \exp_after:wN \token_if_letter_p:N \l_peek_token ) @@ -1328,7 +1363,7 @@ \cs_new_protected_nopar:Npn \xeCJK_check_single_cs:NNn #1#2#3 { \group_align_safe_begin: - \tl_case:Non \l_peek_token + \tl_case:NoF \l_peek_token { \l__xeCJK_check_single_cs_case_tl } { \group_align_safe_end: \use_iii:nnn } { \xeCJK_check_single_env:nnNn } @@ -1339,16 +1374,17 @@ { \__xeCJK_check_single_save:N #1 #2#3 } } \tl_new:N \l__xeCJK_check_single_cs_case_tl +\cs_generate_variant:Nn \tl_case:NnF { No } \cs_new_protected_nopar:Npn \xeCJK_check_single_env:nnNn #1#2#3#4 { \group_align_safe_begin: - \str_case_x:non {#4} + \str_case_x:noTF {#4} { \l__xeCJK_inline_env_case_tl } - { \group_align_safe_end: \use_i:nn } - {#1} {#2} - \scan_stop: #3 {#4} + { \group_align_safe_end: #2 } + { \group_align_safe_end: #1 } + #3 {#4} } -\cs_generate_variant:Nn \str_case_x:nnn { no } +\cs_generate_variant:Nn \str_case_x:nnTF { no } \xeCJK_cs_case_keys_define:nNNnn { NewLineCS } \l__xeCJK_new_line_cs_case_tl \l__xeCJK_new_line_cs_seq { \group_align_safe_end: \use_ii:nnn } @@ -1391,7 +1427,7 @@ { \tl_clear:N \l__xeCJK_inline_env_case_tl \seq_map_inline:Nn \l__xeCJK_inline_env_seq - { \tl_put_right:Nn \l__xeCJK_inline_env_case_tl { {##1} { \use_ii:nn } } } + { \tl_put_right:Nn \l__xeCJK_inline_env_case_tl { {##1} { } } } } \tl_new:N \l__xeCJK_inline_env_case_tl \keys_define:nn { xeCJK / options } @@ -2201,23 +2237,19 @@ \cs_generate_variant:Nn \__xeCJK_get_sub_features:nn { V } \cs_generate_variant:Nn \tl_replace_all:Nnn { NnV } \xeCJK_new_sub_key:n { FallBack } -\prop_new:N \g__xeCJK_features_id_prop -\prop_put:Nnn \g__xeCJK_features_id_prop { bf } { Bold } -\prop_put:Nnn \g__xeCJK_features_id_prop { it } { Italic } -\prop_put:Nnn \g__xeCJK_features_id_prop { bfit } { BoldItalic } -\prop_put:Nnn \g__xeCJK_features_id_prop { sl } { Slanted } -\prop_put:Nnn \g__xeCJK_features_id_prop { bfsl } { BoldSlanted } -\prop_map_inline:Nn \g__xeCJK_features_id_prop +\keys_define:nn { xeCJK / features } { - \keys_define:nn { xeCJK / features } - { - #2Font .tl_set:c = { l__xeCJK_font_name_#1_tl } , - #2Features .clist_set:c = { l__xeCJK_font_feat_#1_clist } - } + BoldFont .tl_set:N = \l__xeCJK_font_name_bf_tl , + ItalicFont .tl_set:N = \l__xeCJK_font_name_it_tl } \keys_define:nn { xeCJK / features } { AutoFakeBold .choice: , + AutoFakeBold / true .code:n = + { + \bool_set_true:N \l__xeCJK_auto_fake_bold_bool + \fp_set_eq:NN \l__xeCJK_embolden_factor_fp \g__xeCJK_embolden_factor_fp + } , AutoFakeBold / false .code:n = { \bool_set_false:N \l__xeCJK_auto_fake_bold_bool } , AutoFakeBold / unknown .code:n = @@ -2225,8 +2257,13 @@ \bool_set_true:N \l__xeCJK_auto_fake_bold_bool \fp_set:Nn \l__xeCJK_embolden_factor_fp { \l_keys_value_tl } } , - AutoFakeBold .default:n = { \g__xeCJK_embolden_factor_fp } , + AutoFakeBold .default:n = { true } , AutoFakeSlant .choice: , + AutoFakeSlant / true .code:n = + { + \bool_set_true:N \l__xeCJK_auto_fake_slant_bool + \fp_set_eq:NN \l__xeCJK_slant_factor_fp \g__xeCJK_slant_factor_fp + } , AutoFakeSlant / false .code:n = { \bool_set_false:N \l__xeCJK_auto_fake_slant_bool } , AutoFakeSlant / unknown .code:n = @@ -2234,26 +2271,21 @@ \bool_set_true:N \l__xeCJK_auto_fake_slant_bool \fp_set:Nn \l__xeCJK_slant_factor_fp { \l_keys_value_tl } } , - AutoFakeSlant .default:n = { \g__xeCJK_slant_factor_fp } + AutoFakeSlant .default:n = { true } } \cs_new_protected_nopar:Npn \__xeCJK_set_family_initial: { \int_gincr:N \g__xeCJK_family_int - \prop_clear:N \l__xeCJK_add_font_prop \prop_clear:N \l__xeCJK_sub_key_prop - \prop_map_inline:Nn \g__xeCJK_features_id_prop - { - \tl_clear:c { l__xeCJK_font_name_##1_tl } - \clist_clear:c { l__xeCJK_font_feat_##1_clist } - } + \tl_clear:N \l__xeCJK_font_name_bf_tl + \tl_clear:N \l__xeCJK_font_name_it_tl \clist_clear:N \l__xeCJK_fontspec_options_clist - \bool_set_eq:NN \l__xeCJK_auto_fake_bold_bool \g__xeCJK_auto_fake_bold_bool - \bool_set_eq:NN \l__xeCJK_auto_fake_slant_bool \g__xeCJK_auto_fake_slant_bool + \bool_set_eq:NN \l__xeCJK_auto_fake_bold_bool \g__xeCJK_auto_fake_bold_bool + \bool_set_eq:NN \l__xeCJK_auto_fake_slant_bool \g__xeCJK_auto_fake_slant_bool \fp_set_eq:NN \l__xeCJK_embolden_factor_fp \g__xeCJK_embolden_factor_fp \fp_set_eq:NN \l__xeCJK_slant_factor_fp \g__xeCJK_slant_factor_fp } \int_new:N \g__xeCJK_family_int -\prop_new:N \l__xeCJK_add_font_prop \prop_new:N \l__xeCJK_sub_key_prop \clist_new:N \l__xeCJK_fontspec_options_clist \bool_new:N \l__xeCJK_auto_fake_bold_bool @@ -2272,8 +2304,7 @@ \__xeCJK_remove_duplicate_keys:N \l__xeCJK_font_options_clist \keys_set_known:nVN { xeCJK / features } \l__xeCJK_font_options_clist \l__xeCJK_fontspec_options_clist - \__xeCJK_parse_features: - \__xeCJK_pass_features: + \__xeCJK_parse_font_shape: \__xeCJK_check_family:V \l__xeCJK_family_name_tl \__xeCJK_gset_family_cs:x { \l__xeCJK_family_name_tl } \__xeCJK_save_family_info: @@ -2313,7 +2344,7 @@ \cs_gset_protected_nopar:cpx { \__xeCJK_family_csname:n {#1} } { \group_begin: - \exp_not:n { \cs_set_eq:NN \__xeCJK_update_family:n \use_none:n } + \exp_not:n { \cs_set_eq:NN \__xeCJK_update_family:n \use_none:nn } \exp_not:n { \fontspec_set_family:Nnn \l__xeCJK_fontspec_family_tl } { \exp_not:V \l__xeCJK_fontspec_options_clist } { \exp_not:V \l__xeCJK_font_name_tl } @@ -2324,7 +2355,7 @@ \tl_new:N \l__xeCJK_fontspec_family_tl \cs_new_protected_nopar:Npn \__xeCJK_check_family:n #1 { - \prop_get:NnNT \g__xeCJK_family_font_name_prop {#1} \l__xeCJK_tmp_tl + \prop_gpop:NnNT \g__xeCJK_family_font_name_prop {#1} \l__xeCJK_tmp_tl { \prop_gpop:NnNT \g__xeCJK_family_name_prop {#1} \l__xeCJK_tmp_tl { \cs_undefine:c { \__xeCJK_family_nfss_csname:n {#1} } } @@ -2334,124 +2365,42 @@ \cs_generate_variant:Nn \__xeCJK_check_family:n { V } \__xeCJK_msg_new:nn { CJKfamily-redef } { Redefining~CJKfamily~`\__xeCJK_msg_family_map:n {#1}'~(#2). } -\cs_new_protected_nopar:Npn \__xeCJK_add_font:nn #1#2 - { \prop_put:Nnn \l__xeCJK_add_font_prop { #1 Font } {#2} } -\cs_new_protected_nopar:Npn \__xeCJK_add_font_if_new:nn #1#2 - { \prop_put_if_new:Nnn \l__xeCJK_add_font_prop { #1 Font } {#2} } -\cs_generate_variant:Nn \__xeCJK_add_font:nn { nx , nV , nv } -\cs_generate_variant:Nn \__xeCJK_add_font_if_new:nn { nx , nV , nv } -\cs_new_protected_nopar:Npn \__xeCJK_add_fake_bold:n #1 - { - \clist_put_left:cx { l__xeCJK_font_feat_#1_clist } - { FakeBold = { \fp_use:N \l__xeCJK_embolden_factor_fp } } - } -\cs_new_protected_nopar:Npn \__xeCJK_add_fake_slant:n #1 - { - \clist_put_left:cx { l__xeCJK_font_feat_#1_clist } - { FakeSlant = { \fp_use:N \l__xeCJK_slant_factor_fp } } - } -\cs_new_protected_nopar:Npn \__xeCJK_parse_features: - { \prop_map_function:NN \g__xeCJK_features_id_prop \__xeCJK_parse_features:nn } -\cs_new_protected_nopar:Npn \__xeCJK_parse_features:nn #1#2 - { - \__xeCJK_if_font_select:nTF {#1} - { - \__xeCJK_add_font:nv {#2} { l__xeCJK_font_name_#1_tl } - \__xeCJK_if_it_or_sl:nTF {#1} - { - \__xeCJK_if_font_select:nF { bf #1 } - { \__xeCJK_add_font_if_new:nv {#2} { l__xeCJK_font_name_#1_tl } } - } - { - \str_if_eq:nnT {#1} { bf } - { - \__xeCJK_if_font_select:nF { bfit } - { \__xeCJK_add_font:nV { BoldItalic } \l__xeCJK_font_name_bf_tl } - \__xeCJK_if_font_select:nF { bfsl } - { \__xeCJK_add_font:nV { BoldSlanted } \l__xeCJK_font_name_bf_tl } - } - } - } - { \__xeCJK_set_fake_font:nn {#1} {#2} } - } -\prg_new_conditional:Npnn \__xeCJK_if_font_select:n #1 { p , T , F , TF } - { - \tl_if_blank:vTF { l__xeCJK_font_name_#1_tl } - { \prg_return_false: } { \prg_return_true: } - } -\prg_new_conditional:Npnn \__xeCJK_if_it_or_sl:n #1 { p , T , F , TF } - { - \if_predicate:w - \bool_if_p:n { \str_if_eq_p:nn { it } {#1} || \str_if_eq_p:nn { sl } {#1} } - \prg_return_true: \else: \prg_return_false: \fi: - } -\cs_generate_variant:Nn \tl_if_blank:nTF { v } -\cs_new_protected_nopar:Npn \__xeCJK_set_fake_font:nn #1#2 +\cs_new_protected_nopar:Npn \__xeCJK_parse_font_shape: { - \str_if_eq:nnTF {#1} { bf } - { \bool_if:NT \l__xeCJK_auto_fake_bold_bool { \__xeCJK_add_fake_bold:n {#1} } } + \tl_if_blank:VTF \l__xeCJK_font_name_bf_tl { - \bool_if:NTF \l__xeCJK_auto_fake_slant_bool + \bool_if:NT \l__xeCJK_auto_fake_bold_bool { - \bool_if:nT - { \__xeCJK_if_it_or_sl_p:n {#1} - || ( \str_if_eq_p:nn {#1} { bfit } - && ! ( \__xeCJK_if_font_select_p:n { it } ) ) - || ( \str_if_eq_p:nn {#1} { bfsl } - && ! ( \__xeCJK_if_font_select_p:n { sl } ) ) - } - { \__xeCJK_add_fake_slant:n {#1} } - } - { \__xeCJK_if_it_or_sl:nT {#1} { \__xeCJK_map_it_sl:nn {#1} {#2} } } - \bool_if:nT - { \l__xeCJK_auto_fake_bold_bool - && ! ( \__xeCJK_if_it_or_sl_p:n {#1} ) - && ! ( \__xeCJK_if_font_select_p:n { bf } ) + \clist_put_right:Nx \l__xeCJK_fontspec_options_clist + { AutoFakeBold = { \fp_use:N \l__xeCJK_embolden_factor_fp } } } - { \__xeCJK_add_fake_bold:n {#1} } } - \__xeCJK_add_font_if_new:nn {#2} { * } - } -\cs_new_protected_nopar:Npn \__xeCJK_map_it_sl:nn #1#2 - { - \__xeCJK_if_map_font_select:nT {#1} { - \__xeCJK_add_font:nx {#2} { \__xeCJK_get_map_font:n {#1} } - \__xeCJK_if_font_select:nF { bf #1 } - { \__xeCJK_add_font_if_new:nx { Bold #2 } { \__xeCJK_get_map_font:n {#1} } } + \clist_put_right:Nx \l__xeCJK_fontspec_options_clist + { BoldFont = { \exp_not:V \l__xeCJK_font_name_bf_tl } } } - } -\cs_new_nopar:Npn \__xeCJK_get_map_font:n #1 - { \exp_not:v { l__xeCJK_font_name_ \xeCJK_reverse:nnn {#1} { it } { sl } _tl } } -\prg_new_conditional:Npnn \__xeCJK_if_map_font_select:n #1 { p , T , F , TF } - { - \xeCJK_if_blank_x:nTF { \__xeCJK_get_map_font:n {#1} } - { \prg_return_false: } { \prg_return_true: } - } -\cs_new_protected_nopar:Npn \__xeCJK_pass_features: - { - \prop_map_inline:Nn \g__xeCJK_features_id_prop + \tl_if_blank:VTF \l__xeCJK_font_name_it_tl { - \clist_if_empty:cF { l__xeCJK_font_feat_##1_clist } + \bool_if:NT \l__xeCJK_auto_fake_slant_bool { \clist_put_right:Nx \l__xeCJK_fontspec_options_clist - { ##2Features = { \exp_not:v { l__xeCJK_font_feat_##1_clist } } } + { AutoFakeSlant = { \fp_use:N \l__xeCJK_slant_factor_fp } } } } - \prop_map_inline:Nn \l__xeCJK_add_font_prop - { \clist_put_right:Nn \l__xeCJK_fontspec_options_clist { ##1 = {##2} } } + { + \clist_put_right:Nx \l__xeCJK_fontspec_options_clist + { ItalicFont = { \exp_not:V \l__xeCJK_font_name_it_tl } } + } } \prop_new:N \g__xeCJK_family_name_prop \prop_new:N \g__xeCJK_family_font_name_prop \prop_new:N \g__xeCJK_family_font_options_prop \cs_new_protected_nopar:Npn \__xeCJK_save_family_info: { - \group_begin: \prop_gput:NVV \g__xeCJK_family_font_name_prop \l__xeCJK_family_name_tl \l__xeCJK_font_name_tl \prop_gput:NVV \g__xeCJK_family_font_options_prop \l__xeCJK_family_name_tl \l__xeCJK_font_options_clist - \group_end: } \cs_new_protected_nopar:Npn \__xeCJK_set_sub_block_family: { @@ -2888,10 +2837,14 @@ \prop_get:NVNT \g__xeCJK_family_name_prop \l__xeCJK_tmp_tl \l__xeCJK_tmp_tl { \tl_const:Nx \c__xeCJK_math_family_tl { \l__xeCJK_tmp_tl } - \DeclareSymbolFont \c__xeCJK_math_tl - \c__xeCJK_encoding_tl \c__xeCJK_math_family_tl \mddefault \shapedefault - \SetSymbolFont \c__xeCJK_math_tl { bold } - \c__xeCJK_encoding_tl \c__xeCJK_math_family_tl \bfdefault \shapedefault + \DeclareSymbolFont { \c__xeCJK_math_tl } { \c__xeCJK_encoding_tl } + { \c__xeCJK_math_family_tl } { \mddefault } { \shapedefault } + \cs_if_free:cF + { \c__xeCJK_encoding_tl/\c__xeCJK_math_family_tl/\bfdefault/\shapedefault } + { + \SetSymbolFont { \c__xeCJK_math_tl } { bold } { \c__xeCJK_encoding_tl } + { \c__xeCJK_math_family_tl } { \bfdefault } { \shapedefault } + } \int_const:Nn \c_xeCJK_math_fam_int { \use:c { sym \c__xeCJK_math_tl } } \clist_concat:NNN \l__xeCJK_tmp_clist \c__xeCJK_CJK_chars_clist \c__xeCJK_FullLeft_chars_clist @@ -2971,7 +2924,7 @@ \cs_set_eq:NN \__xeCJK_verb_CJKglue: \CJKglue \cs_set_eq:NN \__xeCJK_verb_CJKecglue: \CJKecglue \cs_set_eq:NN \__xeCJK_verb_check_for_glue: \xeCJK_check_for_glue: - \cs_set_eq:NN \__xeCJK_verb_ignore_spaces:w \xeCJK_ignore_spaces:w + \cs_set_eq:NN \__xeCJK_verb_boundary:w \xeCJK_CJK_and_Boundary:w \cs_set_protected_nopar:Npx \xeCJKOffVerbAddon { \__xeCJK_reset_char_class:n { FullLeft } @@ -2987,7 +2940,7 @@ \cs_set_eq:NN \CJKglue \__xeCJK_verb_CJKglue: \cs_set_eq:NN \CJKecglue \__xeCJK_verb_CJKecglue: \cs_set_eq:NN \xeCJK_check_for_glue: \__xeCJK_verb_check_for_glue: - \cs_set_eq:NN \xeCJK_ignore_spaces:w \__xeCJK_verb_ignore_spaces:w + \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_verb_boundary:w } } \tex_output:D \exp_after:wN \exp_after:wN \exp_after:wN @@ -3009,8 +2962,10 @@ \cs_set_eq:NN \CJKecglue \__xeCJK_verb_ecglue: } \cs_set_eq:NN \xeCJK_check_for_glue: \CJKecglue - \cs_set_eq:NN \xeCJK_ignore_spaces:w \CJKecglue + \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_verb_CJK_and_Boundary:w } +\cs_new_protected_nopar:Npn \__xeCJK_verb_CJK_and_Boundary:w + { \xeCJK_class_group_end: \CJKecglue } \cs_new_protected_nopar:Npn \__xeCJK_verb_ccglue: { \xeCJK_no_break: \skip_horizontal:N \l__xeCJK_verb_exspace_skip } \cs_new_protected_nopar:Npn \__xeCJK_verb_ecglue: @@ -3219,7 +3174,7 @@ } \defaultCJKfontfeatures { Script = CJK } \ProcessKeysOptions { xeCJK / options } -\RequirePackage { fontspec } [ 2011/09/13 ] +\RequirePackage { fontspec } [ 2012/05/01 ] \RequirePackage { xunicode-addon } \tl_const:Nx \c__xeCJK_encoding_tl { \g_fontspec_encoding_tl } \bool_if:NT \g__xeCJK_indent_bool { \RequirePackage { indentfirst } } @@ -3278,22 +3233,67 @@ \xeCJK_set_char_class:nnn {#1} {#2} {#3} \xeCJKResetPunctClass } +\cs_if_free:NF \fontspec_setup_maths: + { + \cs_gset_protected_nopar:Npx \fontspec_setup_maths: + { + \exp_not:o + { + \fontspec_setup_maths: + \tl_if_empty:NT \g_fontspec_bfmathrm_tl + { \DeclareSymbolFontAlphabet \mathrm { operators } } + } + } + } \cs_new_protected_nopar:Npn \__xeCJK_math_robust:N #1 - { \exp_args:NNc \__xeCJK_math_robust:NN #1 { \cs_to_str:N #1 ~ } } + { \exp_args:NNc \__xeCJK_math_robust_aux:NN #1 { \cs_to_str:N #1 ~ } } +\cs_new_protected_nopar:Npn \__xeCJK_math_robust_aux:NN #1#2 + { + \exp_args:Nx \str_case:nnTF { \token_get_replacement_spec:N #1 } + { + { \x@protect #1 \protect #2 } { } + { \protect #2 } { } + } + { \__xeCJK_math_robust:NN #1#2 } + { \__xeCJK_math_robust:NN #1#1 } + } \cs_new_protected_nopar:Npn \__xeCJK_math_robust:NN #1#2 { - \bool_if:nT + \str_if_eq_x:nnTF { \token_get_arg_spec:N #2 } { } + { + \exp_args:No \tl_if_head_eq_meaning:nNTF {#2} \scan_stop: + { + \cs_gset_protected_nopar:Npx #1 + { \scan_align_safe_stop: \tl_tail:N #2 } + } + { + \cs_if_eq:NNTF #1 \ensuremath + { + \cs_gset_protected_nopar:Npx #1 + { \scan_align_safe_stop: \exp_not:o {#2} } + } + { + \__xeCJK_warning:nxx { robust-failure } + { \token_to_str:N #1 } { \token_to_meaning:N #2 } + } + } + } { - \str_if_eq_x_p:nn - { \token_get_replacement_spec:N #1 } - { \exp_not:n { \x@protect #1 \protect #2 } } && - \exp_args:Nf \tl_if_empty_p:n { \token_get_arg_spec:N #2 } && - \exp_args:No \tl_if_head_eq_meaning_p:nN {#2} \scan_stop: + \__xeCJK_warning:nxx { robust-failure } + { \token_to_str:N #1 } { \token_to_meaning:N #2 } } - { \cs_gset_protected_nopar:Npx #1 { \scan_align_safe_stop: \tl_tail:N #2 } } + } +\__xeCJK_msg_new:nnn { robust-failure } + { xeCJK~can~not~make~`#1'~robust. } + { + The~current~meaning~of~`#1'~is:\\ + \iow_indent:n {#2} } \__xeCJK_math_robust:N \( \__xeCJK_math_robust:N \) +\__xeCJK_math_robust:N \math +\__xeCJK_math_robust:N \endmath +\__xeCJK_math_robust:N \ensuremath \bool_if:nF { \xeCJK_if_package_loaded_p:n { amsmath } || @@ -3343,19 +3343,15 @@ \RenewDocumentCommand \fontfamily { m } { \tl_set:Nx \f@family {#1} - \__xeCJK_update_family:n + \__xeCJK_update_family:nn {#1} { - \str_case:nnn {#1} - { - { \rmdefault } { \xeCJK_switch_family:n { \CJKrmdefault } } - { \sfdefault } { \xeCJK_switch_family:n { \CJKsfdefault } } - { \ttdefault } { \xeCJK_switch_family:n { \CJKttdefault } } - { \familydefault } { \xeCJK_switch_family:n { \CJKfamilydefault } } - } - { } + { \rmdefault } { \xeCJK_switch_family:n { \CJKrmdefault } } + { \sfdefault } { \xeCJK_switch_family:n { \CJKsfdefault } } + { \ttdefault } { \xeCJK_switch_family:n { \CJKttdefault } } + { \familydefault } { \xeCJK_switch_family:n { \CJKfamilydefault } } } } -\cs_new_eq:NN \__xeCJK_update_family:n \use:n +\cs_new_eq:NN \__xeCJK_update_family:nn \str_case:nn \cs_new_eq:NN \xeCJK@fix@penalty \fix@penalty \tl_replace_once:Nnn \xeCJK@fix@penalty { \@@italiccorr } { \xeCJK@italiccorr } \tl_replace_once:Nnn \sw@slant { \fix@penalty } { \xeCJK@fix@penalty } @@ -3432,17 +3428,17 @@ } \cs_new_eq:NN \__xeCJK_group_begin: \group_begin: \cs_new_eq:NN \__xeCJK_group_end: \group_end: +\tl_map_inline:nn + { + \textellipsis \textemdash \textperiodcentered \textcentereddot + \textquoteleft \textquoteright \textquotedblleft \textquotedblright + } + { + \AtBeginUTFCommand [#1] { \__xeCJK_group_begin: \makexeCJKinactive } + \AtEndUTFCommand [#1] { \__xeCJK_group_end: } + } \__xeCJK_after_preamble:n { - \tl_map_inline:nn - { - \textellipsis \textemdash \textperiodcentered \textcentereddot - \textquoteleft \textquoteright \textquotedblleft \textquotedblright - } - { - \cs_gset_protected_nopar:Npx #1 - { \__xeCJK_group_begin: \makexeCJKinactive \exp_not:o {#1} \__xeCJK_group_end: } - } \tl_put_left:Nn \tipaencoding { \makexeCJKinactive } \cs_new_eq:NN \__xeCJK_aux_r:n \r \cs_set_nopar:Npn \r #1 diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty index 13dd0469dd6..bab6a2e918d 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `fntef') %% -%% $Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +%% $Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ {xeCJK patch file for ulem/CJKfntef} \ProvidesExplPackage {xeCJKfntef} - {\ExplFileDate}{3.2.5}{\ExplFileDescription} + {\ExplFileDate}{3.2.6}{\ExplFileDescription} \PassOptionsToPackage { normalem } { ulem } \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { ulem } } \ProcessOptions \scan_stop: @@ -162,6 +162,7 @@ { \xeCJK_if_ulem_patch:TF { + \xeCJK_class_group_end: \UL@stop \__xeCJK_ulem_hskip:n { \c_zero_skip } \UL@start { \xeCJK_make_node:n { CJK } } } diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty index d013fea26d2..66817b79bf6 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `xunicode') %% -%% $Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +%% $Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 477 2013-07-25 22:15:20Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $ {addon file for xunicode} \ProvidesExplPackage {xunicode-addon} - {\ExplFileDate}{3.2.5}{\ExplFileDescription} + {\ExplFileDate}{3.2.6}{\ExplFileDescription} \pdftex_if_engine:T { \msg_new:nnnn { xunicode-addon } { cannot-use-pdftex } @@ -147,7 +147,7 @@ { \__xunadd_if_csname:nTF {#3} { \__xunadd_declare_character:Nnn #3 } - { \exp_args:Nc \__xunadd_declare_character:Nnn { \tl_to_str:n {#3} } } + { \__xunadd_declare_character:cnn { \tl_to_str:n {#3} } } {#1} {#2} } \cs_new_protected:Npn \__xunadd_declare_character:Nnn #1#2#3 @@ -162,6 +162,7 @@ } #1 { \token_to_str:N #1 } {#2} } +\cs_generate_variant:Nn \__xunadd_declare_character:Nnn { c } \cs_new_protected:Npn \__xunadd_provide_text_command_default:N #1 { \bool_if:nF @@ -175,10 +176,10 @@ { \DeclareTextCommand #2 {#4} { \__xunadd_text_character:nN {#3} {#1} } } \cs_new_protected:Npn \__xunadd_text_character:nN #1#2 { - \tl_use:N \l__xunadd_begin_hook_tl + \__xunadd_begin_hook:nn {#1} {#2} \__xunadd_glyph_if_exist:nTF { `#2 } {#2} { \cs_if_exist_use:cF { ? #1 } {#2} } - \tl_use:N \l__xunadd_end_hook_tl + \__xunadd_end_hook:nn {#1} {#2} } \cs_generate_variant:Nn \__xunadd_declare_character:NNnn { NNx } \cs_new_nopar:Npn \__xunadd_check_slot:n #1 @@ -193,7 +194,7 @@ { \__xunadd_if_csname:nTF {#3} { \__xunadd_declare_composite:Nnnn #3 } - { \exp_args:Nc \__xunadd_declare_composite:Nnnn { \tl_to_str:n {#3} } } + { \__xunadd_declare_composite:cnnn { \tl_to_str:n {#3} } } {#1} {#4} {#2} } \cs_new_protected:Npn \__xunadd_declare_composite:Nnnn #1#2#3#4 @@ -207,18 +208,38 @@ \cs_new_protected:Npn \__xunadd_chardef:Nn #1#2 { \tex_chardef:D #1 = \etex_numexpr:D #2 \scan_stop: } \cs_generate_variant:Nn \__xunadd_chardef:Nn { c } +\cs_generate_variant:Nn \__xunadd_declare_composite:Nnnn { c } +\AtEndOfPackage + { + \DeclareUTFCompositeCommand \tonebar { 25 } { \tonebar { 2 } \tonebar { 5 } } + \DeclareUTFCompositeCommand \tonebar { 52 } { \tonebar { 5 } \tonebar { 2 } } + } +\NewDocumentCommand \DeclareUTFCompositeCommand { O { \UTFencname } m m m } + { + \__xunadd_if_csname:nTF {#2} + { \__xunadd_declare_composite_command:Nnnn #2 } + { \__xunadd_declare_composite_command:cnnn { \tl_to_str:n {#2} } } + {#1} {#3} {#4} + } +\cs_new_protected:Npn \__xunadd_declare_composite_command:Nnnn #1#2#3#4 + { + \cs_set_protected:cpn + { \token_to_str:c {#2} \token_to_str:N #1 - \tl_to_str:n {#3} } + {#4} + } +\cs_generate_variant:Nn \__xunadd_declare_composite_command:Nnnn { c } \RenewDocumentCommand \DeclareEncodedCompositeCharacter { m m m m } { \__xunadd_if_csname:nTF {#2} { \__xunadd_declare_accent:Nnnn #2 } - { \exp_args:Nc \__xunadd_declare_accent:Nnnn { \tl_to_str:n {#2} } } + { \__xunadd_declare_accent:cnnn { \tl_to_str:n {#2} } } {#1} {#3} {#4} } \RenewDocumentCommand \DeclareEncodedCompositeAccents { m m m m } { \__xunadd_if_csname:nTF {#2} { \__xunadd_declare_accent:Nnnn #2 } - { \exp_args:Nc \__xunadd_declare_accent:Nnnn { \tl_to_str:n {#2} } } + { \__xunadd_declare_accent:cnnn { \tl_to_str:n {#2} } } {#1} {#4} {#3} } \cs_new_protected:Npn \__xunadd_declare_accent:Nnnn #1#2#3#4 @@ -238,24 +259,29 @@ \DeclareTextCommand #3 {#6} { \__xunadd_text_composite:nnNNn {#4} {#5} {#1} {#2} } } +\cs_generate_variant:Nn \__xunadd_declare_accent:Nnnn { c } \cs_generate_variant:Nn \__xunadd_declare_accent:NNNnnn { NNNxx } \cs_new_protected:Npn \__xunadd_text_composite:nnNNn #1#2#3#4#5 { - \tl_use:N \l__xunadd_begin_hook_tl + \__xunadd_begin_hook:nn {#2} {#5} \cs_if_exist:cTF { #1#2 - \tl_to_str:n {#5} } { - \token_if_chardef:cTF { #1#2 - \tl_to_str:n {#5} } - { - \__xunadd_glyph_if_exist:nTF { \use:c { #1#2 - \tl_to_str:n {#5} } } - { \use:c { #1#2 - \tl_to_str:n {#5} } } - { \__xunadd_add_accent:nnNN {#5} {#2} #3#4 } - } - { \use:c { #1#2 - \tl_to_str:n {#5} } } + \__xunadd_text_composite_aux:cnNNn + { #1#2 - \tl_to_str:n {#5} } {#2} {#3} {#4} {#5} } - { \__xunadd_add_accent:nnNN {#5} {#2} #3#4 } - \tl_use:N \l__xunadd_end_hook_tl + { \__xunadd_add_accent:nnNN {#5} {#2} {#3} {#4} } + \__xunadd_end_hook:nn {#2} {#5} } -\cs_generate_variant:Nn \token_if_chardef:NTF { c } +\cs_new_protected:Npn \__xunadd_text_composite_aux:NnNNn #1#2#3#4#5 + { + \token_if_chardef:NTF #1 + { + \__xunadd_glyph_if_exist:nTF {#1} + {#1} { \__xunadd_add_accent:nnNN {#5} {#2} {#3} {#4} } + } + {#1} + } +\cs_generate_variant:Nn \__xunadd_text_composite_aux:NnNNn { c } \cs_new_protected:Npn \__xunadd_add_accent:nnNN #1#2#3#4 { \tl_if_blank:nTF {#1} @@ -280,20 +306,56 @@ } } } -\NewDocumentCommand \AtBeginUTFCommand { s +m } +\NewDocumentCommand \AtBeginUTFCommand { s O { } +m } { - \IfBooleanTF {#1} - { \tl_set:Nn \l__xunadd_begin_hook_tl {#2} } - { \tl_put_right:Nn \l__xunadd_begin_hook_tl {#2} } + \tl_if_blank:nTF {#2} + { + \IfBooleanTF {#1} + { \tl_set:Nn \l__xunadd_begin_hook_tl {#3} } + { \tl_put_right:Nn \l__xunadd_begin_hook_tl {#3} } + } + { \__xunadd_set_cmd_hook:nnn { begin } {#2} {#3} } } -\NewDocumentCommand \AtEndUTFCommand { s +m } +\NewDocumentCommand \AtEndUTFCommand { s O { } +m } { - \IfBooleanTF {#1} - { \tl_set:Nn \l__xunadd_end_hook_tl {#2} } - { \tl_put_right:Nn \l__xunadd_end_hook_tl {#2} } + \tl_if_blank:nTF {#2} + { + \IfBooleanTF {#1} + { \tl_set:Nn \l__xunadd_end_hook_tl {#3} } + { \tl_put_right:Nn \l__xunadd_end_hook_tl {#3} } + } + { \__xunadd_set_cmd_hook:nnn { end } {#2} {#3} } } \tl_new:N \l__xunadd_begin_hook_tl \tl_new:N \l__xunadd_end_hook_tl +\cs_new_protected:Npn \__xunadd_set_cmd_hook:nnn #1#2#3 + { + \cs_set_protected:cpn + { + \tl_if_single:nTF {#2} + { \use:c { __xunadd_#1_csname:n } { \token_to_str:N #2 } } + { \__xunadd_set_cmd_hook_aux:Nnwn #2 \q_stop {#1} } + } ##1 + {#3} + } +\cs_new:Npn \__xunadd_set_cmd_hook_aux:Nnwn #1#2 \q_stop #3 + { \use:c { __xunadd_#3_csname:n } { \token_to_str:N #1 - \tl_to_str:n {#2} } } +\cs_new_nopar:Npn \__xunadd_begin_csname:n #1 { __xunadd_begin_#1_hook:n } +\cs_new_nopar:Npn \__xunadd_end_csname:n #1 { __xunadd_end_#1_hook:n } +\cs_new_protected:Npn \__xunadd_begin_hook:nn #1#2 + { + \tl_use:N \l__xunadd_begin_hook_tl + \cs_if_exist_use:cF { \__xunadd_begin_csname:n { #1 - \tl_to_str:n {#2} } } + { \cs_if_exist_use:cF { \__xunadd_begin_csname:n {#1} } { \use_none:n } } + {#2} + } +\cs_new_protected:Npn \__xunadd_end_hook:nn #1#2 + { + \cs_if_exist_use:cF { \__xunadd_end_csname:n { #1 - \tl_to_str:n {#2} } } + { \cs_if_exist_use:cF { \__xunadd_end_csname:n {#1} } { \use_none:n } } + {#2} + \tl_use:N \l__xunadd_end_hook_tl + } %% %% This package consists of the file xeCJK.dtx, %% full-stop.map, -- cgit v1.2.3