From 63891237806957ce0706ffac4e1425a4a73de187 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 27 Aug 2016 22:16:30 +0000
Subject: xecjk (27aug16)

git-svn-id: svn://tug.org/texlive/trunk@41941 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty | 186 +++++++++++++--------
 1 file changed, 114 insertions(+), 72 deletions(-)

(limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty')

diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty
index ebcfc0357f0..8ab073d4e4c 100644
--- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty
+++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty
@@ -29,10 +29,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee@gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee@gmail.com> $
   {xeCJK font effect}
 \ProvidesExplPackage{xeCJKfntef}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 \PassOptionsToPackage { normalem } { ulem }
 \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { ulem } }
 \ProcessOptions \scan_stop:
@@ -44,54 +44,60 @@
 \addto@hook \UL@hook { \xeCJK_hook_for_ulem: }
 \cs_new_protected_nopar:Npn \xeCJK_hook_for_ulem:
   {
+    \xeCJK_ulem_detect_node:
+    \l__xeCJK_ulem_text_format_tl
     \bool_if:NF \l__xeCJK_ulem_hook_used_bool
       {
         \bool_set_true:N \l__xeCJK_ulem_hook_used_bool
-        \__xeCJK_ulem_initial:
-        \bool_if:NT \l__xeCJK_ulem_subtract_bool
-          {
-            \xeCJK_swap_cs:NN \UL@leaders \xeCJK_ulem_leaders:
-            \cs_set_eq:NN \__xeCJK_ulem_var_leaders: \xeCJK_ulem_var_leaders:
-            \cs_set_eq:NN \xeCJK_ulem_right_skip: \__xeCJK_ulem_right_skip:
-          }
-        \bool_if:NT \l__xeCJK_ulem_hidden_bool
-          { \cs_set_eq:NN \UL@putbox \__xeCJK_ulem_hidden_box: }
-        \bool_if:NTF \l__xeCJK_ulem_skip_bool
-          {
-            \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL@putbox
-            \cs_set_eq:NN \__xeCJK_ulem_hskip_aux:n \xeCJK_ulem_hskip:n
-          }
-          {
-            \xeCJK_swap_cs:NN \__xeCJK_punct_kern:n  \__xeCJK_ulem_punct_kern:n
-            \xeCJK_swap_cs:NN \__xeCJK_punct_hskip:n \__xeCJK_ulem_punct_hskip:n
-            \xeCJK_cs_clear:N \__xeCJK_ulem_skip_punct_begin:
-            \xeCJK_cs_clear:N \__xeCJK_ulem_skip_punct_end:
-          }
-        \xeCJK_glue_to_skip:nN
-          {
-            \cs_set_eq:NN \  \tex_space:D
-            \cs_set_eq:NN \penalty \tex_penalty:D
-            \cs_set_eq:NN \hskip \skip_horizontal:N
-            \CJKglue
-          } \l__xeCJK_ccglue_skip
-        \xeCJK_glue_to_skip:nN
-          {
-            \cs_set_eq:NN \  \tex_space:D
-            \cs_set_eq:NN \penalty \tex_penalty:D
-            \cs_set_eq:NN \hskip \skip_horizontal:N
-            \CJKecglue
-          } \l__xeCJK_ecglue_skip
-        \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l__xeCJK_space_skip
-        \cs_set_protected_nopar:Npn \CJKglue
-          { \__xeCJK_ulem_glue:n \l__xeCJK_ccglue_skip }
-        \cs_set_protected_nopar:Npn \CJKecglue
-          { \__xeCJK_ulem_glue:n \l__xeCJK_ecglue_skip }
-        \cs_set_protected_nopar:Npn \xeCJK_space_glue:
-          { \__xeCJK_ulem_glue:n \l__xeCJK_space_skip }
-        \keys_set:nn { xeCJK / options }
-          { CheckFullRight = false , xCJKecglue = false }
-        \xeCJK_ulem_detect_node:
+        \__xeCJK_ulem_hook:
+      }
+    \xeCJK_ulem_begin_node:
+  }
+\cs_new_protected_nopar:Npn \__xeCJK_ulem_hook:
+  {
+    \__xeCJK_ulem_initial:
+    \bool_if:NT \l__xeCJK_ulem_subtract_bool
+      {
+        \xeCJK_swap_cs:NN \UL@leaders \xeCJK_ulem_leaders:
+        \cs_set_eq:NN \__xeCJK_ulem_var_leaders: \xeCJK_ulem_var_leaders:
+        \cs_set_eq:NN \xeCJK_ulem_right_skip: \__xeCJK_ulem_right_skip:
+      }
+    \bool_if:NT \l__xeCJK_ulem_hidden_bool
+      { \cs_set_eq:NN \UL@putbox \__xeCJK_ulem_hidden_box: }
+    \bool_if:NTF \l__xeCJK_ulem_skip_bool
+      {
+        \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL@putbox
+        \cs_set_eq:NN \__xeCJK_ulem_hskip_aux:n \xeCJK_ulem_hskip:n
       }
+      {
+        \xeCJK_swap_cs:NN \__xeCJK_punct_kern:n  \__xeCJK_ulem_punct_kern:n
+        \xeCJK_swap_cs:NN \__xeCJK_punct_hskip:n \__xeCJK_ulem_punct_hskip:n
+        \xeCJK_cs_clear:N \__xeCJK_ulem_skip_punct_begin:
+        \xeCJK_cs_clear:N \__xeCJK_ulem_skip_punct_end:
+      }
+    \xeCJK_glue_to_skip:nN
+      {
+        \cs_set_eq:NN \  \tex_space:D
+        \cs_set_eq:NN \penalty \tex_penalty:D
+        \cs_set_eq:NN \hskip \skip_horizontal:N
+        \CJKglue
+      } \l__xeCJK_ccglue_skip
+    \xeCJK_glue_to_skip:nN
+      {
+        \cs_set_eq:NN \  \tex_space:D
+        \cs_set_eq:NN \penalty \tex_penalty:D
+        \cs_set_eq:NN \hskip \skip_horizontal:N
+        \CJKecglue
+      } \l__xeCJK_ecglue_skip
+    \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l__xeCJK_space_skip
+    \cs_set_protected_nopar:Npn \CJKglue
+      { \__xeCJK_ulem_glue:n \l__xeCJK_ccglue_skip }
+    \cs_set_protected_nopar:Npn \CJKecglue
+      { \__xeCJK_ulem_glue:n \l__xeCJK_ecglue_skip }
+    \cs_set_protected_nopar:Npn \xeCJK_space_glue:
+      { \__xeCJK_ulem_glue:n \l__xeCJK_space_skip }
+    \keys_set:nn { xeCJK / options }
+      { CheckFullRight = false , xCJKecglue = false }
   }
 \skip_new:N \l__xeCJK_space_skip
 \bool_new:N \l__xeCJK_ulem_hook_used_bool
@@ -110,9 +116,9 @@
       \hbox_set_end:
       \tex_unskip:D \tex_unskip:D \tex_unskip:D
       \xeCJK_ulem_right_skip:
-      \xeCJK_ulem_right_node:
-      \int_set:Nn \tex_spacefactor:D { \UL@spfactor }
-    \c_group_end_token
+    \xeCJK_ulem_group_end:
+    \xeCJK_ulem_right_node:
+    \int_set:Nn \tex_spacefactor:D { \UL@spfactor }
   }
 \cs_new_protected_nopar:Npn \__xeCJK_ulem_loop:nw
   {
@@ -138,6 +144,7 @@
     \dim_compare:nNnTF \tex_lastkern:D = \c_zero_dim
       {
         \xeCJK_cs_clear:N \xeCJK_ulem_left_node:
+        \xeCJK_cs_clear:N \xeCJK_ulem_begin_node:
         \cs_set_eq:NN \__xeCJK_ulem_hskip:n \xeCJK_ulem_hskip:n
       }
       {
@@ -146,25 +153,28 @@
         \dim_compare:nNnTF \tex_lastkern:D = { - \l__xeCJK_tmp_dim }
           {
             \tex_unkern:D
-            { \xeCJK_make_node:n { ulem-left } }
             \cs_set_protected_nopar:Npx \xeCJK_ulem_left_node:
               {
                 \tex_kern:D - \dim_use:N \l__xeCJK_tmp_dim \exp_stop_f:
                 \tex_kern:D   \dim_use:N \l__xeCJK_tmp_dim \exp_stop_f:
               }
+            \cs_set_protected_nopar:Npn \xeCJK_ulem_begin_node:
+              { { \xeCJK_make_node:n { ulem-begin } } }
             \cs_set_eq:NN \__xeCJK_ulem_hskip:n \__xeCJK_ulem_hskip_first:n
           }
           {
             \tex_kern:D \l__xeCJK_tmp_dim
             \xeCJK_cs_clear:N \xeCJK_ulem_left_node:
+            \xeCJK_cs_clear:N \xeCJK_ulem_begin_node:
             \cs_set_eq:NN \__xeCJK_ulem_hskip:n \xeCJK_ulem_hskip:n
           }
       }
   }
-\xeCJK_declare_node:n { ulem-left }
+\xeCJK_declare_node:n { ulem-begin }
+\cs_new_eq:NN \xeCJK_ulem_begin_node: \prg_do_nothing:
 \cs_new_protected_nopar:Npn \__xeCJK_ulem_hskip_first:n #1
   {
-    \xeCJK_if_last_node:nTF { ulem-left }
+    \xeCJK_if_last_node:nTF { ulem-begin }
       {
         \xeCJK_remove_node:
         \skip_horizontal:n {#1}
@@ -349,7 +359,11 @@
     \xeCJK_if_ulem_patch:TF
       {
         \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token
-          { }
+          {
+            \xeCJK_class_group_end: \UL@stop
+            \CJKecglue
+            \UL@start
+          }
           {
             \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool
               {
@@ -580,17 +594,27 @@
   }
 \cs_new_protected_nopar:Npn \__xeCJK_ulem_ccglue:
   { { \skip_set_eq:NN \UL@skip \l__xeCJK_ccglue_skip \UL@leaders } }
+\cs_new_protected_nopar:Npn \xeCJK_ulem_group_begin:
+  {
+    \xeCJK_leave_vmode:
+    \c_group_begin_token
+  }
+\cs_new_protected_nopar:Npn \xeCJK_ulem_group_end:
+  { \c_group_end_token }
+\cs_new_protected_nopar:Npn \xeCJK_ulem_on:n
+  { \ULon }
+\cs_new_eq:NN \__xeCJK_ulem_on:n \UL@on
+\cs_set_protected:Npn \UL@on #1
+  { \__xeCJK_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } }
 \NewDocumentCommand \xeCJKfntefon { s t- s o }
   {
+    \xeCJK_leave_vmode:
     \xeCJK_ulem_boot:NNNn #1#2#3 {#4}
-    \ULon
+    \xeCJK_ulem_on:n
   }
-\cs_new_eq:NN \xeCJK_ulem_on:n \UL@on
-\cs_set_protected:Npn \UL@on #1
-  { \xeCJK_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } }
 \DeclareDocumentCommand \CJKunderline { s t- s o }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_fntef_boot:nnNNNn { underline } { uline } #1#2#3 {#4}
       \xeCJK_fntef_initial:nnn
         { \l__xeCJK_uline_depth_tl }
@@ -602,23 +626,23 @@
             depth \c_zero_dim
             width .2em
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \varCJKunderline { }
   { \CJKunderline - }
 \DeclareDocumentCommand \CJKunderwave { s t- s o }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_fntef_boot:nnNNNn { underwave } { uwave } #1#2#3 {#4}
       \xeCJK_fntef_initial:nnn
         { \l__xeCJK_uwave_depth_tl }
         { \l__xeCJK_uwave_sep_tl }
         { \l__xeCJK_uwave_format_tl \l__xeCJK_uwave_symbol_tl }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \CJKunderdblline { s t- s o }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_fntef_boot:nnNNNn { underdblline } { udbline } #1#2#3 {#4}
       \xeCJK_fntef_initial:nnn
         { \l__xeCJK_udbline_depth_tl }
@@ -638,11 +662,11 @@
                 width .2em
             }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \CJKsout { s t- s o }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_fntef_boot:nnNNNn { sout } { sout } #1#2#3 {#4}
       \xeCJK_fntef_initial:nn
         {
@@ -657,11 +681,11 @@
             { \l__xeCJK_sout_height_tl - \box_ht:N \l__xeCJK_fntef_box / 2 }
             { \box_use:N \l__xeCJK_fntef_box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \CJKxout { s t- s o }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_fntef_boot:nnNNNn { xout } { xout } #1#2#3 {#4}
       \xeCJK_fntef_initial:nn
         {
@@ -674,11 +698,11 @@
             { \box_dp:N \l__xeCJK_fntef_box / 2 }
             { \box_use:N \l__xeCJK_fntef_box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \CJKunderanyline { s t- s o m m }
   {
-    \c_group_begin_token
+    \xeCJK_ulem_group_begin:
       \xeCJK_ulem_boot:NNNn #1#2#3 {#4}
       \xeCJK_fntef_initial:nn
         {#6}
@@ -695,7 +719,7 @@
           \dim_set:Nn \l__xeCJK_fntef_dim
             { \l__xeCJK_ulem_sep_tl + \box_dp:N \ULC@box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \cs_new_protected:Npn \xeCJK_fntef_boot:nnNNNn #1#2#3#4#5#6
   {
@@ -708,6 +732,7 @@
     \bool_set_eq:Nc \l__xeCJK_ulem_skip_bool { l__xeCJK_#2_skip_bool }
     \bool_set_eq:Nc \l__xeCJK_ulem_hidden_bool { l__xeCJK_#2_hidden_bool }
     \bool_set_eq:Nc \l__xeCJK_ulem_subtract_bool { l__xeCJK_#2_subtract_bool }
+    \tl_set_eq:Nc \l__xeCJK_ulem_text_format_tl { l__xeCJK_#2_text_format_tl }
   }
 \cs_new_protected:Npn \xeCJK_ulem_boot:NNNn #1#2#3#4
   {
@@ -720,7 +745,6 @@
   }
 \cs_new_protected_nopar:Npn \xeCJK_fntef_initial:n
   {
-    \xeCJK_leave_vmode:
     \bool_if:NTF \l__xeCJK_nest_bool
       { \__xeCJK_warning:n { fntef-nesting } }
       {
@@ -781,9 +805,11 @@
     underdot / depth           .tl_set:N = \l__xeCJK_udot_depth_tl ,
     underdot / sep             .tl_set:N = \l__xeCJK_udot_sep_tl ,
     underdot / format          .tl_set:N = \l__xeCJK_udot_format_tl ,
+    underdot / textformat      .tl_set:N = \l__xeCJK_udot_text_format_tl ,
     underdot / boxdepth        .tl_set:N = \l__xeCJK_udot_boxdepth_tl ,
     symbol / sep               .tl_set:N = \l__xeCJK_symbol_sep_tl ,
     symbol / boxdepth          .tl_set:N = \l__xeCJK_symbol_boxdepth_tl ,
+    symbol / textformat        .tl_set:N = \l__xeCJK_symbol_text_format_tl ,
     underline / skip         .bool_set:N = \l__xeCJK_uline_skip_bool ,
     underline / hidden       .bool_set:N = \l__xeCJK_uline_hidden_bool ,
     underline / subtract     .bool_set:N = \l__xeCJK_uline_subtract_bool ,
@@ -791,6 +817,7 @@
     underline / depth          .tl_set:N = \l__xeCJK_uline_depth_tl ,
     underline / sep            .tl_set:N = \l__xeCJK_uline_sep_tl ,
     underline / format         .tl_set:N = \l__xeCJK_uline_format_tl ,
+    underline / textformat     .tl_set:N = \l__xeCJK_uline_text_format_tl ,
     underdblline / skip      .bool_set:N = \l__xeCJK_udbline_skip_bool ,
     underdblline / hidden    .bool_set:N = \l__xeCJK_udbline_hidden_bool ,
     underdblline / subtract  .bool_set:N = \l__xeCJK_udbline_subtract_bool ,
@@ -798,6 +825,7 @@
     underdblline / depth       .tl_set:N = \l__xeCJK_udbline_depth_tl ,
     underdblline / sep         .tl_set:N = \l__xeCJK_udbline_sep_tl ,
     underdblline / format      .tl_set:N = \l__xeCJK_udbline_format_tl ,
+    underdblline / textformat  .tl_set:N = \l__xeCJK_udbline_text_format_tl ,
     underdblline / gap         .tl_set:N = \l__xeCJK_udbline_gap_tl ,
     underwave / skip         .bool_set:N = \l__xeCJK_uwave_skip_bool ,
     underwave / hidden       .bool_set:N = \l__xeCJK_uwave_hidden_bool ,
@@ -806,24 +834,28 @@
     underwave / depth          .tl_set:N = \l__xeCJK_uwave_depth_tl ,
     underwave / sep            .tl_set:N = \l__xeCJK_uwave_sep_tl ,
     underwave / format         .tl_set:N = \l__xeCJK_uwave_format_tl ,
+    underwave / textformat     .tl_set:N = \l__xeCJK_uwave_text_format_tl ,
     sout / skip              .bool_set:N = \l__xeCJK_sout_skip_bool ,
     sout / hidden            .bool_set:N = \l__xeCJK_sout_hidden_bool ,
     sout / subtract          .bool_set:N = \l__xeCJK_sout_subtract_bool ,
     sout / thickness           .tl_set:N = \l__xeCJK_sout_thickness_tl ,
     sout / height              .tl_set:N = \l__xeCJK_sout_height_tl ,
     sout / format              .tl_set:N = \l__xeCJK_sout_format_tl ,
+    sout / textformat          .tl_set:N = \l__xeCJK_sout_text_format_tl ,
     xout / skip              .bool_set:N = \l__xeCJK_xout_skip_bool ,
     xout / hidden            .bool_set:N = \l__xeCJK_xout_hidden_bool ,
     xout / subtract          .bool_set:N = \l__xeCJK_xout_subtract_bool ,
     xout / format              .tl_set:N = \l__xeCJK_xout_format_tl ,
+    xout / textformat          .tl_set:N = \l__xeCJK_xout_text_format_tl ,
     ulem / skip              .bool_set:N = \l__xeCJK_ulem_skip_bool ,
     ulem / hidden            .bool_set:N = \l__xeCJK_ulem_hidden_bool ,
     ulem / subtract          .bool_set:N = \l__xeCJK_ulem_subtract_bool ,
     ulem / sep                 .tl_set:N = \l__xeCJK_ulem_sep_tl ,
-    ulem / boxdepth            .tl_set:N = \l__xeCJK_ulem_boxdepth_tl
+    ulem / boxdepth            .tl_set:N = \l__xeCJK_ulem_boxdepth_tl ,
+    ulem / textformat          .tl_set:N = \l__xeCJK_ulem_text_format_tl
   }
 \clist_map_inline:nn
-  { underdot , underline , underdblline , underwave , sout , xout }
+  { underdot , underline , underdblline , underwave , sout , xout , ulem }
   {
     \keys_define:nn { xeCJK / options }
       { #1 .meta:nn = { xeCJK / options / #1 } { ##1 } }
@@ -889,6 +921,7 @@
     \xeCJK_ulem_right: \UL@stop
     \group_begin:
       \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5}
+      \use:c { l__xeCJK_#2_text_format_tl }
       \UL@start \xeCJK_ulem_right_node:
         #6
       \xeCJK_ulem_right: \UL@stop
@@ -900,8 +933,11 @@
     \xeCJK_leave_vmode:
     \group_begin:
       \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5}
+      \__xeCJK_under_symbol_text_format:c { l__xeCJK_#2_text_format_tl }
       #6
+      \xeCJK_ulem_right:
     \group_end:
+    \xeCJK_ulem_right_node:
   }
 \cs_new_protected:Npn \xeCJK_under_symbol_initial:nnnnn #1#2#3#4#5
   {
@@ -924,6 +960,12 @@
     \xeCJK_swap_cs:NN \CJKsymbol \__xeCJK_under_CJKsymbol:N
     \__xeCJK_restore_shipout_CJKsymbol:
   }
+\cs_new_protected:Npn \__xeCJK_under_symbol_text_format:N #1
+  {
+    \tl_if_empty:NF #1
+      { \xeCJK_ulem_right: #1 \xeCJK_ulem_right_node: }
+  }
+\cs_generate_variant:Nn \__xeCJK_under_symbol_text_format:N { c }
 \box_new:N \l__xeCJK_under_symbol_box
 \cs_new_protected:Npn \xeCJK_make_under_symbol:n #1
   {
-- 
cgit v1.2.3

