summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/xecjk
diff options
context:
space:
mode:
authorDr. Clea F. Rees <cfrees@imapmail.org>2009-08-07 00:51:12 +0000
committerDr. Clea F. Rees <cfrees@imapmail.org>2009-08-07 00:51:12 +0000
commit08737a922ed3eda34369dc43d4d033bcf8e10813 (patch)
tree17f69bc35e3d5c678fc4388357b48e661a4685da /Master/texmf-dist/tex/xelatex/xecjk
parent4d5ea40067f8dca80c5bc08220a04cb67fc9beb6 (diff)
xecjk new version
git-svn-id: svn://tug.org/texlive/trunk@14567 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk')
-rw-r--r--Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty690
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