diff options
author | Karl Berry <karl@freefriends.org> | 2012-09-03 22:55:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-09-03 22:55:17 +0000 |
commit | 8028e80de243e75b6cd0bdc9aec5dbed7c6be192 (patch) | |
tree | d22fa403d198e6b8d5feba609a1256f5e04705e3 /Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | |
parent | 60075902f7b24b4f27df8fa26409d3f206c93957 (diff) |
xecjk (3sep12)
git-svn-id: svn://tug.org/texlive/trunk@27583 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 458 |
1 files changed, 242 insertions, 216 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 98b6c613b88..5fc7a07d2ef 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 351 2012-07-20 05:30:58Z sobenlee $ +%% $Id: xeCJK.dtx 356 2012-09-03 02:18:08Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -31,9 +31,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 351 2012-07-20 05:30:58Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 356 2012-09-03 02:18:08Z sobenlee $ {package for typesetting CJK scripts with XeLaTeX} -\ProvidesExplPackage{\ExplFileName}{\ExplFileDate}{3.0.7}{\ExplFileDescription} +\ProvidesExplPackage + {\ExplFileName} + {\ExplFileDate}{3.0.8}{\ExplFileDescription} \msg_new:nnn { xeCJK } { Require-XeTeX } { The~xeCJK~package~requires~XeTeX~to~function.\\\\ @@ -75,14 +77,15 @@ \clist_new:N \l_xeCJK_tmpa_clist \clist_new:N \l_xeCJK_tmpb_clist \clist_new:N \l_xeCJK_tmpc_clist +\cs_new_protected_nopar:Npn \xeCJK_no_break: { \tex_penalty:D \c_ten_thousand } \tl_new:N \g_xeCJK_at_end_preamble_hook \tl_new:N \g_xeCJK_after_preamble_hook \tl_new:N \g_xeCJK_after_end_preamble_hook -\cs_new:Nn \xeCJK_AtEndPreamble:n +\cs_new_protected:Npn \xeCJK_AtEndPreamble:n #1 { \tl_gput_right:Nn \g_xeCJK_at_end_preamble_hook {#1} } -\cs_new:Nn \xeCJK_AfterPreamble:n +\cs_new_protected:Npn \xeCJK_AfterPreamble:n #1 { \tl_gput_right:Nn \g_xeCJK_after_preamble_hook {#1} } -\cs_new:Nn \xeCJK_AfterEndPreamble:n +\cs_new_protected:Npn \xeCJK_AfterEndPreamble:n #1 { \tl_gput_right:Nn \g_xeCJK_after_end_preamble_hook {#1} } \AtBeginDocument { \g_xeCJK_after_preamble_hook } \tl_put_left:Nn \document { \group_end: \g_xeCJK_at_end_preamble_hook \group_begin: } @@ -97,7 +100,7 @@ \tl_to_lowercase:n { \group_end: - \prg_new_conditional:Nnn \xeCJK_if_outer_macro:c { p , T , F , TF } + \prg_new_conditional:Npnn \xeCJK_if_outer_macro:c #1 { p , T , F , TF } { \exp_last_unbraced:Nf \xeCJK_if_outer_macro_aux:w { \cs_meaning:c {#1} } OUZER ~ MAYRO ; \q_stop @@ -116,16 +119,8 @@ \cs_new_protected:Npn \xeCJK_peek_catcode_ignore_spaces:NTF #1#2#3 { \cs_set_eq:NN \l_xeCJK_peek_search_token #1 - \cs_set:Npx \xeCJK_peek_true:w - { - \exp_not:N \group_align_safe_end: - \exp_not:n {#2} - } - \cs_set:Npx \xeCJK_peek_false:w - { - \exp_not:N \group_align_safe_end: - \exp_not:n {#3} - } + \tl_set:Nn \xeCJK_peek_true:w { \group_align_safe_end: #2 } + \tl_set:Nn \xeCJK_peek_false:w { \group_align_safe_end: #3 } \group_align_safe_begin: \peek_after:Nw \xeCJK_peek_ignore_spaces_execute_branches: } @@ -133,7 +128,7 @@ { \xeCJK_peek_catcode_ignore_spaces:NTF #1 {#2} { } } \cs_new_protected:Npn \xeCJK_peek_catcode_ignore_spaces:NF #1#2 { \xeCJK_peek_catcode_ignore_spaces:NTF #1 { } {#2} } -\cs_new_nopar:Nn \xeCJK_peek_ignore_spaces_execute_branches: +\cs_new_nopar:Npn \xeCJK_peek_ignore_spaces_execute_branches: { \if_meaning:w \l_peek_token \c_space_token \tex_afterassignment:D \xeCJK_peek_ignore_spaces_execute_branches_aux: @@ -142,9 +137,9 @@ \exp_after:wN \xeCJK_peek_execute_branches_catcode: \fi: } -\cs_new_protected_nopar:Nn \xeCJK_peek_ignore_spaces_execute_branches_aux: +\cs_new_protected_nopar:Npn \xeCJK_peek_ignore_spaces_execute_branches_aux: { \peek_after:Nw \xeCJK_peek_ignore_spaces_execute_branches: } -\cs_new_nopar:Nn \xeCJK_peek_execute_branches_catcode: +\cs_new_nopar:Npn \xeCJK_peek_execute_branches_catcode: { \if_catcode:w \exp_not:N \l_peek_token \exp_not:N \l_xeCJK_peek_search_token \exp_after:wN \xeCJK_peek_true:w @@ -152,7 +147,7 @@ \exp_after:wN \xeCJK_peek_false:w \fi: } -\prg_new_conditional:Nnn \xeCJK_tl_if_blank:x { p , T , F , TF } +\prg_new_conditional:Npnn \xeCJK_if_blank_x:n #1 { p , T , F , TF } { \if_int_compare:w \pdftex_strcmp:D { \c_empty_tl } {#1} = \c_zero \prg_return_true: @@ -161,6 +156,12 @@ \prg_return_true: \else: \prg_return_false: \fi: \fi: } +\prg_new_conditional:Npnn \xeCJK_if_package_loaded:n #1 { p , T , F , TF } + { + \tl_if_exist:cTF { ver@ #1 . \c_xeCJK_pkg_extension_tl } + { \prg_return_true: } { \prg_return_false: } + } +\tl_const:Nx \c_xeCJK_pkg_extension_tl { \@pkgextension } \cs_new_nopar:Npn \xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } \cs_new_nopar:Npn \xeCJK_error:n { \msg_error:nn { xeCJK } } \cs_new_nopar:Npn \xeCJK_error:nx { \msg_error:nnx { xeCJK } } @@ -184,7 +185,7 @@ \int_const:Nn \xeCJK_FullLeft_class { 2 } \int_const:Nn \xeCJK_FullRight_class { 3 } \int_const:Nn \xeCJK_Boundary_class { 255 } -\cs_new_nopar:Nn \xeCJK_new_class:n +\cs_new_protected_nopar:Npn \xeCJK_new_class:n #1 { \exp_args:Nc \newXeTeXintercharclass { xeCJK_#1_class } \clist_gclear_new:c { g_xeCJK_#1_range_clist } @@ -203,48 +204,56 @@ { \clist_gclear_new:c { g_xeCJK_#1_range_clist } } \clist_new:N \g_xeCJK_CJK_class_clist \prop_new:N \g_xeCJK_CJK_class_prop -\cs_new_nopar:Nn \xeCJK_save_CJK_class:n +\cs_new_protected_nopar:Npn \xeCJK_save_CJK_class:n #1 { \clist_gput_right:Nx \g_xeCJK_CJK_class_clist {#1} \prop_gput:Nvx \g_xeCJK_CJK_class_prop { xeCJK_#1_class } {#1} } \cs_generate_variant:Nn \prop_gput:Nnn { Nvx } -\clist_map_inline:nn { CJK, FullLeft, FullRight } { \xeCJK_save_CJK_class:n {#1} } -\cs_new_nopar:Nn \xeCJK_class_num:n { \tl_use:c { xeCJK_#1_class } } -\NewDocumentCommand \xeCJKDeclareCharClass { > { \TrimSpaces } m m } +\clist_map_function:nN { CJK, FullLeft, FullRight } \xeCJK_save_CJK_class:n +\cs_new_nopar:Npn \xeCJK_class_num:n #1 { \tl_use:c { xeCJK_#1_class } } +\NewDocumentCommand \xeCJKDeclareCharClass { s > { \TrimSpaces } m m } + { + \xeCJK_declare_char_class:nn {#2} {#3} + \IfBooleanT {#1} { \xeCJKResetPunctClass } + } +\cs_new_protected_nopar:Npn \xeCJK_declare_char_class:nn #1#2 { \clist_gput_right:cx { g_xeCJK_#1_range_clist } {#2} \clist_map_inline:xn {#2} { \str_if_eq_x:nnF {##1} { -> } { - \xeCJK_setcharclass_aux:Nn \xeCJKsetcharclass {##1} + \xeCJK_set_char_class_aux:Nn \xeCJK_set_char_class:nnn {##1} { \xeCJK_class_num:n {#1} } } } } -\NewDocumentCommand \xeCJK_setcharclass_aux:Nn +\NewDocumentCommand \xeCJK_set_char_class_aux:Nn { m > { \SplitArgument { 1 } { -> } } m } { #1 #2 } \cs_generate_variant:Nn \clist_map_inline:nn { x } -\NewDocumentCommand \xeCJKsetcharclass { m m m } +\NewDocumentCommand \xeCJKsetcharclass { s m m m } + { + \xeCJK_set_char_class:nnn {#2} {#3} {#4} + \IfBooleanF {#1} { \xeCJKResetPunctClass } + } +\cs_new_protected_nopar:Npn \xeCJK_set_char_class:nnn #1#2#3 { \xeCJK_check_num_range:nnNN {#1} {#2} \l_xeCJK_tmpa_int \l_xeCJK_tmpb_int \int_set:Nn \l_xeCJK_tmpc_int {#3} \prop_if_in:NVTF \g_xeCJK_CJK_class_prop \l_xeCJK_tmpc_int - { \cs_set_eq:NN \xeCJK_set_catcode:n \char_set_catcode_other:n } - { \cs_set_eq:NN \xeCJK_set_catcode:n \use_none:n } - \loop - \xeCJK_set_catcode:n \l_xeCJK_tmpa_int + { \loop \char_set_catcode_other:n \l_xeCJK_tmpa_int } + { \loop } \XeTeXcharclass \l_xeCJK_tmpa_int = \l_xeCJK_tmpc_int \if_int_compare:w \l_xeCJK_tmpa_int < \l_xeCJK_tmpb_int \int_incr:N \l_xeCJK_tmpa_int \repeat } -\cs_new_nopar:Nn \xeCJK_check_num_range:nnNN +\cs_new_protected_nopar:Npn \xeCJK_check_num_range:nnNN #1#2#3#4 { - \bool_if:nTF { \xeCJK_tl_if_blank_p:x {#1} || \xeCJK_tl_if_blank_p:x {#2} } + \bool_if:nTF { \xeCJK_if_blank_x_p:n {#1} || \xeCJK_if_blank_x_p:n {#2} } { - \int_set:Nn #3 { \xeCJK_tl_if_blank:xTF {#1} {#2} {#1} } + \int_set:Nn #3 { \xeCJK_if_blank_x:nTF {#1} {#2} {#1} } \int_set_eq:NN #3 #4 } { @@ -254,18 +263,18 @@ } \NewDocumentCommand \xeCJKResetPunctClass { } { - \xeCJKDeclareCharClass { HalfLeft } + \xeCJK_declare_char_class:nn { HalfLeft } { "28 , "2D , "5B , "60 , "7B } - \xeCJKDeclareCharClass { HalfRight } + \xeCJK_declare_char_class:nn { HalfRight } { "21 , "22 , "25 , "27 , "29 , "2C , "2E , "3A , "3B , "3F , "5D , "7D , } - \xeCJKDeclareCharClass { FullLeft } + \xeCJK_declare_char_class:nn { FullLeft } { "2018 , "201C , "2116 , "3008 , "300A , "300C , "300E , "3010 , "3012 , "3014 , "3016 , "3018 , "301A , "301D , "3036 , "E76C , "FE59 , "FE5B , "FE5D , "FE5F , "FE60 , "FE69 , "FE6B , "FF03 , "FF04 , "FF08 , "FF20 , "FF3B , "FF5B , "FFE0 , "FFE1 , "FFE5 , "FFE6 , } - \xeCJKDeclareCharClass { FullRight } + \xeCJK_declare_char_class:nn { FullRight } { "00B7 , "2019 , "201D , "2014 , "2025 , "2026 , "2030 , "2500 , "3001 , "3002 , "3005 , "3006 , "3009 , "300B , "300D , "300F , "3011 , "3015 , @@ -279,7 +288,7 @@ "FF6A , "FF6B , "FF6C , "FF6D , "FF6E , "FF6F , "FF70 , "FF9E , "FF9F , } } -\xeCJKDeclareCharClass { CJK } +\xeCJK_declare_char_class:nn { CJK } { "1100 -> "11FF , "2E80 -> "2EFF , @@ -320,48 +329,30 @@ { \XeTeXcharclass `##1 = \xeCJK_class_num:n { NormalSpace } } } \normalspacedchars{/} -\cs_new_nopar:Nn \xeCJK_inter_class_toks:nnn +\cs_new_protected_nopar:Npn \xeCJK_inter_class_toks:nnn #1#2#3 { \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} = {#3} } -\cs_generate_variant:Nn \xeCJK_inter_class_toks:nnn { nnc } -\cs_new_nopar:Nn \xeCJK_clear_inter_class_toks:nn - { - \XeTeXinterchartoks - \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} = { \c_empty_tl } - } -\cs_new_nopar:Nn \xeCJK_pre_inter_class_toks:nnn +\cs_generate_variant:Nn \xeCJK_inter_class_toks:nnn { nnc , nnx } +\cs_new_nopar:Npn \xeCJK_get_inter_class_toks:nn #1#2 + { \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} } +\cs_new_protected_nopar:Npn \xeCJK_clear_inter_class_toks:nn #1#2 + { \xeCJK_inter_class_toks:nnn {#1} {#2} { \c_empty_tl } } +\cs_new_protected_nopar:Npn \xeCJK_pre_inter_class_toks:nnn #1#2#3 { - \use:x - { - \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} = - { - \exp_not:n {#3} \tex_the:D \XeTeXinterchartoks - \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} - } - } + \xeCJK_inter_class_toks:nnx {#1} {#2} + { \exp_not:n {#3} \xeCJK_get_inter_class_toks:nn {#1} {#2} } } -\cs_new_nopar:Nn \xeCJK_app_inter_class_toks:nnn +\cs_new_protected_nopar:Npn \xeCJK_app_inter_class_toks:nnn #1#2#3 { - \use:x - { - \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} = - { - \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} - \xeCJK_class_num:n {#2} \exp_not:n {#3} - } - } + \xeCJK_inter_class_toks:nnx {#1} {#2} + { \xeCJK_get_inter_class_toks:nn {#1} {#2} \exp_not:n {#3} } } \cs_generate_variant:Nn \xeCJK_app_inter_class_toks:nnn { nnc } -\cs_new_nopar:Nn \xeCJK_get_inter_class_toks:nn - { \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} } -\cs_new_nopar:Nn \xeCJK_copy_inter_class_toks:nnnn +\cs_new_protected_nopar:Npn \xeCJK_copy_inter_class_toks:nnnn #1#2#3#4 { - \use:x - { - \xeCJK_inter_class_toks:nnn {#1} {#2} - { \xeCJK_get_inter_class_toks:nn {#3} {#4} } - } + \xeCJK_inter_class_toks:nnx {#1} {#2} + { \xeCJK_get_inter_class_toks:nn {#3} {#4} } } -\cs_new_nopar:Nn \xeCJK_clear_CJK_toks: +\cs_new_protected_nopar:Npn \xeCJK_clear_CJK_toks: { \clist_map_inline:Nn \g_xeCJK_CJK_class_clist { \xeCJK_clear_inter_class_toks:nn { Boundary } {##1} } @@ -419,7 +410,7 @@ { \xeCJK_pre_inter_class_toks:nnn {#1} { CJK } { \CJKecglue } } } \xeCJK_inter_class_toks:nnn { Boundary } { CJK } { \xeCJK_Boundary_and_CJK: } -\cs_new_nopar:Nn \xeCJK_Boundary_and_CJK: +\cs_new_protected_nopar:Npn \xeCJK_Boundary_and_CJK: { { \xeCJK_check_for_glue: } \c_group_begin_token @@ -427,7 +418,7 @@ \xeCJK_select_font: \CJKsymbol } -\cs_new_nopar:Nn \xeCJK_check_for_glue: +\cs_new_protected_nopar:Npn \xeCJK_check_for_glue: { \bool_if:nTF { \xeCJK_if_last_node_p:n { CJK } || \xeCJK_if_last_node_p:n { CJK_space } } @@ -484,7 +475,7 @@ \xeCJK_ignorespaces: } \xeCJK_inter_class_toks:nnn { CJK } { CJK } { \xeCJK_CJK_and_CJK:N } -\cs_new_nopar:Nn \xeCJK_CJK_and_CJK:N { \CJKglue \CJKsymbol {#1} } +\cs_new_protected_nopar:Npn \xeCJK_CJK_and_CJK:N #1 { \CJKglue \CJKsymbol {#1} } \clist_map_inline:nn { FullLeft, FullRight } { \xeCJK_inter_class_toks:nnn { Boundary } {#1} @@ -502,7 +493,7 @@ \bool_if:nF { \str_if_eq_x_p:nn {#1} { FullLeft } || \str_if_eq_x_p:nn {#1} { FullRight } } { - \xeCJK_pre_inter_class_toks:nnn { FullLeft } {#1} { \nobreak } + \xeCJK_pre_inter_class_toks:nnn { FullLeft } {#1} { \xeCJK_no_break: } \xeCJK_pre_inter_class_toks:nnn { FullRight } {#1} { \xeCJK_after_FullRight: } } } @@ -511,14 +502,14 @@ \clist_map_inline:nn { FullLeft, FullRight } { \xeCJK_inter_class_toks:nnc {#1} {##1} { xeCJK_#1_and_##1:N } } } -\cs_new_nopar:Nn \xeCJK_punct_rule:n +\cs_new_protected_nopar:Npn \xeCJK_punct_rule:n #1 { \tex_vrule:D \@width \dim_eval:c { \l_xeCJK_punct_coor_tl/rule/#1 } \@depth \c_zero_dim \@height \c_zero_dim \scan_stop: } -\cs_new_nopar:Nn \xeCJK_punct_glue:n +\cs_new_protected_nopar:Npn \xeCJK_punct_glue:n #1 { \skip_horizontal:n { @@ -527,22 +518,22 @@ \@minus \dim_eval:n { ( \tl_use:c { \l_xeCJK_punct_coor_tl/glue/#1 } ) /2 } } } -\cs_new_nopar:Nn \xeCJK_punct_kern:n +\cs_new_protected_nopar:Npn \xeCJK_punct_kern:n #1 { \tex_kern:D \dim_eval:c { \l_xeCJK_punct_coor_tl/kern/#1 } } \cs_generate_variant:Nn \dim_eval:n { c } -\cs_new_nopar:Nn \xeCJK_before_FullLeft:N +\cs_new_protected_nopar:Npn \xeCJK_before_FullLeft:N #1 { \tl_set:Nx \l_xeCJK_lastpunct_tl {#1} \xeCJK_punct_rule:n { l/#1 } \CJKpunctsymbol {#1} } -\cs_new_nopar:Nn \xeCJK_after_FullRight: +\cs_new_protected_nopar:Npn \xeCJK_after_FullRight: { \xeCJK_get_punct_bounds:nV { r } \l_xeCJK_lastpunct_tl \xeCJK_punct_rule:n { r/\l_xeCJK_lastpunct_tl } \xeCJK_punct_glue:n { r/\l_xeCJK_lastpunct_tl } } -\cs_new_nopar:Nn \xeCJK_CJK_and_FullLeft:N +\cs_new_protected_nopar:Npn \xeCJK_CJK_and_FullLeft:N #1 { \xeCJK_get_punct_bounds:nN { l } {#1} \int_compare:nNnF \etex_lastnodetype:D = \c_one @@ -554,12 +545,12 @@ \xeCJK_punct_glue:n { l/#1 } } } -\cs_new_nopar:Nn \xeCJK_CJK_and_FullRight:N +\cs_new_protected_nopar:Npn \xeCJK_CJK_and_FullRight:N #1 { \xeCJK_get_punct_bounds:nN { r } {#1} \xeCJK_punct_if_long:NTF {#1} \CJKglue { - \nobreak + \xeCJK_no_break: \xeCJK_punct_if_middle:NT {#1} { \xeCJK_punct_glue:n { r/#1 } @@ -569,25 +560,25 @@ \tl_gset:Nx \l_xeCJK_lastpunct_tl {#1} \CJKpunctsymbol {#1} } -\cs_new_nopar:Nn \xeCJK_FullLeft_and_FullLeft:N +\cs_new_protected_nopar:Npn \xeCJK_FullLeft_and_FullLeft:N #1 { - \nobreak + \xeCJK_no_break: \xeCJK_get_punct_bounds:nN { l } {#1} \xeCJK_get_kern:VN \l_xeCJK_lastpunct_tl {#1} \xeCJK_punct_kern:n { \l_xeCJK_lastpunct_tl - #1 } \xeCJK_before_FullLeft:N {#1} } -\cs_new_nopar:Nn \xeCJK_FullLeft_and_FullRight:N +\cs_new_protected_nopar:Npn \xeCJK_FullLeft_and_FullRight:N #1 { - \nobreak + \xeCJK_no_break: \xeCJK_get_punct_bounds:nN { r } {#1} \xeCJK_get_kern:VN \l_xeCJK_lastpunct_tl {#1} \xeCJK_punct_kern:n { \l_xeCJK_lastpunct_tl - #1 } - \nobreak + \xeCJK_no_break: \tl_set:Nx \l_xeCJK_lastpunct_tl {#1} \CJKpunctsymbol {#1} } -\cs_new_nopar:Nn \xeCJK_FullRight_and_FullLeft:N +\cs_new_protected_nopar:Npn \xeCJK_FullRight_and_FullLeft:N #1 { \xeCJK_punct_rule:n { r/\l_xeCJK_lastpunct_tl } \xeCJK_get_punct_bounds:nN { l } {#1} @@ -596,28 +587,28 @@ \xeCJK_punct_nobreak: \xeCJK_before_FullLeft:N {#1} } -\cs_new_nopar:Nn \xeCJK_FullRight_and_FullRight:N +\cs_new_protected_nopar:Npn \xeCJK_FullRight_and_FullRight:N #1 { \xeCJK_punct_rule:n { r/\l_xeCJK_lastpunct_tl } \xeCJK_get_punct_bounds:nN { r } {#1} \xeCJK_get_kern:VN \l_xeCJK_lastpunct_tl {#1} \xeCJK_punct_kern:n { \l_xeCJK_lastpunct_tl - #1 } - \nobreak + \xeCJK_no_break: \tl_set:Nx \l_xeCJK_lastpunct_tl {#1} \CJKpunctsymbol {#1} } - \prg_new_conditional:Nnn \xeCJK_if_last_node:n { p , T , F , TF } + \prg_new_conditional:Npnn \xeCJK_if_last_node:n #1 { p , T , F , TF } { \if_dim:w \dim_use:c { c_xeCJK_#1_node_dim } = \tex_lastkern:D \prg_return_true: \else: \prg_return_false: \fi: } -\cs_new_nopar:Nn \xeCJK_def_node:nn +\cs_new_protected_nopar:Npn \xeCJK_def_node:nn #1#2 { \dim_if_exist:cTF { c_xeCJK_#1_node_dim } { \dim_gset:cn } { \dim_const:cn } { c_xeCJK_#1_node_dim } {#2} } -\cs_new_protected_nopar:Nn \xeCJK_make_node:n +\cs_new_protected_nopar:Npn \xeCJK_make_node:n #1 { \tex_kern:D - \dim_use:c { c_xeCJK_#1_node_dim } \tex_kern:D \dim_use:c { c_xeCJK_#1_node_dim } @@ -676,7 +667,7 @@ \bool_set_false:N \l_xeCJK_space_bool \cs_set_eq:NN \xeCJK_ignorespaces: \xeCJK_ignore_spaces: } -\cs_new_nopar:Nn \xeCJK_ignore_spaces: +\cs_new_protected_nopar:Npn \xeCJK_ignore_spaces: { \peek_catcode:NTF \c_space_token { @@ -701,7 +692,7 @@ } } } -\cs_new_nopar:Nn \xeCJK_peek_math: +\cs_new_protected_nopar:Npn \xeCJK_peek_math: { \peek_catcode:NTF \c_space_token { @@ -744,7 +735,7 @@ \cs_set_eq:NN \xeCJK_CJK_and_CJK:N \xeCJK_checksingle_save_CJKsymbol:N } } -\cs_new_nopar:Nn \xeCJK_checksingle:N +\cs_new_protected_nopar:Npn \xeCJK_checksingle:N #1 { \peek_catcode:NTF \c_catcode_other_token { \xeCJK_checksingle:NN {#1} } @@ -752,15 +743,15 @@ \bool_if:nTF { ! ( \xeCJK_if_outer_macro_p:c { l_peek_token } ) && - \tl_if_empty_p:x { \token_get_arg_spec:c { l_peek_token } } && + \xeCJK_if_blank_x_p:n { \token_get_arg_spec:c { l_peek_token } } && \exp_args:NNc \exp_args:No \tl_if_single_token_p:n { l_peek_token } && - \exp_args:NNc \exp_after:wN \token_if_other_p:N { l_peek_token } + \exp_args:NNc \exp_after:wN \token_if_other_p:N { l_peek_token } } { \xeCJK_checksingle:NN {#1} } { \xeCJK_checksingle_save_CJKsymbol:N {#1} } } } -\cs_new_nopar:Nn \xeCJK_checksingle:NN +\cs_new_protected_nopar:Npn \xeCJK_checksingle:NN #1#2 { \peek_catcode:NTF \c_catcode_other_token { \xeCJK_checksingle_save_CJKsymbol:N {#1} #2 } @@ -793,22 +784,22 @@ { \xeCJK_checksingle_save_CJKsymbol:N {#1} #2 } } } -\cs_new_nopar:Nn \xeCJK_checksingle:NNN +\cs_new_protected_nopar:Npn \xeCJK_checksingle:NNN #1#2#3 { \bool_if:nTF { \token_if_eq_meaning_p:NN \l_peek_token \par || \token_if_eq_meaning_p:NN \l_peek_token \[ % \] } - { \CJKsymbol {#1} \nobreak #2 } + { \CJKsymbol {#1} \xeCJK_no_break: #2 } { \xeCJK_checksingle_env:NNN {#1} {#2} {#3} } } -\cs_new_nopar:Nn \xeCJK_checksingle_env:NNN +\cs_new_protected_nopar:Npn \xeCJK_checksingle_env:NNN #1#2#3 { \peek_catcode_remove:NTF \c_math_toggle_token { \peek_catcode:NTF \c_math_toggle_token - { \CJKsymbol {#1} \nobreak #2 \c_math_toggle_token } + { \CJKsymbol {#1} \xeCJK_no_break: #2 \c_math_toggle_token } { \xeCJK_checksingle_save_CJKsymbol:N {#1} #2#3 \c_math_toggle_token } } { @@ -821,11 +812,11 @@ } } } -\cs_new_nopar:Nn \xeCJK_checksingle_env:NNNNn +\cs_new_protected_nopar:Npn \xeCJK_checksingle_env:NNNNn #1#2#3#4#5 { \clist_if_in:NnTF \g_xeCJK_inline_env_clist {#5} { \xeCJK_checksingle_save_CJKsymbol:N {#1} #2#3 } - { \CJKsymbol {#1} \nobreak #2 } + { \CJKsymbol {#1} \xeCJK_no_break: #2 } \scan_stop: #4 {#5} } \keys_define:nn { xeCJK / options } @@ -849,44 +840,49 @@ \cs_generate_variant:Nn \token_if_math_toggle:NTF { c } \tl_new:N \xeCJK_UL_subclass_patch_tl \clist_new:N \g_xeCJK_CJK_subclass_clist -\cs_new_nopar:Nn \xeCJK_erase_CJKsymbol: +\cs_new_protected_nopar:Npn \xeCJK_erase_CJKsymbol: { \cs_gset_eq:NN \CJKsymbol_Block \CJKsymbol \cs_gset_eq:NN \CJKsymbol \prg_do_nothing: } -\cs_new_nopar:Nn \xeCJK_restore_CJKsymbol: +\cs_new_protected_nopar:Npn \xeCJK_restore_CJKsymbol: { \cs_gset_eq:NN \CJKsymbol \CJKsymbol_Block \CJKsymbol } -\NewDocumentCommand \xeCJKDeclareSubCJKBlock { m m } - { \xeCJKDeclareSubCharClass { CJK } {#1} {#2} } +\NewDocumentCommand \xeCJKDeclareSubCJKBlock { s m m } + { + \xeCJKDeclareSubCharClass { CJK } {#2} {#3} + \IfBooleanT {#1} { \xeCJKResetPunctClass } + } \@onlypreamble \xeCJKDeclareSubCJKBlock \bool_new:N \l_xeCJK_sub_cancel_bool -\NewDocumentCommand \xeCJKCancelSubCJKBlock { m } +\NewDocumentCommand \xeCJKCancelSubCJKBlock { s m } { \bool_if:NF \l_xeCJK_sub_cancel_bool { \bool_set_true:N \l_xeCJK_sub_cancel_bool - \xeCJK_sub_restore_or_cancel:n {#1} + \xeCJK_sub_restore_or_cancel:n {#2} + \IfBooleanT {#1} { \xeCJKResetPunctClass } } } -\NewDocumentCommand \xeCJKRestoreSubCJKBlock { m } +\NewDocumentCommand \xeCJKRestoreSubCJKBlock { s m } { \bool_if:NT \l_xeCJK_sub_cancel_bool { \bool_set_false:N \l_xeCJK_sub_cancel_bool - \xeCJK_sub_restore_or_cancel:n {#1} + \xeCJK_sub_restore_or_cancel:n {#2} + \IfBooleanT {#1} { \xeCJKResetPunctClass } } } -\cs_new_nopar:Nn \xeCJK_sub_restore_or_cancel:n +\cs_new_protected_nopar:Npn \xeCJK_sub_restore_or_cancel:n #1 { \clist_map_inline:xn {#1} { \cs_if_free:cTF { xeCJK_ CJK/##1 _class } { \xeCJK_error:nx { SubBlock-undefined } {##1} } { - \xeCJKDeclareCharClass + \xeCJK_declare_char_class:nn { CJK \bool_if:NF \l_xeCJK_sub_cancel_bool { /##1 } } { \tl_use:c { g_xeCJK_CJK/##1_range_clist } } } @@ -908,10 +904,10 @@ \xeCJK_new_sub_key:n {#2} \xeCJK_UL_subclass_patch:nn {#1} {#2} } - \xeCJKDeclareCharClass { #1/#2 } {#3} + \xeCJK_declare_char_class:nn { #1/#2 } {#3} } \@onlypreamble \xeCJKDeclareSubCharClass -\cs_new_nopar:Nn \xeCJK_set_sub_class_toks:nn +\cs_new_protected_nopar:Npn \xeCJK_set_sub_class_toks:nn #1#2 { \clist_map_inline:Nn \g_xeCJK_base_class_clist { @@ -950,7 +946,7 @@ { \xeCJK_switch_font:nn {#2} {#1} } } } -\cs_new_nopar:Nn \xeCJK_UL_subclass_patch:nn +\cs_new_protected_nopar:Npn \xeCJK_UL_subclass_patch:nn #1#2 { \tl_put_right:Nn \xeCJK_UL_subclass_patch_tl { @@ -1021,28 +1017,28 @@ \NewDocumentCommand \xeCJKallowbreakbetweenpuncts { } { \cs_set_eq:NN \xeCJK_punct_nobreak: \xeCJK_zero_glue: } \NewDocumentCommand \xeCJKnobreakbetweenpuncts { } - { \cs_set_eq:NN \xeCJK_punct_nobreak: \nobreak } -\cs_new_protected_nopar:Nn \xeCJK_zero_glue: { \skip_horizontal:N \c_zero_skip } + { \cs_set_eq:NN \xeCJK_punct_nobreak: \xeCJK_no_break: } +\cs_new_protected_nopar:Npn \xeCJK_zero_glue: { \skip_horizontal:N \c_zero_skip } \clist_set:Nn \g_xeCJK_special_ps_clist { mixedwidth , long , middle } \clist_map_inline:Nn \g_xeCJK_special_ps_clist { \tl_new:c { l_xeCJK_#1_punct_tl } \prop_new:c { l_xeCJK_#1_punct_prop } } -\cs_new_nopar:Nn \xeCJK_set_special_punct:nn +\cs_new_protected_nopar:Npn \xeCJK_set_special_punct:nn #1#2 { \tl_set:cx { l_xeCJK_#1_punct_tl } {#2} \prop_clear:c { l_xeCJK_#1_punct_prop } \tl_map_inline:cn { l_xeCJK_#1_punct_tl } { \prop_put:cnn { l_xeCJK_#1_punct_prop } {##1} { } } } -\cs_new_nopar:Nn \xeCJK_add_special_punct:nn +\cs_new_protected_nopar:Npn \xeCJK_add_special_punct:nn #1#2 { \tl_put_right:cx { l_xeCJK_#1_punct_tl } {#2} \tl_map_inline:cn { l_xeCJK_#1_punct_tl } { \prop_put:cnn { l_xeCJK_#1_punct_prop } {##1} { } } } -\cs_new_nopar:Nn \xeCJK_sub_special_punct:nn +\cs_new_protected_nopar:Npn \xeCJK_sub_special_punct:nn #1#2 { \tl_map_inline:xn {#2} { @@ -1055,7 +1051,7 @@ \cs_generate_variant:Nn \dim_add:Nn { Nc } \cs_generate_variant:Nn \dim_set_min:Nn { Nc } \tl_set:Nn \l_xeCJK_punct_coor_tl { \l_xeCJK_font_coor_tl/\l_xeCJK_punctstyle_tl } -\cs_new_nopar:Nn \xeCJK_get_punct_bounds:nN +\cs_new_protected_nopar:Npn \xeCJK_get_punct_bounds:nN #1#2 { \tl_if_exist:cF { \l_xeCJK_punct_coor_tl/rule/#1/#2 } { @@ -1082,7 +1078,7 @@ { \cs_if_exist_use:cF { g_xeCJK_punct_width/#2 } { - \xeCJK_tl_if_blank:xTF \g_xeCJK_punct_width_tl + \xeCJK_if_blank_x:nTF \g_xeCJK_punct_width_tl { \c_zero_dim } { \g_xeCJK_punct_width_tl } } @@ -1154,12 +1150,12 @@ \cs_generate_variant:Nn \xeCJK_get_punct_bounds:nN { nV } \NewDocumentCommand \xeCJKsetwidth { m m } { \tl_map_inline:xn {#1} { \tl_gset:cn { g_xeCJK_punct_width/##1 } {#2} } } -\prg_new_conditional:Nnn \xeCJK_punct_if_right:N { p , T , F , TF } +\prg_new_conditional:Npnn \xeCJK_punct_if_right:N #1 { p , T , F , TF } { \tl_if_exist:cTF { \l_xeCJK_punct_coor_tl/glue/r/#1 } \prg_return_true: \prg_return_false: } -\prg_new_conditional:Nnn \xeCJK_punct_if_both_left_right:NN { p , T , F , TF } +\prg_new_conditional:Npnn \xeCJK_punct_if_both_left_right:NN #1#2 { p , T , F , TF } { \bool_if:nTF { @@ -1170,16 +1166,16 @@ } \prg_return_true: \prg_return_false: } -\cs_generate_variant:Nn \prg_new_conditional:Nnn { c } +\cs_generate_variant:Nn \prg_new_conditional:Npnn { c } \clist_map_inline:Nn \g_xeCJK_special_ps_clist { - \prg_new_conditional:cnn { xeCJK_punct_if_#1:N } { p , T , F , TF } + \prg_new_conditional:cpnn { xeCJK_punct_if_#1:N } ##1 { p , T , F , TF } { \prop_if_in:cnTF { l_xeCJK_#1_punct_prop } {##1} \prg_return_true: \prg_return_false: } } -\cs_new_nopar:Nn \xeCJK_get_kern:NN +\cs_new_protected_nopar:Npn \xeCJK_get_kern:NN #1#2 { \tl_if_exist:cF { \l_xeCJK_punct_coor_tl/kern/#1-#2 } { @@ -1193,7 +1189,7 @@ \tl_gset:cV { \l_xeCJK_punct_coor_tl/kern/#1-#2 } \l_xeCJK_tmpa_dim } } -\cs_new_nopar:Nn \xeCJK_calc_kern:NN +\cs_new_protected_nopar:Npn \xeCJK_calc_kern:NN #1#2 { \tl_if_eq:NNTF \l_xeCJK_punctstyle_tl \c_xeCJK_ps_marginkerning_tl { @@ -1245,7 +1241,7 @@ \dim_set_max:Nn \l_xeCJK_tmpa_dim \c_zero_dim } \cs_generate_variant:Nn \xeCJK_get_kern:NN { V } -\cs_new_nopar:Nn \xeCJK_calc_kern:NnNN +\cs_new_protected_nopar:Npn \xeCJK_calc_kern:NnNN #1#2#3#4 { \dim_set:Nn #1 { @@ -1260,7 +1256,7 @@ { + \tl_use:c { \l_xeCJK_punct_coor_tl/rule/m/#4 } } } } -\cs_new_nopar:Nn \xeCJK_get_punct_dimen:N +\cs_new_protected_nopar:Npn \xeCJK_get_punct_dimen:N #1 { \xeCJK_get_glyph_bounds:nNN { left } {#1} \l_xeCJK_tmpa_dim \tl_gset:cV { \l_xeCJK_punct_coor_tl/bound/l/#1 } \l_xeCJK_tmpa_dim @@ -1286,7 +1282,7 @@ } } } -\cs_new_nopar:Nn \xeCJK_get_glyph_bounds:nNN +\cs_new_protected_nopar:Npn \xeCJK_get_glyph_bounds:nNN #1#2#3 { \dim_set:Nn #3 { @@ -1328,7 +1324,7 @@ \cs_set_eq:NN \CJKsymbol \xeCJK_fallback_save_CJKsymbol:N } } -\cs_new_nopar:Nn \xeCJK_fallback_testsymbol:N +\cs_new_protected_nopar:Npn \xeCJK_fallback_testsymbol:N #1 { \font_glyph_if_exist:NnTF \tex_font:D {`#1} { \xeCJK_fallback_save_CJKsymbol:N {#1} } @@ -1357,7 +1353,7 @@ { \xeCJK_set_family_fallback:nnn {#1} {#2} {#3} } { \xeCJK_set_family:nnn { #1/FallBack } {#2} {#3} } } -\cs_new_nopar:Nn \xeCJK_set_family_fallback:nnn +\cs_new_protected_nopar:Npn \xeCJK_set_family_fallback:nnn #1#2#3 { \group_begin: \tl_set:Nx \l_xeCJK_family_fb_tl {#1} @@ -1411,14 +1407,14 @@ } \cs_generate_variant:Nn \keys_set_known:nnN { nx } \clist_new:N \g_xeCJK_sub_key_clist -\cs_new_nopar:Nn \xeCJK_new_sub_key:n +\cs_new_protected_nopar:Npn \xeCJK_new_sub_key:n #1 { \clist_gput_right:Nx \g_xeCJK_sub_key_clist {#1} \keys_define:nn { xeCJK / features } { #1 .code:n = { - \xeCJK_tl_if_blank:xTF {##1} + \xeCJK_if_blank_x:nTF {##1} { \bool_set_false:c { l_xeCJK_copy_#1_bool } \bool_set_false:c { l_xeCJK_add_#1_bool } @@ -1442,7 +1438,7 @@ } } \cs_generate_variant:Nn \xeCJK_new_sub_key:n { x } -\cs_new_nopar:Nn \xeCJK_get_sub_features:nn +\cs_new_protected_nopar:Npn \xeCJK_get_sub_features:nn #1#2 { \tl_set:Nx \l_xeCJK_tmpa_tl {#2} \clist_clear:N \l_xeCJK_sub_fontfeat_clist @@ -1450,35 +1446,35 @@ \exp_args:No \tl_if_head_eq_charcode:nNTF \l_xeCJK_tmpa_tl [ % ] { \exp_after:wN \xeCJK_get_sub_features_aux:n \l_xeCJK_tmpa_tl \c_empty_tl - \xeCJK_tl_if_blank:xT \l_xeCJK_sub_fontname_tl + \xeCJK_if_blank_x:nT \l_xeCJK_sub_fontname_tl { \tl_set:Nx \l_xeCJK_sub_fontname_tl \l_xeCJK_tmpa_tl \clist_clear:N \l_xeCJK_sub_fontfeat_clist } } { \tl_set:Nx \l_xeCJK_sub_fontname_tl \l_xeCJK_tmpa_tl } - \xeCJK_tl_if_blank:xTF \l_xeCJK_sub_fontname_tl + \xeCJK_if_blank_x:nTF \l_xeCJK_sub_fontname_tl { \tl_set:Nx \l_xeCJK_sub_fontname_tl \l_xeCJK_fontname_tl } { \tl_replace_all:Nnx \l_xeCJK_sub_fontname_tl * \l_xeCJK_fontname_tl } \clist_set:cx { l_xeCJK_#1_fontfeat_clist } \l_xeCJK_sub_fontfeat_clist \tl_set:cx { l_xeCJK_#1_fontname_tl } \l_xeCJK_sub_fontname_tl } -\cs_new_nopar:Nn \xeCJK_gobble_brace:N +\cs_new_protected_nopar:Npn \xeCJK_gobble_brace:N #1 { - \exp_args:No \tl_if_head_group:nT #1 + \exp_args:No \tl_if_head_is_group:nT #1 { \exp_last_unbraced:NNo \tl_set:Nn #1 #1 \xeCJK_gobble_brace:N #1 } } -\cs_new_nopar:Npn \xeCJK_get_sub_features_aux:n [#1] #2 +\cs_new_protected_nopar:Npn \xeCJK_get_sub_features_aux:n [#1] #2 { \clist_set:Nx \l_xeCJK_sub_fontfeat_clist {#1} \tl_set:Nx \l_xeCJK_sub_fontname_tl {#2} } \xeCJK_new_sub_key:n { FallBack } -\cs_new_nopar:Nn \xeCJK_map_features_id:n - { \prop_get:Nn \g_xeCJK_features_id_prop { #1 } } +\cs_new_nopar:Npn \xeCJK_map_features_id:n #1 + { \prop_get:Nn \g_xeCJK_features_id_prop {#1} } \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 } @@ -1525,7 +1521,7 @@ \tl_set:Nx \l_xeCJK_monoscale_tl { Scale = { \fp_use:N \g_xeCJK_monoscale_fp } } } } -\cs_new_nopar:Nn \xeCJK_set_init: +\cs_new_protected_nopar:Npn \xeCJK_set_init: { \tl_clear:N \l_xeCJK_monoscale_tl \int_gincr:N \g_xeCJK_fontspec_int @@ -1547,7 +1543,7 @@ \fp_set_eq:NN \l_xeCJK_EmboldenFactor_fp \g_xeCJK_EmboldenFactor_fp \fp_set_eq:NN \l_xeCJK_SlantFactor_fp \g_xeCJK_SlantFactor_fp } -\cs_new_protected_nopar:Nn \xeCJK_set_family:nnn +\cs_new_protected_nopar:Npn \xeCJK_set_family:nnn #1#2#3 { \group_begin: \xeCJK_set_init: @@ -1578,7 +1574,7 @@ \group_end: } \cs_generate_variant:Nn \xeCJK_set_family:nnn { ncc } -\cs_new_nopar:Nn \xeCJK_check_family:n +\cs_new_protected_nopar:Npn \xeCJK_check_family:n #1 { \prop_get:NnNT \g_xeCJK_family_prop {#1} \l_xeCJK_tmpa_tl { @@ -1588,12 +1584,12 @@ } \cs_generate_variant:Nn \xeCJK_check_family:n { V } \xeCJK_msg_new:nn { CJKfamily-redef } { Redefining~CJKfamily~`#1'~(#2). } -\cs_new_nopar:Nn \xeCJK_add_font:nn +\cs_new_protected_nopar:Npn \xeCJK_add_font:nn #1#2 { \prop_put:Nxx \l_xeCJK_add_font_prop { \xeCJK_map_features_id:n {#1} Font } {#2} } -\cs_new_nopar:Nn \xeCJK_add_font_if_new:nn +\cs_new_protected_nopar:Npn \xeCJK_add_font_if_new:nn #1#2 { \prop_put_if_new:Nxx \l_xeCJK_add_font_prop { \xeCJK_map_features_id:n {#1} Font } {#2} @@ -1605,19 +1601,19 @@ \cs_generate_variant:Nn \prop_get:NnNF { Nx } \cs_generate_variant:Nn \prop_if_in:NnF { Nx } \cs_generate_variant:Nn \prop_put_if_new:Nnn { Nxx } -\cs_new_nopar:Nn \xeCJK_add_fake_bold:n +\cs_new_protected_nopar:Npn \xeCJK_add_fake_bold:n #1 { \clist_put_left:cx { l_xeCJK_fontfeat_#1_clist } { FakeBold = { \fp_use:N \l_xeCJK_EmboldenFactor_fp } } } -\cs_new_nopar:Nn \xeCJK_add_fake_slant:n +\cs_new_protected_nopar:Npn \xeCJK_add_fake_slant:n #1 { \clist_put_left:cx { l_xeCJK_fontfeat_#1_clist } { FakeSlant = { \fp_use:N \l_xeCJK_SlantFactor_fp } } } -\cs_new_nopar:Nn \xeCJK_parse_features: +\cs_new_protected_nopar:Npn \xeCJK_parse_features: { \prop_map_inline:Nn \g_xeCJK_features_id_prop { \xeCJK_parse_features:n {##1} } } -\cs_new_nopar:Nn \xeCJK_parse_features:n +\cs_new_protected_nopar:Npn \xeCJK_parse_features:n #1 { \xeCJK_if_font_select:nTF {#1} { @@ -1640,17 +1636,17 @@ } { \xeCJK_set_fake:n {#1} } } -\prg_new_conditional:Nnn \xeCJK_if_font_select:n { p, T, F, TF } +\prg_new_conditional:Npnn \xeCJK_if_font_select:n #1 { p, T, F, TF } { - \exp_args:Nc \xeCJK_tl_if_blank:xTF { l_xeCJK_fontname_#1_tl } + \exp_args:Nc \xeCJK_if_blank_x:nTF { l_xeCJK_fontname_#1_tl } \prg_return_false: \prg_return_true: } -\prg_new_conditional:Nnn \xeCJK_if_it_or_sl:n { p, T, F, TF } +\prg_new_conditional:Npnn \xeCJK_if_it_or_sl:n #1 { p, T, F, TF } { \bool_if:nTF { \str_if_eq_x_p:nn { it } {#1} || \str_if_eq_x_p:nn { sl } {#1} } \prg_return_true: \prg_return_false: } -\cs_new_nopar:Nn \xeCJK_set_fake:n +\cs_new_protected_nopar:Npn \xeCJK_set_fake:n #1 { \str_if_eq_x:nnTF {#1} { bf } { \bool_if:NT \l_xeCJK_AutoFakeBold_bool { \xeCJK_add_fake_bold:n {#1} } } @@ -1674,7 +1670,7 @@ } \xeCJK_add_font_if_new:nn {#1} * } -\cs_new_nopar:Nn \xeCJK_map_it_sl:n +\cs_new_protected_nopar:Npn \xeCJK_map_it_sl:n #1 { \xeCJK_if_map_font_select:nT {#1} { @@ -1683,14 +1679,14 @@ { \xeCJK_add_font_if_new:nx {bf#1} { \xeCJK_get_map_font:n {#1} } } } } -\cs_new_nopar:Nn \xeCJK_get_map_font:n +\cs_new_nopar:Npn \xeCJK_get_map_font:n #1 { \tl_use:c { l_xeCJK_fontname_\str_if_eq_x:nnTF {#1} {it} {sl} {it} _tl } } -\prg_new_conditional:Nnn \xeCJK_if_map_font_select:n { p, T, F, TF } +\prg_new_conditional:Npnn \xeCJK_if_map_font_select:n #1 { p, T, F, TF } { - \xeCJK_tl_if_blank:xTF { \xeCJK_get_map_font:n {#1} } + \xeCJK_if_blank_x:nTF { \xeCJK_get_map_font:n {#1} } \prg_return_false: \prg_return_true: } -\cs_new_nopar:Nn \xeCJK_pass_features: +\cs_new_protected_nopar:Npn \xeCJK_pass_features: { \prop_map_inline:Nn \g_xeCJK_features_id_prop { @@ -1702,13 +1698,13 @@ } \prop_map_inline:Nn \l_xeCJK_add_font_prop { \clist_put_right:Nx \l_xeCJK_pass_features_clist { ##1 = { ##2 } } } - \xeCJK_tl_if_blank:xF \l_xeCJK_monoscale_tl + \xeCJK_if_blank_x:nF \l_xeCJK_monoscale_tl { \clist_put_right:Nx \l_xeCJK_pass_features_clist \l_xeCJK_monoscale_tl } } \prop_new:N \g_xeCJK_family_prop \prop_new:N \g_xeCJK_family_name_prop \prop_new:N \g_xeCJK_family_options_prop -\cs_new_nopar:Nn \xeCJK_save_family_info: +\cs_new_protected_nopar:Npn \xeCJK_save_family_info: { \group_begin: \clist_map_inline:Nn \g_xeCJK_CJK_subclass_clist @@ -1720,7 +1716,7 @@ \prop_gput:NVV \g_xeCJK_family_options_prop \l_xeCJK_family_tl \l_xeCJK_fontoptions_clist \group_end: } -\cs_new_nopar:Nn \xeCJK_add_sub_block: +\cs_new_protected_nopar:Npn \xeCJK_add_sub_block: { \clist_remove_duplicates:N \l_xeCJK_sub_key_clist \clist_map_inline:Nn \l_xeCJK_sub_key_clist @@ -1763,7 +1759,7 @@ } } } -\cs_new_nopar:Nn \xeCJK_copy_family:nn +\cs_new_protected_nopar:Npn \xeCJK_copy_family:nn #1#2 { \xeCJK_family_if_exist:xT {#2} { @@ -1775,17 +1771,19 @@ } \cs_generate_variant:Nn \xeCJK_copy_family:nn { xx } \tl_set:Nn \l_xeCJK_font_coor_tl { xeCJK/\xeCJK@family/\f@series/\f@shape/\f@size } -\cs_new_nopar:Nn \xeCJK_select_font: +\cs_new_protected_nopar:Npn \xeCJK_select_font: { - \cs_if_exist_use:cF \l_xeCJK_font_coor_tl + \cs_if_exist_use:cF { \l_xeCJK_font_coor_tl } { \tl_set:Nx \l_xeCJK_current_coor_tl \l_xeCJK_font_coor_tl - \cs_if_exist_use:cT { xeCJK/family/\xeCJK@family } - { \exp_last_unbraced:NNV \cs_gset_eq:cN \l_xeCJK_current_coor_tl \tex_font:D } + \xeCJK_family_if_exist:xTF { \xeCJK@family } + { \use:c { xeCJK/family/\xeCJK@family } } + { \use_none:nnnn } + \exp_last_unbraced:NNV \cs_gset_eq:cN \l_xeCJK_current_coor_tl \tex_font:D } } \cs_new_eq:NN \xeCJK@setfont \xeCJK_select_font: -\cs_new_nopar:Nn \xeCJK_switch_font:nn +\cs_new_protected_nopar:Npn \xeCJK_switch_font:nn #1#2 { \str_if_eq_x:nnF {#1} {#2} { @@ -1806,17 +1804,20 @@ \xeCJK_select_font: } \xeCJK_msg_new:nn { CJK-block } { Switch~from~block~'#1'~to~'#2'. } -\prg_new_protected_conditional:Nnn \xeCJK_family_if_exist:x { T, F, TF } +\prg_new_protected_conditional:Npnn \xeCJK_family_if_exist:x #1 { T, F, TF } { - \cs_if_free:cTF { xeCJK/family/#1 } \prg_return_false: + \cs_if_free:cTF { xeCJK/family/#1 } + { \prg_return_false: } { - \prop_if_in:NxF \g_xeCJK_family_name_prop {#1} { \use:c { xeCJK/family/#1 } } + \prop_get:NxNF \g_xeCJK_family_name_prop {#1} \l_xeCJK_family_name_tl + { \use:c { xeCJK/family/#1 } } \prg_return_true: } } +\cs_generate_variant:Nn \prop_get:NnNTF { Nx } \NewDocumentCommand \CJKfamily { m } { - \xeCJK_family_if_exist:xTF {#1} + \cs_if_exist:cTF { xeCJK/family/#1 } { \tl_set:Nx \xeCJK@family {#1} } { \seq_if_in:NxF \g_xeCJK_unknown_family_seq {#1} @@ -1870,6 +1871,7 @@ \clist_new:N \g_xeCJK_default_features_clist \NewDocumentCommand \defaultCJKfontfeatures { m } { \clist_gset:Nn \g_xeCJK_default_features_clist {#1} } +\defaultCJKfontfeatures { Script = CJK } \@onlypreamble \defaultCJKfontfeatures \NewDocumentCommand \addCJKfontfeatures { m } { @@ -1954,7 +1956,7 @@ \repeat } \cs_new_eq:NN \xeCJK_math_type:n \mathchar@type -\cs_new_nopar:Nn \xeCJK_set_mathfont: +\cs_new_protected_nopar:Npn \xeCJK_set_mathfont: { \xeCJK_family_if_exist:xTF \c_xeCJK_math_tl { \tl_set:Nx \l_xeCJK_tmpa_tl \c_xeCJK_math_tl } @@ -1973,7 +1975,7 @@ { \clist_map_inline:cn { g_xeCJK_##1_range_clist } { - \xeCJK_setcharclass_aux:Nn \xeCJKsetmathcode {####1} + \xeCJK_set_char_class_aux:Nn \xeCJKsetmathcode {####1} \mathalpha \c_xeCJK_math_tl } } @@ -2001,7 +2003,7 @@ \xeCJK_set_monoscale: \addCJKfontfeatures { Scale = \fp_use:N \g_xeCJK_monoscale_fp } } -\cs_new_nopar:Nn \xeCJK_set_monoscale: +\cs_new_protected_nopar:Npn \xeCJK_set_monoscale: { \group_begin: \fontfamily \ttdefault \selectfont @@ -2010,7 +2012,7 @@ \group_end: } \NewDocumentCommand \setCJKmonoexspace { } { \xeCJK_set_monoexspace: } -\cs_new_nopar:Nn \xeCJK_set_monoexspace: +\cs_new_protected_nopar:Npn \xeCJK_set_monoexspace: { \group_begin: \fontfamily \ttdefault \selectfont @@ -2073,24 +2075,26 @@ { \msg_redirect_module:nnn { xeCJK } { warning } { info } \msg_redirect_module:nnn { xeCJK } { info } { none } - \PassOptionsToPackage { quiet } { fontspec } + \xeCJK_if_package_loaded:nF { fontspec } + { \PassOptionsToPackage { quiet } { fontspec } } }, silent .code:n = { \msg_redirect_module:nnn { xeCJK } { warning } { none } \msg_redirect_module:nnn { xeCJK } { info } { none } - \PassOptionsToPackage { silent } { fontspec } + \xeCJK_if_package_loaded:nF { fontspec } + { \PassOptionsToPackage { silent } { fontspec } } }, unknown .code:n = { - \@ifpackageloaded { fontspec } + \xeCJK_if_package_loaded:nTF { fontspec } { \xeCJK_error:nx { key-unknown } { \l_keys_key_tl } } { \PassOptionsToPackage { \l_keys_key_tl } { fontspec } } }, } \xeCJK_msg_new:nn { key-unknown } { - Sorry,~but~\l_keys_module_tl\c_space_tl does~not~have~a~key~called~'#1'.\\\\ + Sorry,~but~\l__keys_module_tl\c_space_tl does~not~have~a~key~called~'#1'.\\\\ The~key~'#1'~is~being~ignored. } \keys_set:nn { xeCJK / options } @@ -2130,10 +2134,10 @@ \NewDocumentCommand \xeCJKsetslantfactor { m } { \xeCJKsetup { SlantFactor = {#1} } } \NewDocumentCommand \punctstyle { m } { \xeCJKsetup { PunctStyle = {#1} } } -\cs_new_nopar:Npn \xeCJKplainchr { \punctstyle { plain } } +\NewDocumentCommand \xeCJKplainchr { } { \punctstyle { plain } } \NewDocumentCommand \CJKsetecglue { m } { \xeCJKsetup { CJKecglue = {#1} } } \cs_new_eq:NN \xeCJKsetecglue \CJKsetecglue -\cs_new_nopar:Nn \xeCJK_fix_itcorr: +\cs_new_protected_nopar:Npn \xeCJK_fix_itcorr: { \scan_stop: \xeCJK_if_last_node:nTF { default } @@ -2154,18 +2158,16 @@ \xeCJK_AfterEndPreamble:n { \int_compare:nNnF - { \c_three + \seq_count:N \g_xeCJK_class_seq } = \xe@alloc@intercharclass + { \c_three + ( \seq_count:N \g_xeCJK_class_seq ) } = \xe@alloc@intercharclass { - \int_set_eq:NN \l_xeCJK_tmpa_int \c_three - \int_until_do:nNnn \l_xeCJK_tmpa_int = \xe@alloc@intercharclass + \int_step_inline:nnnn \c_four \c_one \xe@alloc@intercharclass { - \int_incr:N \l_xeCJK_tmpa_int - \seq_if_in:NVF \g_xeCJK_class_seq \l_xeCJK_tmpa_int - { \xeCJK_set_others_toks:n \l_xeCJK_tmpa_int } + \seq_if_in:NnF \g_xeCJK_class_seq {#1} + { \xeCJK_set_others_toks:n {#1} } } } } -\cs_new_nopar:Nn \xeCJK_set_others_toks:n +\cs_new_protected_nopar:Npn \xeCJK_set_others_toks:n #1 { \int_set:Nn \xeCJK_Others_class {#1} \clist_map_inline:Nn \g_xeCJK_CJK_class_clist @@ -2176,12 +2178,12 @@ { \xeCJK_get_inter_class_toks:nn { Default } { Others } } \exp_args:Nnnx \xeCJK_pre_inter_class_toks:nnn { Others } {##1} { \xeCJK_get_inter_class_toks:nn { Others } { Default } } - \tl_if_empty:xT { \xeCJK_get_inter_class_toks:nn { Others } { Boundary } } + \xeCJK_if_blank_x:nT { \xeCJK_get_inter_class_toks:nn { Others } { Boundary } } { \xeCJK_copy_inter_class_toks:nnnn { Others } { Boundary } { Default } { Boundary } } - \tl_if_empty:xT { \xeCJK_get_inter_class_toks:nn { Boundary } { Others } } + \xeCJK_if_blank_x:nT { \xeCJK_get_inter_class_toks:nn { Boundary } { Others } } { \xeCJK_copy_inter_class_toks:nnnn { Boundary } { Others } { Boundary } { Default } @@ -2189,7 +2191,7 @@ } } \int_new:N \xeCJK_Others_class -\cs_new_nopar:Nn \xeCJK_patch:Nnn +\cs_new_protected_nopar:Npn \xeCJK_patch:Nnn #1#2#3 { \tl_put_left:Nn #1 {#2} \tl_put_right:Nn #1 {#3} } \xeCJK_AfterPreamble:n { @@ -2198,18 +2200,41 @@ \textellipsis \textemdash \textperiodcentered \textcentereddot \textquoteleft \textquoteright \textquotedblleft \textquotedblright } - { \xeCJK_patch:Nnn #1 { \group_begin: \makexeCJKinactive } { \group_end: } } + { + \xeCJK_patch:Nnn #1 + { \xeCJK_group_begin: \makexeCJKinactive } + { \xeCJK_group_end: } + } \xeCJK_patch:Nnn \tipaencoding { \makexeCJKinactive } { } \cs_set_eq:NN \xeCJK_aux_r \r - \cs_set_nopar:Npn \r #1 { { \makexeCJKinactive \xeCJK_aux_r {#1} } } - \@ifpackageloaded { pifont } + \cs_set_protected_nopar:Npn \r #1 { { \makexeCJKinactive \xeCJK_aux_r {#1} } } + \xeCJK_if_package_loaded:nT { pifont } { \RenewDocumentCommand \Pifont { m } { \fontencoding {U} \fontfamily {#1} \fontseries {m} \fontshape {n} \selectfont \makexeCJKinactive } - } { } + } + } +\cs_new_eq:NN \xeCJK_group_begin: \group_begin: +\cs_new_eq:NN \xeCJK_group_end: \group_end: +\xeCJK_AfterEndPreamble:n + { + \bool_if:nT + { + \xeCJK_if_package_loaded_p:n { hyperref } && + \tl_if_exist_p:N \pdfstringdefPreHook + } + { + \tl_put_right:Nn \pdfstringdefPreHook + { + \cs_set_eq:NN \makexeCJKinactive \prg_do_nothing: + \cs_set_eq:NN \xeCJK_group_begin: \prg_do_nothing: + \cs_set_eq:NN \xeCJK_group_end: \prg_do_nothing: + \cs_set_eq:NN \CJKfamily \use_none:n + } + } } \tl_set:cn { ver@CJK.sty } { 2050/01/01 } \cs_if_free:NT \CJK@ifundefined @@ -2217,7 +2242,7 @@ \NewDocumentCommand \xeCJKcaption { o m } { \IfValueT {#1} { \XeTeXdefaultencoding "#1" } - \cs_set_nopar:Nx \xeCJK_reset_at_catcode: + \cs_set_nopar:Npx \xeCJK_reset_at_catcode: { \exp_not:n { \char_set_catcode:nn { `\@ } } { \char_value_catcode:n { `\@ } } @@ -2227,17 +2252,17 @@ \xeCJK_reset_at_catcode: \XeTeXdefaultencoding "UTF-8" } -\cs_new_protected_nopar:Nn \xeCJK_ULprepunctchar:n +\cs_new_protected_nopar:Npn \xeCJK_ULprepunctchar:n #1 { - { \makexeCJKinactive \CJKpunctsymbol {#1} \nobreak } + { \makexeCJKinactive \CJKpunctsymbol {#1} \xeCJK_no_break: } \tex_ignorespaces:D } -\cs_new_protected_nopar:Nn \xeCJK_ULpostpunctchar:n +\cs_new_protected_nopar:Npn \xeCJK_ULpostpunctchar:n #1 { { \makexeCJKinactive \CJKpunctsymbol {#1} } \xeCJK_ignorespaces: } -\cs_new_protected_nopar:Nn \xeCJK_ULroutines: +\cs_new_protected_nopar:Npn \xeCJK_ULroutines: { \xeCJK_inter_class_toks:nnn { Default } { CJK } { \CJKecglue \CJKsymbol } \xeCJK_inter_class_toks:nnn { HalfLeft } { CJK } { \CJKsymbol } @@ -2258,12 +2283,12 @@ { \cs_set_eq:NN \xeCJK_UL_CJKsymbol \CJKsymbol \cs_set_eq:NN \xeCJK_UL_CJKpunctsymbol \CJKpunctsymbol - \cs_set_nopar:Npn \CJKsymbol #1 + \cs_set_protected_nopar:Npn \CJKsymbol #1 { { \xeCJK_select_font: \xeCJK_UL_CJKsymbol {#1} } - \xeCJK_make_node:n { CJK } \xeCJK_ignorespaces: + { \xeCJK_make_node:n { CJK } } \xeCJK_ignorespaces: } - \cs_set_nopar:Npn \CJKpunctsymbol #1 + \cs_set_protected_nopar:Npn \CJKpunctsymbol #1 { { \xeCJK_select_font: \xeCJK_UL_CJKpunctsymbol {#1} } } \xeCJK_ULroutines: } @@ -2277,8 +2302,9 @@ \bool_if:NT \g_xeCJK_number_bool { \tl_set:Nn \CJK@UnicodeEnc { UTF8 } - \cs_set_nopar:Npn \CJKaddEncHook #1#2 { \cs_set_nopar:cpn { xeCJK_enc_#1 } {#2} } - \cs_set_nopar:Npn \Unicode #1#2 + \cs_set_protected_nopar:Npn \CJKaddEncHook #1#2 + { \cs_set_nopar:cpn { xeCJK_enc_#1 } {#2} } + \cs_set_protected_nopar:Npn \Unicode #1#2 { \tex_char:D \int_eval:n { (#1) * \c_two_hundred_fifty_six + (#2) } } \RequirePackage { CJKnumb } \use:c { xeCJK_enc_\CJK@UnicodeEnc } |