diff options
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 690 |
1 files changed, 369 insertions, 321 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 6ad85be95c9..e0244c40305 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: `xeCJK') %% -%% Version 2.3.0 (30-June-2009) +%% Version 2.3.5 (2-Aug-2009) %% %% Copyright (C) Wenchang Sun <sunwch@hotmail.com> %% @@ -18,13 +18,12 @@ %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% -\def\fileversion{2.3.0} -\def\filedate{2009/06/30} +\def\fileversion{2.3.5} +\def\filedate{2009/08/02} \ProvidesPackage{xeCJK}[\filedate\space\fileversion] \RequirePackage{ifxetex} \RequireXeTeX \expandafter\def\csname ver@CJK.sty\endcsname{2020/01/01} -\RequirePackage{fontspec} \newif\ifxeCJK@SlantFont@ \xeCJK@SlantFont@false @@ -35,12 +34,6 @@ \newif\ifxeCJK@num \xeCJK@numfalse -\newif\ifxeCJK@indisplay -\xeCJK@indisplayfalse - -\newif\ifxeCJK@addspaces -\xeCJK@addspacesfalse - \newif\ifxeCJK@checksingle \xeCJK@checksinglefalse @@ -49,15 +42,18 @@ \DeclareOption{slantfont}{\xeCJK@SlantFont@true} \DeclareOption{SlantFont}{\ExecuteOptions{slantfont}} \DeclareOption{CJKnumber}{\xeCJK@numtrue} -\DeclareOption{CJKnormalspaces}{\xeCJK@addspacesfalse} -\DeclareOption{CJKaddspaces}{\xeCJK@addspacestrue} +\DeclareOption{CJKnormalspaces}{} +\DeclareOption{CJKaddspaces}{} \DeclareOption{CJKtextspaces}{} \DeclareOption{CJKmathspaces}{} \DeclareOption{CJKsetspaces}{} \DeclareOption{CJKnospaces}{} -\DeclareOption{CJKchecksingle}{\xeCJK@checksingletrue} -\ExecuteOptions{CJKaddspaces}\relax +\DeclareOption{CJKchecksingle}{\AtEndOfPackage{\let\xeCJK@i@i\xeCJK@checksingle}} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{fontspec}} \ProcessOptions\relax + +\RequirePackage{fontspec} +\relax \endlinechar \m@ne \XeTeXinterchartokenstate=1\relax @@ -65,7 +61,6 @@ \@tempcnta=#1 \loop \XeTeXcharclass \@tempcnta #3\relax - \catcode\@tempcnta=11\relax \advance\@tempcnta 1\relax \ifnum\the\@tempcnta<#2 \repeat \xeCJK@setpunctcharclass} @@ -110,43 +105,291 @@ \xeCJKsetcharclass{"2000}{"FFFF}{1} -\XeTeXinterchartoks 0 255 {\xeCJK@@cclv} -\XeTeXinterchartoks 0 1 {\xeCJK@@i\xeCJK@char} -\XeTeXinterchartoks 4 1 {\xeCJK@char} -\XeTeXinterchartoks 5 1 {\xeCJK@v@i\xeCJK@char} -\XeTeXinterchartoks 255 1 {\xeCJK@checksingle} +\XeTeXinterchartoks 1 0{\egroup\CJKecglue} +\XeTeXinterchartoks 1 1{\xeCJK@i@i} +\XeTeXinterchartoks 1 2{\xeCJK@i@ii} +\XeTeXinterchartoks 1 3{\xeCJK@i@iii} +\XeTeXinterchartoks 1 4{\egroup\CJKecglue} +\XeTeXinterchartoks 1 5{\egroup} +\XeTeXinterchartoks 1 255{\xeCJK@i@cclv} + +\XeTeXinterchartoks 2 0{\xeCJK@ii@} +\XeTeXinterchartoks 2 1{\xeCJK@ii@i} +\XeTeXinterchartoks 2 2{\xeCJK@ii@ii} +\XeTeXinterchartoks 2 3{\xeCJK@ii@iii} +\XeTeXinterchartoks 2 4{\xeCJK@ii@iv} +\XeTeXinterchartoks 2 5{\xeCJK@ii@v} +\XeTeXinterchartoks 2 255{\xeCJK@ii@cclv} + +\XeTeXinterchartoks 3 0{\xeCJK@iii@} +\XeTeXinterchartoks 3 1{\xeCJK@iii@i} +\XeTeXinterchartoks 3 2{\xeCJK@iii@ii} +\XeTeXinterchartoks 3 3{\xeCJK@iii@iii} +\XeTeXinterchartoks 3 4{\xeCJK@iii@iv} +\XeTeXinterchartoks 3 5{\xeCJK@iii@v} +\XeTeXinterchartoks 3 255{\xeCJK@iii@cclv} + +\XeTeXinterchartoks 0 1{\xeCJK@@i} +\XeTeXinterchartoks 0 2{\xeCJK@@ii} +\XeTeXinterchartoks 0 3{\xeCJK@@iii} +\XeTeXinterchartoks 0 255{\xeCJK@@cclv} + +\XeTeXinterchartoks 4 1{\xeCJK@iv@i} +\XeTeXinterchartoks 4 2{\xeCJK@iv@ii} +\XeTeXinterchartoks 4 3{\xeCJK@iv@iii} + +\XeTeXinterchartoks 5 1{\xeCJK@v@i} +\XeTeXinterchartoks 5 2{\xeCJK@v@ii} +\XeTeXinterchartoks 5 3{\xeCJK@v@iii} +\XeTeXinterchartoks 5 255{\xeCJK@v@cclv} + +\XeTeXinterchartoks 255 0{\xeCJK@cclv@} +\XeTeXinterchartoks 255 1{\xeCJK@cclv@i} +\XeTeXinterchartoks 255 2{\xeCJK@cclv@ii} +\XeTeXinterchartoks 255 3{\xeCJK@cclv@iii} +\XeTeXinterchartoks 255 4{\xeCJK@cclv@iv} + +\def\xeCJK@i@i{ + \CJKglue + \CJKsymbol} + +\def\xeCJK@i@ii#1{ + \xeCJK@punctrule{#1}{l} + \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname + plus 0.1em minus 0.1 em + \xeCJK@setprepunct{#1}} + +\def\xeCJK@i@iii#1{ + \xeCJK@punctrule{#1}{r} + \ifcsname xeCJK@specialpunct#1\endcsname + \CJKglue % breakable + \else + \nobreak + \fi + \global\edef\xeCJK@lastpunct{#1} + \CJKpunctsymbol{#1}} + +\def\xeCJK@setprepunct#1{ + \edef\xeCJK@lastpunct{#1} + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @lrule@#1\endcsname depth \z@ height \z@ + \CJKpunctsymbol{#1}} + +\def\xeCJK@i@cclv{ + \egroup + {\xeCJK@CJKkern} + \xeCJK@ignorespaces} + +\def\xeCJK@ii@i{ + \nobreak + \CJKsymbol} + +\def\xeCJK@ii@ii#1{ + \nobreak + \xeCJK@punctrule{#1}{l} + \xeCJK@setkern{\xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname + \xeCJK@setprepunct{#1}} + +\def\xeCJK@ii@iii#1{ + \nobreak + \xeCJK@punctrule{#1}{r} + \xeCJK@setkern{\xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname + \nobreak + \edef\xeCJK@lastpunct{#1} + \CJKpunctsymbol{#1}} + +\def\xeCJK@ii@{ + \nobreak + \egroup} + +\let\xeCJK@ii@iv\xeCJK@ii@ +\let\xeCJK@ii@v\xeCJK@ii@ + +\def\xeCJK@ii@cclv{ + \nobreak + \egroup + \ignorespaces} + +\def\xeCJK@iii@{ + \xeCJK@afterpostpunct + \egroup} + +\def\xeCJK@iii@i{ + \xeCJK@afterpostpunct + \CJKsymbol} + +\def\xeCJK@iii@ii#1{ + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ + \xeCJK@punctrule{#1}{l} + \xeCJK@setkern{\xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname + \xeCJKpunctnobreak + \xeCJK@setprepunct{#1}} + +\def\xeCJK@iii@iii#1{ + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ + \xeCJK@punctrule{#1}{r} + \xeCJK@setkern{\xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname + \nobreak + \edef\xeCJK@lastpunct{#1} + \CJKpunctsymbol{#1}} + +\def\xeCJK@iii@iv{ + \xeCJK@afterpostpunct + \egroup} + +\def\xeCJK@afterpostpunct{ + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ + \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\xeCJK@lastpunct\endcsname + plus 0.1em minus 0.1 em} +\let\xeCJK@iii@v\xeCJK@iii@iv + +\def\xeCJK@iii@cclv{ + \xeCJK@afterpostpunct + \egroup + \expandafter\xeCJK@ignorespaces} + +\def\xeCJK@@i{ + \CJKecglue + \bgroup + \xeCJK@setfont + \xeCJK@emptyCJKtoks + \CJKsymbol} + +\def\xeCJK@@ii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 0 2{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@ii} + +\def\xeCJK@@iii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 0 3{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@iii} + +\def\xeCJK@iv@i{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 4 1{\relax} + \xeCJK@emptyCJKtoks + \CJKsymbol} + +\def\xeCJK@iv@ii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 4 2{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@ii} + +\def\xeCJK@iv@iii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 4 3{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@iii} + +\def\xeCJK@v@i{ + \CJKecglue + \bgroup + \xeCJK@setfont + \xeCJK@emptyCJKtoks + \CJKsymbol} + +\def\xeCJK@v@ii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 5 2{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@ii} + +\def\xeCJK@v@iii{ + \bgroup + \xeCJK@setfont + \XeTeXinterchartoks 5 3{\relax} + \xeCJK@emptyCJKtoks + \xeCJK@i@iii} + +\def\xeCJK@emptyCJKtoks{ + \XeTeXinterchartoks 255 1{\relax} + \XeTeXinterchartoks 255 2{\relax} + \XeTeXinterchartoks 255 3{\relax}} + +\def\xeCJK@@cclv{ + \futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} + +\def\xeCJK@zz@cclv{ + \ifx\xeCJK@nexttoken\@sptoken + \else + {\xeCJK@zerokern} + \fi} + +\let\xeCJK@v@cclv\xeCJK@@cclv + +\def\xeCJK@cclv@{ + \ifnum\lastkern=\@ne + \CJKecglue + \fi} +\let\xeCJK@cclv@iv\xeCJK@cclv@ + +\def\xeCJK@cclv@i{{ + \ifnum\lastkern=\@ne + \CJKglue + \else + \ifnum\lastkern=\xeCJK@four + \CJKecglue + \else + \ifnum\lastnodetype=\xeCJK@ten + \CJKecglue + \fi + \fi + \fi} + \bgroup -\XeTeXinterchartoks 0 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 4 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 5 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 255 2 {\xeCJK@prepunctchar} + \xeCJK@emptyCJKtoks + \xeCJK@setfont + \CJKsymbol} -\XeTeXinterchartoks 0 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 4 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 5 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 255 3 {\xeCJK@postpunctchar} +\def\xeCJK@cclv@ii{ + \bgroup + \xeCJK@emptyCJKtoks + \xeCJK@setfont + \xeCJK@i@ii} -\XeTeXinterchartoks 255 0 {\xeCJK@cclv@} -\XeTeXinterchartoks 255 4 {\xeCJK@cclv@iv} +\def\xeCJK@cclv@iii{ + \bgroup + \xeCJK@emptyCJKtoks + \xeCJK@setfont + \xeCJK@i@iii} \def\CJKglue{\hskip \z@ \@plus .08\baselineskip} \def\CJK@nobreakglue{\nobreak\CJKglue\nobreak} \edef\xeCJK@CJKkern{\kern -1sp\kern 1sp} \edef\xeCJK@prepunctkern{\kern -2sp\kern 2sp} -\edef\xeCJK@postpunctkern{\kern -3sp\kern 3sp} \edef\xeCJK@zerokern{\kern -4sp\kern 4sp} -\newif\if@xeCJK@inmath -\@xeCJK@inmathfalse +\chardef\xeCJK@four=4 +\chardef\xeCJK@ten=10 -\newif\if@xeCJK \def\xeCJK@ignorespaces{ \futurelet\xeCJK@nexttoken\xeCJK@checknext} -\def\xeCJK@n@checknext{ +\def\xeCJK@checknext{ \ifx\xeCJK@nexttoken\@sptoken \expandafter\xeCJK@@checknext + \else + \ifx $\xeCJK@nexttoken + \CJKecglue + \fi \fi} { @@ -157,32 +400,24 @@ \def\CJK@stop{\CJK@stop} \def\xeCJK@@@checknext{ - \ifcat L\noexpand\@let@token - \else - \let\xeCJK@nexttoken\relax + \ifx $\@let@token \CJKecglue - \fi} + \fi + \let\xeCJK@nexttoken\relax} \long\def\xeCJK@gobble#1\CJK@stop{} -\def\xeCJK@notchecksingle{ - \xeCJK@cclv@i - \xeCJK@char} - -\def\xeCJK@z@checksingle#1{ +\def\xeCJK@checksingle#1{ \def\xeCJK@setcurrentchar@i{ - \xeCJK@cclv@i - \xeCJK@char{#1}} + \CJKglue + \CJKsymbol{#1}} \def\xeCJK@setcurrentnobreakchar@i{ - \xeCJK@char{#1}} + \CJKsymbol{#1}} \futurelet\@let@token\xeCJK@@checksingle} \def\xeCJK@@checksingle{ - \expandafter\futurelet - \expandafter\xeCJK@tempb - \expandafter\xeCJK@gobble\meaning\@let@token\CJK@stop - \if t\xeCJK@tempb + \ifcat 。\@let@token \expandafter\xeCJK@@@checksingle \else \expandafter\xeCJK@setcurrentchar@i @@ -205,235 +440,20 @@ \def\xeCJK@checkpar{ \@ifnextchar\par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii}} -\def\xeCJK@doaftermath{ - \futurelet\xeCJK@nexttoken\xeCJK@aftermath} - -\def\xeCJK@z@cclv{\futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} - -\def\xeCJK@zz@cclv{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@zzz@cclv - \else - {\xeCJK@zerokern} - \fi} - -{ - \def\:{\xeCJK@zzz@cclv} - \global\expandafter\def\: {\futurelet\@let@token\xeCJK@zzzz@cclv} -} - -\def\xeCJK@zzzz@cclv{ - \ifcat L\noexpand\@let@token - \expandafter\xeCJK@zzzzz@cclv - \else - \xeCJK@space - \fi} - -\def\xeCJK@zzzzz@cclv#1{ - \ifnum`#1>"FF\relax - \CJKecglue - \else - \xeCJK@space - \fi - #1} - -\def\xeCJK@space{ } - -\def\xeCJK@z@checknext{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@@checknext - \else - \ifx $\xeCJK@nexttoken - \CJKecglue - \fi - \fi} - -\def\CJKaddspaces{ - \let\xeCJK@@cclv\xeCJK@z@cclv - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - - \def\xeCJK@cclv@{ - \ifnum\lastkern=1\relax - \CJKecglue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \or %4 - \CJKecglue - \fi}} - - \everymath{\ifxeCJK@indisplay\else\aftergroup\xeCJK@doaftermath\fi} - \everydisplay{\xeCJK@indisplaytrue} - \let\xeCJK@checknext\xeCJK@z@checknext - \let\xeCJK@aftermath\xeCJK@zz@cclv} - -\def\CJKnormalspaces{ - \let\xeCJK@@cclv\relax - \let\xeCJK@@i\relax - \let\xeCJK@v@i\relax - \let\xeCJK@checknext\xeCJK@n@checknext - \def\CJKecglue{ } - - \def\xeCJK@cclv@{ - \ifodd\lastkern - \xeCJK@@glue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \fi}} - - \def\xeCJK@@glue{ - \ifx\xeCJK@nexttoken\@sptoken - { } - \fi - \let\xeCJK@nexttoken\relax} - \everymath{} - \everydisplay{}} - -\def\xeCJK@setspacemode{ - \ifxeCJK@addspaces - \CJKaddspaces - \else - \CJKnormalspaces - \fi - \ifxeCJK@checksingle - \let\xeCJK@checksingle\xeCJK@z@checksingle - \else - \let\xeCJK@checksingle\xeCJK@notchecksingle - \fi} - -\def\CJK@ecglue{ } - \def\xeCJKsetecglue#1{ - \ifxeCJK@addspaces \def\CJK@ecglue{#1} - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - \fi} + \let\CJKecglue\CJK@ecglue} \let\CJKsetecglue\xeCJKsetecglue -\CJKaddspaces - -\AtBeginDocument{ - \xeCJK@setspacemode - \ifcsname UL@hook\endcsname - \addto@hook\UL@hook{ - \let\xeCJK@unskip\xeCJK@UL@unskip - \let\xeCJK@ULspecials\xeCJK@UL@punctgroup} - \fi} -\DeclareRobustCommand{\xeCJK@char}[1]{ - {\XeTeXinterchartokenstate=0 - \CJKsymbol{#1} - \xeCJK@CJKkern} - \xeCJK@ignorespaces} -\DeclareRobustCommand{\xeCJK@prepunctchar}[1]{ - {\xeCJK@punctrule{#1}{l} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \ifnum\xeCJK@punctstyle>0\relax - \@xeCJKtrue - \fi - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\@xeCJK@lastpunct#1\endcsname - \xeCJKpunctnobreak - \else - \xeCJK@ULspecials - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname - plus 0.1em minus 0.1 em - \fi - - \global\edef\@xeCJK@lastpunct{#1} - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @lrule@#1\endcsname depth \z@ height \z@ - - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \nobreak - \gdef\xeCJK@lastcharclass{2} - \xeCJK@prepunctkern} - \ignorespaces} -\DeclareRobustCommand{\xeCJK@postpunctchar}[1]{ - {\xeCJK@punctrule{#1}{r} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \@xeCJKtrue - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @kern\@xeCJK@lastpunct#1\endcsname - \nobreak - \else - \xeCJK@ULspecials - \ifcsname xeCJK@specialpunct#1\endcsname - \CJKglue % breakable - \else - \nobreak - \fi - \fi - \global\edef\@xeCJK@lastpunct{#1} +\CJKsetecglue{ } - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rrule@#1\endcsname depth \z@ height \z@ - - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@#1\endcsname - plus 0.1em minus 0.1 em - - \gdef\xeCJK@lastcharclass{3} - \xeCJK@postpunctkern} - \xeCJK@ignorespaces} - -\let\xeCJK@unskip\unskip -\def\xeCJK@UL@unskip{ - \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\@xeCJK@lastpunct\endcsname - \hskip -\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rglue@\@xeCJK@lastpunct\endcsname\relax - \fi} \def\xeCJKallowbreakbetweenpuncts{ \def\xeCJKpunctnobreak{ - \ifnum\xeCJK@lastcharclass=3 - \hskip 0pt - \fi}} + \hskip 0pt}} \def\xeCJKnobreakbetweenpuncts{ \let\xeCJKpunctnobreak\nobreak} \xeCJKnobreakbetweenpuncts + \newcount\xeCJK@cnta \newcount\xeCJK@cntb \newcount\xeCJK@cntc @@ -443,33 +463,20 @@ \newif\ifxeCJK@dokerning \def\xeCJK@punctrule#1#2{ - \ifcsname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname - \global\edef\xeCJK@bboxname{ - \csname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname} - \else - \xeCJK@getbboxname - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname} - \fi - \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname - \else - {\xeCJK@setfont - \xeCJK@setpunctbounds{#1}} - \fi + \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname \else + \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname + \else + {\xeCJK@setfont + \xeCJK@setpunctbounds{#1}} + \fi \xeCJK@dokerningtrue \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax \xeCJK@dokerningfalse \else \ifcsname xeCJK@specialpunct#1\endcsname \xeCJK@dokerningfalse - \else - \ifcsname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname - \else - \typeout{....Something is wrong with ...xeCJK@\xeCJK@bboxname @#2space@.....} - \xeCJK@dokerningfalse - \fi \fi \fi \ifxeCJK@dokerning @@ -524,19 +531,6 @@ \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte} \fi} -\def\xeCJK@getbboxname{ - {\csname xeCJK@font@\xeCJK@family\endcsname - \get@external@font - \global\let\xeCJK@tempx\external@font} - \expandafter\xeCJK@@getbboxname\xeCJK@tempx\relax - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname}} - -\def\xeCJK@@getbboxname"#1/#2"#3\relax{ - \edef\xeCJK@temp{\zap@space #1 \@empty} - \edef\xeCJK@temp{\lowercase{\gdef\noexpand\xeCJK@bboxname{\xeCJK@temp}}} - \xeCJK@temp} - \expandafter\def\csname xeCJK@kaiming。\endcsname{} \expandafter\def\csname xeCJK@kaiming?\endcsname{} \expandafter\def\csname xeCJK@kaiming!\endcsname{} @@ -578,7 +572,7 @@ \fi} \def\xeCJKsetkern#1#2#3{ - \xeCJK@getbboxname + \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}} @@ -635,8 +629,11 @@ \else \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid - \advance\xeCJK@cnta 1000\relax - \divide\xeCJK@cnta 6554\relax + \xeCJK@dima 1em\relax + \xeCJK@cntb=\number\xeCJK@dima + \multiply\xeCJK@cnta 100\relax + \divide\xeCJK@cnta\xeCJK@cntb + \advance\xeCJK@cnta 1\relax \ifnum\xeCJK@cnta>9 \edef\xeCJK@temp{-0.\the\xeCJK@cnta em} \else @@ -655,8 +652,52 @@ \fi \fi} -\def\CJKsymbol#1{{\xeCJK@setfont #1}} -\def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} +\ifcsname XeTeXglyphbounds\endcsname +\else + \PackageError{xeCJK}{\string\XeTeXglyphbounds \space not defined.^^J + You have to update XeTeX to the version 0.9995.0 or later} + \relax +\fi + +\def\CJKsymbol#1{#1} +\def\CJKpunctsymbol#1{#1} + +\DeclareRobustCommand{\xeCJK@ULprepunctchar}[1]{ + {\XeTeXinterchartokenstate=0 + \CJKpunctsymbol{#1} + \nobreak} + \ignorespaces} +\DeclareRobustCommand{\xeCJK@ULpostpunctchar}[1]{ + {\XeTeXinterchartokenstate=0 + \CJKpunctsymbol{#1}} + \xeCJK@ignorespaces} +\def\xeCJK@ULroutines{ + \XeTeXinterchartoks 0 1 {\CJKecglue\CJKsymbol} + \XeTeXinterchartoks 4 1 {\CJKsymbol} + \XeTeXinterchartoks 5 1 {\CJKecglue\CJKsymbol} + \XeTeXinterchartoks 255 1 {\xeCJK@cclv@i} + \XeTeXinterchartoks 0 2 {\xeCJK@ULprepunctchar} + \XeTeXinterchartoks 4 2 {\xeCJK@ULprepunctchar} + \XeTeXinterchartoks 5 2 {\xeCJK@ULprepunctchar} + \XeTeXinterchartoks 255 2 {\xeCJK@ULprepunctchar} + \XeTeXinterchartoks 0 3 {\xeCJK@ULpostpunctchar} + \XeTeXinterchartoks 4 3 {\xeCJK@ULpostpunctchar} + \XeTeXinterchartoks 5 3 {\xeCJK@ULpostpunctchar} + \XeTeXinterchartoks 255 3 {\xeCJK@ULpostpunctchar}} + +\AtBeginDocument{ + \ifcsname UL@hook\endcsname + \addto@hook\UL@hook{ + \def\CJKsymbol#1{{\xeCJK@setfont #1}\kern -1sp\kern 1sp\xeCJK@ignorespaces} + \def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} + \xeCJK@ULroutines} + \fi + \ifcsname ver@CJKfntef.sty\endcsname + \def\XeTeX@CJKfntef@hook{ + \xeCJK@setfont + \XeTeXinterchartokenstate=0} + \fi} + \def\xeCJK@setfont{ \ifcsname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname \csname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname @@ -837,7 +878,8 @@ \expandafter \newfontfamily@i\csname xeCJK@font@#1\expandafter\endcsname \xeCJK@Features - {#3}} + {#3} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family\endcsname{\zf@family}} \def\xeCJK@setmacro@getkey#1{ \expandafter\def\csname xeCJK@get#1\endcsname ##1#1=##2##3\relax{ @@ -858,12 +900,30 @@ \edef\zf@it@feat{,#1} \edef\zf@family@long{\zf@family@long itfeat:#1}} +\newcount\xeCJK@featureadded +\xeCJK@featureadded=0 + +\let\xeCJK@addfontfeatures\addfontfeatures +\def\addfontfeatures#1{ + \global\advance\xeCJK@featureadded\@ne + \xeCJK@addfontfeatures{#1} + \ifcsname xeCJK@family\endcsname + \edef\xeCJK@temp{\csname xeCJK@nsff\xeCJK@family\endcsname} + \edef\xeCJK@Features{[\csname zf@family@options\xeCJK@temp\endcsname,#1]} + \expandafter + \newfontfamily@i\csname xeCJK@font@\xeCJK@family @\the\xeCJK@featureadded\expandafter\endcsname + \xeCJK@Features + {\csname zf@family@fontname\xeCJK@temp\endcsname} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family @\the\xeCJK@featureadded\endcsname{\zf@family} + \CJKfamily{\xeCJK@family @\the\xeCJK@featureadded} + \fi} + \def\xeCJK@font@rm{} \DeclareRobustCommand\CJKfamily[1]{ \ifcsname xeCJK@font@#1\endcsname - \def\xeCJK@family{#1} + \edef\xeCJK@family{#1} \else \ifcsname xeCJK@#1@warned\endcsname \else @@ -880,17 +940,6 @@ \xeCJKsetslantfactor{0.17} \xeCJKsetemboldenfactor{4} -\@ifundefined{UL@hskip}{\let\UL@hskip\relax}{} - -\let\xeCJK@ULspecials\relax - -\def\xeCJK@UL@punctgroup{ - \ifx\hskip\UL@hskip - \egroup - \UL@stop - \UL@start - \bgroup - \fi} \ifxeCJK@num \edef\CJK@UnicodeEnc{UTF8} @@ -923,7 +972,6 @@ \makeatother \XeTeXdefaultencoding "UTF-8"} -\def\CJKlanguage#1{} \endlinechar `\^^M \catcode "FEFF=9\relax \endinput |