texlive[41941] Master/texmf-dist: xecjk (27aug16)

commits+karl at tug.org commits+karl at tug.org
Sun Aug 28 00:16:31 CEST 2016


Revision: 41941
          http://tug.org/svn/texlive?view=revision&revision=41941
Author:   karl
Date:     2016-08-28 00:16:30 +0200 (Sun, 28 Aug 2016)
Log Message:
-----------
xecjk (27aug16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf
    trunk/Master/texmf-dist/doc/xelatex/xecjk/xunicode-symbols.pdf
    trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.map
    trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.tec
    trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.map
    trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.tec
    trunk/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty
    trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def

Modified: trunk/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/xelatex/xecjk/xunicode-symbols.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.map
===================================================================
--- trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.map	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.map	2016-08-27 22:16:30 UTC (rev 41941)
@@ -2,8 +2,8 @@
 ; from the Unicode Unihan database: <http://www.unicode.org/Public/UNIDATA/Unihan.zip>
 ;
 ; Unihan_Variants.txt
-; Date: 2015-04-30 18:38:20 GMT [JHJ]
-; Unicode version: 8.0.0
+; Date: 2016-06-01 07:01:48 GMT [JHJ]
+; Unicode version: 9.0.0
 ;
 
 LHSName "traditional"
@@ -2959,6 +2959,7 @@
 U+27717 <> U+461E
 U+27735 <> U+464A
 U+2775E <> U+461B
+U+27835 <> U+2C88D
 U+27A59 <> U+4725
 U+27CDF <> U+27CD5
 U+27D73 <> U+478C

Modified: trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-simp.tec
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.map
===================================================================
--- trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.map	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.map	2016-08-27 22:16:30 UTC (rev 41941)
@@ -2,8 +2,8 @@
 ; from the Unicode Unihan database: <http://www.unicode.org/Public/UNIDATA/Unihan.zip>
 ;
 ; Unihan_Variants.txt
-; Date: 2015-04-30 18:38:20 GMT [JHJ]
-; Unicode version: 8.0.0
+; Date: 2016-06-01 07:01:48 GMT [JHJ]
+; Unicode version: 9.0.0
 ;
 
 LHSName "simplified"
@@ -3033,3 +3033,4 @@
 U+2B6E2 <> U+9E0B
 U+2B6F6 <> U+9D92
 U+2B6F8 <> U+9D97
+U+2C88D <> U+27835

Modified: trunk/Master/texmf-dist/fonts/misc/xetex/fontmapping/xecjk/han-trad.tec
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx
===================================================================
--- trunk/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx	2016-08-27 22:16:30 UTC (rev 41941)
@@ -194,7 +194,7 @@
 %<*package|config|fntef|listings|xunicode|xunextra>
 %<!(config|xunextra)>\NeedsTeXFormat{LaTeX2e}
 %<!(config|xunextra)>\RequirePackage{expl3}
-%<+!driver>\GetIdInfo$Id$
+%<+!driver>\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
 %<package>  {Typesetting CJK scripts with XeLaTeX}
 %<config>  {Configuration file for xeCJK package}
 %<fntef>  {xeCJK font effect}
@@ -207,7 +207,7 @@
 %<listings>\ProvidesExplPackage{xeCJK-listings}
 %<xunicode>\ProvidesExplPackage{xunicode-addon}
 %<xunextra>\ProvidesExplFile{xunicode-extra.def}
-%<!driver>  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+%<!driver>  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 %</package|config|fntef|listings|xunicode|xunextra>
 %<*driver>
 \documentclass{ctxdoc}
@@ -275,7 +275,7 @@
 % \changes{v3.3.2}{2015/05/15}{随 Unicode 7.0.0 更新简繁汉字映射。}
 % \changes{v3.3.3}{2015/09/25}{更新 \hologo{LaTeX3} 代码。}
 %
-% \CheckSum{10060}
+% \CheckSum{10130}
 % \GetFileId{xeCJK.sty}
 %
 % \title{\bfseries\pkg{xeCJK} 宏包}
@@ -668,7 +668,7 @@
 %   和 |AutoFakeSlant| 选项,以便配合全局伪粗体和伪斜体的设定。
 % \end{function}
 %
-% \begin{function}{AutoFakeBold,AutoFakeSlant}
+% \begin{function}[label = ]{AutoFakeBold,AutoFakeSlant}
 %   \begin{syntax}
 %     AutoFakeBold  = \Arg{\TF|数字}
 %     AutoFakeSlant = \Arg{\TF|数字}
@@ -808,7 +808,7 @@
 %   作为数学公式中的 CJK 字体。
 % \end{function}
 %
-% \begin{function}[EXP]{\setCJKfallbackfamilyfont}
+% \begin{function}[EXP, label = ]{\setCJKfallbackfamilyfont}
 %   \begin{syntax}
 %     \tn{setCJKfallbackfamilyfont} \Arg{family} \oarg{font features} \Arg{font name}
 %   \end{syntax}
@@ -1277,7 +1277,7 @@
 %   \end{SideBySideExample}
 % \end{function}
 %
-% \medskip
+% \bigskip
 %
 % 对上述六种对象,\pkg{xeCJKfntef} 提供了一些选项,设置点或线的位置和颜色。可以用
 % \tn{xeCJKsetup} 预先统一设置它们,也可以在使用时特别设置。
@@ -1309,12 +1309,18 @@
 %   设置线或点的格式,比如颜色。
 % \end{function}
 %
+% \begin{function}[added=2016-06-03]{textformat}
+%   设置下划线或点的正文的格式。例如:\smallskip
+%   \begin{Example}[frame=single,numbers=left,gobble=6]
+%     \CJKunderline[textformat=\color{red}]{虚室生白,吉祥止止}\\
+%     \CJKunderdot[textformat=\bfseries, format=\color{blue}]{虚室生白,吉祥止止}
+%   \end{Example}
+% \end{function}
+%
 % \begin{function}{symbol}
 %   设置 \tn{CJKunderwave} 或 \tn{CJKunderdot} 的符号。
 % \end{function}
 %
-% \smallskip
-%
 % 例如,波浪线 \tn{CJKunderwave} 的符号不会随字号而变化,在小字号下不好看。我们可以
 % 将它改为随字号而变化大小:
 %
@@ -1354,16 +1360,14 @@
 %
 % \begin{function}{height}
 %   设置删除线 \tn{CJKsout} 的高度(线的中心到基线的距离)。初始值是 \texttt{0.35em}。
-% \end{function}
 %
-% \smallskip
+%   例如,我们可以设置 \tn{CJKsout} 的厚度和颜色,让它具有类似高亮的效果:\smallskip
 %
-% 例如,我们可以设置 \tn{CJKsout} 的厚度和颜色,让它具有类似高亮的效果:
+%   \begin{Example}[frame=single,numbers=left,gobble=4]
+%     \CJKsout*[thickness=2.5ex, format=\color{yellow}]{瞻彼阕者,虚室生白,吉祥止止}
+%   \end{Example}
+% \end{function}
 %
-% \begin{Example}[frame=single,numbers=left,gobble=4]
-%   \CJKsout*[thickness=2.5ex, format=\color{yellow}]{瞻彼阕者,虚室生白,吉祥止止}
-% \end{Example}
-%
 % \medskip
 %
 % \pkg{xeCJKfntef} 还提供给了自定义下划线和符号的 \tn{CJKunderanyline} 和
@@ -1374,16 +1378,14 @@
 %     \tn{CJKunderanyline} [*] [-] \oarg{选项} \Arg{深度} \Arg{下划内容} \Arg{文本内容}
 %   \end{syntax}
 %   \pkg{xeCJKfntef} 先将 \meta{下划内容} 放进一个盒子(\tn{xeCJKfntefbox})里,然后
-%   向下移动 \meta{深度} 给定的距离,再用于填充。可用的 \meta{选项} 是
+%   向下移动 \meta{深度} 给定的距离,再用于填充。可用的 \meta{选项} 是 \texttt{textformat}、
 %   \texttt{skip}、\texttt{hidden}、\texttt{subtract}、\texttt{sep} 和
 %   \texttt{boxdepth}。选项 \texttt{sep} 和 \texttt{boxdepth} 的初始值是空,表示
 %   禁用该选项的功能。可以在 \tn{xeCJKsetup} 中通过对象 \texttt{ulem} 来设置。
 % \end{function}
 %
-% \smallskip
+% 例如,高亮效果也可以如下实现:\smallskip
 %
-% 例如,高亮效果也可以如下实现:
-%
 % \begin{Example}[frame=single,numbers=left,gobble=4]
 %   \CJKunderanyline*{0.5ex}{\color{yellow}\rule{2pt}{2.5ex}}{虚室生白,吉祥止止}
 % \end{Example}
@@ -1394,14 +1396,12 @@
 %   \end{syntax}
 %   \pkg{xeCJKfntef} 将 \meta{符号} 放进一个盒子(\tn{xeCJKfntefbox})里。
 %   \meta{深度} 参数用于设置盒子顶部的深度(基线到盒子顶部的距离)。
-%   可用的 \meta{选项} 是 \texttt{sep} 和 \texttt{boxdepth},意义与
+%   可用的 \meta{选项} 是 \texttt{textformat}、\texttt{sep} 和 \texttt{boxdepth},意义与
 %   \tn{CJKunderdot} 的相同。
 % \end{function}
 %
-% \smallskip
+% 例如,给汉字加三角形,可以如下设置:\smallskip
 %
-% 例如,给汉字加三角形,可以如下设置:
-%
 % \begin{Example}[frame=single,numbers=left,gobble=4]
 %   \CJKunderanysymbol[sep=0.1em]{0.2em}{\tiny$\triangle$}
 %     {瞻彼阕者,虚室生白,\CJKunderline{吉祥止止}}
@@ -1412,17 +1412,17 @@
 %     \tn{xeCJKfntefon} [*] [-] \oarg{选项}
 %   \end{syntax}
 %   功能与用法 \pkg{ulem} 宏包的 \tn{ULon} 相同,扩展了可选参数符号 |*| 和 |-|,
-%   可用的 \meta{选项} 是 \texttt{skip}、\texttt{hidden} 和 \texttt{subtract}。
-%   这三个选项对 \pkg{ulem} 宏包定义的 \tn{uline} 等命令也有效,需要在
+%   可用的 \meta{选项} 是 \texttt{textformat}、 \texttt{skip}、\texttt{hidden} 和
+%   \texttt{subtract}。 这四个选项对 \pkg{ulem} 宏包定义的 \tn{uline} 等命令也有效,需要在
 %   \tn{xeCJKsetup} 中通过对象 \texttt{ulem} 来设置。例如\smallskip
 %
-%   \begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.35\linewidth,gobble=6]
-%     \xeCJKsetup{ulem/skip=true}
+%   \begin{Example}[frame=single,numbers=left,gobble=6]
+%     \xeCJKsetup{ulem={textformat=\bfseries\color{red}, skip=true}}
 %     \uline{虚室生白,吉祥止止}
-%   \end{SideBySideExample}
+%   \end{Example}
 % \end{function}
 %
-% \smallskip
+% \medskip
 %
 % 此外,\pkg{xeCJKfntef} 还提供了指定宽度,让汉字分散对齐的的环境
 % \env{CJKfilltwosides} 和 \env{CJKfilltwosides*}。
@@ -2329,7 +2329,7 @@
 \clist_const:Nn \c_@@_iteration_marks_chars_clist
   { "3005 , "303B , "309D , "309E , "30FD , "30FE }
 \clist_const:Nn \c_@@_NS_chars_clist
-  { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 }
+  { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 , "16FE0 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2392,8 +2392,10 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v3.3.3}{2015/06/25}{补充 Ext-E。}
+% \changes{v3.4.1}{2016/08/18}{补充 Unicode 9.0.0 的西夏文。}
+%
 % \begin{macro}[var,internal]{\c_@@_CJK_chars_clist}
-% \changes{v3.3.3}{2015/06/25}{补充 Ext-E。}
 % CJK 字符类,包括文字和标点符号。
 %    \begin{macrocode}
 \clist_const:Nn \c_@@_CJK_chars_clist
@@ -2496,6 +2498,18 @@
 %    \begin{macrocode}
     "FF00 -> "FFEF ,
 %    \end{macrocode}
+% \item Ideographic Symbols and Punctuation (表意文字符号及标点)
+%    \begin{macrocode}
+    "16FE0 -> "16FFF ,
+%    \end{macrocode}
+% \item Tangut (西夏文)
+%    \begin{macrocode}
+    "17000 -> "187FF ,
+%    \end{macrocode}
+% \item Tangut Components (西夏文部首)
+%    \begin{macrocode}
+    "18800 -> "18AFF ,
+%    \end{macrocode}
 % \item Kana Supplement (日文假名增补)
 %    \begin{macrocode}
     "1B000 -> "1B0FF ,
@@ -3366,6 +3380,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v3.4.1}{2016/05/21}{修复 \texttt{CJKspace} 功能失效。}
+%
 % \begin{macro}{CJKspace}
 % 是否保留 CJK 文字间的空白,默认不保留。
 %    \begin{macrocode}
@@ -3375,7 +3391,10 @@
     CJKspace / true  .code:n =
       {
         \bool_set_true:N \l_@@_reserve_space_bool
-        \cs_set_eq:NN \@@_maybe_reserve_space: \@@_reserve_space:
+        \cs_set_eq:NN \@@_ignore_space_end:
+                      \@@_maybe_reserve_space:
+        \cs_set_eq:NN \@@_boundary_group_end_space:
+                      \@@_boundary_maybe_reserve_space:
         \cs_set_protected_nopar:Npn \@@_ccglue_or_space:
           { \xeCJK_space_glue: }
       } ,
@@ -3382,7 +3401,10 @@
     CJKspace / false .code:n =
       {
         \bool_set_false:N \l_@@_reserve_space_bool
-        \xeCJK_cs_clear:N \@@_maybe_reserve_space:
+        \cs_set_eq:NN \@@_ignore_space_end:
+                      \group_align_safe_end:
+        \cs_set_eq:NN \@@_boundary_group_end_space:
+                      \@@_boundary_group_end_aux:
         \cs_set_protected_nopar:Npn \@@_ccglue_or_space:
           { \CJKglue }
       } ,
@@ -3414,41 +3436,46 @@
           { \xeCJK_class_group_end: \CJKecglue }
       }
       {
+        \group_align_safe_begin:
         \bool_if:NTF \l_@@_peek_ignore_spaces_bool
           {
-            \group_align_safe_begin:
             \token_if_macro:NTF \l_peek_token
-              {
-                \group_align_safe_end:
-                \xeCJK_class_group_end:
-                { \xeCJK_make_node:n { CJK-space } }
-                \xeCJK_space_or_xecglue:
-              }
-              {
-                \group_align_safe_end:
-                \xeCJK_class_group_end:
-                { \xeCJK_make_node:n { CJK-space } }
-                \@@_maybe_reserve_space:
-              }
+              { \@@_boundary_reserve_space: }
+              { \@@_boundary_group_end_space: }
           }
           {
             \token_if_eq_meaning:NNTF \l_peek_token \scan_stop:
               { \@@_CJK_and_Boundary_relax:N }
-              { \@@_CJK_and_Boundary_aux: }
+              { \@@_boundary_group_end:n { CJK } }
           }
       }
   }
-\cs_new_protected_nopar:Npn \@@_CJK_and_Boundary_aux:
-  { \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK } } }
+\cs_new_protected_nopar:Npn \@@_boundary_reserve_space:
+  {
+    \@@_boundary_group_end_aux:
+    \xeCJK_space_or_xecglue:
+  }
+\cs_new_protected_nopar:Npn \@@_boundary_maybe_reserve_space:
+  {
+    \token_if_letter:NTF \l_peek_token
+      { \@@_boundary_reserve_space: }
+      { \@@_boundary_group_end_aux: }
+  }
+\cs_new_protected_nopar:Npn \@@_boundary_group_end_aux:
+  { \@@_boundary_group_end:n { CJK-space } }
+\cs_new_eq:NN \@@_boundary_group_end_space: \@@_boundary_group_end_aux:
 \cs_new_protected:Npn \@@_CJK_and_Boundary_relax:N #1
   {
-    \@@_CJK_and_Boundary_aux:
+    \@@_boundary_group_end:n { CJK }
     \token_if_eq_meaning:NNTF #1 \scan_stop:
       {#1} { \cs_set_eq:NN #1 \scan_stop: #1 }
   }
-\cs_new_protected:Npn \@@_reserve_space:
-  { \token_if_letter:NT \l_peek_token { \xeCJK_space_or_xecglue: } }
-\cs_new_eq:NN \@@_maybe_reserve_space: \prg_do_nothing:
+\cs_new_protected_nopar:Npn \@@_boundary_group_end:n #1
+  {
+    \group_align_safe_end:
+    \xeCJK_class_group_end:
+    { \xeCJK_make_node:n {#1} }
+  }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3468,11 +3495,23 @@
               { \xeCJK_remove_node: { \xeCJK_make_node:n { CJK-space } } }
             \group_align_safe_begin:
             \token_if_macro:NTF \l_peek_token
-              { \group_align_safe_end: \xeCJK_space_or_xecglue: }
-              { \group_align_safe_end: \@@_maybe_reserve_space: }
+              { \@@_reserve_space_aux: }
+              { \@@_ignore_space_end: }
           }
       }
   }
+\cs_new_protected:Npn \@@_reserve_space_aux:
+  {
+    \group_align_safe_end:
+    \xeCJK_space_or_xecglue:
+  }
+\cs_new_protected:Npn \@@_maybe_reserve_space:
+  {
+    \token_if_letter:NTF \l_peek_token
+      { \@@_reserve_space_aux: }
+      { \group_align_safe_end: }
+  }
+\cs_new_eq:NN \@@_ignore_space_end: \group_align_safe_end:
 %    \end{macrocode}
 % \end{macro}
 %
@@ -7033,7 +7072,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{CJKnumber,indentfirst}
+% \begin{macro}[int]{CJKnumber,indentfirst}
 % \changes{v3.2.11}{2014/03/14}{放弃 \texttt{indentfirst} 和 \texttt{CJKnumber} 选项。}
 % \texttt{CJKnumber} 和 \texttt{indentfirst} 是过时选项。
 %    \begin{macrocode}
@@ -7966,6 +8005,8 @@
 \addto at hook \UL at hook { \xeCJK_hook_for_ulem: }
 %    \end{macrocode}
 %
+% \changes{v3.4.1}{2016/06/03}{新的下划线选项 \texttt{textformat}。}
+%
 % \begin{macro}[internal]{\xeCJK_hook_for_ulem:}
 % \changes{v3.1.0}{2012/11/16}{简化对 \pkg{ulem} 宏包的兼容补丁。}
 % \changes{v3.1.1}{2012/12/08}{完全处理下划线里的标点符号的有关问题。}
@@ -7972,55 +8013,61 @@
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \xeCJK_hook_for_ulem:
   {
+    \xeCJK_ulem_detect_node:
+    \l_@@_ulem_text_format_tl
     \bool_if:NF \l_@@_ulem_hook_used_bool
       {
         \bool_set_true:N \l_@@_ulem_hook_used_bool
-        \@@_ulem_initial:
-        \bool_if:NT \l_@@_ulem_subtract_bool
-          {
-            \xeCJK_swap_cs:NN \UL at leaders \xeCJK_ulem_leaders:
-            \cs_set_eq:NN \@@_ulem_var_leaders: \xeCJK_ulem_var_leaders:
-            \cs_set_eq:NN \xeCJK_ulem_right_skip: \@@_ulem_right_skip:
-          }
-        \bool_if:NT \l_@@_ulem_hidden_bool
-          { \cs_set_eq:NN \UL at putbox \@@_ulem_hidden_box: }
-        \bool_if:NTF \l_@@_ulem_skip_bool
-          {
-            \cs_set_eq:NN \@@_ulem_putbox: \UL at putbox
-            \cs_set_eq:NN \@@_ulem_hskip_aux:n \xeCJK_ulem_hskip:n
-          }
-          {
-            \xeCJK_swap_cs:NN \@@_punct_kern:n  \@@_ulem_punct_kern:n
-            \xeCJK_swap_cs:NN \@@_punct_hskip:n \@@_ulem_punct_hskip:n
-            \xeCJK_cs_clear:N \@@_ulem_skip_punct_begin:
-            \xeCJK_cs_clear:N \@@_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_@@_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_@@_ecglue_skip
-        \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l_@@_space_skip
-        \cs_set_protected_nopar:Npn \CJKglue
-          { \@@_ulem_glue:n \l_@@_ccglue_skip }
-        \cs_set_protected_nopar:Npn \CJKecglue
-          { \@@_ulem_glue:n \l_@@_ecglue_skip }
-        \cs_set_protected_nopar:Npn \xeCJK_space_glue:
-          { \@@_ulem_glue:n \l_@@_space_skip }
-        \keys_set:nn { xeCJK / options }
-          { CheckFullRight = false , xCJKecglue = false }
-        \xeCJK_ulem_detect_node:
+        \@@_ulem_hook:
       }
+    \xeCJK_ulem_begin_node:
   }
+\cs_new_protected_nopar:Npn \@@_ulem_hook:
+  {
+    \@@_ulem_initial:
+    \bool_if:NT \l_@@_ulem_subtract_bool
+      {
+        \xeCJK_swap_cs:NN \UL at leaders \xeCJK_ulem_leaders:
+        \cs_set_eq:NN \@@_ulem_var_leaders: \xeCJK_ulem_var_leaders:
+        \cs_set_eq:NN \xeCJK_ulem_right_skip: \@@_ulem_right_skip:
+      }
+    \bool_if:NT \l_@@_ulem_hidden_bool
+      { \cs_set_eq:NN \UL at putbox \@@_ulem_hidden_box: }
+    \bool_if:NTF \l_@@_ulem_skip_bool
+      {
+        \cs_set_eq:NN \@@_ulem_putbox: \UL at putbox
+        \cs_set_eq:NN \@@_ulem_hskip_aux:n \xeCJK_ulem_hskip:n
+      }
+      {
+        \xeCJK_swap_cs:NN \@@_punct_kern:n  \@@_ulem_punct_kern:n
+        \xeCJK_swap_cs:NN \@@_punct_hskip:n \@@_ulem_punct_hskip:n
+        \xeCJK_cs_clear:N \@@_ulem_skip_punct_begin:
+        \xeCJK_cs_clear:N \@@_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_@@_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_@@_ecglue_skip
+    \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l_@@_space_skip
+    \cs_set_protected_nopar:Npn \CJKglue
+      { \@@_ulem_glue:n \l_@@_ccglue_skip }
+    \cs_set_protected_nopar:Npn \CJKecglue
+      { \@@_ulem_glue:n \l_@@_ecglue_skip }
+    \cs_set_protected_nopar:Npn \xeCJK_space_glue:
+      { \@@_ulem_glue:n \l_@@_space_skip }
+    \keys_set:nn { xeCJK / options }
+      { CheckFullRight = false , xCJKecglue = false }
+  }
 \skip_new:N \l_@@_space_skip
 \bool_new:N \l_@@_ulem_hook_used_bool
 %    \end{macrocode}
@@ -8044,9 +8091,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 at spfactor }
-    \c_group_end_token
+    \xeCJK_ulem_group_end:
+    \xeCJK_ulem_right_node:
+    \int_set:Nn \tex_spacefactor:D { \UL at spfactor }
   }
 \cs_new_protected_nopar:Npn \@@_ulem_loop:nw
   {
@@ -8078,6 +8125,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 \@@_ulem_hskip:n \xeCJK_ulem_hskip:n
       }
       {
@@ -8086,22 +8134,25 @@
         \dim_compare:nNnTF \tex_lastkern:D = { - \l_@@_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_@@_tmp_dim \exp_stop_f:
                 \tex_kern:D   \dim_use:N \l_@@_tmp_dim \exp_stop_f:
               }
+            \cs_set_protected_nopar:Npn \xeCJK_ulem_begin_node:
+              { { \xeCJK_make_node:n { ulem-begin } } }
             \cs_set_eq:NN \@@_ulem_hskip:n \@@_ulem_hskip_first:n
           }
           {
             \tex_kern:D \l_@@_tmp_dim
             \xeCJK_cs_clear:N \xeCJK_ulem_left_node:
+            \xeCJK_cs_clear:N \xeCJK_ulem_begin_node:
             \cs_set_eq:NN \@@_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:
 %    \end{macrocode}
 % \end{macro}
 %
@@ -8111,7 +8162,7 @@
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \@@_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}
@@ -8165,8 +8216,7 @@
 % \end{macro}
 %
 % \begin{macro}[internal]{\xeCJK_ulem_var_leaders:}
-% 第一次画下划线时,先向右平移 \tn{CJKulineleftskip},再画缩小了相同长度的下划线,
-% 让左侧有间距。
+% 第一次画下划线时,不需要向左平移 \tn{UL at pixel},让左侧有间距。
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \xeCJK_ulem_leaders:
   { \@@_ulem_var_leaders: }
@@ -8186,7 +8236,7 @@
 %
 % \begin{macro}[internal]{\xeCJK_ulem_right_skip:}
 % 在下划线完全画好之后,我们检测最后的情况。用 \tn{unskip} 去掉最后一个下划线,再
-% 重新画一个减少 \tn{CJKulinerightskip} 的。
+% 重新画一个减少 \tn{UL at pixel} 的。
 %    \begin{macrocode}
 \cs_new_eq:NN \xeCJK_ulem_right_skip: \prg_do_nothing:
 \cs_new_protected_nopar:Npn \@@_ulem_right_skip:
@@ -8350,8 +8400,12 @@
     \xeCJK_if_ulem_patch:TF
       {
         \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token
-          { }
           {
+            \xeCJK_class_group_end: \UL at stop
+            \CJKecglue
+            \UL at start
+          }
+          {
             \bool_if:NTF \l_@@_peek_ignore_spaces_bool
               {
                 \xeCJK_class_group_end: \UL at stop
@@ -8673,6 +8727,23 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}[int]{\xeCJK_ulem_group_begin:,\xeCJK_ulem_group_end:,\xeCJK_ulem_on:n}
+%    \begin{macrocode}
+\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 \@@_ulem_on:n \UL at on
+\cs_set_protected:Npn \UL at on #1
+  { \@@_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\xeCJKfntefon}
 % \changes{v3.2.15}{2014/11/07}{完善选项。}
 % 扩展 \tn{ULon} 的参数。
@@ -8679,12 +8750,10 @@
 %    \begin{macrocode}
 \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 at on
-\cs_set_protected:Npn \UL at on #1
-  { \xeCJK_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -8692,7 +8761,7 @@
 %    \begin{macrocode}
 \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_@@_uline_depth_tl }
@@ -8704,7 +8773,7 @@
             depth \c_zero_dim
             width .2em
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 \DeclareDocumentCommand \varCJKunderline { }
   { \CJKunderline - }
@@ -8715,13 +8784,13 @@
 %    \begin{macrocode}
 \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_@@_uwave_depth_tl }
         { \l_@@_uwave_sep_tl }
         { \l_@@_uwave_format_tl \l_@@_uwave_symbol_tl }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -8730,7 +8799,7 @@
 %    \begin{macrocode}
 \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_@@_udbline_depth_tl }
@@ -8750,7 +8819,7 @@
                 width .2em
             }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -8759,7 +8828,7 @@
 %    \begin{macrocode}
 \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
         {
@@ -8774,7 +8843,7 @@
             { \l_@@_sout_height_tl - \box_ht:N \l_@@_fntef_box / 2 }
             { \box_use:N \l_@@_fntef_box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -8783,7 +8852,7 @@
 %    \begin{macrocode}
 \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
         {
@@ -8796,7 +8865,7 @@
             { \box_dp:N \l_@@_fntef_box / 2 }
             { \box_use:N \l_@@_fntef_box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -8806,7 +8875,7 @@
 %    \begin{macrocode}
 \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}
@@ -8823,7 +8892,7 @@
           \dim_set:Nn \l_@@_fntef_dim
             { \l_@@_ulem_sep_tl + \box_dp:N \ULC at box }
         }
-      \ULon
+      \xeCJK_ulem_on:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -8842,6 +8911,7 @@
     \bool_set_eq:Nc \l_@@_ulem_skip_bool { l_@@_#2_skip_bool }
     \bool_set_eq:Nc \l_@@_ulem_hidden_bool { l_@@_#2_hidden_bool }
     \bool_set_eq:Nc \l_@@_ulem_subtract_bool { l_@@_#2_subtract_bool }
+    \tl_set_eq:Nc \l_@@_ulem_text_format_tl { l_@@_#2_text_format_tl }
   }
 \cs_new_protected:Npn \xeCJK_ulem_boot:NNNn #1#2#3#4
   {
@@ -8860,7 +8930,6 @@
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \xeCJK_fntef_initial:n
   {
-    \xeCJK_leave_vmode:
     \bool_if:NTF \l_@@_nest_bool
       { \@@_warning:n { fntef-nesting } }
       {
@@ -8950,9 +9019,11 @@
     underdot / depth           .tl_set:N = \l_@@_udot_depth_tl ,
     underdot / sep             .tl_set:N = \l_@@_udot_sep_tl ,
     underdot / format          .tl_set:N = \l_@@_udot_format_tl ,
+    underdot / textformat      .tl_set:N = \l_@@_udot_text_format_tl ,
     underdot / boxdepth        .tl_set:N = \l_@@_udot_boxdepth_tl ,
     symbol / sep               .tl_set:N = \l_@@_symbol_sep_tl ,
     symbol / boxdepth          .tl_set:N = \l_@@_symbol_boxdepth_tl ,
+    symbol / textformat        .tl_set:N = \l_@@_symbol_text_format_tl ,
     underline / skip         .bool_set:N = \l_@@_uline_skip_bool ,
     underline / hidden       .bool_set:N = \l_@@_uline_hidden_bool ,
     underline / subtract     .bool_set:N = \l_@@_uline_subtract_bool ,
@@ -8960,6 +9031,7 @@
     underline / depth          .tl_set:N = \l_@@_uline_depth_tl ,
     underline / sep            .tl_set:N = \l_@@_uline_sep_tl ,
     underline / format         .tl_set:N = \l_@@_uline_format_tl ,
+    underline / textformat     .tl_set:N = \l_@@_uline_text_format_tl ,
     underdblline / skip      .bool_set:N = \l_@@_udbline_skip_bool ,
     underdblline / hidden    .bool_set:N = \l_@@_udbline_hidden_bool ,
     underdblline / subtract  .bool_set:N = \l_@@_udbline_subtract_bool ,
@@ -8967,6 +9039,7 @@
     underdblline / depth       .tl_set:N = \l_@@_udbline_depth_tl ,
     underdblline / sep         .tl_set:N = \l_@@_udbline_sep_tl ,
     underdblline / format      .tl_set:N = \l_@@_udbline_format_tl ,
+    underdblline / textformat  .tl_set:N = \l_@@_udbline_text_format_tl ,
     underdblline / gap         .tl_set:N = \l_@@_udbline_gap_tl ,
     underwave / skip         .bool_set:N = \l_@@_uwave_skip_bool ,
     underwave / hidden       .bool_set:N = \l_@@_uwave_hidden_bool ,
@@ -8975,6 +9048,7 @@
     underwave / depth          .tl_set:N = \l_@@_uwave_depth_tl ,
     underwave / sep            .tl_set:N = \l_@@_uwave_sep_tl ,
     underwave / format         .tl_set:N = \l_@@_uwave_format_tl ,
+    underwave / textformat     .tl_set:N = \l_@@_uwave_text_format_tl ,
     sout / skip              .bool_set:N = \l_@@_sout_skip_bool ,
     sout / hidden            .bool_set:N = \l_@@_sout_hidden_bool ,
     sout / subtract          .bool_set:N = \l_@@_sout_subtract_bool ,
@@ -8981,18 +9055,21 @@
     sout / thickness           .tl_set:N = \l_@@_sout_thickness_tl ,
     sout / height              .tl_set:N = \l_@@_sout_height_tl ,
     sout / format              .tl_set:N = \l_@@_sout_format_tl ,
+    sout / textformat          .tl_set:N = \l_@@_sout_text_format_tl ,
     xout / skip              .bool_set:N = \l_@@_xout_skip_bool ,
     xout / hidden            .bool_set:N = \l_@@_xout_hidden_bool ,
     xout / subtract          .bool_set:N = \l_@@_xout_subtract_bool ,
     xout / format              .tl_set:N = \l_@@_xout_format_tl ,
+    xout / textformat          .tl_set:N = \l_@@_xout_text_format_tl ,
     ulem / skip              .bool_set:N = \l_@@_ulem_skip_bool ,
     ulem / hidden            .bool_set:N = \l_@@_ulem_hidden_bool ,
     ulem / subtract          .bool_set:N = \l_@@_ulem_subtract_bool ,
     ulem / sep                 .tl_set:N = \l_@@_ulem_sep_tl ,
-    ulem / boxdepth            .tl_set:N = \l_@@_ulem_boxdepth_tl
+    ulem / boxdepth            .tl_set:N = \l_@@_ulem_boxdepth_tl ,
+    ulem / textformat          .tl_set:N = \l_@@_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 } }
@@ -9075,6 +9152,7 @@
     \xeCJK_ulem_right: \UL at stop
     \group_begin:
       \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5}
+      \use:c { l_@@_#2_text_format_tl }
       \UL at start \xeCJK_ulem_right_node:
         #6
       \xeCJK_ulem_right: \UL at stop
@@ -9086,8 +9164,11 @@
     \xeCJK_leave_vmode:
     \group_begin:
       \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5}
+      \@@_under_symbol_text_format:c { l_@@_#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
   {
@@ -9110,6 +9191,12 @@
     \xeCJK_swap_cs:NN \CJKsymbol \@@_under_CJKsymbol:N
     \@@_restore_shipout_CJKsymbol:
   }
+\cs_new_protected:Npn \@@_under_symbol_text_format:N #1
+  {
+    \tl_if_empty:NF #1
+      { \xeCJK_ulem_right: #1 \xeCJK_ulem_right_node: }
+  }
+\cs_generate_variant:Nn \@@_under_symbol_text_format:N { c }
 \box_new:N \l_@@_under_symbol_box
 %    \end{macrocode}
 % \end{macro}
@@ -9173,7 +9260,7 @@
 %
 %
 % \begin{macro}{CJKfilltwosides}
-% \changes{v3.2.4}{2012/06/26}{改用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来实现。}
+% \changes{v3.2.4}{2013/06/26}{改用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来实现。}
 % \changes{v3.3.3}{2015/05/30}{确保进入水平模式。}
 % 使用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来定义 |CJKfilltwosides| 环境。
 % 可选参数 |#1| 表示环境的垂直对齐位置,默认居中;参数 |#2| 表示环境的宽度。
@@ -9242,8 +9329,8 @@
 %
 % \subsection{\pkg{xeCJK-listings}}
 %
-% \changes{v3.2.2}{2012/06/04}{增加小宏包 \pkg{xeCJK-listings},用于支持 \pkg{listings} 宏包。}
-% \changes{v3.2.3}{2012/06/06}{完善对 \pkg{listings} 宏包的支持。}
+% \changes{v3.2.2}{2013/06/04}{增加小宏包 \pkg{xeCJK-listings},用于支持 \pkg{listings} 宏包。}
+% \changes{v3.2.3}{2013/06/06}{完善对 \pkg{listings} 宏包的支持。}
 %
 % 仿照 \package{luatexja} 宏包中 \pkg{lltjp-listings} 的处理,支持 \package{listings} 宏包。
 %
@@ -9477,7 +9564,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \changes{v3.2.4}{2012/07/05}
+% \changes{v3.2.4}{2013/07/05}
 % {使 \pkg{listings} 的 \texttt{breaklines} 选项对 CJK 字符类可用,并保持标点符号的禁则。}
 %
 % \begin{macro}[internal]

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty	2016-08-27 22:16:30 UTC (rev 41941)
@@ -29,10 +29,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
   {xeCJK patch file for listings}
 \ProvidesExplPackage{xeCJK-listings}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { xeCJK } }
 \ProcessOptions \scan_stop:
 \RequirePackage { xeCJK }

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg	2016-08-27 22:16:30 UTC (rev 41941)
@@ -6,10 +6,10 @@
 %%
 %% xeCJK.dtx  (with options: `config')
 %% 
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
   {Configuration file for xeCJK package}
 \ProvidesExplFile{\ExplFileName.cfg}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 
 %% 
 %%

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty	2016-08-27 22:16:30 UTC (rev 41941)
@@ -29,10 +29,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
   {Typesetting CJK scripts with XeLaTeX}
 \ProvidesExplPackage{\ExplFileName}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 \msg_new:nnn { xeCJK } { Require-XeTeX }
   {
     The~xeCJK~package~requires~XeTeX~to~function.\\\\
@@ -462,7 +462,7 @@
 \clist_const:Nn \c__xeCJK_iteration_marks_chars_clist
   { "3005 , "303B , "309D , "309E , "30FD , "30FE }
 \clist_const:Nn \c__xeCJK_NS_chars_clist
-  { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 }
+  { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 , "16FE0 }
 \clist_const:Nn \c__xeCJK_EX_chars_clist
   { "FE15 , "FE16 , "FE56 , "FE57 , "FF01 , "FF1F }
 \clist_const:Nn \c__xeCJK_IS_chars_clist { "FE10 , "FE13 , "FE14 }
@@ -510,6 +510,9 @@
     "FE10 -> "FE1F ,
     "FE30 -> "FE4F ,
     "FF00 -> "FFEF ,
+    "16FE0 -> "16FFF ,
+    "17000 -> "187FF ,
+    "18800 -> "18AFF ,
     "1B000 -> "1B0FF ,
     "1F200 -> "1F2FF ,
     "20000 -> "2A6DF ,
@@ -975,7 +978,10 @@
     CJKspace / true  .code:n =
       {
         \bool_set_true:N \l__xeCJK_reserve_space_bool
-        \cs_set_eq:NN \__xeCJK_maybe_reserve_space: \__xeCJK_reserve_space:
+        \cs_set_eq:NN \__xeCJK_ignore_space_end:
+                      \__xeCJK_maybe_reserve_space:
+        \cs_set_eq:NN \__xeCJK_boundary_group_end_space:
+                      \__xeCJK_boundary_maybe_reserve_space:
         \cs_set_protected_nopar:Npn \__xeCJK_ccglue_or_space:
           { \xeCJK_space_glue: }
       } ,
@@ -982,7 +988,10 @@
     CJKspace / false .code:n =
       {
         \bool_set_false:N \l__xeCJK_reserve_space_bool
-        \xeCJK_cs_clear:N \__xeCJK_maybe_reserve_space:
+        \cs_set_eq:NN \__xeCJK_ignore_space_end:
+                      \group_align_safe_end:
+        \cs_set_eq:NN \__xeCJK_boundary_group_end_space:
+                      \__xeCJK_boundary_group_end_aux:
         \cs_set_protected_nopar:Npn \__xeCJK_ccglue_or_space:
           { \CJKglue }
       } ,
@@ -1001,41 +1010,46 @@
           { \xeCJK_class_group_end: \CJKecglue }
       }
       {
+        \group_align_safe_begin:
         \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool
           {
-            \group_align_safe_begin:
             \token_if_macro:NTF \l_peek_token
-              {
-                \group_align_safe_end:
-                \xeCJK_class_group_end:
-                { \xeCJK_make_node:n { CJK-space } }
-                \xeCJK_space_or_xecglue:
-              }
-              {
-                \group_align_safe_end:
-                \xeCJK_class_group_end:
-                { \xeCJK_make_node:n { CJK-space } }
-                \__xeCJK_maybe_reserve_space:
-              }
+              { \__xeCJK_boundary_reserve_space: }
+              { \__xeCJK_boundary_group_end_space: }
           }
           {
             \token_if_eq_meaning:NNTF \l_peek_token \scan_stop:
               { \__xeCJK_CJK_and_Boundary_relax:N }
-              { \__xeCJK_CJK_and_Boundary_aux: }
+              { \__xeCJK_boundary_group_end:n { CJK } }
           }
       }
   }
-\cs_new_protected_nopar:Npn \__xeCJK_CJK_and_Boundary_aux:
-  { \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK } } }
+\cs_new_protected_nopar:Npn \__xeCJK_boundary_reserve_space:
+  {
+    \__xeCJK_boundary_group_end_aux:
+    \xeCJK_space_or_xecglue:
+  }
+\cs_new_protected_nopar:Npn \__xeCJK_boundary_maybe_reserve_space:
+  {
+    \token_if_letter:NTF \l_peek_token
+      { \__xeCJK_boundary_reserve_space: }
+      { \__xeCJK_boundary_group_end_aux: }
+  }
+\cs_new_protected_nopar:Npn \__xeCJK_boundary_group_end_aux:
+  { \__xeCJK_boundary_group_end:n { CJK-space } }
+\cs_new_eq:NN \__xeCJK_boundary_group_end_space: \__xeCJK_boundary_group_end_aux:
 \cs_new_protected:Npn \__xeCJK_CJK_and_Boundary_relax:N #1
   {
-    \__xeCJK_CJK_and_Boundary_aux:
+    \__xeCJK_boundary_group_end:n { CJK }
     \token_if_eq_meaning:NNTF #1 \scan_stop:
       {#1} { \cs_set_eq:NN #1 \scan_stop: #1 }
   }
-\cs_new_protected:Npn \__xeCJK_reserve_space:
-  { \token_if_letter:NT \l_peek_token { \xeCJK_space_or_xecglue: } }
-\cs_new_eq:NN \__xeCJK_maybe_reserve_space: \prg_do_nothing:
+\cs_new_protected_nopar:Npn \__xeCJK_boundary_group_end:n #1
+  {
+    \group_align_safe_end:
+    \xeCJK_class_group_end:
+    { \xeCJK_make_node:n {#1} }
+  }
 \cs_new_protected_nopar:Npn \xeCJK_ignore_spaces:w
   {
     \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token
@@ -1050,11 +1064,23 @@
               { \xeCJK_remove_node: { \xeCJK_make_node:n { CJK-space } } }
             \group_align_safe_begin:
             \token_if_macro:NTF \l_peek_token
-              { \group_align_safe_end: \xeCJK_space_or_xecglue: }
-              { \group_align_safe_end: \__xeCJK_maybe_reserve_space: }
+              { \__xeCJK_reserve_space_aux: }
+              { \__xeCJK_ignore_space_end: }
           }
       }
   }
+\cs_new_protected:Npn \__xeCJK_reserve_space_aux:
+  {
+    \group_align_safe_end:
+    \xeCJK_space_or_xecglue:
+  }
+\cs_new_protected:Npn \__xeCJK_maybe_reserve_space:
+  {
+    \token_if_letter:NTF \l_peek_token
+      { \__xeCJK_reserve_space_aux: }
+      { \group_align_safe_end: }
+  }
+\cs_new_eq:NN \__xeCJK_ignore_space_end: \group_align_safe_end:
 \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 }

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty	2016-08-27 22:16:30 UTC (rev 41941)
@@ -29,10 +29,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at 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,55 +44,61 @@
 \addto at hook \UL at 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 at 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 at putbox \__xeCJK_ulem_hidden_box: }
-        \bool_if:NTF \l__xeCJK_ulem_skip_bool
-          {
-            \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL at 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 at 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 at putbox \__xeCJK_ulem_hidden_box: }
+    \bool_if:NTF \l__xeCJK_ulem_skip_bool
+      {
+        \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL at 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
 \cs_new_protected_nopar:Npn \xeCJK_ulem_word:nw #1 ~
@@ -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 at spfactor }
-    \c_group_end_token
+    \xeCJK_ulem_group_end:
+    \xeCJK_ulem_right_node:
+    \int_set:Nn \tex_spacefactor:D { \UL at 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,8 +359,12 @@
     \xeCJK_if_ulem_patch:TF
       {
         \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token
-          { }
           {
+            \xeCJK_class_group_end: \UL at stop
+            \CJKecglue
+            \UL at start
+          }
+          {
             \bool_if:NTF \l__xeCJK_peek_ignore_spaces_bool
               {
                 \xeCJK_class_group_end: \UL at stop
@@ -580,17 +594,27 @@
   }
 \cs_new_protected_nopar:Npn \__xeCJK_ulem_ccglue:
   { { \skip_set_eq:NN \UL at skip \l__xeCJK_ccglue_skip \UL at 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 at on
+\cs_set_protected:Npn \UL at 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 at on
-\cs_set_protected:Npn \UL at 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 at 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,6 +834,7 @@
     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 ,
@@ -812,18 +841,21 @@
     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 at stop
     \group_begin:
       \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5}
+      \use:c { l__xeCJK_#2_text_format_tl }
       \UL at start \xeCJK_ulem_right_node:
         #6
       \xeCJK_ulem_right: \UL at 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
   {

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty	2016-08-27 22:16:30 UTC (rev 41941)
@@ -29,10 +29,10 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
   {addon file for xunicode}
 \ProvidesExplPackage{xunicode-addon}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 \bool_if:nF
   {
     \sys_if_engine_xetex_p: ||

Modified: trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def
===================================================================
--- trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def	2016-08-27 22:16:16 UTC (rev 41940)
+++ trunk/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def	2016-08-27 22:16:30 UTC (rev 41941)
@@ -27,10 +27,10 @@
 %% 
 %% ----------------------------------------------------------------------
 %% 
-\GetIdInfo$Id: xeCJK.dtx 463fb57 2016-05-14 12:24:41 +0800 Qing Lee <sobenlee at gmail.com> $
+\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee at gmail.com> $
   {extra definition for xunicode}
 \ProvidesExplFile{xunicode-extra.def}
-  {\ExplFileDate}{3.4.0}{\ExplFileDescription}
+  {\ExplFileDate}{3.4.1}{\ExplFileDescription}
 \DeclareUTFComposite\textsuperscript
 \DeclareUTFComposite\textsubscript
 \DeclareUTFEncodedAccent\textsbleftarrow{"20EE}{"20FF}



More information about the tex-live-commits mailing list