summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xetex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-04-20 20:14:14 +0000
committerKarl Berry <karl@freefriends.org>2021-04-20 20:14:14 +0000
commita8843140be2271f9a60d303cce5a6ce19d9845e3 (patch)
treed2947e0e33e2a25bef6edf3aaf4ff2ba57c02c15 /Master/texmf-dist/tex/xetex
parente3046418e7cf8000138d9871e0387a15a3efd6bd (diff)
xetexko (20apr21)
git-svn-id: svn://tug.org/texlive/trunk@58929 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xetex')
-rw-r--r--Master/texmf-dist/tex/xetex/xetexko/xetexko.sty427
1 files changed, 305 insertions, 122 deletions
diff --git a/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty b/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
index 63108b667c2..67de1e2aa98 100644
--- a/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
+++ b/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
@@ -16,7 +16,7 @@
\ifdefined\ProvidesPackage
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
- \ProvidesPackage{xetexko}[2021/04/08 v3.2 typesetting Korean with XeTeX]
+ \ProvidesPackage{xetexko}[2021/04/20 v3.3 typesetting Korean with XeTeX]
\else
\ifdefined\@tempcnta\else \newcount\@tempcnta \fi
\ifdefined\@gobble\else \def\@gobble#1{} \fi
@@ -33,8 +33,8 @@
\newXeTeXintercharclass\XeTeXcharclassOP
\newXeTeXintercharclass\XeTeXcharclassCL
\newXeTeXintercharclass\XeTeXcharclassEX
-\let\XeTeXcharclassIS\XeTeXcharclassID
-\let\XeTeXcharclassNS\XeTeXcharclassID
+\let\XeTeXcharclassIS\XeTeXcharclassCJ
+\let\XeTeXcharclassNS\XeTeXcharclassCJ
\newXeTeXintercharclass\XeTeXcharclassCM
\input load-unicode-xetex-classes %
@@ -99,6 +99,7 @@
% ascii colons
\XeTeXcharclass "3A=\XeTeXcharclassAM % : COLON
\XeTeXcharclass "3B=\XeTeXcharclassAM % ; SEMICOLON
+\XeTeXcharclass "7E=\XeTeXcharclassAM % ~ TILDE
% ascii hyphen
\XeTeXcharclass "2D =\XeTeXcharclassAH % -
\XeTeXcharclass "2F =\XeTeXcharclassAH % /
@@ -115,6 +116,10 @@
%
\XeTeXcharclass "2019=\XeTeXcharclassCL % ’ RIGHT SINGLE QUOTATION MARK
\XeTeXcharclass "201D=\XeTeXcharclassCL % ” RIGHT DOUBLE QUOTATION MARK
+% IS : these are not expected to be input
+\XeTeXcharclass "FE10=\XeTeXcharclassCL % ︐ PRESENTATION FORM FOR VERTICAL COMMA
+\XeTeXcharclass "FE13=\XeTeXcharclassVC % ︓ PRESENTATION FORM FOR VERTICAL COLON
+\XeTeXcharclass "FE14=\XeTeXcharclassVC % ︔ PRESENTATION FORM FOR VERTICAL SEMICOLON
% NS
\XeTeXcharclass "00B7=\XeTeXcharclassMD % · MIDDLE DOT
\XeTeXcharclass "30FB=\XeTeXcharclassMD % ・ KATAKANA MIDDLE DOT
@@ -133,26 +138,50 @@
\XeTeXcharclass "2015=\XeTeXcharclassLD % ― HORIZONTAL BAR
\XeTeXcharclass "2025=\XeTeXcharclassLD % ‥ TWO DOT LEADER
\XeTeXcharclass "2026=\XeTeXcharclassLD % … HORIZONTAL ELLIPSIS
+\XeTeXcharclass "FF5E=\XeTeXcharclassLD % ~ FULLWIDTH TILDE : KS symbol
+\XeTeXcharclass "3003=\XeTeXcharclassLD % 〃 DITTO MARK : KS symbol
% 결락기호
\XeTeXcharclass "25A1=\XeTeXcharclassID % □
% some KS symbols
+\XeTeXcharclass "00AE=\XeTeXcharclassSY % ®
+\XeTeXcharclass "00B0=\XeTeXcharclassSY % °
+\XeTeXcharclass "2030=\XeTeXcharclassSY % ‰
+\XeTeXcharclass "2032=\XeTeXcharclassSY % ′
+\XeTeXcharclass "2033=\XeTeXcharclassSY % ″
\XeTeXcharclass "203B=\XeTeXcharclassSY % ※
\XeTeXcharclass "2103=\XeTeXcharclassSY % ℃
\XeTeXcharclass "2109=\XeTeXcharclassSY % ℉
\XeTeXcharclass "2113=\XeTeXcharclassSY % ℓ
+\XeTeXcharclass "2116=\XeTeXcharclassSY % №
\XeTeXcharclass "2121=\XeTeXcharclassSY % ℡
\XeTeXcharclass "2122=\XeTeXcharclassSY % ™
-\XeTeXcharclass "212B=\XeTeXcharclassSY % Å
-\count@="2160 \loop % Ⅰ..Ⅻ
+\count@="2160 \loop % Ⅰ..Ⅹ
\XeTeXcharclass\count@=\XeTeXcharclassSY
- \ifnum\count@<"216B \advance\count@\@ne \repeat
-\count@="2170 \loop % ⅰ..ⅻ
+ \ifnum\count@<"2169 \advance\count@\@ne \repeat
+\count@="2170 \loop % ⅰ..ⅹ
\XeTeXcharclass\count@=\XeTeXcharclassSY
- \ifnum\count@<"217B \advance\count@\@ne \repeat
-\XeTeXcharclass "223C=\XeTeXcharclassSY % ∼
-\count@="2460 \loop % ①..⓪
+ \ifnum\count@<"2179 \advance\count@\@ne \repeat
+\count@="2190 \loop % ←..↙
\XeTeXcharclass\count@=\XeTeXcharclassSY
- \ifnum\count@<"24EA \advance\count@\@ne \repeat
+ \ifnum\count@<"2199 \advance\count@\@ne \repeat
+\XeTeXcharclass "21D2=\XeTeXcharclassSY % ⇒
+\XeTeXcharclass "21D4=\XeTeXcharclassSY % ⇔
+\XeTeXcharclass "2225=\XeTeXcharclassSY % ∥
+\XeTeXcharclass "226A=\XeTeXcharclassSY % ≪ 꽉찬 전각! 어디에 배정해야 하나?
+\XeTeXcharclass "226B=\XeTeXcharclassSY % ≫ 꽉찬 전각! 어디에 배정해야 하나?
+\XeTeXcharclass "2299=\XeTeXcharclassSY % ⊙
+\count@="2460 \loop % ①..⑮
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"246E \advance\count@\@ne \repeat
+\count@="2474 \loop % ⑴..⒂
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"2482 \advance\count@\@ne \repeat
+\count@="249C \loop % ⒜..⒵
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"24B5 \advance\count@\@ne \repeat
+\count@="24D0 \loop % ⓐ..ⓩ
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"24E9 \advance\count@\@ne \repeat
\XeTeXcharclass "2500 = \XeTeXcharclassSY % ─
\XeTeXcharclass "2501 = \XeTeXcharclassSY % ━
\XeTeXcharclass "2502 = \XeTeXcharclassSY % │
@@ -204,22 +233,30 @@
\XeTeXcharclass "266A = \XeTeXcharclassSY % ♪
\XeTeXcharclass "266C = \XeTeXcharclassSY % ♬
\XeTeXcharclass "266D = \XeTeXcharclassSY % ♭
-\XeTeXcharclass "3012 = \XeTeXcharclassSY % 〒
-\XeTeXcharclass "301C = \XeTeXcharclassSY % 〜
+\XeTeXcharclass "3013 = \XeTeXcharclassSY % 〓
+\count@="3200 \loop % ㈀..㈞
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"321E \advance\count@\@ne \repeat
+\count@="3260 \loop % ㉠..㉿
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"327F \advance\count@\@ne \repeat
+\XeTeXcharclass "33C2 = \XeTeXcharclassSY % ㏂
+\XeTeXcharclass "33C7 = \XeTeXcharclassSY % ㏇
+\XeTeXcharclass "33D8 = \XeTeXcharclassSY % ㏘
\XeTeXcharclass "FF04 = \XeTeXcharclassSY % $
\XeTeXcharclass "FF05 = \XeTeXcharclassSY % %
-\XeTeXcharclass "FF5E = \XeTeXcharclassSY % ~
+\XeTeXcharclass "FF3C = \XeTeXcharclassSY % \
\XeTeXcharclass "FFE0 = \XeTeXcharclassSY % ¢
\XeTeXcharclass "FFE1 = \XeTeXcharclassSY % £
\XeTeXcharclass "FFE5 = \XeTeXcharclassSY % ¥
\XeTeXcharclass "FFE6 = \XeTeXcharclassSY % ₩
% spaces
-\def\XeKo@halfzero {\hskip 2\XeKo@halfdim \relax}
-\def\XeKo@halfhalf {\hskip 2\XeKo@halfdim minus 2\XeKo@halfdim \relax}
-\def\XeKo@halfquarter {\hskip 2\XeKo@halfdim minus \XeKo@halfdim \relax}
-\def\XeKo@quarterquarter {\hskip \XeKo@halfdim minus \XeKo@halfdim \relax}
-\def\XeKo@iiiquarterquarter{\hskip 3\XeKo@halfdim minus \XeKo@halfdim \relax}
+\def\XeKo@halfzero {\hskip 2\XeKo@quarterdim \relax}
+\def\XeKo@halfhalf {\hskip 2\XeKo@quarterdim minus 2\XeKo@quarterdim \relax}
+\def\XeKo@halfquarter {\hskip 2\XeKo@quarterdim minus \XeKo@quarterdim \relax}
+\def\XeKo@quarterquarter {\hskip \XeKo@quarterdim minus \XeKo@quarterdim \relax}
+\def\XeKo@iiiquarterquarter{\hskip 3\XeKo@quarterdim minus \XeKo@quarterdim \relax}
\let\XeKo@nobreak\nobreak
\def\XKinterhangulbreak{% compat
@@ -242,20 +279,21 @@
\ifdefined\xetexkohu
\xetexkohu plus .5\dimexpr\xetexkohu\relax minus.25\dimexpr\xetexkohu\relax
\else
- \XeKo@halfdim plus .5\XeKo@halfdim minus.25\XeKo@halfdim
+ \XeKo@quarterdim plus .5\XeKo@quarterdim minus.25\XeKo@quarterdim
\fi
+ \relax
}
\def\XeKo@latincjk@modern{%
- \hskip \ifdefined\xetexkohu \xetexkohu \else \XeKo@halfdim \fi
+ \hskip \ifdefined\xetexkohu \xetexkohu \else \XeKo@quarterdim \fi
\XeKo@stretchshrink
}
\def\XeKo@postmath@modern{%
- \hskip 2\ifdefined\xetexkohu \dimexpr\xetexkohu\relax \else \XeKo@halfdim \fi
+ \hskip 2\ifdefined\xetexkohu \dimexpr\xetexkohu\relax \else \XeKo@quarterdim \fi
\XeKo@stretchshrink
}
% 고아글자 억제. verbatim 에서는 이 명령을 꺼야 한다
-\def\XeKo@suppress@char@orphan{%
+\def\XeKo@suppress@linebreak{%
\XeKo@skip@=\lastskip \unskip
\XeKo@count@=\lastpenalty \unpenalty
\ifnum\XeKo@count@<5000 \XeKo@count@=5000 \fi
@@ -268,8 +306,8 @@
% typesetting modes
\protected\def\typesetclassic{%
\chardef\XeKo@typesetclassic\@ne
- \def\XeKo@halfdim{\dimexpr.25em\relax}%
- \def\XeKo@stretchshrink{plus.08em minus.04em}%
+ \def\XeKo@quarterdim{\dimexpr.25em\relax}%
+ \def\XeKo@stretchshrink{plus.08em minus.04em\relax}%
\let\XeKo@latincjk\XeKo@latincjk@classic
\let\XeKo@postmath\XeKo@latincjk@classic
\XeTeXlinebreakpenalty=\z@
@@ -278,8 +316,8 @@
}
\protected\def\typesetmodern{%
\chardef\XeKo@typesetclassic\z@
- \def\XeKo@halfdim{\dimexpr.05em\relax}%
- \def\XeKo@stretchshrink{plus.04em minus.02em}%
+ \def\XeKo@quarterdim{\dimexpr.05em\relax}%
+ \def\XeKo@stretchshrink{plus.04em minus.02em\relax}%
\let\XeKo@latincjk\XeKo@latincjk@modern
\let\XeKo@postmath\XeKo@postmath@modern
\XeTeXlinebreakpenalty=50
@@ -288,14 +326,21 @@
\typesetmodern
\let\japanese\typesetclassic
-\protected\def\Tchinese{\typesetclassic\parindent=2em }
-\protected\def\Schinese{\typesetclassic\parindent=2em
- \chardef\XeKo@typesetSchinese\@ne
+\protected\def\Tchinese{%
+ \typesetclassic
+ \chardef\XeKo@typesetSTchinese\tw@
+ \XeKo@Tchinese@classes
+ \parindent=2em
+ }
+\protected\def\Schinese{%
+ \typesetclassic
+ \chardef\XeKo@typesetSTchinese\@ne
\ifnum\XeKo@typesetvertical=\@ne
\XeKo@Schinese@vertical
\else
\XeKo@Schinese@horizontal
\fi
+ \parindent=2em
}
\let\chinese\Schinese
\def\XeKo@Schinese@horizontal{% these glyphs in simplified chinese fonts are left-aligned.
@@ -310,22 +355,34 @@
\XeTeXcharclass "FF1B = \XeTeXcharclassVC % ;
\XeTeXcharclass "FF1F = \XeTeXcharclassEX % ?
}
+\def\XeKo@Tchinese@classes{% these glyphs in traditional chinese fonts are center-aligned
+ \XeTeXcharclass "3001 = \XeTeXcharclassMD % 、
+ \XeTeXcharclass "3002 = \XeTeXcharclassMD % 。
+ \XeTeXcharclass "FF0C = \XeTeXcharclassMD % ,
+ \XeTeXcharclass "FF0E = \XeTeXcharclassMD % .
+ }
\chardef\XeKo@typesetvertical\z@
-\chardef\XeKo@typesetSchinese\z@
+\chardef\XeKo@typesetSTchinese\z@
\protected\def\typesetvertical{%
\chardef\XeKo@typesetvertical\@ne
\XeTeXcharclass "FF1A = \XeTeXcharclassVC % :
\XeTeXcharclass "FF1B = \XeTeXcharclassVC % ;
- \ifnum\XeKo@typesetSchinese=\@ne \XeKo@Schinese@vertical \fi
- \parindent=1em
+ \ifcase\XeKo@typesetSTchinese
+ \parindent=1em
+ \or \XeKo@Schinese@vertical
+ \or \XeKo@Tchinese@classes
+ \fi
}
\protected\def\typesethorizontal{%
\chardef\XeKo@typesetvertical\z@
\XeTeXcharclass "FF1A = \XeTeXcharclassMD % :
\XeTeXcharclass "FF1B = \XeTeXcharclassMD % ;
- \ifnum\XeKo@typesetSchinese=\@ne \XeKo@Schinese@horizontal \fi
+ \ifcase\XeKo@typesetSTchinese
+ \or \XeKo@Schinese@horizontal
+ \or \XeKo@Tchinese@classes
+ \fi
\parindent\z@
}
\protected\def\vertical#1{%
@@ -552,11 +609,12 @@
\ifnum\XeKo@charslot="FFFF
% 다음 한 줄이 없으면 한글과 한글 사이에 폰트가 변경되는 경우 글자 누락.
% 폰트 변경은 kern 에 아무 영향을 주지 않기 때문.
- \def\XeKo@maybe@gobble{\def\XeKo@maybe@gobble{%
- \ifdefined\XeKo@curr@font\expandafter\XeKo@maybe@gobble@\fi }}%
+ \let\XeKo@maybe@gobble\relax
\expandafter\XeKo@flush@toks
\else
- \ifnum\XeKo@currclass>\tw@
+ \let\XeKo@maybe@gobble\XeKo@do@maybe@gobble
+ \ifnum 0\ifnum\XeKo@currclass>4 \ifnum\XeKo@currclass<11 % AA..AH
+ 1\fi\fi >\z@
\expandafter\expandafter\expandafter\XeKo@check@next@tok@latin
\else % HG ID
\expandafter\expandafter\expandafter\XeKo@check@next@tok@cjk
@@ -574,7 +632,10 @@
\def\XeKo@check@next@tok@latin{%
% load-unicode-xetex-classes가 설정하는 모든 CM은 한글, 한자, 가나 뒤에 온다.
% 따라서 영문자는 CM을 고려할 필요가 없다.
- \ifnum\XeTeXcharclass\XeKo@charslot=\csname XeKo@\XeKo@currclass @class\endcsname
+ % 아니다!!! 위에서 FE00-FE0F를 CM으로 지정했으므로 CJK에 한정되지 않는다.
+ \ifnum 0%
+ \ifnum\XeTeXcharclass\XeKo@charslot=\csname XeKo@\XeKo@currclass @class\endcsname 1\else
+ \ifnum\XeTeXcharclass\XeKo@charslot=\XeTeXcharclassCM 1\fi\fi >\z@
\expandafter\XeKo@addto@toks
\else
\expandafter\XeKo@flush@toks
@@ -600,7 +661,7 @@
}
\def\XeKo@char@orphan{%
\ifx\XeKo@let@token\par
- \XeKo@suppress@char@orphan
+ \XeKo@suppress@linebreak
\let\XeKo@next\XeKo@flush@char@orphan
\else \ifx\@sptoken\XeKo@let@token
\XeKo@toks@ii\expandafter{\the\XeKo@toks@ii \@sptoken}%
@@ -627,7 +688,7 @@
}
\def\XeKo@char@orphan@{\afterassignment\XeKo@char@orphan@@\let\XeKo@let@token= }
\def\XeKo@char@orphan@@{\futurelet\XeKo@let@token\XeKo@char@orphan}
-\def\XeKo@flush@char@orphan{\XeKo@do@flush@toks \the\XeKo@toks@ii }
+\def\XeKo@flush@char@orphan{\expandafter \XeKo@do@flush@toks \the\XeKo@toks@ii }
\def\XeKo@char@raise@start{%
\ifdefined\xetexkocharraise
\ifx\XeKo@curr@font\XeKo@latin@font\else
@@ -655,7 +716,21 @@
\ifnum\XeKo@currclass=\tw@
\XeKo@everyhanja{\the\XeKo@toks@}% everyhanja
\else
- \the\XeKo@toks@
+ \ifnum\XeKo@compresspuncts=\@ne
+ \ifnum\XeKo@currclass=11 % OP
+ \hbox to.5em\bgroup\hss \the\XeKo@toks@ \egroup
+ \else\ifnum\XeKo@currclass=12 % CL
+ \hbox to.5em\bgroup \the\XeKo@toks@ \hss\egroup
+ \else\ifnum\XeKo@currclass=13 % MD
+ \hbox to.5em\bgroup\hss \the\XeKo@toks@ \hss\egroup
+ \else\ifnum\XeKo@currclass=14 % FS
+ \hbox to.5em\bgroup \the\XeKo@toks@ \hss\egroup
+ \else
+ \the\XeKo@toks@
+ \fi\fi\fi\fi
+ \else
+ \the\XeKo@toks@
+ \fi
\fi
\fi
\XeKo@char@raise@stop % charraise
@@ -663,13 +738,8 @@
\XeKo@post@hang % hanging punctuations
\fi
\endgroup
- \ifnum\XeKo@currclass<\thr@@ % \the\XeKo@toks@ii
- \expandafter\expandafter\expandafter\XeKo@maybe@kern@i
- \else
- \expandafter\XeKo@maybe@kern@i
- \fi
+ \futurelet\XeKo@let@token\XeKo@maybe@kern@ii
}
-\def\XeKo@maybe@kern@i{\futurelet\XeKo@let@token\XeKo@maybe@kern@ii }
\def\XeKo@maybe@kern@ii{%
\ifx\XeKo@let@token\@sptoken
\ifnum\XeKo@cjk@ignorespaces=\@ne % try to remove space
@@ -855,72 +925,57 @@
\def\XeKo@startOP#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{11}%
- \ifnum\XeKo@compresspuncts=\@ne
- \XeKo@toks@{\hbox to.5em\bgroup\hss #1\egroup}%
- \else
- \XeKo@toks@{#1}%
- \fi
+ \XeKo@toks@{#1}%
\XeKo@def@pre@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startCL#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{12}%
- \ifnum\XeKo@compresspuncts=\@ne
- \XeKo@toks@{\hbox to.5em\bgroup #1\hss\egroup}%
- \else
- \XeKo@toks@{#1}%
- \fi
+ \XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startMD#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{13}%
- \ifnum\XeKo@compresspuncts=\@ne
- \XeKo@toks@{\hbox to.5em\bgroup\hss #1\hss\egroup}%
- \else
- \XeKo@toks@{#1}%
- \fi
+ \XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startFS#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{14}%
- \ifnum\XeKo@compresspuncts=\@ne
- \XeKo@toks@{\hbox to.5em\bgroup #1\hss\egroup}%
- \else
- \XeKo@toks@{#1}%
- \fi
+ \XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startEX#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{15}%
\XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startLD#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{16}%
\XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@startVC#1{%
\let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
\def\XeKo@currclass{17}%
\XeKo@toks@{#1}%
\XeKo@def@post@hang{#1}%
- \XeKo@do@flush@toks
+ \XeKo@check@next@tok
}
\def\XeKo@maybe@gobble{%
\ifdefined\XeKo@curr@font\expandafter\XeKo@maybe@gobble@\fi
}
+\let\XeKo@do@maybe@gobble\XeKo@maybe@gobble
\def\XeKo@maybe@gobble@{%
\expandafter\expandafter\expandafter\@gobble
}
@@ -933,7 +988,7 @@
\or
\or \unkern\unkern % SY HG
\or \unkern\unkern \XeKo@latincjk % AA HG
- \or \unkern\unkern \XeKo@nobreak % AO HG
+ \or \unkern\unkern % AO HG
\or \unkern\unkern \XeKo@latincjk % AC HG
\or \unkern\unkern \XeKo@latincjk % AP HG
\or \unkern\unkern \XeKo@latincjk % AM HG
@@ -959,7 +1014,7 @@
\or
\or \unkern\unkern % SY ID
\or \unkern\unkern \XeKo@latincjk % AA ID
- \or \unkern\unkern \XeKo@nobreak % AO ID
+ \or \unkern\unkern % AO ID
\or \unkern\unkern \XeKo@latincjk % AC ID
\or \unkern\unkern \XeKo@latincjk % AP ID
\or \unkern\unkern \XeKo@latincjk % AM ID
@@ -980,23 +1035,23 @@
\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassCJ{%
\ifnum\lastnodetype=12 %
\ifcase\lastkern
- \or \unkern\unkern \XKinterhanjabreak % HG CJ
- \or \unkern\unkern \XKinterhanjabreak\XeKo@suppress@char@orphan \XeKo@maybe@gobble % ID CJ
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % HG CJ
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak \XeKo@maybe@gobble % ID CJ
\or
- \or \unkern\unkern % SY CJ
- \or \unkern\unkern \XeKo@latincjk % AA CJ
- \or \unkern\unkern \XeKo@nobreak % AO CJ
- \or \unkern\unkern \XeKo@latincjk % AC CJ
- \or \unkern\unkern \XeKo@latincjk % AP CJ
- \or \unkern\unkern \XeKo@latincjk % AM CJ
- \or \unkern\unkern \XKinterhanjabreak % AH CJ
- \or \unkern\unkern % OP CJ
- \or \unkern\unkern \XeKo@halfhalf % CL CJ
- \or \unkern\unkern \XeKo@quarterquarter % MD CJ
- \or \unkern\unkern \XeKo@halfzero % FS CJ
- \or \unkern\unkern \XeKo@halfhalf % EX CJ
- \or \unkern\unkern \XKinterhanjabreak % LD CJ
- \or \unkern\unkern \XeKo@quarterquarter % VC CJ
+ \or \unkern\unkern % SY CJ
+ \or \unkern\unkern \XeKo@latincjk % AA CJ
+ \or \unkern\unkern % AO CJ
+ \or \unkern\unkern \XeKo@latincjk % AC CJ
+ \or \unkern\unkern \XeKo@latincjk % AP CJ
+ \or \unkern\unkern \XeKo@latincjk % AM CJ
+ \or \unkern\unkern \XKinterhanjabreak % AH CJ
+ \or \unkern\unkern % OP CJ
+ \or \unkern\unkern \XeKo@halfhalf \XeKo@suppress@linebreak % CL CJ
+ \or \unkern\unkern \XeKo@quarterquarter \XeKo@suppress@linebreak % MD CJ
+ \or \unkern\unkern \XeKo@halfzero \XeKo@suppress@linebreak % FS CJ
+ \or \unkern\unkern \XeKo@halfhalf \XeKo@suppress@linebreak % EX CJ
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % LD CJ
+ \or \unkern\unkern \XeKo@quarterquarter \XeKo@suppress@linebreak % VC CJ
\fi
\else\ifnum\lastnodetype=10 % mathoff
\XeKo@postmath
@@ -1011,7 +1066,7 @@
\or
\or \unkern\unkern \XeKo@maybe@gobble % SY SY
\or \unkern\unkern % AA SY
- \or \unkern\unkern \XeKo@nobreak % AO SY
+ \or \unkern\unkern % AO SY
\or \unkern\unkern \XeKo@latincjk % AC SY
\or \unkern\unkern \XeKo@latincjk % AP SY
\or \unkern\unkern \XeKo@latincjk % AM SY
@@ -1300,23 +1355,23 @@
\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassLD{%
\ifnum\lastnodetype=12 %
\ifcase\lastkern
- \or \unkern\unkern % HG LD
- \or \unkern\unkern % ID LD
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % HG LD
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % ID LD
\or
- \or \unkern\unkern % SY LD
- \or \unkern\unkern % AA LD
- \or \unkern\unkern % AO LD
- \or \unkern\unkern % AC LD
- \or \unkern\unkern % AP LD
- \or \unkern\unkern % AM LD
- \or \unkern\unkern % AH LD
- \or \unkern\unkern % OP LD
- \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % CL LD
- \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD LD
- \or \unkern\unkern \XeKo@nobreak\XeKo@halfzero % FS LD
- \or \unkern\unkern % EX LD
+ \or \unkern\unkern % SY LD
+ \or \unkern\unkern % AA LD
+ \or \unkern\unkern % AO LD
+ \or \unkern\unkern % AC LD
+ \or \unkern\unkern % AP LD
+ \or \unkern\unkern % AM LD
+ \or \unkern\unkern % AH LD
+ \or \unkern\unkern % OP LD
+ \or \unkern\unkern \XeKo@halfhalf \XeKo@suppress@linebreak % CL LD
+ \or \unkern\unkern \XeKo@quarterquarter \XeKo@suppress@linebreak % MD LD
+ \or \unkern\unkern \XeKo@halfzero \XeKo@suppress@linebreak % FS LD
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % EX LD
\or \unkern\unkern \XeKo@maybe@gobble % LD LD
- \or \unkern\unkern % VC LD
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@suppress@linebreak % VC LD
\fi
\fi
\XeKo@fontLD\XeKo@startLD
@@ -1375,25 +1430,62 @@
\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassCM{%
\ifnum\lastnodetype=12 %
\ifcase\lastkern
- \or % HG
- \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM
- \or % ID
- \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % HG
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % ID
+ \or
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % SY
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AA
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AO
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AC
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AP
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AM
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % AH
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % OP
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % CL
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % MD
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % FS
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % EX
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % LD
+ \or \unkern\unkern \expandafter\expandafter\expandafter\XeKo@startCM % VC
\fi
\fi
}
\def\XeKo@startCM#1{%
\begingroup
\XeTeXinterchartokenstate\z@
- \ifnum\lastnodetype=\@ne % hbox (charraise box)
- \setbox\XeKo@box@=\lastbox
- \XeKo@char@raise@start \unhbox\XeKo@box@ #1\XeKo@char@raise@stop
+ \ifnum\lastnodetype=\@ne % hbox
+ \ifdefined\xetexkocharraise
+ \setbox\XeKo@box@=\lastbox % charraise box
+ \XeKo@char@raise@start
+ \unhbox\XeKo@box@
+ \ifnum\lastnodetype=\@ne % hbox again
+ \XeKo@rebox@punctbox{#1}% compressed punctuation box
+ \else
+ #1\relax
+ \fi
+ \XeKo@char@raise@stop
+ \else
+ \XeKo@rebox@punctbox{#1}% compressed punctuation box
+ \fi
\else
#1\relax
\fi
\endgroup
\XeKo@insert@kerns
}
+\def\XeKo@rebox@punctbox#1{%
+ \ifnum 0\ifnum\XeKo@currclass>10 \ifnum\XeKo@currclass<15
+ 1\fi\fi >\z@
+ \setbox\XeKo@box@=\lastbox
+ \hbox to.5em\bgroup
+ \unhbox\XeKo@box@
+ \XeKo@skip@\lastskip \unskip
+ #1\hskip\XeKo@skip@
+ \egroup
+ \else
+ #1\relax
+ \fi
+ }
%%% josa selection
\begingroup
@@ -1633,7 +1725,7 @@
\let\XeKo@latincjk@classic \inhibitglue
\let\XeKo@latincjk@modern \inhibitglue
\let\XeKo@postmath@modern \inhibitglue
- \let\XeKo@suppress@char@orphan \relax
+ \let\XeKo@suppress@linebreak \relax
\chardef\XeKo@cjk@ignorespaces \z@
\chardef\XeKo@compresspuncts \z@
}
@@ -1651,8 +1743,64 @@
% no longer support these two \disable...
\let\disableautojosa\relax
\let\disablejamoautojosa\relax
-% no need xetexkoulemsupport any more
-\let\xetexkoulemsupport\relax
+% ulem support
+\ifcsname ver@xetexko.sty\endcsname
+ \def\xetexkoulemsupport{%
+ \ifdefined\UL@hook
+ \UL@hook\expandafter{%
+ \the\UL@hook
+ \let\XeKo@char@orphan\XeKo@flush@char@orphan
+ % uline 안에서 폰트가 변경되는 경우를 대비
+ \expandafter\def\expandafter\XeKo@hangul@selectfont\expandafter{%
+ \XeKo@hangul@selectfont
+ \ifdefined\XeKo@in@selectfont\else
+ \global\let\XeKo@temp@hangul@font\XeKo@hangul@font
+ \gdef\XeKo@UL@hangul@font{\let\XeKo@hangul@font\XeKo@temp@hangul@font}%
+ \aftergroup\aftergroup\aftergroup\XeKo@UL@hangul@font
+ \fi }%
+ \expandafter\def\expandafter\XeKo@hanja@selectfont\expandafter{%
+ \XeKo@hanja@selectfont
+ \ifdefined\XeKo@in@selectfont\else
+ \global\let\XeKo@temp@hanja@font\XeKo@hanja@font
+ \gdef\XeKo@UL@hanja@font{\let\XeKo@hanja@font\XeKo@temp@hanja@font}%
+ \aftergroup\aftergroup\aftergroup\XeKo@UL@hanja@font
+ \fi }%
+ \expandafter\def\expandafter\XeKo@latin@selectfont\expandafter{%
+ \XeKo@latin@selectfont
+ \ifdefined\XeKo@in@selectfont\else
+ \global\let\XeKo@temp@latin@font\XeKo@latin@font
+ \gdef\XeKo@UL@latin@font{\let\XeKo@latin@font\XeKo@temp@latin@font}%
+ \aftergroup\aftergroup\aftergroup\XeKo@UL@latin@font
+ \fi }%
+ }%
+ \fi
+ }
+\else
+ \let\XeKo@UL@hangul@patch\relax
+ \let\XeKo@UL@hanja@patch \relax
+ \def\xetexkoulemsupport{%
+ \ifdefined\UL@hook
+ \UL@hook\expandafter{%
+ \the\UL@hook
+ \let\XeKo@char@orphan\XeKo@flush@char@orphan
+ \def\XeKo@UL@hangul@patch{%
+ \global\let\XeKo@temp@hangul@font\XeKo@hangul@font
+ \global\let\XeKo@temp@latin@font\XeKo@latin@font
+ \gdef\XeKo@UL@hangul@font{%
+ \let\XeKo@hangul@font\XeKo@temp@hangul@font
+ \let\XeKo@latin@font\XeKo@temp@latin@font }%
+ \aftergroup\aftergroup\aftergroup\XeKo@UL@hangul@font }%
+ \def\XeKo@UL@hanja@patch{%
+ \global\let\XeKo@temp@hanja@font\XeKo@hanja@font
+ \global\let\XeKo@temp@latin@font\XeKo@latin@font
+ \gdef\XeKo@UL@hanja@font{%
+ \let\XeKo@hanja@font\XeKo@temp@hanja@font
+ \let\XeKo@latin@font\XeKo@temp@latin@font }%
+ \aftergroup\aftergroup\aftergroup\XeKo@UL@hanja@font }%
+ }%
+ \fi
+ }
+\fi
% math hangul
\def\setmathhangulblock#1#2{%
@@ -1669,13 +1817,21 @@
\afterassignment\XeKo@hangulfont@setup\font\XeKo@hangul@font
}
\def\XeKo@hangulfont@setup{%
- \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \ifdefined\XeKo@curr@font
+ \ifx\XeKo@curr@font\XeKo@hangul@font\else
+ \ifx\XeKo@curr@font\XeKo@hanja@font\else
+ \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \fi\fi
+ \else
+ \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \fi
\edef\XeKo@hangul@font{%
\the\XeKo@hangul@font
\ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
\ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
\ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
}%
+ \XeKo@UL@hangul@patch
}
\protected\def\sethangulfont#1{%
\def\@tempa{#1}%
@@ -1685,26 +1841,43 @@
}
\def\XeKo@sethangulfont@setup{%
\expandafter\edef\@tempa{%
- \let\noexpand\XeKo@latin@font=\the\font
+ \let\noexpand\XeKo@latin@font=%
+ \ifdefined\XeKo@curr@font
+ \ifx\XeKo@curr@font\XeKo@hangul@font \the\XeKo@latin@font \else
+ \ifx\XeKo@curr@font\XeKo@hanja@font \the\XeKo@latin@font \else
+ \the\font
+ \fi\fi
+ \else
+ \the\font
+ \fi
\def\noexpand\XeKo@hangul@font{%
\csname XeKo@hangul@font@\@tempb\endcsname
\ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
\ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
\ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
}%
+ \noexpand\XeKo@UL@hangul@patch
}%
}
\protected\def\hanjafont{%
\afterassignment\XeKo@hanjafont@setup\font\XeKo@hanja@font
}
\def\XeKo@hanjafont@setup{%
- \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \ifdefined\XeKo@curr@font
+ \ifx\XeKo@curr@font\XeKo@hangul@font\else
+ \ifx\XeKo@curr@font\XeKo@hanja@font\else
+ \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \fi\fi
+ \else
+ \expandafter\let\expandafter\XeKo@latin@font\the\font
+ \fi
\edef\XeKo@hanja@font{%
\the\XeKo@hanja@font
\ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
\ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
\ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
}%
+ \XeKo@UL@hanja@patch
}
\protected\def\sethanjafont#1{%
\def\@tempa{#1}%
@@ -1714,13 +1887,22 @@
}
\def\XeKo@sethanjafont@setup{%
\expandafter\edef\@tempa{%
- \let\noexpand\XeKo@latin@font=\the\font
+ \let\noexpand\XeKo@latin@font=%
+ \ifdefined\XeKo@curr@font
+ \ifx\XeKo@curr@font\XeKo@hangul@font \the\XeKo@latin@font \else
+ \ifx\XeKo@curr@font\XeKo@hanja@font \the\XeKo@latin@font \else
+ \the\font
+ \fi\fi
+ \else
+ \the\font
+ \fi
\def\noexpand\XeKo@hanja@font{%
\csname XeKo@hanja@font@\@tempb\endcsname
\ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
\ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
\ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
}%
+ \noexpand\XeKo@UL@hanja@patch
}%
}
\protected\def\hanjabyhangulfont{\let\XeKo@hanja@font\XeKo@hangul@font }
@@ -2257,6 +2439,7 @@
\ifdefined\XeKo@hanja@font\else
\let\XeKo@hanja@font \XeKo@hangul@font
\fi
+ \@ifpackageloaded{ulem}{\xetexkoulemsupport}{}
\@ifpackageloaded{hyperref}{\pdfstringdefDisableCommands{%
\let\hangulalphs\relax
\let\hangulnums\relax