summaryrefslogtreecommitdiff
path: root/macros/xetex/generic/xetexko/xetexko-font.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/xetex/generic/xetexko/xetexko-font.sty')
-rw-r--r--macros/xetex/generic/xetexko/xetexko-font.sty261
1 files changed, 125 insertions, 136 deletions
diff --git a/macros/xetex/generic/xetexko/xetexko-font.sty b/macros/xetex/generic/xetexko/xetexko-font.sty
index d03ae1a18b..42c0913587 100644
--- a/macros/xetex/generic/xetexko/xetexko-font.sty
+++ b/macros/xetex/generic/xetexko/xetexko-font.sty
@@ -1,6 +1,6 @@
% xetexko-font.sty
%
-% Copyright (c) 2013-2019 Dohyun Kim <nomos at ktug org>
+% Copyright (c) 2013-2020 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,11 +10,10 @@
% and version 1.3c or later is part of all distributions of LaTeX
% version 2006/05/20 or later.
-\ProvidesPackage{xetexko-font}[2019/12/01 v2.22 LaTeX Font commands for XeTeX-ko]
+\NeedsTeXFormat{LaTeX2e}[2020/02/02]
+\ProvidesPackage{xetexko-font}[2020/02/17 v2.23 LaTeX Font commands for XeTeX-ko]
-\let\xetexko@f@size\f@size
-\RequirePackage{fontspec}[2018/07/30]
-\let\f@size\xetexko@f@size
+\RequirePackage{fontspec}[2020/02/03]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% for old hangul rendering
@@ -133,52 +132,92 @@
\XK@storecjkfont
}
}
+ \cs_if_eq:NNTF \rmdefault #2
+ {
+ \cs_set_eq:NN \XK@default@korean@font \XK@rm@korean@font
+ }
+ {
+ \cs_if_eq:NNTF \sfdefault #2
+ {
+ \cs_set_eq:NN \XK@default@korean@font \XK@sf@korean@font
+ }
+ {
+ \cs_set_eq:NN \XK@default@korean@font \XK@tt@korean@font
+ }
+ }
}
}
}
+% suppress bx font warnings
+\cs_new_nopar:Npn \l_xetexko_pacify_bfseries {
+ \tl_map_inline:nn { \mddefault \bfdefault }
+ {
+ \cs_if_exist:cF { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
+ {
+ \cs_set_eq:cc
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\shapedefault }
+ }
+ }
+ \tl_map_inline:nn { \shapedefault \updefault \itdefault \sldefault }
+ {
+ \cs_if_exist:cF { \g_fontspec_encoding_tl/\l_fontspec_family_tl/bx/##1 }
+ {
+ \cs_set_eq:cc
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/bx/##1 }
+ { \g_fontspec_encoding_tl/\l_fontspec_family_tl/\bfdefault/##1 }
+ }
+ }
+}
%%%%%%%%%%%%%%%%%%%%
% user font commands
\DeclareDocumentCommand \setmainhangulfont { O{} m O{} }
{
- \__xtxko_hangul_assign_font_opts:n {#1,#3}
- \setfontfamily \kormainfont [\l_xtxko_rem_tl] {#2}
+ \__xtxko_hangul_assign_font_opts:n {Ligatures=TeX,#1,#3}
+ \setfontfamily \kormainfont {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \kormainfont \l_xtxko_font_opts_tl
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \rmdefault \kormainfont
\ignorespaces
}
\DeclareDocumentCommand \setsanshangulfont { O{} m O{} }
{
- \__xtxko_hangul_assign_font_opts:n {#1,#3}
- \setfontfamily \korsansfont [\l_xtxko_rem_tl] {#2}
+ \__xtxko_hangul_assign_font_opts:n {Ligatures=TeX,#1,#3}
+ \setfontfamily \korsansfont {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \korsansfont \l_xtxko_font_opts_tl
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \sfdefault \korsansfont
\ignorespaces
}
\DeclareDocumentCommand \setmonohangulfont { O{} m O{} }
{
- \setfontfamily \kormonofont [#1,#3] {#2}
+ \setfontfamily \kormonofont {#2} [#1,#3]
+ \l_xetexko_pacify_bfseries
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \ttdefault \kormonofont
\ignorespaces
}
\DeclareDocumentCommand \setmainhanjafont { O{} m O{} }
{
- \__xtxko_hanja_assign_font_opts:n {#1,#3}
- \setfontfamily \hnjmainfont [\l_xtxko_rem_tl] {#2}
+ \__xtxko_hanja_assign_font_opts:n {Ligatures=TeX,#1,#3}
+ \setfontfamily \hnjmainfont {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \hnjmainfont \l_xtxko_font_opts_tl
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \rmdefault \hnjmainfont
\ignorespaces
}
\DeclareDocumentCommand \setsanshanjafont { O{} m O{} }
{
- \__xtxko_hanja_assign_font_opts:n {#1,#3}
- \setfontfamily \hnjsansfont [\l_xtxko_rem_tl] {#2}
+ \__xtxko_hanja_assign_font_opts:n {Ligatures=TeX,#1,#3}
+ \setfontfamily \hnjsansfont {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \hnjsansfont \l_xtxko_font_opts_tl
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \sfdefault \hnjsansfont
\ignorespaces
}
\DeclareDocumentCommand \setmonohanjafont { O{} m O{} }
{
- \setfontfamily \hnjmonofont [#1,#3] {#2}
+ \setfontfamily \hnjmonofont {#2} [#1,#3]
+ \l_xetexko_pacify_bfseries
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \ttdefault \hnjmonofont
\ignorespaces
}
@@ -186,7 +225,8 @@
\DeclareDocumentCommand \adhochangulfont { O{} m O{} }
{
\__xtxko_hangul_assign_font_opts:n {#1,#3}
- \setfontfamily \XK@adhoc@hangul@font [\l_xtxko_rem_tl] {#2}
+ \setfontfamily \XK@adhoc@hangul@font {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \XK@adhoc@hangul@font \l_xtxko_font_opts_tl
\cs_set_nopar:Npn \XKhangulfont
{
@@ -201,7 +241,8 @@
\DeclareDocumentCommand \adhochanjafont { O{} m O{} }
{
\__xtxko_hanja_assign_font_opts:n {#1,#3}
- \setfontfamily \XK@adhoc@hanja@font [\l_xtxko_rem_tl] {#2}
+ \setfontfamily \XK@adhoc@hanja@font {#2} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:NV \XK@adhoc@hanja@font \l_xtxko_font_opts_tl
\cs_set_nopar:Npn \XKhanjafont
{
@@ -217,7 +258,8 @@
\DeclareDocumentCommand \newhangulfontfamily { m O{} m O{} }
{
\__xtxko_hangul_assign_font_opts:n {#2,#4}
- \exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } [\l_xtxko_rem_tl] {#3}
+ \exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
\DeclareRobustCommand #1
{
@@ -233,7 +275,8 @@
\DeclareDocumentCommand \newhanjafontfamily { m O{} m O{} }
{
\__xtxko_hanja_assign_font_opts:n {#2,#4}
- \exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } [\l_xtxko_rem_tl] {#3}
+ \exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
+ \l_xetexko_pacify_bfseries
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
\DeclareRobustCommand #1
{
@@ -249,7 +292,7 @@
\DeclareDocumentCommand \newhangulfontface { m O{} m O{} }
{
\__xtxko_hangul_assign_font_opts:n {#2,#4}
- \exp_args:Nc \newfontface { XK@newfont@family \token_to_str:N #1 } [\l_xtxko_rem_tl] {#3}
+ \exp_args:Nc \setfontface { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
\DeclareRobustCommand #1
{
@@ -265,7 +308,7 @@
\DeclareDocumentCommand \newhanjafontface { m O{} m O{} }
{
\__xtxko_hanja_assign_font_opts:n {#2,#4}
- \exp_args:Nc \newfontface { XK@newfont@family \token_to_str:N #1 } [\l_xtxko_rem_tl] {#3}
+ \exp_args:Nc \setfontface { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
\DeclareRobustCommand #1
{
@@ -279,13 +322,34 @@
}
}
%% add{hangul,hanja}fontfeature[s]
+\cs_set_nopar:Npn \xetexkopacifybfseries {
+ \tl_map_inline:nn { \mddefault \bfdefault }
+ {
+ \cs_if_exist:cF { \f@encoding/\f@family/##1/\updefault }
+ {
+ \cs_gset_eq:cc
+ { \f@encoding/\f@family/##1/\updefault }
+ { \f@encoding/\f@family/##1/\shapedefault }
+ }
+ }
+ \tl_map_inline:nn { \shapedefault \updefault \itdefault \sldefault }
+ {
+ \cs_if_exist:cF { \f@encoding/\f@family/bx/##1 }
+ {
+ \cs_gset_eq:cc
+ { \f@encoding/\f@family/bx/##1 }
+ { \f@encoding/\f@family/\bfdefault/##1 }
+ }
+ }
+}
\DeclareDocumentCommand \addhangulfontfeature { m }
{
\group_begin:
- \XKhangulfont
+ \fontseries\mddefault\fontshape\shapedefault \XKhangulfont
\tl_clear:N \l_xtxko_font_opts_tl
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
\addfontfeature {\l_xtxko_rem_tl}
+ \xetexkopacifybfseries
\use:x
{
\group_end:
@@ -303,10 +367,11 @@
\DeclareDocumentCommand \addhanjafontfeature { m }
{
\group_begin:
- \XKhanjafont
+ \fontseries\mddefault\fontshape\shapedefault \XKhanjafont
\tl_clear:N \l_xtxko_font_opts_tl
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
\addfontfeature {\l_xtxko_rem_tl}
+ \xetexkopacifybfseries
\use:x
{
\group_end:
@@ -321,12 +386,7 @@
\ignorespaces
}
\cs_set_eq:NN \addhanjafontfeatures \addhanjafontfeature
-%% default font features
-\defaultfontfeatures
- [
- \kormainfont, \korsansfont, \hnjmainfont, \hnjsansfont,
- ]
- {Ligatures=TeX}
+%% default hangul font features
\DeclareDocumentCommand \defaulthangulfontfeatures { t+ o m } % o is ignored
{
\IfBooleanTF {#1}
@@ -355,6 +415,7 @@
\DeclareDocumentCommand \setmathhangulfont { O{} m O{} }
{
\fontspec_set_family:Nnn \xetexko@math@hangul@family {#1,#3} {#2}
+ \l_xetexko_pacify_bfseries
}
%%%%%%%%%%%%%%%%%%%%
%% xetexkofontregime
@@ -374,39 +435,6 @@
\use:c { #2marks }
\keys_set:nn { xtxko-char } { #1,#3 }
}
-%% fontspec 2018
-\RenewDocumentCommand \setmainfont { O{} m O{} }
- {
- \__fontspec_main_setmainfont:nn {#1,#3} {#2}
- \cs_set_protected_nopar:Npx \rmfamily
- {
- \exp_not:V \rmfamily
- \exp_not:N \XK@rm@korean@font
- }
- \ignorespaces
- }
-\RenewDocumentCommand \setsansfont { O{} m O{} }
- {
- \__fontspec_main_setsansfont:nn {#1,#3} {#2}
- \cs_set_protected_nopar:Npx \sffamily
- {
- \exp_not:V \sffamily
- \exp_not:N \XK@sf@korean@font
- }
- \ignorespaces
- }
-\RenewDocumentCommand \setmonofont { O{} m O{} }
- {
- \__fontspec_main_setmonofont:nn {#1,#3} {#2}
- \cs_set_protected_nopar:Npx \ttfamily
- {
- \exp_not:V \ttfamily
- \exp_not:N \XK@tt@korean@font
- \exp_not:N \disablehangulspacing
- }
- \ignorespaces
- }
-\cs_set_eq:NN \setromanfont \setmainfont
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -476,103 +504,64 @@
\XK@storecjkfont
}%
\fi
+ \disablehangulspacing
}
-\protected\edef\rmfamily{\unexpanded\expandafter{\rmfamily\XK@rm@korean@font}}
-\protected\edef\sffamily{\unexpanded\expandafter{\sffamily\XK@sf@korean@font}}
-\protected\edef\ttfamily{\unexpanded\expandafter{\ttfamily
- \XK@tt@korean@font\disablehangulspacing
-}}
+% using latex 2020's font family hooks
+\edef\@rmfamilyhook{\unexpanded\expandafter{\@rmfamilyhook \XK@rm@korean@font}}
+\edef\@sffamilyhook{\unexpanded\expandafter{\@sffamilyhook \XK@sf@korean@font}}
+\edef\@ttfamilyhook{\unexpanded\expandafter{\@ttfamilyhook \XK@tt@korean@font}}
+\edef\@defaultfamilyhook{\unexpanded\expandafter{\@defaultfamilyhook
+ \XK@default@korean@font }}
+\let\XK@default@korean@font\relax
+
\edef\verbatim@font{\unexpanded\expandafter{\verbatim@font
\disablehangulspacingandlinebreak
\let\XKstoreprevfont\XKlatinfont
}}
% for default font loading
-\def\XKiffontisaccessible#1#2#3{%
- \begingroup
- \suppressfontnotfounderror\@ne
- \font\x="#1" at 10pt
- \expandafter
- \endgroup
- \ifx\x\nullfont #3\else #2\fi
-}
-\def\XKiffonthasunichar#1#2#3#4{%
- \begingroup #1\expandafter\endgroup
+\def\XKiffontfamilyhasunichar#1#2#3#4{%
+ \begingroup \fontfamily{#1}\selectfont\expandafter\endgroup
\iffontchar\font"#2\relax #3\else #4\fi
}
\AtBeginDocument{%
%%%%%%%%%%%%%%%%%%%%%%%%%%
- % default main hangul: nanummyeongjo, batang if absent
+ % default main hangul: unbatang
\ifdefined\kormainfont\else
- \XKiffonthasunichar{\fontfamily\rmdefault\selectfont}{AC00}
+ \XKiffontfamilyhasunichar{\rmdefault}{AC00}
{\let\kormainfont\relax}
- {\XKiffontisaccessible{NanumMyeongjoExtraBold}
- {\setmainhangulfont{NanumMyeongjo}[Renderer=OpenType,BoldFont=*ExtraBold]}
- {\XKiffontisaccessible{NanumMyeongjo}
- {\setmainhangulfont{NanumMyeongjo}[Renderer=OpenType]}
- {\XKiffontisaccessible{Batang}
- {\setmainhangulfont{Batang}[AutoFakeBold]}
- {\let\kormainfont\relax}%
- }%
- }%
+ {\IfFontExistsTF{UnBatang.ttf}
+ {\setmainhangulfont{UnBatang.ttf}[BoldFont=UnBatangBold.ttf]}
+ {\let\kormainfont\relax}%
}%
\fi
- % default main hanja: nanumgothic, batang if absent
- \ifdefined\hnjmainfont\else
- \XKiffonthasunichar{\kormainfont}{4E00}
- {\let\hnjmainfont\kormainfont}
- {\XKiffontisaccessible{NanumGothic}
- {\setmainhanjafont{NanumGothic}[Renderer=OpenType]}
- {\XKiffontisaccessible{Batang}
- {\setmainhanjafont{Batang}[AutoFakeBold]}
- {\let\hnjmainfont\kormainfont}%
- }%
- }%
- \fi
- % default sans hangul: nanumgothic, dotum if absent
+ \ifdefined\hnjmainfont\else \let\hnjmainfont\kormainfont \fi
+
+ % default sans hangul: undotum
\ifdefined\korsansfont\else
- \XKiffonthasunichar{\fontfamily\sfdefault\selectfont}{AC00}
+ \XKiffontfamilyhasunichar{\sfdefault}{AC00}
{\let\korsansfont\relax}
- {\XKiffontisaccessible{NanumGothic}
- {\setsanshangulfont{NanumGothic}[Renderer=OpenType]}
- {\XKiffontisaccessible{Dotum}
- {\setsanshangulfont{Dotum}[AutoFakeBold]}
- {\let\korsansfont\relax}%
- }%
- }%
- \fi
- % default sans hanja: nanumgothic, dotum if absent
- \ifdefined\hnjsansfont\else
- \XKiffonthasunichar{\korsansfont}{4E00}
- {\let\hnjsansfont\korsansfont}
- {\XKiffontisaccessible{NanumGothic}
- {\setsanshanjafont{NanumGothic}[Renderer=OpenType]}
- {\XKiffontisaccessible{Dotum}
- {\setsanshanjafont{Dotum}[AutoFakeBold]}
- {\let\hnjsansfont\korsansfont}%
- }%
+ {\IfFontExistsTF{UnDotum.ttf}
+ {\setsanshangulfont{UnDotum.ttf}[BoldFont=UnDotumBold.ttf]}
+ {\let\korsansfont\relax}%
}%
\fi
+ \ifdefined\hnjsansfont\else \let\hnjsansfont\korsansfont \fi
+
\ifdefined\kormonofont\else \let\kormonofont\korsansfont \fi
\ifdefined\hnjmonofont\else \let\hnjmonofont\kormonofont \fi
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% reset hangul font and normalfont
-\expandafter\ifx\familydefault\rmdefault
- \XK@rm@korean@font
- \protected\edef\normalfont{\unexpanded\expandafter{\normalfont
- \XK@rm@korean@font}}
-\else \expandafter\ifx\familydefault\sfdefault
- \XK@sf@korean@font
- \protected\edef\normalfont{\unexpanded\expandafter{\normalfont
- \XK@sf@korean@font}}
-\else
- \XK@tt@korean@font
- \protected\edef\normalfont{\unexpanded\expandafter{\normalfont
- \XK@tt@korean@font}}
-\fi\fi
-\let\reset@font\normalfont
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % reset hangul font and normalfont
+ \expandafter\ifx\familydefault\sfdefault
+ \let\XK@default@korean@font\XK@sf@korean@font
+ \else \expandafter\ifx\familydefault\ttdefault
+ \let\XK@default@korean@font\XK@tt@korean@font
+ \else
+ \let\XK@default@korean@font\XK@rm@korean@font
+ \fi\fi
+ \XK@default@korean@font
%%%%%%%%%%%%%%%%%%%%%
% hangul in math mode
\begingroup