diff options
author | Karl Berry <karl@freefriends.org> | 2021-04-20 20:14:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-04-20 20:14:14 +0000 |
commit | a8843140be2271f9a60d303cce5a6ce19d9845e3 (patch) | |
tree | d2947e0e33e2a25bef6edf3aaf4ff2ba57c02c15 /Master/texmf-dist/tex/xetex | |
parent | e3046418e7cf8000138d9871e0387a15a3efd6bd (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.sty | 427 |
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 |