summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/xetex/xetexko/xetexko.sty')
-rw-r--r--Master/texmf-dist/tex/xetex/xetexko/xetexko.sty2357
1 files changed, 2263 insertions, 94 deletions
diff --git a/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty b/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
index a958782e0e8..6d7403617e0 100644
--- a/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
+++ b/Master/texmf-dist/tex/xetex/xetexko/xetexko.sty
@@ -1,6 +1,6 @@
% xetexko.sty
%
-% Copyright (c) 2013-2020 Dohyun Kim <nomos at ktug org>
+% Copyright (c) 2013-2021 Dohyun Kim <nomos at ktug org>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -10,42 +10,2265 @@
% and version 1.3c or later is part of all distributions of LaTeX
% version 2006/05/20 or later.
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
- \ProvidesPackage{xetexko}[2020/02/17 v2.23 Typesetting Korean with XeTeX]
+\ifdefined\XeKocatcodeofATchar\endinput\fi
+\edef\XeKocatcodeofATchar{\catcode`@=\the\catcode`@\relax}
+\catcode`@=11
+
+\ifdefined\ProvidesPackage
+ \NeedsTeXFormat{LaTeX2e}[2020/10/01]
+ \ProvidesPackage{xetexko}[2021/03/20 v3.0 typesetting Korean with XeTeX]
+\else
+ \ifdefined\@tempcnta\else \newcount\@tempcnta \fi
+ \ifdefined\@gobble\else \def\@gobble#1{} \fi
+ \ifdefined\@sptoken \else
+ \begingroup\def\:{\global\let\@sptoken= } \: \endgroup
+ \fi
\fi
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname selectfont\endcsname\relax
- \chardef\catcodeofATcharacter\catcode`@
- \catcode`\@ = 11
+\chardef\XeTeXcharclassBoundary=4095
+\chardef\XeTeXcharclassIgnore =4096
- \input xetexko-space.sty
- \input xetexko-josa.sty
- \input xetexko-vertical.sty
+\newXeTeXintercharclass\XeTeXcharclassID
+\newXeTeXintercharclass\XeTeXcharclassCJ
+\newXeTeXintercharclass\XeTeXcharclassOP
+\newXeTeXintercharclass\XeTeXcharclassCL
+\newXeTeXintercharclass\XeTeXcharclassEX
+\let\XeTeXcharclassIS\XeTeXcharclassID
+\let\XeTeXcharclassNS\XeTeXcharclassID
+\let\XeTeXcharclassCM\XeTeXcharclassIgnore
+\input load-unicode-xetex-classes %
- %%% 한글 폰트
- \def\hangulfont{\font\hangfnt}
- \def\hanjafont {\font\hanifnt}
- %\hangulfont="[UnBatang]:mapping=tex-text" at 10pt
- %%% 수식 한글
- \newfam\symmathhangul
- \def\setmathhangulfont#1#{\setmathhangulfont@}
- \def\setmathhangulfont@#1{%
- \font\tenhangul = "#1" at 10pt
- \font\sevenhangul = "#1" at 7pt
- \font\fivehangul = "#1" at 5pt
- \textfont\symmathhangul = \tenhangul
- \scriptfont\symmathhangul = \sevenhangul
- \scriptscriptfont\symmathhangul = \fivehangul
- }
- \setmathhangulblock{AC00}{D7A3}
- %\setmathhangulfont{[UnBatang]}
-
- \catcode`\@\catcodeofATcharacter
- \expandafter\endinput
+\newXeTeXintercharclass\XeTeXcharclassHG
+\newXeTeXintercharclass\XeTeXcharclassJJ % hangul MV and TC
+\newXeTeXintercharclass\XeTeXcharclassMD % ・ : ;
+\newXeTeXintercharclass\XeTeXcharclassFS % 。 .
+\newXeTeXintercharclass\XeTeXcharclassLD % ― … ‥
+\newXeTeXintercharclass\XeTeXcharclassSY % KS symbols
+\newXeTeXintercharclass\XeTeXcharclassAO % ascii ( `` etc
+\newXeTeXintercharclass\XeTeXcharclassAC % ascii ) '' etc
+\newXeTeXintercharclass\XeTeXcharclassAM % ascii colons
+\newXeTeXintercharclass\XeTeXcharclassAH % ascii hyphen and its ligatures
+\newXeTeXintercharclass\XeTeXcharclassAP % ascii punctuations
+\newXeTeXintercharclass\XeTeXcharclassVC % colons in vertical writing
+\let\XeTeXcharclassAA=\z@ % other non-cjk chars
+
+% more CM
+\count@"FE00 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassIgnore
+ \ifnum\count@<"FE0F \advance\count@\@ne \repeat
+\count@"E0100 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassIgnore
+ \ifnum\count@<"E01EF \advance\count@\@ne \repeat
+
+% hangul
+\count@="AC00 \loop
+ \catcode\count@=12 % for josa
+ \XeTeXcharclass\count@=\XeTeXcharclassHG
+ \ifnum\count@<"D7A3 \advance\count@\@ne \repeat
+\count@="1100 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassHG
+ \ifnum\count@<"115F \advance\count@\@ne \repeat
+\count@="A960 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassHG
+ \ifnum\count@<"A97C \advance\count@\@ne \repeat
+\count@="3131 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassHG
+ \ifnum\count@<"318E \advance\count@\@ne \repeat
+% hangul MV and TC
+\count@="1160 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassJJ
+ \ifnum\count@<"11FF \advance\count@\@ne \repeat
+\count@="D7B0 \loop
+ \XeTeXcharclass\count@=\XeTeXcharclassJJ
+ \ifnum\count@<"D7FB \advance\count@\@ne \repeat
+
+% ascii opening
+\XeTeXcharclass "28=\XeTeXcharclassAO % ( LEFT PARENTHESIS
+\XeTeXcharclass "3C=\XeTeXcharclassAO % < LESS-THAN SIGN
+\XeTeXcharclass "5B=\XeTeXcharclassAO % [ LEFT SQUARE BRACKET
+\XeTeXcharclass "60=\XeTeXcharclassAO % ` GRAVE ACCENT
+\XeTeXcharclass "7B=\XeTeXcharclassAO % { LEFT CURLY BRACKET
+\XeTeXcharclass "AB=\XeTeXcharclassAO % « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+% ascii closing
+\XeTeXcharclass "27=\XeTeXcharclassAC % ' APOSTROPHE
+\XeTeXcharclass "29=\XeTeXcharclassAC % ) RIGHT PARENTHESIS
+\XeTeXcharclass "3E=\XeTeXcharclassAC % > GREATER-THAN SIGN
+\XeTeXcharclass "5D=\XeTeXcharclassAC % ] RIGHT SQUARE BRACKET
+\XeTeXcharclass "7D=\XeTeXcharclassAC % } RIGHT CURLY BRACKET
+\XeTeXcharclass "BB=\XeTeXcharclassAC % » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+% ascii colons
+\XeTeXcharclass "3A=\XeTeXcharclassAM % : COLON
+\XeTeXcharclass "3B=\XeTeXcharclassAM % ; SEMICOLON
+% ascii hyphen
+\XeTeXcharclass "2D =\XeTeXcharclassAH % -
+\XeTeXcharclass "2F =\XeTeXcharclassAH % /
+\XeTeXcharclass "2013=\XeTeXcharclassAH % –
+\XeTeXcharclass "2014=\XeTeXcharclassAH % —
+% ascii punctuations
+\XeTeXcharclass "21=\XeTeXcharclassAP % ! EXCLAMATION MARK
+\XeTeXcharclass "2C=\XeTeXcharclassAP % , COMMA
+\XeTeXcharclass "2E=\XeTeXcharclassAP % . FULL STOP
+\XeTeXcharclass "3F=\XeTeXcharclassAP % ? QUESTION MARK
+%
+\XeTeXcharclass "2018=\XeTeXcharclassOP % ‘ LEFT SINGLE QUOTATION MARK
+\XeTeXcharclass "201C=\XeTeXcharclassOP % “ LEFT DOUBLE QUOTATION MARK
+%
+\XeTeXcharclass "2019=\XeTeXcharclassCL % ’ RIGHT SINGLE QUOTATION MARK
+\XeTeXcharclass "201D=\XeTeXcharclassCL % ” RIGHT DOUBLE QUOTATION MARK
+% NS
+\XeTeXcharclass "00B7=\XeTeXcharclassMD % · MIDDLE DOT
+\XeTeXcharclass "30FB=\XeTeXcharclassMD % ・ KATAKANA MIDDLE DOT
+\XeTeXcharclass "FE54=\XeTeXcharclassMD % ﹔ SMALL SEMICOLON
+\XeTeXcharclass "FE55=\XeTeXcharclassMD % ﹕ SMALL COLON
+\XeTeXcharclass "FF1A=\XeTeXcharclassMD % : FULLWIDTH COLON
+\XeTeXcharclass "FF1B=\XeTeXcharclassMD % ; FULLWIDTH SEMICOLON
+\XeTeXcharclass "FF65=\XeTeXcharclassMD % ・ HALFWIDTH KATAKANA MIDDLE DOT
+%
+\XeTeXcharclass "3002=\XeTeXcharclassFS % 。 IDEOGRAPHIC FULL STOP
+\XeTeXcharclass "FE12=\XeTeXcharclassFS % ︒ PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+\XeTeXcharclass "FE52=\XeTeXcharclassFS % ﹒ SMALL FULL STOP
+\XeTeXcharclass "FF0E=\XeTeXcharclassFS % . FULLWIDTH FULL STOP
+\XeTeXcharclass "FF61=\XeTeXcharclassFS % 。 HALFWIDTH IDEOGRAPHIC FULL STOP
+%
+\XeTeXcharclass "2015=\XeTeXcharclassLD % ― HORIZONTAL BAR
+\XeTeXcharclass "2025=\XeTeXcharclassLD % ‥ TWO DOT LEADER
+\XeTeXcharclass "2026=\XeTeXcharclassLD % … HORIZONTAL ELLIPSIS
+% 결락기호
+\XeTeXcharclass "25A1=\XeTeXcharclassID % □
+% some KS symbols
+\XeTeXcharclass "203B=\XeTeXcharclassSY % ※
+\XeTeXcharclass "2103=\XeTeXcharclassSY % ℃
+\XeTeXcharclass "2109=\XeTeXcharclassSY % ℉
+\XeTeXcharclass "2113=\XeTeXcharclassSY % ℓ
+\XeTeXcharclass "2121=\XeTeXcharclassSY % ℡
+\XeTeXcharclass "2122=\XeTeXcharclassSY % ™
+\XeTeXcharclass "212B=\XeTeXcharclassSY % Å
+\count@="2160 \loop % Ⅰ..Ⅻ
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"216B \advance\count@\@ne \repeat
+\count@="2170 \loop % ⅰ..ⅻ
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"217B \advance\count@\@ne \repeat
+\XeTeXcharclass "223C=\XeTeXcharclassSY % ∼
+\count@="2460 \loop % ①..⓪
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"24EA \advance\count@\@ne \repeat
+\XeTeXcharclass "2500 = \XeTeXcharclassSY % ─
+\XeTeXcharclass "2501 = \XeTeXcharclassSY % ━
+\XeTeXcharclass "2502 = \XeTeXcharclassSY % │
+\XeTeXcharclass "2503 = \XeTeXcharclassSY % ┃
+\count@="250C \loop % ─..╋
+ \XeTeXcharclass\count@=\XeTeXcharclassSY
+ \ifnum\count@<"254B \advance\count@\@ne \repeat
+\XeTeXcharclass "2592 = \XeTeXcharclassSY % ▒
+\XeTeXcharclass "25A0 = \XeTeXcharclassSY % ■
+\XeTeXcharclass "25A3 = \XeTeXcharclassSY % ▣
+\XeTeXcharclass "25A4 = \XeTeXcharclassSY % ▤
+\XeTeXcharclass "25A5 = \XeTeXcharclassSY % ▥
+\XeTeXcharclass "25A6 = \XeTeXcharclassSY % ▦
+\XeTeXcharclass "25A7 = \XeTeXcharclassSY % ▧
+\XeTeXcharclass "25A8 = \XeTeXcharclassSY % ▨
+\XeTeXcharclass "25A9 = \XeTeXcharclassSY % ▩
+\XeTeXcharclass "25B2 = \XeTeXcharclassSY % ▲
+\XeTeXcharclass "25B3 = \XeTeXcharclassSY % △
+\XeTeXcharclass "25B6 = \XeTeXcharclassSY % ▶
+\XeTeXcharclass "25B7 = \XeTeXcharclassSY % ▷
+\XeTeXcharclass "25BC = \XeTeXcharclassSY % ▼
+\XeTeXcharclass "25BD = \XeTeXcharclassSY % ▽
+\XeTeXcharclass "25C0 = \XeTeXcharclassSY % ◀
+\XeTeXcharclass "25C1 = \XeTeXcharclassSY % ◁
+\XeTeXcharclass "25C6 = \XeTeXcharclassSY % ◆
+\XeTeXcharclass "25C7 = \XeTeXcharclassSY % ◇
+\XeTeXcharclass "25C8 = \XeTeXcharclassSY % ◈
+\XeTeXcharclass "25CB = \XeTeXcharclassSY % ○
+\XeTeXcharclass "25CE = \XeTeXcharclassSY % ◎
+\XeTeXcharclass "25CF = \XeTeXcharclassSY % ●
+\XeTeXcharclass "25D0 = \XeTeXcharclassSY % ◐
+\XeTeXcharclass "25D1 = \XeTeXcharclassSY % ◑
+\XeTeXcharclass "2605 = \XeTeXcharclassSY % ★
+\XeTeXcharclass "2606 = \XeTeXcharclassSY % ☆
+\XeTeXcharclass "260E = \XeTeXcharclassSY % ☎
+\XeTeXcharclass "260F = \XeTeXcharclassSY % ☏
+\XeTeXcharclass "261C = \XeTeXcharclassSY % ☜
+\XeTeXcharclass "261E = \XeTeXcharclassSY % ☞
+\XeTeXcharclass "2640 = \XeTeXcharclassSY % ♀
+\XeTeXcharclass "2642 = \XeTeXcharclassSY % ♂
+\XeTeXcharclass "2660 = \XeTeXcharclassSY % ♠
+\XeTeXcharclass "2661 = \XeTeXcharclassSY % ♡
+\XeTeXcharclass "2663 = \XeTeXcharclassSY % ♣
+\XeTeXcharclass "2664 = \XeTeXcharclassSY % ♤
+\XeTeXcharclass "2665 = \XeTeXcharclassSY % ♥
+\XeTeXcharclass "2667 = \XeTeXcharclassSY % ♧
+\XeTeXcharclass "2668 = \XeTeXcharclassSY % ♨
+\XeTeXcharclass "2669 = \XeTeXcharclassSY % ♩
+\XeTeXcharclass "266A = \XeTeXcharclassSY % ♪
+\XeTeXcharclass "266C = \XeTeXcharclassSY % ♬
+\XeTeXcharclass "266D = \XeTeXcharclassSY % ♭
+\XeTeXcharclass "3012 = \XeTeXcharclassSY % 〒
+\XeTeXcharclass "301C = \XeTeXcharclassSY % 〜
+\XeTeXcharclass "FF04 = \XeTeXcharclassSY % $
+\XeTeXcharclass "FF05 = \XeTeXcharclassSY % %
+\XeTeXcharclass "FF5E = \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}
+\let\XeKo@nobreak\nobreak
+
+\def\XKinterhangulbreak{% compat
+ \ifnum\XeKo@typesetclassic=\z@
+ \penalty\XeTeXlinebreakpenalty
+ \fi
+ \hskip
+ \ifdefined\xetexkointerhchar \xetexkointerhchar \else \z@ \fi
+ \XeKo@stretchshrink
+ }
+\def\XKinterhanjabreak{% compat
+ \ifnum\XeKo@typesetclassic=\z@
+ \penalty\XeTeXlinebreakpenalty
+ \fi
+ \hskip\z@ \XeKo@stretchshrink
+ }
+
+\def\XeKo@latincjk@classic{%
+ \hskip
+ \ifdefined\xetexkohu
+ \xetexkohu plus .5\dimexpr\xetexkohu\relax minus.25\dimexpr\xetexkohu\relax
+ \else
+ \XeKo@halfdim plus .5\XeKo@halfdim minus.25\XeKo@halfdim
+ \fi
+ }
+\def\XeKo@latincjk@modern{%
+ \hskip \ifdefined\xetexkohu \xetexkohu \else \XeKo@halfdim \fi
+ \XeKo@stretchshrink
+ }
+\def\XeKo@postmath@modern{%
+ \hskip 2\ifdefined\xetexkohu \dimexpr\xetexkohu\relax \else \XeKo@halfdim \fi
+ \XeKo@stretchshrink
+ }
+
+% 고아글자 억제. verbatim 에서는 이 명령을 꺼야 한다
+\def\XeKo@suppress@char@orphan{%
+ \XeKo@skip@=\lastskip \unskip
+ \XeKo@count@=\lastpenalty \unpenalty
+ \ifnum\XeKo@count@<5000 \XeKo@count@=5000 \fi
+ \penalty\XeKo@count@
+ \hskip\XeKo@skip@
+ }
+
+\protected\def\inhibitglue{\hskip\z@\XeKo@stretchshrink}
+
+% typesetting modes
+\protected\def\typesetclassic{%
+ \chardef\XeKo@typesetclassic\@ne
+ \def\XeKo@halfdim{\dimexpr.25em\relax}%
+ \def\XeKo@stretchshrink{plus.08em minus.04em}%
+ \let\XeKo@latincjk\XeKo@latincjk@classic
+ \let\XeKo@postmath\XeKo@latincjk@classic
+ \XeTeXlinebreakpenalty=\z@
+ \XeTeXlinebreakskip=\z@ \XeKo@stretchshrink
+ \parindent=1em
+ }
+\protected\def\typesetmodern{%
+ \chardef\XeKo@typesetclassic\z@
+ \def\XeKo@halfdim{\dimexpr.05em\relax}%
+ \def\XeKo@stretchshrink{plus.04em minus.02em}%
+ \let\XeKo@latincjk\XeKo@latincjk@modern
+ \let\XeKo@postmath\XeKo@postmath@modern
+ \XeTeXlinebreakpenalty=50
+ \XeTeXlinebreakskip=\z@ \XeKo@stretchshrink
+ }
+\typesetmodern
+
+\let\japanese\typesetclassic
+\protected\def\Tchinese{\typesetclassic\parindent=2em }
+\protected\def\Schinese{\typesetclassic\parindent=2em
+ \chardef\XeKo@typesetSchinese\@ne
+ \ifnum\XeKo@typesetvertical=\@ne
+ \XeKo@Schinese@vertical
+ \else
+ \XeKo@Schinese@horizontal
+ \fi
+ }
+\let\chinese\Schinese
+\def\XeKo@Schinese@horizontal{% these glyphs in simplified chinese fonts are left-aligned.
+ \XeTeXcharclass "FF01 = \XeTeXcharclassFS % !
+ \XeTeXcharclass "FF1A = \XeTeXcharclassCL % :
+ \XeTeXcharclass "FF1B = \XeTeXcharclassCL % ;
+ \XeTeXcharclass "FF1F = \XeTeXcharclassFS % ?
+ }
+\def\XeKo@Schinese@vertical{%
+ \XeTeXcharclass "FF01 = \XeTeXcharclassEX % !
+ \XeTeXcharclass "FF1A = \XeTeXcharclassVC % :
+ \XeTeXcharclass "FF1B = \XeTeXcharclassVC % ;
+ \XeTeXcharclass "FF1F = \XeTeXcharclassEX % ?
+ }
+
+\chardef\XeKo@typesetvertical\z@
+\chardef\XeKo@typesetSchinese\z@
+
+\protected\def\typesetvertical{%
+ \chardef\XeKo@typesetvertical\@ne
+ \XeTeXcharclass "FF1A = \XeTeXcharclassVC % :
+ \XeTeXcharclass "FF1B = \XeTeXcharclassVC % ;
+ \ifnum\XeKo@typesetSchinese=\@ne \XeKo@Schinese@vertical \fi
+ \parindent=1em
+ }
+\protected\def\typesethorizontal{%
+ \chardef\XeKo@typesetvertical\z@
+ \XeTeXcharclass "FF1A = \XeTeXcharclassMD % :
+ \XeTeXcharclass "FF1B = \XeTeXcharclassMD % ;
+ \ifnum\XeKo@typesetSchinese=\@ne \XeKo@Schinese@horizontal \fi
+ \parindent\z@
+ }
+\protected\def\vertical#1{%
+ \leavevmode
+ \setbox\z@\vbox\bgroup
+ \hsize#1\relax
+ \typesetvertical
+ }
+\protected\def\endvertical{%
+ \egroup
+ \XeKo@rotatebox\z@
+ \box\z@
+ }
+\protected\def\horizontal#1{%
+ \leavevmode
+ \setbox\z@\vbox\bgroup
+ \hsize#1\relax
+ \typesethorizontal
+ }
+\protected\def\endhorizontal{%
+ \egroup
+ \XeKo@unrotatebox\z@
+ \lower.5\ht\z@ \box\z@
+ }
+\def\XeKo@rotatebox#1{%
+ \setbox#1\hbox to\dimexpr\ht#1+\dp#1\bgroup
+ \hfil
+ \vbox to\wd#1\bgroup
+ \wd#1\z@ \ht#1\z@ \dp#1\z@
+ \special{x:gsave}\special{x:rotate -90}\box#1\special{x:grestore}%
+ \vfil
+ \egroup
+ \kern-.5ex
+ \egroup
+ }
+\def\XeKo@unrotatebox#1{%
+ \setbox#1\hbox to\dimexpr\ht#1+\dp#1\bgroup
+ \vbox to\wd#1\bgroup
+ \vfil
+ \wd#1\z@ \ht#1\z@ \dp#1\z@
+ \special{x:gsave}\special{x:rotate 90}\box#1\special{x:grestore}%
+ \egroup
+ \hfil
+ \egroup
+ }
+\ifcsname ver@xetexko.sty\endcsname
+ \def\verticaltypesetting{%
+ \maxdepth\z@ \typesetvertical
+ \dimen@\textwidth \textwidth\textheight \textheight\dimen@
+ \edef\@outputpage{\unexpanded{\XeKo@rotatebox\@outputbox
+ \textwidth\textheight}\unexpanded\expandafter{\@outputpage}}}
+\else
+ \def\verticaltypesetting{%
+ \dimen@\hsize \hsize\vsize \vsize\dimen@
+ \edef\plainoutput{\unexpanded{\dimen@\hsize \hsize\vsize \vsize\dimen@}%
+ \unexpanded\expandafter{\plainoutput}}%
+ \def\pagebody{\setbox\z@\vbox to\hsize{\boxmaxdepth=\maxdepth
+ \pagecontents}\XeKo@rotatebox\z@\box\z@}%
+ \maxdepth\z@ \typesetvertical }
+\fi
+
+\protected\def\vertlatin#1{\leavevmode\lower.5ex\hbox{\latinmarks #1}} % compat
+
+% fonts
+\newtoks\XeKo@font@options
+\XeKo@font@options{}
+
+\def\XeKo@reset@options{%
+ \let\xetexkohu \XeKo@undefined
+ \let\xetexkocharraise \XeKo@undefined
+ \let\xetexkointerhchar\XeKo@undefined
+ }
+
+\def\XeKo@font@Hangul{%
+ \ifdefined\XeKo@hangul@font
+ \edef\XeKo@curr{\the\font\the\XeKo@font@options}%
+ \ifx\XeKo@curr\XeKo@hangul@font\else
+ \ifx\XeKo@curr\XeKo@hanja@font\else
+ \edef\XeKo@curr@latin{\the\font}%
+ \fi
+ \XeKo@reset@options
+ \XeKo@hangul@font
+ \XeKo@font@options\expandafter{\xetexkohanguloption}%
+ \fi
+ \fi
+ }
+\def\XeKo@font@CJK{%
+ \ifdefined\XeKo@hanja@font
+ \edef\XeKo@curr{\the\font\the\XeKo@font@options}%
+ \ifx\XeKo@curr\XeKo@hanja@font\else
+ \ifx\XeKo@curr\XeKo@hangul@font\else
+ \edef\XeKo@curr@latin{\the\font}%
+ \fi
+ \XeKo@reset@options
+ \XeKo@hanja@font
+ \XeKo@font@options\expandafter{\xetexkohanjaoption}%
+ \fi
+ \fi
+ }
+\def\XeKo@font@Latin{%
+ \ifdefined\XeKo@curr@latin
+ \edef\XeKo@curr{\the\font\the\XeKo@font@options}%
+ \ifx\XeKo@curr\XeKo@hangul@font
+ \XeKo@curr@latin
+ \else
+ \ifx\XeKo@curr\XeKo@hanja@font
+ \XeKo@curr@latin
+ \fi
+ \fi
+ \fi
+ }
+\let\XeKo@fontHG\XeKo@font@Hangul
+\let\XeKo@fontID\XeKo@font@CJK
+\let\XeKo@fontCJ\XeKo@font@CJK
+\let\XeKo@fontSY\XeKo@font@Hangul
+\let\XeKo@fontAA\XeKo@font@Latin
+\let\XeKo@fontAO\XeKo@font@Hangul
+\let\XeKo@fontAC\XeKo@font@Hangul
+\let\XeKo@fontAP\relax % prevfont
+\let\XeKo@fontAM\relax % prevfont
+\let\XeKo@fontAH\XeKo@font@Latin
+\let\XeKo@fontOP\XeKo@font@Hangul
+\let\XeKo@fontCL\XeKo@font@Hangul
+\let\XeKo@fontMD\XeKo@font@Hangul
+\let\XeKo@fontFS\XeKo@font@Hangul
+\let\XeKo@fontEX\XeKo@font@Hangul
+\let\XeKo@fontLD\XeKo@font@Hangul
+\let\XeKo@fontVC\XeKo@font@Hangul
+
+\protected\def\latinalphs {\let\XeKo@fontAA\XeKo@font@Latin}
+\protected\def\latinparens {\let\XeKo@fontAO\XeKo@font@Latin\let\XeKo@fontAC\XeKo@font@Latin}
+\protected\def\latinpuncts {\let\XeKo@fontAP\XeKo@font@Latin}
+\protected\def\latincolons {\let\XeKo@fontAM\XeKo@font@Latin}
+\protected\def\latinhyphens{\let\XeKo@fontAH\XeKo@font@Latin}
+\protected\def\latincjksymbols{%
+ \let\XeKo@fontSY\XeKo@font@Latin
+ \let\XeKo@fontOP\XeKo@font@Latin
+ \let\XeKo@fontCL\XeKo@font@Latin
+ \let\XeKo@fontMD\XeKo@font@Latin
+ \let\XeKo@fontFS\XeKo@font@Latin
+ \let\XeKo@fontEX\XeKo@font@Latin
+ \let\XeKo@fontLD\XeKo@font@Latin
+ \let\XeKo@fontVC\XeKo@font@Latin
+ }
+\protected\def\latinmarks{%
+ \latinalphs\latinparens\latinpuncts\latincolons\latinhyphens\latincjksymbols
+ }
+\let\latinnums\latinalphs
+\let\latinquotes\latinparens
+
+\protected\def\hangulalphs {\let\XeKo@fontAA\XeKo@font@Hangul}
+\protected\def\hangulparens {\let\XeKo@fontAO\XeKo@font@Hangul\let\XeKo@fontAC\XeKo@font@Hangul}
+\protected\def\hangulpuncts {\let\XeKo@fontAP\XeKo@font@Hangul}
+\protected\def\hangulcolons {\let\XeKo@fontAM\XeKo@font@Hangul}
+\protected\def\hangulhyphens{\let\XeKo@fontAH\XeKo@font@Hangul}
+\protected\def\hangulcjksymbols{%
+ \let\XeKo@fontSY\XeKo@font@Hangul
+ \let\XeKo@fontOP\XeKo@font@Hangul
+ \let\XeKo@fontCL\XeKo@font@Hangul
+ \let\XeKo@fontMD\XeKo@font@Hangul
+ \let\XeKo@fontFS\XeKo@font@Hangul
+ \let\XeKo@fontEX\XeKo@font@Hangul
+ \let\XeKo@fontLD\XeKo@font@Hangul
+ \let\XeKo@fontVC\XeKo@font@Hangul
+ }
+\protected\def\hangulmarks{%
+ \hangulalphs\hangulparens\hangulpuncts\hangulcolons\hangulhyphens\hangulcjksymbols
+ }
+\let\hangulnums\hangulalphs
+\let\hangulquotes\hangulparens
+
+\protected\def\hanjaalphs {\let\XeKo@fontAA\XeKo@font@CJK}
+\protected\def\hanjaparens {\let\XeKo@fontAO\XeKo@font@CJK\let\XeKo@fontAC\XeKo@font@CJK}
+\protected\def\hanjapuncts {\let\XeKo@fontAP\XeKo@font@CJK}
+\protected\def\hanjacolons {\let\XeKo@fontAM\XeKo@font@CJK}
+\protected\def\hanjahyphens{\let\XeKo@fontAH\XeKo@font@CJK}
+\protected\def\hanjacjksymbols{%
+ \let\XeKo@fontSY\XeKo@font@Hanja
+ \let\XeKo@fontOP\XeKo@font@Hanja
+ \let\XeKo@fontCL\XeKo@font@Hanja
+ \let\XeKo@fontMD\XeKo@font@Hanja
+ \let\XeKo@fontFS\XeKo@font@Hanja
+ \let\XeKo@fontEX\XeKo@font@Hanja
+ \let\XeKo@fontLD\XeKo@font@Hanja
+ \let\XeKo@fontVC\XeKo@font@Hanja
+ }
+\protected\def\hanjamarks{%
+ \hanjaalphs\hanjaparens\hanjapuncts\hanjacolons\hanjahyphens\hanjacjksymbols
+ }
+\let\hanjanums\hanjaalphs
+\let\hanjaquotes\hanjaparens
+
+\protected\def\prevfontalphs {\let\XeKo@fontAA\relax}
+\protected\def\prevfontparens {\let\XeKo@fontAO\relax\let\XeKo@fontAC\relax}
+\protected\def\prevfontpuncts {\let\XeKo@fontAP\relax}
+\protected\def\prevfontcolons {\let\XeKo@fontAM\relax}
+\protected\def\prevfonthyphens{\let\XeKo@fontAH\relax}
+\protected\def\prevfontcjksymbols{%
+ \let\XeKo@fontSY\relax
+ \let\XeKo@fontOP\relax
+ \let\XeKo@fontCL\relax
+ \let\XeKo@fontMD\relax
+ \let\XeKo@fontFS\relax
+ \let\XeKo@fontEX\relax
+ \let\XeKo@fontLD\relax
+ \let\XeKo@fontVC\relax
+ }
+\protected\def\prevfontmarks{%
+ \prevfontalphs\prevfontparens\prevfontpuncts\prevfontcolons\prevfonthyphens\prevfontcjksymbols
+ }
+\let\prevfontnums\prevfontalphs
+\let\prevfontquotes\prevfontparens
+
+% interchartoks
+\chardef\XeKo@cjk@ignorespaces\z@
+\protected\def\removeclassicspaces{\chardef\XeKo@cjk@ignorespaces\@ne}
+
+\expandafter\let\csname XeKo@1@class\endcsname =\XeTeXcharclassHG
+\expandafter\let\csname XeKo@2@class\endcsname =\XeTeXcharclassID
+\expandafter\let\csname XeKo@3@class\endcsname =\XeTeXcharclassSY
+\expandafter\let\csname XeKo@4@class\endcsname =\XeTeXcharclassAA
+\expandafter\let\csname XeKo@5@class\endcsname =\XeTeXcharclassAO
+\expandafter\let\csname XeKo@6@class\endcsname =\XeTeXcharclassAC
+\expandafter\let\csname XeKo@7@class\endcsname =\XeTeXcharclassAP
+\expandafter\let\csname XeKo@8@class\endcsname =\XeTeXcharclassAM
+\expandafter\let\csname XeKo@9@class\endcsname =\XeTeXcharclassAH
+\expandafter\let\csname XeKo@10@class\endcsname=\XeTeXcharclassOP
+\expandafter\let\csname XeKo@11@class\endcsname=\XeTeXcharclassCL
+\expandafter\let\csname XeKo@12@class\endcsname=\XeTeXcharclassMD
+\expandafter\let\csname XeKo@13@class\endcsname=\XeTeXcharclassFS
+\expandafter\let\csname XeKo@14@class\endcsname=\XeTeXcharclassEX
+\expandafter\let\csname XeKo@15@class\endcsname=\XeTeXcharclassLD
+\expandafter\let\csname XeKo@16@class\endcsname=\XeTeXcharclassVC
+
+\newtoks\XeKo@toks@
+\newtoks\XeKo@toks@ii
+\newskip\XeKo@skip@
+\newcount\XeKo@count@
+\newdimen\XeKo@dimen@
+
+\def\XeKo@check@next@tok{\futurelet\XeKo@let@token\XeKo@check@next@tok@}
+\def\XeKo@check@next@tok@{%
+ \XeKo@get@charslot
+ \ifnum\XeKo@charslot="FFFF
+ % 다음 한 줄이 없으면 한글과 한글 사이에 폰트가 변경되는 경우 글자 누락.
+ % 폰트 변경은 kern 에 아무 영향을 주지 않기 때문.
+ \def\XeKo@maybe@gobble{\def\XeKo@maybe@gobble{\expandafter\expandafter\expandafter\@gobble}}%
+ \expandafter\XeKo@flush@toks
+ \else
+ \ifnum\XeKo@currclass>\tw@
+ \expandafter\expandafter\expandafter\XeKo@check@next@tok@latin
+ \else % HG ID
+ \expandafter\expandafter\expandafter\XeKo@check@next@tok@cjk
+ \fi
+ \fi
+ }
+\def\XeKo@check@next@tok@cjk{%
+ \ifnum 0\ifnum\XeTeXcharclass\XeKo@charslot=\XeTeXcharclassJJ 1\else
+ \ifnum\XeTeXcharclass\XeKo@charslot=\XeTeXcharclassIgnore 1\fi\fi >\z@
+ \expandafter\XeKo@addto@toks
+ \else
+ \expandafter\XeKo@flush@toks
+ \fi
+ }
+\def\XeKo@check@next@tok@latin{%
+ \ifnum 0%
+ \ifnum\XeTeXcharclass\XeKo@charslot=\csname XeKo@\XeKo@currclass @class\endcsname 1\else
+ \ifnum\XeTeXcharclass\XeKo@charslot=\XeTeXcharclassIgnore 1\fi\fi >\z@
+ \expandafter\XeKo@addto@toks
+ \else
+ \expandafter\XeKo@flush@toks
+ \fi
+ }
+\def\XeKo@addto@toks#1{%
+ \ifnum\XeKo@currclass=4 % AA
+ \global\let\XeKo@josatoken=#1\relax
+ \else\ifnum\XeTeXcharclass\XeKo@charslot=\XeTeXcharclassJJ
+ \global\let\XeKo@josatoken=#1\relax
+ \else\ifnum\XeKo@currclass=\thr@@ % SY
+ \global\let\XeKo@josatoken=#1\relax
+ \fi\fi\fi
+ \XeKo@toks@\expandafter{\the\XeKo@toks@ #1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@flush@toks{%
+ \ifnum\XeKo@currclass<\thr@@
+ \XeKo@toks@ii{}\expandafter\XeKo@char@orphan % HG, ID
+ \else
+ \expandafter\XeKo@do@flush@toks
+ \fi
+ }
+\def\XeKo@char@orphan{%
+ \ifx\XeKo@let@token\par
+ \XeKo@suppress@char@orphan
+ \let\XeKo@next\XeKo@flush@char@orphan
+ \else \ifx\@sptoken\XeKo@let@token
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii \@sptoken}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else \ifx ^^2e\XeKo@let@token % .
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii ^^2e}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else \ifx ^^3f\XeKo@let@token % ?
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii ^^3f}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else \ifx ^^21\XeKo@let@token % !
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii ^^21}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else \ifx ^^^^3002\XeKo@let@token % 。
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii ^^^^3002}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else \ifx ^^^^ff0e\XeKo@let@token % .
+ \XeKo@toks@ii\expandafter{\the\XeKo@toks@ii ^^^^3002}%
+ \let\XeKo@next\XeKo@char@orphan@
+ \else
+ \let\XeKo@next\XeKo@flush@char@orphan
+ \fi\fi\fi\fi\fi \fi\fi
+ \XeKo@next
+ }
+\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@char@raise@start{%
+ \ifdefined\xetexkocharraise
+ \edef\XeKo@curr{\the\font\the\XeKo@font@options}%
+ \ifx\XeKo@curr\XeKo@hangul@font
+ \raise\xetexkocharraise\hbox\bgroup
+ \else
+ \ifx\XeKo@curr\XeKo@hanja@font
+ \raise\xetexkocharraise\hbox\bgroup
+ \fi
+ \fi
+ \fi
+ }
+\def\XeKo@char@raise@stop{%
+ \ifdefined\xetexkocharraise
+ \ifx\XeKo@curr\XeKo@hangul@font
+ \egroup
+ \else
+ \ifx\XeKo@curr\XeKo@hanja@font
+ \egroup
+ \fi
+ \fi
+ \fi
+ }
+\def\XeKo@do@flush@toks{%
+ \begingroup
+ \XeTeXinterchartokenstate\z@
+ \ifdefined\XeKo@pre@hang
+ \XeKo@pre@hang % hanging punctuations
+ \fi
+ \XeKo@char@raise@start % charraise
+ \ifnum\XeKo@currclass=\@ne
+ \XeKo@everyhangul{\the\XeKo@toks@}% everyhangul
+ \else
+ \ifnum\XeKo@currclass=\tw@
+ \XeKo@everyhanja{\the\XeKo@toks@}% everyhanja
+ \else
+ \the\XeKo@toks@
+ \fi
+ \fi
+ \XeKo@char@raise@stop % charraise
+ \ifdefined\XeKo@post@hang
+ \XeKo@post@hang % hanging punctuations
+ \fi
+ \endgroup
+ \XeKo@maybe@kern
+ }
+\def\XeKo@maybe@kern{%
+ \ifnum\XeKo@currclass<\thr@@ % \the\XeKo@toks@ii
+ \expandafter\expandafter\expandafter\XeKo@maybe@kern@i
+ \else
+ \expandafter\XeKo@maybe@kern@i
+ \fi
+ }
+\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
+ \expandafter\expandafter\expandafter\XeKo@maybe@ignorespaces
+ \fi
+ \else
+ \XeKo@insert@kerns
+ \fi
+ }
+\def\XeKo@insert@kerns{%
+ \kern-\XeKo@currclass sp \kern \XeKo@currclass sp
+ }
+% remove space
+\def\XeKo@maybe@ignorespaces{%
+ \ifnum 0\ifnum\XeKo@currclass<4 1\else % HG ID SY
+ \ifnum\XeKo@currclass>9 1\fi\fi % CJK punctuations
+ >\z@
+ \expandafter\XeKo@ignorespaces@iv
+ \fi
+ }
+\def\XeKo@ignorespaces@iv{\afterassignment\XeKo@ignorespaces@v\let\XeKo@let@token= }
+\def\XeKo@ignorespaces@v{\futurelet\XeKo@let@token\XeKo@ignorespaces@vi}
+\def\XeKo@ignorespaces@vi{%
+ \XeKo@get@charslot
+ \XeKo@count@=\XeTeXcharclass\XeKo@charslot
+ \ifnum\XeKo@count@=\XeTeXcharclassAA \@sptoken \else
+ \ifnum\XeKo@count@=\XeTeXcharclassAO \@sptoken \else
+ \ifnum\XeKo@count@=\XeTeXcharclassAC \@sptoken \else
+ \ifnum\XeKo@count@=\XeTeXcharclassAP \@sptoken \else
+ \ifnum\XeKo@count@=\XeTeXcharclassAM \@sptoken \else
+ \ifnum\XeKo@count@=\XeTeXcharclassAH \@sptoken \else
+ \XeKo@insert@kerns
+ \fi\fi\fi\fi\fi \fi
+ }
+
+% hanging punctuations
+\chardef\XeKo@hangingpuncts\z@
+\protected\def\hangingpunctuation{\chardef\XeKo@hangingpuncts\@ne }
+\let\hangingpunctuations\hangingpunctuation
+
+% compress CJK punctuations to .5em
+\protected\def\compresspunctuations{\chardef\XeKo@compresspuncts\@ne }
+\protected\def\nocompresspunctuations{\chardef\XeKo@compresspuncts\z@ }
+\compresspunctuations
+
+%% everyhangul/hanja
+\def\everyhangul#1{\def\XeKo@everyhangul##1{#1}}
+\def\everyhanja #1{\def\XeKo@everyhanja ##1{#1}}
+\def\XeKo@everyhangul#1{#1}
+\def\XeKo@everyhanja #1{#1}
+
+\def\XeKo@startHG#1{%
+ \global\let\XeKo@josatoken=#1\relax
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{1}%
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startID#1{%
+ \global\let\XeKo@josatoken=#1\relax
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{2}%
+ \XeKo@toks@{#1}%
+ \ifdefined\fallbackhanjafont
+ \iffontchar\font`#1\else
+ \XeKo@toks@{\fallbackhanjafont #1}%
+ \fi
+ \fi
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startCJ#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{2}% same as ID
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startSY#1{%
+ \global\let\XeKo@josatoken=#1\relax
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{3}%
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAA#1{%
+ \global\let\XeKo@josatoken=#1\relax
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{4}%
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAO#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{5}%
+ \XeKo@toks@{#1}%
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum`#1="60 % `
+ \XeKo@dimen@=\fontcharwd\font"60 %
+ \edef\XeKo@pre@hang{%
+ \kern\the\XeKo@dimen@
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ }%
+ \fi
+ \fi
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAC#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{6}%
+ \XeKo@toks@{#1}%
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum`#1="27 % '
+ \XeKo@dimen@=\fontcharwd\font"27 %
+ \edef\XeKo@post@hang{%
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ \kern\the\XeKo@dimen@
+ }%
+ \fi
+ \fi
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAP#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{7}%
+ \XeKo@toks@{#1}%
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum 0\ifnum`#1="2E 1\else % . ,
+ \ifnum`#1="2C 1\fi\fi >\z@
+ \XeKo@dimen@=\fontcharwd\font`#1 %
+ \edef\XeKo@post@hang{%
+ \noexpand\XeKo@count@\noexpand\spacefactor
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ \kern\the\XeKo@dimen@
+ \noexpand\spacefactor\noexpand\XeKo@count@
+ }%
+ \fi
+ \fi
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAM#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{8}%
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startAH#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{9}%
+ \XeKo@toks@{#1}%
+ \XeKo@check@next@tok
+ }
+\def\XeKo@startOP#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{10}%
+ \ifnum\XeKo@compresspuncts=\@ne
+ \XeKo@toks@{\hbox to.5em\bgroup\hss #1\egroup}%
+ \else
+ \XeKo@toks@{#1}%
+ \fi
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum0\ifnum`#1="2018 1\else % ‘ “
+ \ifnum`#1="201C 1\fi\fi >\z@
+ \ifnum\XeKo@compresspuncts=\@ne
+ \XeKo@dimen@=.5em
+ \else
+ \XeKo@dimen@=\fontcharwd\font`#1 %
+ \fi
+ \ifnum`#1="201C %
+ \XeKo@dimen@=.5\XeKo@dimen@
+ \fi
+ \edef\XeKo@pre@hang{%
+ \kern\the\XeKo@dimen@
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ }%
+ \fi
+ \fi
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startCL#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 #1\hss\egroup}%
+ \else
+ \XeKo@toks@{#1}%
+ \fi
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum 0\ifnum`#1="2019 1\else % ’ ” 、 ,
+ \ifnum`#1="201D 1\else
+ \ifnum`#1="3001 1\else
+ \ifnum`#1="FF0C 1\fi\fi\fi\fi >\z@
+ \ifnum\XeKo@compresspuncts=\@ne
+ \XeKo@dimen@=.5em
+ \else
+ \XeKo@dimen@=\fontcharwd\font`#1 %
+ \fi
+ \ifnum`#1="201D %
+ \XeKo@dimen@=.5\XeKo@dimen@
+ \fi
+ \edef\XeKo@post@hang{%
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ \kern\the\XeKo@dimen@
+ }%
+ \fi
+ \fi
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startMD#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\hss #1\hss\egroup}%
+ \else
+ \XeKo@toks@{#1}%
+ \fi
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startFS#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 #1\hss\egroup}%
+ \else
+ \XeKo@toks@{#1}%
+ \fi
+ \ifnum\XeKo@hangingpuncts=\@ne
+ \ifnum 0\ifnum`#1="3002 1\else % 。 .
+ \ifnum`#1="FF0E 1\fi\fi >\z@
+ \ifnum\XeKo@compresspuncts=\@ne
+ \XeKo@dimen@=.5em
+ \else
+ \XeKo@dimen@=\fontcharwd\font`#1 %
+ \fi
+ \edef\XeKo@post@hang{%
+ \vrule width-\the\XeKo@dimen@ height\z@ depth\z@
+ \kern\the\XeKo@dimen@
+ }%
+ \fi
+ \fi
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startEX#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{14}%
+ \XeKo@toks@{#1}%
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startLD#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{15}%
+ \XeKo@toks@{#1}%
+ \XeKo@do@flush@toks
+ }
+\def\XeKo@startVC#1{%
+ \let\XeKo@pre@hang\XeKo@undefined \let\XeKo@post@hang\XeKo@undefined
+ \def\XeKo@currclass{16}%
+ \XeKo@toks@{#1}%
+ \XeKo@do@flush@toks
+ }
+
+\def\XeKo@maybe@gobble{\expandafter\expandafter\expandafter\@gobble}
+
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassHG{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XKinterhangulbreak \XeKo@maybe@gobble % HG HG
+ \or \unkern\unkern \XKinterhanjabreak % ID HG
+ \or \unkern\unkern % SY HG
+ \or \unkern\unkern \XeKo@latincjk % AA HG
+ \or \unkern\unkern \XeKo@nobreak % AO HG
+ \or \unkern\unkern \XeKo@latincjk % AC HG
+ \or \unkern\unkern \XeKo@latincjk % AP HG
+ \or \unkern\unkern \XeKo@latincjk % AM HG
+ \or \unkern\unkern % AH HG
+ \or \unkern\unkern % OP HG
+ \or \unkern\unkern \XeKo@halfhalf % CL HG
+ \or \unkern\unkern \XeKo@quarterquarter % MD HG
+ \or \unkern\unkern \XeKo@halfzero % FS HG
+ \or \unkern\unkern \XeKo@halfhalf % EX HG
+ \or \unkern\unkern \XKinterhanjabreak % LD HG
+ \or \unkern\unkern \XeKo@quarterquarter % VC HG
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@postmath
+ \fi\fi
+ \XeKo@fontHG\XeKo@startHG
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassID{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XKinterhanjabreak % HG ID
+ \or \unkern\unkern \XKinterhanjabreak \XeKo@maybe@gobble % ID ID
+ \or \unkern\unkern % SY ID
+ \or \unkern\unkern \XeKo@latincjk % AA ID
+ \or \unkern\unkern \XeKo@nobreak % AO ID
+ \or \unkern\unkern \XeKo@latincjk % AC ID
+ \or \unkern\unkern \XeKo@latincjk % AP ID
+ \or \unkern\unkern \XeKo@latincjk % AM ID
+ \or \unkern\unkern % AH ID
+ \or \unkern\unkern % OP ID
+ \or \unkern\unkern \XeKo@halfhalf % CL ID
+ \or \unkern\unkern \XeKo@quarterquarter % MD ID
+ \or \unkern\unkern \XeKo@halfzero % FS ID
+ \or \unkern\unkern \XeKo@halfhalf % EX ID
+ \or \unkern\unkern \XKinterhanjabreak % LD ID
+ \or \unkern\unkern \XeKo@quarterquarter % VC ID
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@postmath
+ \fi\fi
+ \XeKo@fontID\XeKo@startID
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassCJ{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XKinterhanjabreak % HG CJ
+ \or \unkern\unkern \penalty5000\XKinterhanjabreak \XeKo@maybe@gobble % ID CJ
+ \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 % 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
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@postmath
+ \fi\fi
+ \XeKo@fontCJ\XeKo@startCJ
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassSY{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG SY
+ \or \unkern\unkern % ID SY
+ \or \unkern\unkern \XeKo@maybe@gobble % SY SY
+ \or \unkern\unkern % AA SY
+ \or \unkern\unkern \XeKo@nobreak % AO SY
+ \or \unkern\unkern \XeKo@latincjk % AC SY
+ \or \unkern\unkern \XeKo@latincjk % AP SY
+ \or \unkern\unkern \XeKo@latincjk % AM SY
+ \or \unkern\unkern % AH SY
+ \or \unkern\unkern % OP SY
+ \or \unkern\unkern \XeKo@halfhalf % CL SY
+ \or \unkern\unkern \XeKo@quarterquarter % MD SY
+ \or \unkern\unkern \XeKo@halfzero % FS SY
+ \or \unkern\unkern \XeKo@halfhalf % EX SY
+ \or \unkern\unkern % LD SY
+ \or \unkern\unkern \XeKo@quarterquarter % VC SY
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@postmath
+ \fi\fi
+ \XeKo@fontSY\XeKo@startSY
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAA{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@latincjk % HG AA
+ \or \unkern\unkern \XeKo@latincjk % ID AA
+ \or \unkern\unkern % SY AA
+ \or \unkern\unkern \XeKo@maybe@gobble % AA AA
+ \or \unkern\unkern % AO AA
+ \or \unkern\unkern % AC AA
+ \or \unkern\unkern % AP AA
+ \or \unkern\unkern % AM AA
+ \or \unkern\unkern % AH AA
+ \or \unkern\unkern % OP AA
+ \or \unkern\unkern \XeKo@halfhalf % CL AA
+ \or \unkern\unkern \XeKo@quarterquarter % MD AA
+ \or \unkern\unkern \XeKo@halfzero % FS AA
+ \or \unkern\unkern \XeKo@halfhalf % EX AA
+ \or \unkern\unkern % LD AA
+ \or \unkern\unkern \XeKo@quarterquarter % VC AA
+ \fi
+ \fi
+ \XeKo@fontAA\XeKo@startAA
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAO{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@latincjk % HG AO
+ \or \unkern\unkern \XeKo@latincjk % ID AO
+ \or \unkern\unkern \XeKo@latincjk % SY AO
+ \or \unkern\unkern % AA AO
+ \or \unkern\unkern \XeKo@maybe@gobble % AO AO
+ \or \unkern\unkern % AC AO
+ \or \unkern\unkern % AP AO
+ \or \unkern\unkern % AM AO
+ \or \unkern\unkern % AH AO
+ \or \unkern\unkern % OP AO
+ \or \unkern\unkern \XeKo@halfhalf % CL AO
+ \or \unkern\unkern \XeKo@quarterquarter % MD AO
+ \or \unkern\unkern \XeKo@halfzero % FS AO
+ \or \unkern\unkern \XeKo@halfhalf % EX AO
+ \or \unkern\unkern % LD AO
+ \or \unkern\unkern \XeKo@quarterquarter % VC AO
+ \fi
+ \fi
+ \XeKo@fontAO\XeKo@startAO
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAC{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG AC
+ \or \unkern\unkern % ID AC
+ \or \unkern\unkern % SY AC
+ \or \unkern\unkern % AA AC
+ \or \unkern\unkern % AO AC
+ \or \unkern\unkern \XeKo@maybe@gobble % AC AC
+ \or \unkern\unkern % AP AC
+ \or \unkern\unkern % AM AC
+ \or \unkern\unkern % AH AC
+ \or \unkern\unkern % OP AC
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % CL AC
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD AC
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfzero % FS AC
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % EX AC
+ \or \unkern\unkern % LD AC
+ \or \unkern\unkern % VC AC
+ \fi
+ \fi
+ \XeKo@fontAC\XeKo@startAC
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAP{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG AP
+ \or \unkern\unkern % ID AP
+ \or \unkern\unkern % SY AP
+ \or \unkern\unkern % AA AP
+ \or \unkern\unkern % AO AP
+ \or \unkern\unkern % AC AP
+ \or \unkern\unkern \XeKo@maybe@gobble % AP AP
+ \or \unkern\unkern % AM AP
+ \or \unkern\unkern % AH AP
+ \or \unkern\unkern % OP AP
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % CL AP
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD AP
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfzero % FS AP
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % EX AP
+ \or \unkern\unkern % LD AP
+ \or \unkern\unkern % VC AP
+ \fi
+ \fi
+ \XeKo@fontAP\XeKo@startAP
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAM{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@nobreak\XeKo@latincjk % HG AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@latincjk % ID AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@latincjk % SY AM
+ \or \unkern\unkern % AA AM
+ \or \unkern\unkern % AO AM
+ \or \unkern\unkern % AC AM
+ \or \unkern\unkern % AP AM
+ \or \unkern\unkern \XeKo@maybe@gobble % AM AM
+ \or \unkern\unkern % AH AM
+ \or \unkern\unkern % OP AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % CL AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfzero % FS AM
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % EX AM
+ \or \unkern\unkern % LD AM
+ \or \unkern\unkern % VC AM
+ \fi
+ \fi
+ \XeKo@fontAM\XeKo@startAM
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassAH{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@nobreak % HG AH
+ \or \unkern\unkern \XeKo@nobreak % ID AH
+ \or \unkern\unkern \XeKo@nobreak % SY AH
+ \or \unkern\unkern % AA AH
+ \or \unkern\unkern % AO AH
+ \or \unkern\unkern % AC AH
+ \or \unkern\unkern % AP AH
+ \or \unkern\unkern % AM AH
+ \or \unkern\unkern \XeKo@maybe@gobble % AH AH
+ \or \unkern\unkern % OP AH
+ \or \unkern\unkern \XeKo@nobreak % CL AH
+ \or \unkern\unkern \XeKo@nobreak % MD AH
+ \or \unkern\unkern \XeKo@nobreak % FS AH
+ \or \unkern\unkern \XeKo@nobreak % EX AH
+ \or \unkern\unkern \XeKo@nobreak % LD AH
+ \or \unkern\unkern \XeKo@nobreak % VC AH
+ \fi
+ \fi
+ \XeKo@fontAH\XeKo@startAH
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassOP{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@halfhalf % HG OP
+ \or \unkern\unkern \XeKo@halfhalf % ID OP
+ \or \unkern\unkern \XeKo@halfhalf % SY OP
+ \or \unkern\unkern \XeKo@halfhalf % AA OP
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % AO OP
+ \or \unkern\unkern \XeKo@halfhalf % AC OP
+ \or \unkern\unkern \XeKo@halfhalf % AP OP
+ \or \unkern\unkern \XeKo@halfhalf % AM OP
+ \or \unkern\unkern % AH OP
+ \or \unkern\unkern \XeKo@maybe@gobble % OP OP
+ \or \unkern\unkern \XeKo@halfhalf % CL OP
+ \or \unkern\unkern \XeKo@quarterquarter % MD OP
+ \or \unkern\unkern \XeKo@halfzero % FS OP
+ \or \unkern\unkern \XeKo@halfhalf % EX OP
+ \or \unkern\unkern \XeKo@halfhalf % LD OP
+ \or \unkern\unkern \XeKo@quarterquarter % VC OP
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@halfhalf
+ \fi\fi
+ \XeKo@fontOP\XeKo@startOP
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassCL{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG CL
+ \or \unkern\unkern % ID CL
+ \or \unkern\unkern % SY CL
+ \or \unkern\unkern % AA CL
+ \or \unkern\unkern % AO CL
+ \or \unkern\unkern % AC CL
+ \or \unkern\unkern % AP CL
+ \or \unkern\unkern % AM CL
+ \or \unkern\unkern % AH CL
+ \or \unkern\unkern % OP CL
+ \or \unkern\unkern \XeKo@maybe@gobble % CL CL
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD CL
+ \or \unkern\unkern % FS CL
+ \or \unkern\unkern % EX CL
+ \or \unkern\unkern % LD CL
+ \or \unkern\unkern % VC CL
+ \fi
+ \fi
+ \XeKo@fontCL\XeKo@startCL
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassMD{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % HG MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % ID MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % SY MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % AA MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % AO MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % AC MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % AP MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % AM MD
+ \or \unkern\unkern % AH MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % OP MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % CL MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfquarter \XeKo@maybe@gobble % MD MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@iiiquarterquarter % FS MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % EX MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % LD MD
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % VC MD
+ \fi
+ \else\ifnum\lastnodetype=10 % mathoff
+ \XeKo@nobreak\XeKo@quarterquarter
+ \fi\fi
+ \XeKo@fontMD\XeKo@startMD
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassFS{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG FS
+ \or \unkern\unkern % ID FS
+ \or \unkern\unkern % SY FS
+ \or \unkern\unkern % AA FS
+ \or \unkern\unkern % AO FS
+ \or \unkern\unkern % AC FS
+ \or \unkern\unkern % AP FS
+ \or \unkern\unkern % AM FS
+ \or \unkern\unkern % AH FS
+ \or \unkern\unkern % OP FS
+ \or \unkern\unkern % CL FS
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD FS
+ \or \unkern\unkern \XeKo@maybe@gobble % FS FS
+ \or \unkern\unkern % EX FS
+ \or \unkern\unkern % LD FS
+ \or \unkern\unkern % VC FS
+ \fi
+ \fi
+ \XeKo@fontFS\XeKo@startFS
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassEX{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG EX
+ \or \unkern\unkern % ID EX
+ \or \unkern\unkern % SY EX
+ \or \unkern\unkern % AA EX
+ \or \unkern\unkern % AO EX
+ \or \unkern\unkern % AC EX
+ \or \unkern\unkern % AP EX
+ \or \unkern\unkern % AM EX
+ \or \unkern\unkern % AH EX
+ \or \unkern\unkern % OP EX
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfhalf % CL EX
+ \or \unkern\unkern \XeKo@nobreak\XeKo@quarterquarter % MD EX
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfzero % FS EX
+ \or \unkern\unkern \XeKo@maybe@gobble % EX EX
+ \or \unkern\unkern % LD EX
+ \or \unkern\unkern % VC EX
+ \fi
+ \fi
+ \XeKo@fontEX\XeKo@startEX
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassLD{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG LD
+ \or \unkern\unkern % ID 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@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 \XeKo@maybe@gobble % LD LD
+ \or \unkern\unkern % VC LD
+ \fi
+ \fi
+ \XeKo@fontLD\XeKo@startLD
+ }
+\XeTeXinterchartoks\XeTeXcharclassBoundary\XeTeXcharclassVC{%
+ \ifnum\lastnodetype=12 %
+ \ifcase\lastkern
+ \or \unkern\unkern % HG VC
+ \or \unkern\unkern % ID VC
+ \or \unkern\unkern % SY VC
+ \or \unkern\unkern % AA VC
+ \or \unkern\unkern % AO VC
+ \or \unkern\unkern % AC VC
+ \or \unkern\unkern % AP VC
+ \or \unkern\unkern % AM VC
+ \or \unkern\unkern % AH VC
+ \or \unkern\unkern % OP VC
+ \or \unkern\unkern % CL VC
+ \or \unkern\unkern \XeKo@nobreak\XeKo@halfquarter % MD VC
+ \or \unkern\unkern % FS VC
+ \or \unkern\unkern % EX VC
+ \or \unkern\unkern % LD VC
+ \or \unkern\unkern \XeKo@maybe@gobble % VC VC
+ \fi
+ \fi
+ \XeKo@fontVC\XeKo@startVC
+ }
+
+%%% josa selection
+\begingroup
+\catcode`A=11\relax \global\let\XeKo@catcode@letter=A
+\catcode`0=12\relax \global\let\XeKo@catcode@other =0
+\endgroup
+\def\XeKo@striptw@words#1 #2 #3{#3}
+\def\XeKo@get@charslot{%
+ \if\noexpand\XeKo@let@token\relax
+ \chardef\XeKo@charslot="FFFF
+ \else
+ \expandafter\XeKo@get@charslot@
+ \fi
+ }
+\def\XeKo@get@charslot@{%
+ \ifnum 0\ifcat\XeKo@let@token\XeKo@catcode@letter 1\else
+ \ifcat\XeKo@let@token\XeKo@catcode@other 1\fi\fi >\z@
+ \edef\@tempa{\expandafter\XeKo@striptw@words\meaning\XeKo@let@token}%
+ \expandafter\chardef\expandafter\XeKo@charslot\expandafter`\@tempa\relax
+ \else
+ \chardef\XeKo@charslot="FFFF
+ \fi
+ }
+
+\def\XeKo@read@hanja@hangul@file#1{%
+ \begingroup
+ \@tempcnta=\z@
+ \openin1=#1\relax \XeKo@read@hanja@hangul@line \closein1
+ \endgroup
+ }
+\def\XeKo@read@hanja@hangul@line{%
+ \read1 to \@tempa
+ \ifnum\count@=\@tempcnta
+ \global\count@\@tempa
+ \else
+ \advance\@tempcnta\@ne \expandafter\XeKo@read@hanja@hangul@line
+ \fi
+ }
+
+\def\XeKo@num@josa{%
+ \ifnum\XeKo@count@<\z@ \XeKo@count@=-\XeKo@count@ \fi
+ \count@\XeKo@count@
+ \divide\count@ 10
+ \multiply\count@ 10
+ \advance\XeKo@count@-\count@
+ \XeKo@count@=\ifcase\XeKo@count@ \z@
+ \or \@ne
+ \or \tw@
+ \or \z@
+ \or \tw@
+ \or \tw@
+ \or \z@
+ \or \@ne
+ \or \@ne
+ \or \tw@
+ \fi
+ \XeKo@do@make@josa
+ }
+\def\XeKo@alph@josa{%
+ \XeKo@count@=\ifnum "4C=\XeKo@count@ \@ne % L
+ \else\ifnum "4D=\XeKo@count@ \z@ % M
+ \else\ifnum "4E=\XeKo@count@ \z@ % N
+ \else\ifnum "6C=\XeKo@count@ \@ne % l
+ \else\ifnum "6D=\XeKo@count@ \z@ % m
+ \else\ifnum "6E=\XeKo@count@ \z@ % n
+ \else \tw@
+ \fi\fi\fi\fi\fi \fi
+ \XeKo@do@make@josa
+ }
+
+\protected\def\jong {\global\let\XeKo@josatoken=0}\jong
+\protected\def\rieul{\global\let\XeKo@josatoken=1}
+\protected\def\jung {\global\let\XeKo@josatoken=2}
+\protected\def\가{\XeKo@make@josa 가이}
+\protected\def\이{\futurelet\XeKo@let@token\XeKo@make@josa@I}
+\protected\def\은{\XeKo@make@josa 는은} \let\는\은
+\protected\def\을{\XeKo@make@josa 를을} \let\를\을
+\protected\def\와{\XeKo@make@josa 와과} \let\과\와
+\protected\def\으{\XeKo@make@josa \empty 으}
+\protected\def\로{\으로}
+\protected\def\라{\XeKo@make@josa 라{이라}}
+\def\XeKo@make@josa@II{\XeKo@make@josa\relax 이}
+\def\XeKo@make@josa@I{%
+ \XeKo@get@charslot
+ \ifnum\XeKo@charslot="FFFF
+ \expandafter\가%
+ \else
+ \ifnum 0\ifnum\XeKo@charslot>"ABFF \ifnum\XeKo@charslot<"D7A4 1\fi\fi >\z@
+ \expandafter\expandafter\expandafter\XeKo@make@josa@II
+ \else
+ \expandafter\expandafter\expandafter\가%
+ \fi
+ \fi
+ }
+\def\XeKo@make@josa{%
+ \let\XeKo@let@token=\XeKo@josatoken
+ \XeKo@get@charslot
+ \XeKo@count@=\XeKo@charslot
+ \ifnum\XeKo@count@<"FF00
+ \else\ifnum\XeKo@count@<"FF5B
+ \advance\XeKo@count@-"FEE0
+ \fi\fi
+ \let\XeKo@next\XeKo@make@josa@
+ \ifnum\XeKo@count@<"30 % 0
+ \else\ifnum\XeKo@count@<"3A
+ \advance\XeKo@count@-"30 \let\XeKo@next\XeKo@num@josa
+ \else\ifnum\XeKo@count@<"41
+ \else\ifnum\XeKo@count@<"7B \let\XeKo@next\XeKo@alph@josa
+ \else\ifnum\XeKo@count@<"2160 % roman numneral I
+ \else\ifnum\XeKo@count@<"216C
+ \advance\XeKo@count@-"215F \let\XeKo@next\XeKo@num@josa
+ \else\ifnum\XeKo@count@<"2170 % roman numneral i
+ \else\ifnum\XeKo@count@<"217C
+ \advance\XeKo@count@-"216F \let\XeKo@next\XeKo@num@josa
+ \else\ifnum\XeKo@count@<"2460 % ①
+ \else\ifnum\XeKo@count@<"249C % ⒜
+ \advance\XeKo@count@-"245F \let\XeKo@next\XeKo@num@josa
+ \else\ifnum\XeKo@count@<"24B6 % Ⓐ
+ \advance\XeKo@count@-"245B \let\XeKo@next\XeKo@alph@josa
+ \else\ifnum\XeKo@count@<"24D0 % ⓐ
+ \advance\XeKo@count@-"2475 \let\XeKo@next\XeKo@alph@josa
+ \else\ifnum\XeKo@count@<"24EA
+ \advance\XeKo@count@-"248F \let\XeKo@next\XeKo@alph@josa
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi\fi
+ \XeKo@next
+ }
+\def\XeKo@make@josa@{%
+ \ifnum\XeKo@count@<"3260 % ㉠
+ \else\ifnum\XeKo@count@<"3280
+ \advance\XeKo@count@-"60
+ \fi\fi
+ \let\XeKo@next\XeKo@make@josa@@
+ \ifnum\XeKo@count@<"3131 % ㄱ
+ \else\ifnum\XeKo@count@<"318F
+ \ifnum \XeKo@count@="3139 \XeKo@count@\@ne
+ \else\ifnum\XeKo@count@<"314F \XeKo@count@\z@
+ \else\ifnum\XeKo@count@>"3164
+ \ifnum\XeKo@count@<"3187 \XeKo@count@\z@ \fi
+ \fi\fi\fi
+ \let\XeKo@next\XeKo@do@make@josa
+ \else\ifnum\XeKo@count@<"3200 % ㈀
+ \else\ifnum\XeKo@count@<"321F
+ \ifnum \XeKo@count@="3203 \XeKo@count@\@ne
+ \else\ifnum\XeKo@count@<"320E \XeKo@count@\z@
+ \fi\fi
+ \let\XeKo@next\XeKo@do@make@josa
+ \fi\fi\fi\fi
+ \XeKo@next
+ }
+\def\XeKo@make@josa@@{%
+ \ifnum\XeKo@count@<"3400 \else\ifnum\XeKo@count@<"4DB6
+ \advance\XeKo@count@-"3400 \XeKo@read@hanja@hangul@file{hanjaexa_hangul.tab}%
+ \else\ifnum\XeKo@count@<"4E00 \else\ifnum\XeKo@count@<"9FA6
+ \advance\XeKo@count@-"4E00 \XeKo@read@hanja@hangul@file{hanja_hangul.tab}%
+ \else\ifnum\XeKo@count@<"F900 \else\ifnum\XeKo@count@<"FA2E
+ \advance\XeKo@count@-"F900 \XeKo@read@hanja@hangul@file{hanjacom_hangul.tab}%
+ \fi\fi\fi\fi\fi \fi
+ \ifnum\XeKo@count@<"AC00 \else\ifnum\XeKo@count@<"D7A4 % Hangul syllables
+ \advance\XeKo@count@-"AC00
+ \@tempcnta\XeKo@count@ \divide\@tempcnta28 \multiply\@tempcnta28
+ \advance\XeKo@count@-\@tempcnta \advance\XeKo@count@"11A7
+ \fi\fi
+ \ifnum\XeKo@count@<"11A8
+ \else\ifnum\XeKo@count@<"1200
+ \ifnum\XeKo@count@="11AF \XeKo@count@\@ne \else \XeKo@count@\z@ \fi
+ \else\ifnum\XeKo@count@<"D7CB
+ \else\ifnum\XeKo@count@<"D7FC
+ \XeKo@count@\z@
+ \fi\fi\fi\fi
+ \XeKo@do@make@josa
+ }
+\def\XeKo@do@make@josa#1#2{%
+ \ifcase\XeKo@count@ #2% jong
+ \or \ifx#1\empty\else#2\fi % rieul
+ \else #1% jung
+ \fi
+ }
+
+% dotemph
+\def\dotemphraise{0.4em }
+\ifcsname bfseries\endcsname
+ \def\dotemphchar{\bfseries ^^^^02d9}
+\else
+ \def\dotemphchar{\bf \char95 }
\fi
+\newbox\XeKo@dotemph@box
+\protected\def\dotemph#1{%
+ \leavevmode
+ \begingroup
+ \setbox\XeKo@dotemph@box\hbox{\dotemphchar}%
+ \edef\XeKo@flush@char@orphan{%
+ \unexpanded{%
+ \edef\XeKo@tempa{%
+ \XeKo@toks@{%
+ \setbox\z@\hbox{\the\XeKo@toks@}%
+ \setbox\tw@\hbox to\wd\z@{\hss\unhcopy\XeKo@dotemph@box\hss}\ht\tw@\z@\dp\tw@\z@
+ \rlap{\raise\dotemphraise\box\tw@}\the\XeKo@toks@ }%
+ }\XeKo@tempa }%
+ \unexpanded\expandafter{\XeKo@flush@char@orphan}}%
+ #1\relax
+ \endgroup
+ }
+
+%
+\let\enablecjksymbolspacing\compresspunctuations
+\let\disablecjksymbolspacing\nocompresspunctuations
+\protected\def\disablekoreanfonts{%
+ \let\XeKo@fontHG\relax
+ \let\XeKo@fontID\relax
+ \let\XeKo@fontCJ\relax
+ \let\XeKo@fontSY\relax
+ \let\XeKo@fontAA\relax
+ \let\XeKo@fontAO\relax
+ \let\XeKo@fontAC\relax
+ \let\XeKo@fontAP\relax
+ \let\XeKo@fontAM\relax
+ \let\XeKo@fontAH\relax
+ \let\XeKo@fontOP\relax
+ \let\XeKo@fontCL\relax
+ \let\XeKo@fontMD\relax
+ \let\XeKo@fontFS\relax
+ \let\XeKo@fontEX\relax
+ \let\XeKo@fontLD\relax
+ \let\XeKo@fontVC\relax
+ }
+\protected\def\disablehangulspacing{%
+ \let\XeKo@halfzero \inhibitglue
+ \let\XeKo@halfhalf \inhibitglue
+ \let\XeKo@halfquarter \inhibitglue
+ \let\XeKo@quarterquarter \inhibitglue
+ \let\XeKo@iiiquarterquarter \inhibitglue
+ \let\XeKo@latincjk \inhibitglue
+ \let\XeKo@postmath \inhibitglue
+ \let\XKinterhangulbreak \XKinterhanjabreak
+ \let\XeKo@latincjk@classic \inhibitglue
+ \let\XeKo@latincjk@modern \inhibitglue
+ \let\XeKo@postmath@modern \inhibitglue
+ \let\XeKo@suppress@char@orphan \relax
+ \chardef\XeKo@hangingpuncts \z@
+ \chardef\XeKo@cjk@ignorespaces \z@
+ }
+\protected\def\disablehangulspacingandlinebreak{%
+ \let\XeKo@halfzero \relax
+ \let\XeKo@halfhalf \relax
+ \let\XeKo@halfquarter \relax
+ \let\XeKo@quarterquarter \relax
+ \let\XeKo@iiiquarterquarter \relax
+ \let\XeKo@latincjk \relax
+ \let\XeKo@postmath \relax
+ \let\XKinterhangulbreak \relax
+ \let\XKinterhanjabreak \relax
+ \let\XeKo@latincjk@classic \relax
+ \let\XeKo@latincjk@modern \relax
+ \let\XeKo@postmath@modern \relax
+ \let\XeKo@suppress@char@orphan \relax
+ \chardef\XeKo@hangingpuncts \z@
+ \chardef\XeKo@cjk@ignorespaces \z@
+ \XeTeXlinebreaklocale""
+ }
+\protected\def\enablehangulspacingandlinebreak{%
+ \XeTeXinterchartokenstate\@ne
+ \XeTeXlinebreaklocale"ko"
+ }
+\enablehangulspacingandlinebreak
+% no longer support these two \disable...
+\let\disableautojosa\relax
+\let\disablejamoautojosa\relax
+% no need xetexkoulemsupport any more
+\let\xetexkoulemsupport\relax
+
+% math hangul
+\def\setmathhangulblock#1#2{%
+ \count@="#1
+ \loop
+ \Umathcode\count@ = 7 \symmathhangul\count@
+ \ifnum\count@<"#2 \advance\count@\@ne
+ \repeat
+ }
+
+%%% plain
+\ifcsname ver@xetexko.sty\endcsname \else
+ \protected\def\hangulfont{\afterassignment\XeKo@hangul@font@setup\font\XeKo@hangul@font}
+ \def\XeKo@hangul@font@setup{%
+ \begingroup
+ \XeKo@hangul@font
+ \xdef\xetexkohanguloption{%
+ \ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
+ \ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
+ \ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
+ }
+ \edef\x{%
+ \endgroup
+ \def\noexpand\XeKo@hangul@font{\the\font
+ \unexpanded\expandafter{\xetexkohanguloption}}}\x
+ }
+ \protected\def\hanjafont{\afterassignment\XeKo@hanja@font@setup\font\XeKo@hanja@font}
+ \def\XeKo@hanja@font@setup{%
+ \begingroup
+ \XeKo@hanja@font
+ \xdef\xetexkohanjaoption{%
+ \ifdefined\xetexkohu \def\noexpand\xetexkohu{\xetexkohu}\fi
+ \ifdefined\xetexkointerhchar \def\noexpand\xetexkointerhchar{\xetexkointerhchar}\fi
+ \ifdefined\xetexkocharraise \def\noexpand\xetexkocharraise{\xetexkocharraise}\fi
+ }
+ \edef\x{\endgroup
+ \def\noexpand\XeKo@hanja@font{\the\font
+ \unexpanded\expandafter{\xetexkohanjaoption}}}\x
+ }
+ \protected\def\hanjabyhangulfont{%
+ \let\XeKo@hanja@font\XeKo@hangul@font
+ \let\xetexkohanjaoption\xetexkohanguloption
+ }
+ % math hangul
+ \newfam\symmathhangul
+ \protected\def\setmathhangulfonts#1#2#3{% font identifiers
+ \ifnum\Umathcodenum"AC00="AC00\relax
+ \setmathhangulblock{AC00}{D7A3}%
+ \fi
+ \textfont\symmathhangul=#1\relax
+ \scriptfont\symmathhangul=#2\relax
+ \scriptscriptfont\symmathhangul=#3\relax
+ }
+ \protected\def\mathhangulfont{%
+ \afterassignment\xetexkosetmathhangulfonts\font\textmathhangul
+ }
+ \def\xetexkosetmathhangulfonts{%
+ \edef\@tempa{%
+ \expandafter\expandafter\expandafter\XeKo@strip@at@size@from@font
+ \expandafter\fontname\expandafter\textmathhangul\detokenize{ at }\relax
+ }%
+ \dimen@\fontdimen 6 \textmathhangul
+ \font\scriptmathhangul= \@tempa\space at .7\dimen@
+ \font\scriptscriptmathhangul = \@tempa\space at .5\dimen@
+ \setmathhangulfonts\textmathhangul\scriptmathhangul\scriptscriptmathhangul
+ }
+ \expandafter\def\expandafter\XeKo@strip@at@size@from@font
+ \expandafter#\expandafter1\detokenize{ at }#2\relax{#1}
+ % default unbatang
+ \hangulfont="[UnBatang.ttf]:mapping=tex-text;script=hang" at 10pt
+ \hanjabyhangulfont
+ \XeKocatcodeofATchar
+\endinput\fi
+
+%%% latex
+\RequirePackage{fontspec}[2020/02/03]
+\AddToHook{rmfamily}{%
+ \let \xetexkohangulfont \xetexkomainhangulfont
+ \let \xetexkohanguloption \xetexkomainhanguloption
+ \let \xetexkohanjafont \xetexkomainhanjafont
+ \let \xetexkohanjaoption \xetexkomainhanjaoption
+ }
+\AddToHook{sffamily}{%
+ \let \xetexkohangulfont \xetexkosanshangulfont
+ \let \xetexkohanguloption \xetexkosanshanguloption
+ \let \xetexkohanjafont \xetexkosanshanjafont
+ \let \xetexkohanjaoption \xetexkosanshanjaoption
+ }
+\AddToHook{ttfamily}{%
+ \let \xetexkohangulfont \xetexkomonohangulfont
+ \let \xetexkohanguloption \xetexkomonohanguloption
+ \let \xetexkohanjafont \xetexkomonohanjafont
+ \let \xetexkohanjaoption \xetexkomonohanjaoption
+ \latinalphs\latinparens\latinpuncts\latincolons\latinhyphens
+ \disablehangulspacing
+ }
+\edef\verbatim@font{%
+ \unexpanded\expandafter{%
+ \verbatim@font
+ \disablehangulspacingandlinebreak
+ \aftergroup\enablehangulspacingandlinebreak
+ }}
+\AddToHook{normalfont}{%
+ \let \xetexkohangulfont \xetexkodefaulthangulfont
+ \let \xetexkohanguloption \xetexkodefaulthanguloption
+ \let \xetexkohanjafont \xetexkodefaulthanjafont
+ \let \xetexkohanjaoption \xetexkodefaulthanjaoption
+ }
+\IfHookExistsTF{selectfont}{
+ \AddToHook{selectfont}{%
+ \XeKo@hanja@selectfont
+ \XeKo@hangul@selectfont
+ }
+}{
+ \RequirePackage{everysel}
+ \EverySelectfont{%
+ \XeKo@hanja@selectfont
+ \XeKo@hangul@selectfont
+ }
+}
+
+\def\XeKo@hangul@selectfont{%
+ \ifdefined\XeKo@in@selectfont\else
+ \ifdefined\xetexkohangulfont
+ \begingroup
+ \let\XeKo@in@selectfont\empty
+ \xetexkohangulfont
+ \edef\x{\endgroup
+ \def\noexpand\XeKo@hangul@font{\the\font
+ \unexpanded\expandafter{\xetexkohanguloption}}%
+ \noexpand\xetexkohanguloption % for 영문자-한글 interlatincjk
+ }\x
+ \else
+ \let\XeKo@hangul@font\XeKo@undefined
+ \fi
+ \fi
+ }
+\def\XeKo@hanja@selectfont{%
+ \ifdefined\XeKo@in@selectfont\else
+ \ifdefined\xetexkohanjafont
+ \begingroup
+ \let\XeKo@in@selectfont\empty
+ \xetexkohanjafont
+ \edef\x{\endgroup
+ \def\noexpand\XeKo@hanja@font{\the\font
+ \unexpanded\expandafter{\xetexkohanjaoption}}%
+ \noexpand\xetexkohanjaoption
+ }\x
+ \else
+ \let\XeKo@hanja@font\XeKo@undefined
+ \fi
+ \fi }
+
+\ExplSyntaxOn
+\tl_new:N \l_xtxko_font_opts_tl
+\tl_new:N \l_xtxko_rest_opts_tl
+\keys_define:nn { xtxko-font }
+{
+ hu .code:n = { \__xtxko_add_font_opt:Nn \xetexkohu {#1} } ,
+ interhchar .code:n = { \__xtxko_add_font_opt:Nn \xetexkointerhchar {#1} } ,
+ charraise .code:n = { \__xtxko_add_font_opt:Nn \xetexkocharraise {#1} } ,
+ InterLatinCJK .meta:n = { hu = {#1} } ,
+ InterHangul .meta:n = { interhchar = {#1} } ,
+ CharRaise .meta:n = { charraise = {#1} } ,
+ lowerexclamation .code:n = { },
+ lowerperiod .code:n = { },
+ lowercomma .code:n = { },
+ lowerquestion .code:n = { },
+ postexclamationkern .code:n = { },
+ postmathskip .code:n = { },
+ postperiodkern .code:n = { },
+ postcommakern .code:n = { },
+ postquestionkern .code:n = { },
+ preexclamationkern .code:n = { },
+ preperiodkern .code:n = { },
+ precommakern .code:n = { },
+ prequestionkern .code:n = { },
+ quoteraise .code:n = { },
+ quotewidth .code:n = { },
+ PunctRaise .code:n = { },
+}
+\cs_new:Nn \__xtxko_add_font_opt:Nn
+{
+ \tl_put_right:Nn \l_xtxko_font_opts_tl { \cs_set_nopar:Npn #1 {#2} }
+}
+\cs_new:Nn \__xtxko_assign_font_opts:n
+{
+ \tl_clear:N \l_xtxko_font_opts_tl
+ \keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rest_opts_tl
+}
+% suppress upshape font warnings
+\cs_new_nopar:Npn \l_xetexko_pacify_upshape {
+ \tl_map_inline:nn { \mddefault \bfdefault }
+ {
+ \cs_if_exist:cF { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
+ {
+ \cs_if_exist:cT { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\shapedefault }
+ {
+ \cs_set_eq:cc
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\shapedefault }
+ }
+ }
+ }
+}
+\DeclareDocumentCommand \setmainhangulfont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@mainhangulfamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkomainhangulfont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@mainhangulfamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkomainhanguloption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \rmdefault
+ {
+ \cs_set_eq:NN \xetexkohangulfont \xetexkomainhangulfont
+ \cs_set_eq:NN \xetexkohanguloption \xetexkomainhanguloption
+ \cs_set_eq:NN \xetexkodefaulthangulfont \xetexkomainhangulfont
+ \cs_set_eq:NN \xetexkodefaulthanguloption \xetexkomainhanguloption
+ \XeKo@hangul@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \setsanshangulfont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@sanshangulfamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkosanshangulfont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@sanshangulfamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkosanshanguloption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \sfdefault
+ {
+ \cs_set_eq:NN \xetexkohangulfont \xetexkosanshangulfont
+ \cs_set_eq:NN \xetexkohanguloption \xetexkosanshanguloption
+ \cs_set_eq:NN \xetexkodefaulthangulfont \xetexkosanshangulfont
+ \cs_set_eq:NN \xetexkodefaulthanguloption \xetexkosanshanguloption
+ \XeKo@hangul@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \setmonohangulfont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@monohangulfamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkomonohangulfont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@monohangulfamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkomonohanguloption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \ttdefault
+ {
+ \cs_set_eq:NN \xetexkohangulfont \xetexkomonohangulfont
+ \cs_set_eq:NN \xetexkohanguloption \xetexkomonohanguloption
+ \cs_set_eq:NN \xetexkodefaulthangulfont \xetexkomonohangulfont
+ \cs_set_eq:NN \xetexkodefaulthanguloption \xetexkomonohanguloption
+ \XeKo@hangul@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \newhangulfontfamily { m O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #2, #4 }
+ \fontspec_set_family:cnn { xetexko_user_family_ \cs_to_str:N #1 } { \l_xtxko_rest_opts_tl } { #3 }
+ \cs_set_nopar:cpn { xetexko_user_font_ \cs_to_str:N #1 }
+ {
+ \fontencoding \g_fontspec_encoding_tl
+ \exp_args:Nc \fontfamily { xetexko_user_family_ \cs_to_str:N #1 } \selectfont
+ }
+ \cs_set_nopar:cpx { xetexko_user_option_ \cs_to_str:N #1 }
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ \cs_set_protected_nopar:Npn #1
+ {
+ \cs_set_eq:Nc \xetexkohangulfont { xetexko_user_font_ \cs_to_str:N #1 }
+ \cs_set_eq:Nc \xetexkohanguloption { xetexko_user_option_ \cs_to_str:N #1 }
+ \XeKo@hangul@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \newhangulfontface { m O{} m O{} }
+{
+ \newhangulfontfamily #1 { #3 } [ BoldFont={}, ItalicFont={}, SmallCapsFont={}, #2, #4 ]
+}
+\DeclareDocumentCommand \hangulfontspec { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \xetexkohangulfontfamily { \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_nopar:Npn \xetexkohangulfont
+ {
+ \fontencoding \g_fontspec_encoding_tl
+ \fontfamily \xetexkohangulfontfamily \selectfont
+ }
+ \cs_set_nopar:Npx \xetexkohanguloption
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ \XeKo@hangul@selectfont
+ \ignorespaces
+}
+\cs_set_eq:NN \adhochangulfont \hangulfontspec
+\DeclareDocumentCommand \addhangulfontfeature { m }
+{
+ \group_begin:
+ \fontseries\mddefault\fontshape\shapedefault \xetexkohangulfont
+ \cs_set_eq:NN \l_xtxko_font_opts_tl \xetexkohanguloption
+ \keys_set_known:nxN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
+ \addfontfeature { \l_xtxko_rest_opts_tl }
+ \use:x
+ {
+ \group_end:
+ \exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohangulfont
+ {
+ \exp_not:N \fontencoding { \f@encoding }
+ \exp_not:N \fontfamily { \f@family }
+ \exp_not:N \selectfont
+ }
+ \exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohanguloption
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ }
+ \XeKo@hangul@selectfont
+ \ignorespaces
+}
+\cs_set_eq:NN \addhangulfontfeatures \addhangulfontfeature
+\DeclareDocumentCommand \setmainhanjafont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@mainhanjafamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkomainhanjafont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@mainhanjafamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkomainhanjaoption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \rmdefault
+ {
+ \cs_set_eq:NN \xetexkohanjafont \xetexkomainhanjafont
+ \cs_set_eq:NN \xetexkohanjaoption \xetexkomainhanjaoption
+ \cs_set_eq:NN \xetexkodefaulthanjafont \xetexkomainhanjafont
+ \cs_set_eq:NN \xetexkodefaulthanjaoption \xetexkomainhanjaoption
+ \XeKo@hanja@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \setsanshanjafont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@sanshanjafamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkosanshanjafont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@sanshanjafamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkosanshanjaoption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \sfdefault
+ {
+ \cs_set_eq:NN \xetexkohanjafont \xetexkosanshanjafont
+ \cs_set_eq:NN \xetexkohanjaoption \xetexkosanshanjaoption
+ \cs_set_eq:NN \xetexkodefaulthanjafont \xetexkosanshanjafont
+ \cs_set_eq:NN \xetexkodefaulthanjaoption \xetexkosanshanjaoption
+ \XeKo@hanja@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \setmonohanjafont { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \XeKo@monohanjafamily { Ligatures=TeX, \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_protected_nopar:Npn \xetexkomonohanjafont
+ {
+ \fontencoding \g_fontspec_encoding_tl \fontfamily \XeKo@monohanjafamily \selectfont
+ }
+ \cs_set_eq:NN \xetexkomonohanjaoption \l_xtxko_font_opts_tl
+ \str_if_eq:eeT \familydefault \ttdefault
+ {
+ \cs_set_eq:NN \xetexkohanjafont \xetexkomonohanjafont
+ \cs_set_eq:NN \xetexkohanjaoption \xetexkomonohanjaoption
+ \cs_set_eq:NN \xetexkodefaulthanjafont \xetexkomonohanjafont
+ \cs_set_eq:NN \xetexkodefaulthanjaoption \xetexkomonohanjaoption
+ \XeKo@hanja@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \newhanjafontfamily { m O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #2, #4 }
+ \fontspec_set_family:cnn { xetexko_user_family_ \cs_to_str:N #1 } { \l_xtxko_rest_opts_tl } { #3 }
+ \cs_set_nopar:cpn { xetexko_user_font_ \cs_to_str:N #1 }
+ {
+ \fontencoding \g_fontspec_encoding_tl
+ \exp_args:Nc \fontfamily { xetexko_user_family_ \cs_to_str:N #1 } \selectfont
+ }
+ \cs_set_nopar:cpx { xetexko_user_option_ \cs_to_str:N #1 }
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ \cs_set_protected_nopar:Npn #1
+ {
+ \cs_set_eq:Nc \xetexkohanjafont { xetexko_user_font_ \cs_to_str:N #1 }
+ \cs_set_eq:Nc \xetexkohanjaoption { xetexko_user_option_ \cs_to_str:N #1 }
+ \XeKo@hanja@selectfont
+ }
+ \ignorespaces
+}
+\DeclareDocumentCommand \newhanjafontface { m O{} m O{} }
+{
+ \newhanjafontfamily #1 { #3 } [ BoldFont={}, ItalicFont={}, SmallCapsFont={}, #2, #4 ]
+}
+\DeclareDocumentCommand \hanjafontspec { O{} m O{} }
+{
+ \__xtxko_assign_font_opts:n { #1, #3 }
+ \fontspec_set_family:Nnn \xetexkohanjafontfamily { \l_xtxko_rest_opts_tl } { #2 }
+ \cs_set_nopar:Npn \xetexkohanjafont
+ {
+ \fontencoding \g_fontspec_encoding_tl
+ \fontfamily \xetexkohanjafontfamily \selectfont
+ }
+ \cs_set_nopar:Npx \xetexkohanjaoption
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ \XeKo@hanja@selectfont
+ \ignorespaces
+}
+\cs_set_eq:NN \adhochanjafont \hanjafontspec
+\DeclareDocumentCommand \addhanjafontfeature { m }
+{
+ \group_begin:
+ \fontseries\mddefault\fontshape\shapedefault \xetexkohanjafont
+ \cs_set_eq:NN \l_xtxko_font_opts_tl \xetexkohanjaoption
+ \keys_set_known:nxN { xtxko-font } { #1 } \l_xtxko_rest_opts_tl
+ \addfontfeature { \l_xtxko_rest_opts_tl }
+ \use:x
+ {
+ \group_end:
+ \exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohanjafont
+ {
+ \exp_not:N \fontencoding { \f@encoding }
+ \exp_not:N \fontfamily { \f@family }
+ \exp_not:N \selectfont
+ }
+ \exp_not:N \cs_set_nopar:Npn \exp_not:N \xetexkohanjaoption
+ {
+ \exp_not:o { \l_xtxko_font_opts_tl }
+ }
+ }
+ \XeKo@hanja@selectfont
+ \ignorespaces
+}
+\cs_set_eq:NN \addhanjafontfeatures \addhanjafontfeature
+% math hangul
+\DeclareDocumentCommand \setmathhangulfont { O{} m O{} }
+{
+ \fontspec_set_family:Nnn \xetexkomathhangulfamily { #1, #3 } { #2 }
+ \l_xetexko_pacify_upshape
+ \DeclareSymbolFont { mathhangul }
+ \g_fontspec_encoding_tl \xetexkomathhangulfamily \mddefault \updefault
+ \int_compare:nNnT { \Umathcodenum"AC00 } = { "AC00 }
+ {
+ \setmathhangulblock{AC00}{D7A3}
+ }
+ \ignorespaces
+}
+% xetexkofontregime
+\keys_define:nn { xtxko-char }
+{
+ alphs .code:n = \use:c { #1alphs } ,
+ parens .code:n = \use:c { #1parens } ,
+ puncts .code:n = \use:c { #1puncts } ,
+ colons .code:n = \use:c { #1colons } ,
+ hyphens .code:n = \use:c { #1hyphens } ,
+ cjksymbols .code:n = \use:c { #1cjksymbols } ,
+ nums .meta:n = { alphs = {#1} },
+ quotes .meta:n = { parens = {#1} },
+}
+\DeclareDocumentCommand \xetexkofontregime { O{} m O{} }
+{
+ \use:c { #2marks }
+ \keys_set:nn { xtxko-char } { #1, #3 }
+}
+% no longer support default hangul/hanja fontfeatures
+\DeclareDocumentCommand \defaulthangulfontfeatures { t+ o m } { }
+\cs_set_eq:NN \defaulthanjafontfeatures \defaulthangulfontfeatures
+\ExplSyntaxOff
+
+\protected\def\hanjabyhangulfont{%
+ \let\xetexkomainhanjafont \xetexkomainhangulfont
+ \let\xetexkomainhanjaoption \xetexkomainhanguloption
+ \let\xetexkosanshanjafont \xetexkosanshangulfont
+ \let\xetexkosanshanjaoption \xetexkosanshanguloption
+ \let\xetexkomonohanjafont \xetexkomonohangulfont
+ \let\xetexkomonohanjaoption \xetexkomonohanguloption
+ \let\xetexkodefaulthanjafont \xetexkodefaulthangulfont
+ \let\xetexkodefaulthanjaoption \xetexkodefaulthanguloption
+ \let\xetexkohanjafont \xetexkohangulfont
+ \let\xetexkohanjaoption \xetexkohanguloption
+ \let\XeKo@hanja@font \XeKo@hangul@font
+ }
+
+\AtBeginDocument{%
+ \ifdefined\xetexkomainhangulfont\else
+ \begingroup\rmfamily \expandafter\endgroup
+ \iffontchar\font"AC00 \else
+ \IfFontExistsTF{UnBatang.ttf}
+ {\setmainhangulfont{UnBatang.ttf}[BoldFont=UnBatangBold.ttf,Script=Hangul,Language=Korean]}{}
+ \fi
+ \fi
+ \ifdefined\xetexkosanshangulfont\else
+ \begingroup\sffamily \expandafter\endgroup
+ \iffontchar\font"AC00 \else
+ \IfFontExistsTF{UnDotum.ttf}
+ {\setsanshangulfont{UnDotum.ttf}[BoldFont=UnDotumBold.ttf]}{}
+ \fi
+ \fi
+ \ifdefined\xetexkomonohangulfont\else
+ \begingroup\ttfamily \expandafter\endgroup
+ \iffontchar\font"AC00 \else
+ \IfFontExistsTF{UnDotum.ttf}{%
+ \ifnum 0\ifnum\strcmp{\ttdefault}{lmtt}=\z@ 1\fi
+ \ifnum\strcmp{\ttdefault}{LatinModernMono(0)}=\z@ 1\fi >\z@
+ \setmonohangulfont{UnDotum.ttf}[
+ BoldFont=UnDotumBold.ttf,
+ UprightFeatures={SizeFeatures={{Size={-8.5}, FakeStretch=1.062},
+ {Size={8.5-11}, FakeStretch=1.05 },
+ {Size={11-}, FakeStretch=1.03 }}},
+ BoldFeatures={SizeFeatures={{Size={-}, FakeStretch=1.05 }}},
+ WordSpace={1.66667,0,0} ]
+ \else
+ \setmonohangulfont{UnDotum.ttf}[BoldFont=UnDotumBold.ttf]
+ \fi
+ }{}
+ \fi
+ \fi
+ \ifdefined\xetexkomainhanjafont\else
+ \let\xetexkomainhanjafont \xetexkomainhangulfont
+ \let\xetexkomainhanjaoption \xetexkomainhanguloption
+ \fi
+ \ifdefined\xetexkosanshanjafont\else
+ \let\xetexkosanshanjafont \xetexkosanshangulfont
+ \let\xetexkosanshanjaoption \xetexkosanshanguloption
+ \fi
+ \ifdefined\xetexkomonohanjafont\else
+ \let\xetexkomonohanjafont \xetexkomonohangulfont
+ \let\xetexkomonohanjaoption \xetexkomonohanguloption
+ \fi
+ \ifdefined\xetexkodefaulthanjafont\else
+ \let\xetexkodefaulthanjafont \xetexkodefaulthangulfont
+ \let\xetexkodefaulthanjaoption \xetexkodefaulthanguloption
+ \fi
+ \ifdefined\xetexkohanjafont\else
+ \let\xetexkohanjafont \xetexkohangulfont
+ \let\xetexkohanjaoption \xetexkohanguloption
+ \fi
+ \ifdefined\XeKo@hanja@font\else
+ \let\XeKo@hanja@font \XeKo@hangul@font
+ \fi
+ \@ifpackageloaded{hyperref}{\pdfstringdefDisableCommands{%
+ \let\hangulalphs\relax
+ \let\hangulnums\relax
+ \let\hangulparens\relax
+ \let\hangulquotes\relax
+ \let\hangulpuncts\relax
+ \let\hangulmarks\relax
+ \let\hangulcolons\relax
+ \let\hangulhyphens\relax
+ \let\hangulcjksymbols\relax
+ \let\hanjaalphs\relax
+ \let\hanjanums\relax
+ \let\hanjaparens\relax
+ \let\hanjaquotes\relax
+ \let\hanjapuncts\relax
+ \let\hanjamarks\relax
+ \let\hanjacolons\relax
+ \let\hanjahyphens\relax
+ \let\hanjacjksymbols\relax
+ \let\latinalphs\relax
+ \let\latinnums\relax
+ \let\latinparens\relax
+ \let\latinquotes\relax
+ \let\latinpuncts\relax
+ \let\latinmarks\relax
+ \let\latincolons\relax
+ \let\latinhyphens\relax
+ \let\latincjksymbols\relax
+ \let\prevfontalphs\relax
+ \let\prevfontnums\relax
+ \let\prevfontparens\relax
+ \let\prevfontquotes\relax
+ \let\prevfontpuncts\relax
+ \let\prevfontmarks\relax
+ \let\prevfontcolons\relax
+ \let\prevfonthyphens\relax
+ \let\prevfontcjksymbols\relax
+ \let\hanjabyhangulfont\relax
+ \let\inhibitglue\relax
+ \let\typesetclassic\relax
+ \let\typesetmodern\relax
+ \let\hangingpunctuation\relax
+ \let\hangingpunctuations\relax
+ \let\removeclassicspaces\relax
+ \let\nocompresspunctuations\relax
+ \let\compresspunctuations\relax
+ \let\disablekoreanfonts\relax
+ \let\disablehangulspacing\relax
+ \let\disablehangulspacingandlinebreak\relax
+ \let\enablehangulspacingandlinebreak\relax
+ \let\jong\relax
+ \let\jung\relax
+ \let\rieul\relax
+ \let\dotemph\@firstofone
+ \let\addhangulfontfeature\@gobble
+ \let\addhangulfontfeatures\@gobble
+ \let\addhanjafontfeature\@gobble
+ \let\addhanjafontfeatures\@gobble
+ \def\는{는}%
+ \def\은{은}%
+ \def\을{을}%
+ \def\를{를}%
+ \def\와{와}%
+ \def\과{과}%
+ \def\가{가}%
+ \def\이{이}%
+ \def\라{라}%
+ \def\으{으}%
+ \def\로{로}%
+ \def\hellipsis{...}}}{}
+ \if@hangul
+ \RequirePackage{konames-utf}
+ \fi
+ }
+
\newif\if@hangul
\newif\if@hanja
\DeclareOption{hangul}{\@hangultrue}
@@ -53,70 +2276,16 @@
\DeclareOption{unfonts}{}
\ProcessOptions\relax
-\RequirePackage{xetexko-space}
-\RequirePackage{xetexko-josa}
-\RequirePackage{xetexko-font}
-\RequirePackage{xetexko-vertical}
-
\RequirePackage{kolabels-utf}
-\if@hangul\AtBeginDocument{\RequirePackage{konames-utf}}\fi
-\AtBeginDocument{
- % for ulem package
- \ifcsname UL@hook\endcsname \xetexkoulemsupport \fi
- % for hyperref package
- \@ifpackageloaded{hyperref}{\pdfstringdefDisableCommands{%
- \let\dotemph\@firstofone
- \let\makejosa\@secondoftwo
- \let\jong\relax
- \let\jung\relax
- \let\rieul\relax
- \let\latinalphs\relax
- \let\hangulalphs\relax
- \let\hanjaalphs\relax
- \let\prevfontalphs\relax
- \let\latinnums\relax
- \let\hangulnums\relax
- \let\hanjanums\relax
- \let\prevfontnums\relax
- \let\latinparens\relax
- \let\hangulparens\relax
- \let\hanjaparens\relax
- \let\prevfontparens\relax
- \let\latinquotes\relax
- \let\hangulquotes\relax
- \let\hanjaquotes\relax
- \let\prevfontquotes\relax
- \let\latinpuncts\relax
- \let\hangulpuncts\relax
- \let\hanjapuncts\relax
- \let\prevfontpuncts\relax
- \let\latinmarks\relax
- \let\hangulmarks\relax
- \let\hanjamarks\relax
- \let\prevfontmarks\relax
- \let\latincolons\relax
- \let\hangulcolons\relax
- \let\hanjacolons\relax
- \let\prevfontcolons\relax
- \let\latinhyphens\relax
- \let\hangulhyphens\relax
- \let\hanjahyphens\relax
- \let\prevfonthyphens\relax
- \let\latincjksymbols\relax
- \let\hangulcjksymbols\relax
- \let\hanjacjksymbols\relax
- \let\prevfontcjksymbols\relax
- \let\disablekoreanfonts\relax
- \let\disablehangulspacing\relax
- \let\disablehangulspacingandlinebreak\relax
- \let\disableautojosa\relax
- \let\disablecjksymbolspacing\relax
- \let\japanese\relax
- \let\chinese\relax
- \let\Tchinese\relax
- \let\Schinese\relax
- }}{}
-}
+\protected\def\hellipsis{\char"2026\char"2026 }
+
+\if@hangul
+ \linespread{1.3888}
+ \footnotesep=1.3888\footnotesep
+ \skip\footins=\glueexpr\skip\footins/72*100\relax
+ \frenchspacing
+\fi
+\XeKocatcodeofATchar
\endinput