diff options
Diffstat (limited to 'language/korean/kotex-oblivoir/memhangul-x/xob-font.sty')
-rw-r--r-- | language/korean/kotex-oblivoir/memhangul-x/xob-font.sty | 680 |
1 files changed, 680 insertions, 0 deletions
diff --git a/language/korean/kotex-oblivoir/memhangul-x/xob-font.sty b/language/korean/kotex-oblivoir/memhangul-x/xob-font.sty new file mode 100644 index 0000000000..16095498f7 --- /dev/null +++ b/language/korean/kotex-oblivoir/memhangul-x/xob-font.sty @@ -0,0 +1,680 @@ +%% xob-font.sty +%% +%% Copyright (c) 2014 Kangsoo Kim <karnes at ktug org> +%% Copyright (c) 2017 Kihwang Lee <leekh at ktug org> +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2006/05/20 or later. +%% +%% +%% oblivoir hangul/hanja font setting. +%% part of oblivoir +%% +\ProvidesPackage{xob-font}[2017/02/03 v0.7 select hangul/hanja fonts for oblivoir] + +%%% obsolete options: retain \if@.. conditions for backward compatibility +\newif\if@nowin\@nowinfalse +\newif\if@latinquote\@latinquotefalse +\newif\if@unfont\@unfontfalse +\DeclareOption{nowinname}{} +\DeclareOption{latinquote}{} +\DeclareOption{unfonts}{\@unfonttrue} +\DeclareOption{nounfonts}{\@unfontfalse} + +%%% active optoins +\newif\if@oldhangul\@oldhangulfalse +\DeclareOption{oldhangul}{\@oldhangultrue} +\newif\if@gremph\@gremphtrue +\DeclareOption{gremph}{\@gremphtrue} +\DeclareOption{itemph}{\@gremphfalse} + +\newif\if@nanumfonts\@nanumfontsfalse +\newif\if@nanumxfonts\@nanumxfontsfalse +\DeclareOption{nanum}{\@nanumfontstrue} +\DeclareOption{nanumx}{\@nanumfontstrue\@nanumxfontstrue} +\newif\if@hcrfonts\@hcrfontsfalse +\DeclareOption{hcr}{\@hcrfontstrue\@oldhangultrue} + +\ProcessOptions +\relax + +\RequirePackage{xparse} +\@ifclassloaded{oblivoir}{}{% + \RequirePackage{fontspec} + \RequirePackage{kotex} +} + +\ExplSyntaxOn + +\sys_if_engine_xetex:T +{ + \RequirePackage{xetexko-space} + \RequirePackage{xetexko-font} +} + +\if@gremph \bool_set_false:N \ital_fake_bool \else \bool_set_true:N \ital_fake_bool \fi +\if@oldhangul \bool_set_true:N \hangulscript_bool \else \bool_set_false:N \hangulscript_bool \fi + +\bool_set_false:N \bold_prov_bool +\bool_set_false:N \in_hanja_mode +\bool_set_false:N \mono_mode + +\DeclareDocumentCommand \setmonoscale { m } +{ + \tl_set:Nn \_mono_scale { #1 } +} + +\setmonoscale{0.95} + +\DeclareDocumentCommand \treat_feature_name_options { d() d() m o } +{ + \tl_set:Nn \_regu_font_name { #3 } + + \IfValueTF { #1 } + { + \tl_set:Nn \_bold_font_name { #1 } \bool_set_true:N \bold_prov_bool + } + { + \tl_clear:N \_bold_font_name \bool_set_false:N \bold_prov_bool + } + + \IfValueTF { #2 } + { + \tl_if_eq:nnTF { #2 } { * } + { \tl_set_eq:NN \_ital_font_name \_regu_font_name } + { \tl_set:Nn \_ital_font_name { #2 } } + } + { + \tl_set_eq:NN \_ital_font_name \_regu_font_name + } + \IfValueTF { #4 } + { \tl_set:Nn \_additional_feature_str { #4 } } + { \tl_clear:N \_additional_feature_str } + + \bool_if:nTF { \mono_mode || \in_hanja_mode } + { + \tl_clear:N \_font_feature_str + } + { + \tl_set:Nn \_font_feature_str { Ligatures = TeX, } + } + + \bool_if:nT \ital_fake_bool + { + \tl_if_eq:NNTF \_ital_font_name \_regu_font_name + { + \tl_put_right:Nn \_font_feature_str { AutoFakeSlant, } + } + { + \tl_put_right:Nn \_font_feature_str { ItalicFeatures = { FakeSlant = { 0.15 } }, } + } + \tl_put_right:Nn \_font_feature_str { BoldItalicFeatures = { FakeSlant = { 0.15 } }, } + } + + \bool_if:nT \bold_prov_bool + { + \tl_put_right:Nn \_font_feature_str { BoldFont = \_bold_font_name, + BoldItalicFont = \_bold_font_name, + ItalicFont = \_ital_font_name, } + } + + \bool_if:nF \in_hanja_mode + { + \bool_if:nT \hangulscript_bool + { \tl_put_right:Nn \_font_feature_str { Script = Hangul, } } + } + + \bool_if:nT \mono_mode + { + \tl_put_right:Nn \_font_feature_str { Scale = \_mono_scale, } + } +} + +\DeclareDocumentCommand \set_kor_sub_hanja_font { m d() d() m o } +{ + \bool_set_true:N \in_hanja_mode +% \treat_feature_name_options ( #2 ) ( #3 ) { #4 } [ #5 ] + \IfValueTF { #2 } + { + \IfValueTF { #3 } + { + \treat_feature_name_options ( #2 ) ( #3 ) { #4 } [ #5 ] + } + { + \treat_feature_name_options ( #2 ) { #4 } [ #5 ] + } + } + { + \treat_feature_name_options { #4 } [ #5 ] + } + \setmainhanjafont [ \_font_feature_str, \_additional_feature_str ] { \_regu_font_name } + + \sys_if_engine_luatex:T + { + \tl_if_exist:NT \hanjabyhanjafont + { + \AtBeginDocument { \hanjabyhanjafont 1 } + } + } +} + +\DeclareDocumentCommand \setkorfont { m d() d() m o d() } +{ + \bool_set_false:N \in_hanja_mode + + \str_if_eq:nnTF { #1 } { mono } + { \bool_set_true:N \mono_mode } + { \bool_set_false:N \mono_mode } + + %%% when regular fontname contains "HCR", input [ Script=Hangul ] to font features. + \tl_if_in:nnT { #4 } { HCR } + { \bool_set_true:N \hangulscript_bool } + \tl_if_in:nnT { #4 } { hcr } + { \bool_set_true:N \hangulscript_bool } +% \tl_if_in:nnT { #4 } { HAN } +% { \bool_set_true:N \hangulscript_bool } + %%% the following three \tl_if_in's for \setkomainfont + \tl_if_in:NnT { #4 } { HCR } + { \bool_set_true:N \hangulscript_bool } + \tl_if_in:NnT { #4 } { hcr } + { \bool_set_true:N \hangulscript_bool } +% \tl_if_in:NnT { #4 } { HAN } +% { \bool_set_true:N \hangulscript_bool } + + \IfValueTF { #2 } + { + \IfValueTF { #3 } + { + \treat_feature_name_options ( #2 ) ( #3 ) { #4 } [ #5 ] + } + { + \treat_feature_name_options ( #2 ) { #4 } [ #5 ] + } + } + { + \treat_feature_name_options { #4 } [ #5 ] + } + + \cs:w set #1 hangulfont \cs_end: + [ \_font_feature_str, \_additional_feature_str ] { \_regu_font_name } + + %%% \set_kor_sub_hanja_font will take more optional arguments, + %%% hence, this codes have to be located at the end of code block. + \IfValueT { #6 } + { + \set_kor_sub_hanja_font { #1 } ( #6 ) + } +} + +%%% new \setko(main|sans|mono)font +%\bool_new:N \setko_bold_process \bool_set_false:N \setko_bold_process + +\NewDocumentCommand \process_set_korob_hanja { m o d() d() d() o } +{ + \IfValueTF { #2 } + { + \tl_set:Nn \ko_hanja_base_font_name { #2 } + \tl_set_eq:NN \ko_hanja_regu_font_name \ko_hanja_base_font_name + \tl_put_right:Nn \ko_hanja_regu_font_name { #3 } + \IfValueTF { #4 } + { + \tl_if_empty:nTF { #4 } + { + \tl_set_eq:NN \ko_hanja_bold_font_name \ko_hanja_regu_font_name + } + { + \tl_set_eq:NN \ko_hanja_bold_font_name \ko_hanja_base_font_name + \tl_put_right:Nn \ko_hanja_bold_font_name { #4 } + } + \bool_set_false:N \setko_hanja_bold_process + } + { +% \tl_clear:N \ko_hanja_bold_font_name + \bool_set_true:N \setko_hanja_bold_process + } + \IfValueTF { #5 } + { + \tl_if_empty:nTF { #5 } + { + \tl_set_eq:NN \ko_hanja_ital_font_name \ko_hanja_regu_font_name + } + { + \tl_set_eq:NN \ko_hanja_ital_font_name \ko_hanja_base_font_name + \tl_put_right:Nn \ko_hanja_ital_font_name { #5 } + } + } + { + \tl_set_eq:NN \ko_hanja_ital_font_name \ko_hanja_regu_font_name + } + } + { + \tl_clear:N \ko_hanja_base_font_name + \tl_set:Nn \ko_hanja_regu_font_name { #3 } + + \IfValueTF { #4 } + { + \tl_set:Nn \ko_hanja_bold_font_name { #4 } + \bool_set_false:N \setko_hanja_bold_process + } + { +% \tl_clear:N \ko_hanja_bold_font_name + \bool_set_true:N \setko_hanja_bold_process + } + + \IfValueTF { #5 } + { + \tl_set:Nn \ko_hanja_ital_font_name { #5 } + } + { + \tl_set_eq:NN \ko_hanja_ital_font_name \ko_hanja_regu_font_name + } + } + + \IfValueTF { #6 } + { + \tl_set:Nn \ko_hanja_features { #6 } + } + { + \tl_clear:N \ko_hanja_features + } + + \bool_if:nTF \setko_bold_process + { + \bool_if:nTF \setko_hanja_bold_process + { + \cs:w setkor #1 font \cs_end: + { \ko_regu_font_name } + [ \ko_features ] + \bool_if:nTF \ital_fake_bool + { + \cs:w set #1 hanjafont \cs_end: + [ \ko_hanja_features, AutoFakeSlant, BoldItalicFeatures={FakeSlant={0.15}} ] + { \ko_hanja_regu_font_name } + } + { + \cs:w set #1 hanjafont \cs_end: + [ \ko_hanja_features ] + { \ko_hanja_regu_font_name } + } + } + { + \cs:w setkor #1 font \cs_end: + { \ko_regu_font_name } + [ \ko_features ] + ( \ko_hanja_bold_font_name ) + ( \ko_hanja_ital_font_name ) + { \ko_hanja_regu_font_name } + [ \ko_hanja_features ] + } + } + { + \bool_if:nTF \setko_hanja_bold_process + { + \cs:w setkor #1 font \cs_end: + ( \ko_bold_font_name ) + ( \ko_ital_font_name ) + { \ko_regu_font_name } + \bool_if:nTF \ital_fake_bool + { + \cs:w set #1 hanjafont \cs_end: + [ \ko_hanja_features, AutoFakeSlant, BoldItalicFeatures={FakeSlant={0.15}} ] + { \ko_hanja_regu_font_name } + } + { + \cs:w set #1 hanjafont \cs_end: + [ \ko_hanja_features ] + { \ko_hanja_regu_font_name } + } + } + { + \cs:w setkor #1 font \cs_end: + ( \ko_bold_font_name ) + ( \ko_ital_font_name ) + { \ko_regu_font_name } + [ \ko_features ] + ( \ko_hanja_bold_font_name ) + ( \ko_hanja_ital_font_name ) + { \ko_hanja_regu_font_name } + [ \ko_hanja_features ] + } + } + + \sys_if_engine_luatex:T + { + \tl_if_exist:NT \hanjabyhanjafont + { + \AtBeginDocument { \hanjabyhanjafont 1 } + } + } +} + +\NewDocumentCommand \process_korob_only_hangul { m } +{ + \bool_if:nTF \setko_bold_process + { + \cs:w setkor #1 font \cs_end: + { \ko_regu_font_name } + [ \ko_features ] + } + { + \cs:w setkor #1 font \cs_end: + ( \ko_bold_font_name ) + ( \ko_ital_font_name ) + { \ko_regu_font_name } + [ \ko_features ] + } +} + +\DeclareDocumentCommand \setkorfontxob { m o d() d() d() o o d() } +{ + \IfValueTF { #2 } + { \tl_set:Nn \ko_base_font_name { #2 } + \tl_set_eq:NN \ko_regu_font_name \ko_base_font_name + \tl_put_right:Nn \ko_regu_font_name { #3 } + \IfValueTF { #4 } + { + \tl_if_empty:nTF { #4 } + { + \tl_set_eq:NN \ko_bold_font_name \ko_regu_font_name + } + { + \tl_set_eq:NN \ko_bold_font_name \ko_base_font_name + \tl_put_right:Nn \ko_bold_font_name { #4 } + } + \bool_set_false:N \setko_bold_process + } + { +% \tl_set_eq:NN \ko_bold_font_name \ko_regu_font_name + \bool_set_true:N \setko_bold_process + } + \IfValueTF { #5 } + { + \tl_if_empty:nTF { #5} + { + \tl_set_eq:NN \ko_ital_font_name \ko_regu_font_name + } + { + \tl_set_eq:NN \ko_ital_font_name \ko_base_font_name + \tl_put_right:Nn \ko_ital_font_name { #5 } + } + } + { + \tl_set_eq:NN \ko_ital_font_name \ko_regu_font_name + } + } + { + \tl_clear:N \ko_base_font_name + \tl_set:Nn \ko_regu_font_name { #3 } + + \IfValueTF { #4 } + { + \tl_set:Nn \ko_bold_font_name { #4 } + \bool_set_false:N \setko_bold_process + } + { +% \tl_set_eq:NN \ko_bold_font_name \ko_regu_font_name + \bool_set_true:N \setko_bold_process + } + + \IfValueTF { #5 } + { + \tl_set:Nn \ko_ital_font_name { #5 } + } + { + \tl_set_eq:NN \ko_ital_font_name \ko_regu_font_name + } + + } + + \IfValueTF { #6 } + { + \tl_set:Nn \ko_features { #6 } + } + { + \tl_clear:N \ko_features + } + + \IfValueTF { #7 } + { + \IfValueTF { #8 } + { + \process_set_korob_hanja { #1 } [ #7 ] ( #8 ) + } + { + \process_set_korob_hanja { #1 } [ #7 ] + } + } + { + \IfValueTF { #8 } + { + \process_set_korob_hanja { #1 } ( #8 ) + } + { + \process_korob_only_hangul { #1 } + } + } +} + +%%% bracket version. +\bool_set_false:N \ext_loc_bool + +\DeclareDocumentCommand \set_kor_font_orig_method_sub_hanja { m o m } +{ + \IfValueTF { #2 } + { + \cs:w set #1 hanjafont \cs_end: [ #2, \ext_loc_feature ] { #3 } + } + { + \cs:w set #1 hanjafont \cs_end: [ \ext_loc_feature ]{ #3 } + } + \bool_set_false:N \ext_loc_bool +} + +\DeclareDocumentCommand \setkorfontorigmethod { m o m o } +{ + \bool_if:nTF \ext_loc_bool + { + \tl_set:Nn \ext_loc_feature { ExternalLocation, } + } + { + \tl_clear:N \ext_loc_feature + } + \IfValueTF { #2 } + { + \cs:w set #1 hangulfont \cs_end: [ #2, \ext_loc_feature ] { #3 } + } + { + \cs:w set #1 hangulfont \cs_end: [ \ext_loc_feature ] { #3 } + } + + \IfValueTF { #4 } + { + \set_kor_font_orig_method_sub_hanja { #1 } [ #4 ] + } + { + \bool_set_false:N \ext_loc_bool + } +} + +%%% starred version. +\DeclareDocumentCommand \setkorfontorigstar { s m } +{ + \bool_set_true:N \ext_loc_bool + \setkorfontorigmethod { #2 } +} + +%%% \setobmainfont +\DeclareDocumentCommand \setxoblatinfont { m o d() d() d() o } +{ + \IfValueTF { #2 } + { + \tl_set:Nn \latin_base_font_name { #2 } + \tl_set_eq:NN \latin_regu_font_name \latin_base_font_name + \tl_put_right:Nn \latin_regu_font_name { #3 } + \IfValueTF { #4 } + { + \tl_if_empty:nTF { #4 } + { + \tl_set_eq:NN \latin_bold_font_name \latin_regu_font_name + } + { + \tl_set_eq:NN \latin_bold_font_name \latin_base_font_name + \tl_put_right:Nn \latin_bold_font_name { #4 } + } + \bool_set_false:N \setlatin_bold_process + } + { + \bool_set_true:N \setlatin_bold_process + } + \IfValueTF { #5 } + { + \tl_if_empty:nTF { #5} + { + \tl_set_eq:NN \latin_ital_font_name \latin_regu_font_name + } + { + \tl_set_eq:NN \latin_ital_font_name \latin_base_font_name + \tl_put_right:Nn \latin_ital_font_name { #5 } + } + \bool_set_false:N \setlatin_ital_process + } + { + \bool_set_true:N \setlatin_ital_process + } + } + { + \tl_clear:N \latin_base_font_name + \tl_set:Nn \latin_regu_font_name { #3 } + + \IfValueTF { #4 } + { + \tl_set:Nn \latin_bold_font_name { #4 } + \bool_set_false:N \setlatin_bold_process + } + { + \bool_set_true:N \setlatin_bold_process + } + + \IfValueTF { #5 } + { + \tl_set:Nn \latin_ital_font_name { #5 } + \bool_set_false:N \setlatin_ital_process + } + { + \bool_set_true:N \setlatin_ital_process + } + + } + + \tl_if_eq:nnTF { #1 } { mono } + { + \bool_set_true:N \latin_mono_mode + } + { + \bool_set_false:N \latin_mono_mode + } + + \bool_if:nTF \latin_mono_mode + { + \tl_clear:N \latin_feature + } + { + \tl_set:Nn \latin_feature { Ligatures=TeX, } + } + + \bool_if:nF \setlatin_bold_process + { + \tl_put_right:Nn \latin_feature { + BoldFont = { \latin_bold_font_name }, + } + } + + \bool_if:nF \setlatin_ital_process + { + \tl_put_right:Nn \latin_feature { + ItalicFont = { \latin_ital_font_name }, + } + } + + \IfValueT { #6 } + { + \tl_put_right:Nn \latin_feature { #6 } + } + + \cs:w set #1 font \cs_end: + [ \latin_feature ] + { \latin_regu_font_name } + +} + +\ExplSyntaxOff + +%%% starred version commands are provided for backward compatibility. +\protected\def\setkormainfont{% + \@ifstar{\setkorfontorigstar*{main}}{% + \@ifnextchar[{\setkorfontorigmethod{main}}{\setkorfont{main}}}} +\protected\def\setkorsansfont{% + \@ifstar{\setkorfontorigstar*{sans}}{% + \@ifnextchar[{\setkorfontorigmethod{sans}}{\setkorfont{sans}}}} +\protected\def\setkormonofont{% + \@ifstar{\setkorfontorigstar*{mono}}{% + \@ifnextchar[{\setkorfontorigmethod{mono}}{\setkorfont{mono}}}} + +%%% newly defined commands: +%%% \setkomainfont[BASENAME](Regu)(Bold)(Ital)[Feature]% +%%% [HJBASENAME](HJREGU)(HJBOLD)(HJITAL)[HJFeatures] +%%% no spaces allowed between optional arguments, e.g., [...]*nospace*[...] +\protected\def\setkomainfont{\setkorfontxob{main}} +\protected\def\setkosansfont{\setkorfontxob{sans}} +\protected\def\setkomonofont{\setkorfontxob{mono}} + +%%% \setobmainfont(regu)[features] = \setmainfont[features]{regu} +\protected\def\setobmainfont{\setxoblatinfont{main}} +\protected\def\setobsansfont{\setxoblatinfont{sans}} +\protected\def\setobmonofont{\setxoblatinfont{mono}} + +%%% [unfonts] will be deprecated shortly. +\if@unfont + \if@gremph + \setkomainfont(UnBatang.ttf)(UnBatangBold.ttf)(UnGraphic.ttf)[Script=Hangul]% + (UnBatang.ttf)(UnBatangBold.ttf)(UnBatang.ttf)[Script=Hangul] + \else + \setkomainfont(UnBatang.ttf)(UnBatangBold.ttf)(UnBatang.ttf)[Script=Hangul] + \fi + \setkosansfont[UnDotum](.ttf)(Bold.ttf)(.ttf) + \setmonoscale{1.05} + \setkomonofont(UnTaza.ttf) +\fi + +\if@nanumfonts + \if@nanumxfonts + \setkomainfont(NanumMyeongjo)(*ExtraBold)(*)[](NanumGothic)(*Bold) + \else + \setkomainfont(NanumMyeongjo)(*Bold)(*)[](NanumGothic)(*Bold) + \fi + \setkosansfont(NanumGothic)(*Bold)(*) + \setkomonofont(NanumGothic) +\fi + +%%% [hcr] adds [Script=Hangul] feature automatically. +\if@hcrfonts + \setkomainfont(HCRBatangLVT)(*-Bold)(*) + \setkosansfont(HCRDotumLVT)(*-Bold)(*) + \setkomonofont(HCRDotumLVT) +\fi + +\endinput + +%%% end of file `xob-font.sty` +%% CHANGES +%% v0.7 : Use \sys_if_engine_xetex and \sys_if_engine_luatex instead of xetex_if_engine and luatex_if_engine to be compatible with latest l3kernel. +%% v0.6 : HCR auto insert Script=Hangul, HAN disabled +%% v0.5 : [nanum] sets Bold, [nanumx] sets ExtraBold for NanumMyeongjo +%% v0.4 : hangul_bold_exist && hanja_bold_no_exist bug fixed. +%% v0.3 : \setobmainfont ( = \setmainfont ) introduced. +%% v0.2 : do not insert [ Ligatures=TeX ] in mono_mode |