summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-25 22:40:35 +0000
committerKarl Berry <karl@freefriends.org>2013-04-25 22:40:35 +0000
commit41d1ed9683f09ac280acceeadd3e5e00689c7873 (patch)
tree9ce0e24f85c6c26d81fc08ecc2003d63e167c1fc /Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty
parent050e4ce3134f192d97181d2bb1d8fb3cacce2a0b (diff)
xetexko (25apr13)
git-svn-id: svn://tug.org/texlive/trunk@30110 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty')
-rw-r--r--Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty424
1 files changed, 424 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty b/Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty
new file mode 100644
index 00000000000..8264204e362
--- /dev/null
+++ b/Master/texmf-dist/tex/xetex/xetexko/xetexko-font.sty
@@ -0,0 +1,424 @@
+% $Id: xetexko-font.sty,v 1.29 2012/10/27 10:55:09 nomos Exp $
+%
+% Copyright (c) 2013 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
+% 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.
+
+\ProvidesPackage{xetexko-font}[2013/03/27 v2.0 Font commands for XeTeX-ko]
+
+\RequirePackage{fontspec}
+\RequirePackage{xkeyval}
+
+%%%%%%%%%%
+% ttfamily
+\protected\edef\ttfamily
+ {\unexpanded\expandafter{\ttfamily\disablehangulspacing}}
+\edef\verbatim@font
+ {\unexpanded\expandafter{\verbatim@font\disablehangulspacingandlinebreak}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% for old hangul rendering
+\ExplSyntaxOn
+\fontspec_define_font_feature:n {YetHangul}
+\keys_define:nn {fontspec}
+ {
+ YetHangul .default:n = {On} ,
+ YetHangul / On .code:n = {
+ \fontspec_update_fontid:n {yethangul:on}
+ \fontspec_update_featstr:n {script=hang}
+ } ,
+ YetHangul / Off .code:n = {
+ \fontspec_update_fontid:n {yethangul:off}
+ \fontspec_update_featstr:n {-ljmo;-vjmo;-tjmo}
+ }
+ }
+\ExplSyntaxOff
+
+%%%%%%%%%%%%%
+% hangul font
+\def\hangfnt{%
+ \edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
+ \ifx\XKprevfont\@tempb \korsansfont \else
+ \ifx\XKprevfont\@tempc \kormonofont \else
+ \kormainfont \fi\fi}
+% hanja font
+\def\hanifnt{%
+ \edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
+ \ifx\XKprevfont\@tempb \hnjsansfont \else
+ \ifx\XKprevfont\@tempc \hnjmonofont \else
+ \hnjmainfont \fi\fi}
+
+%%%%%%%%%%%%%%%%%%%%%
+% hangul font options
+\newtoks\XK@font@options\XK@font@options{}
+\define@key[xtxko]{font}{hu}{\addto@hook\XK@font@options{\def\xetexkohu{#1}}}
+\define@key[xtxko]{font}{interhchar}{\addto@hook\XK@font@options{\def\xetexkointerhchar{#1}}}
+\define@key[xtxko]{font}{lowerexclamation}{\addto@hook\XK@font@options{\def\xetexkolowerexclamation{#1}}}
+\define@key[xtxko]{font}{lowerperiod}{\addto@hook\XK@font@options{\def\xetexkolowerperiod{#1}}}
+\define@key[xtxko]{font}{lowerquestion}{\addto@hook\XK@font@options{\def\xetexkolowerquestion{#1}}}
+\define@key[xtxko]{font}{lowercomma}{\addto@hook\XK@font@options{\def\xetexkolowercomma{#1}}}
+\define@key[xtxko]{font}{postexclamationkern}{\addto@hook\XK@font@options{\def\xetexkopostexclamationkern{#1}}}
+\define@key[xtxko]{font}{postmathskip}{\addto@hook\XK@font@options{\def\xetexkopostmathskip{#1}}}
+\define@key[xtxko]{font}{postperiodkern}{\addto@hook\XK@font@options{\def\xetexkopostperiodkern{#1}}}
+\define@key[xtxko]{font}{postquestionkern}{\addto@hook\XK@font@options{\def\xetexkopostquestionkern{#1}}}
+\define@key[xtxko]{font}{postcommakern}{\addto@hook\XK@font@options{\def\xetexkopostcommakern{#1}}}
+\define@key[xtxko]{font}{preexclamationkern}{\addto@hook\XK@font@options{\def\xetexkopreexclamationkern{#1}}}
+\define@key[xtxko]{font}{preperiodkern}{\addto@hook\XK@font@options{\def\xetexkopreperiodkern{#1}}}
+\define@key[xtxko]{font}{prequestionkern}{\addto@hook\XK@font@options{\def\xetexkoprequestionkern{#1}}}
+\define@key[xtxko]{font}{precommakern}{\addto@hook\XK@font@options{\def\xetexkoprecommakern{#1}}}
+\define@key[xtxko]{font}{quoteraise}{\addto@hook\XK@font@options{\def\xetexkoquoteraise{#1}}}
+\define@key[xtxko]{font}{quotewidth}{\addto@hook\XK@font@options{\def\xetexkoquotewidth{#1}}}
+
+\presetkeys[xtxko]{font}{
+ hu=0.06em,
+ interhchar={},
+ lowerexclamation={},
+ lowerperiod={},
+ lowercomma={},
+ lowerquestion={},
+ postexclamationkern={},
+ postmathskip=\dimexpr\xetexkohu*\tw@\relax,
+ postperiodkern={},
+ postcommakern={},
+ postquestionkern={},
+ preexclamationkern={},
+ preperiodkern={},
+ precommakern={},
+ prequestionkern={},
+ quoteraise={},
+ quotewidth={}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%
+% user font commands
+\protected\def\setmainhangulfont
+ {\@ifnextchar[\@setmainhangulfont{\@setmainhangulfont[]}}
+\def\@setmainhangulfont[#1]{%
+ \def\kormainfont{\XK@main@hangul@font\XK@main@hangul@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@main@hangul@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@main@hangul@font\expandafter[\XKV@rm]}
+
+\protected\def\setsanshangulfont
+ {\@ifnextchar[\@setsanshangulfont{\@setsanshangulfont[]}}
+\def\@setsanshangulfont[#1]{%
+ \def\korsansfont{\XK@sans@hangul@font\XK@sans@hangul@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@sans@hangul@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@sans@hangul@font\expandafter[\XKV@rm]}
+
+\protected\def\setmonohangulfont{\newfontfamily\kormonofont}
+
+\protected\def\setmainhanjafont
+ {\@ifnextchar[\@setmainhanjafont{\@setmainhanjafont[]}}
+\def\@setmainhanjafont[#1]{%
+ \def\hnjmainfont{\XK@main@hanja@font\XK@main@hanja@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@main@hanja@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@main@hanja@font\expandafter[\XKV@rm]}
+
+\protected\def\setsanshanjafont
+ {\@ifnextchar[\@setsanshanjafont{\@setsanshanjafont[]}}
+\def\@setsanshanjafont[#1]{%
+ \def\hnjsansfont{\XK@sans@hanja@font\XK@sans@hanja@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@sans@hanja@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@sans@hanja@font\expandafter[\XKV@rm]}
+
+\protected\def\setmonohanjafont {\newfontfamily\hnjmonofont}
+
+% adhochangulfont/adhochanjafont, hangulfontspec/hanjafontspec
+\protected\def\adhochangulfont{\@ifnextchar[\@adhochangulfont{\@adhochangulfont[]}}
+\def\@adhochangulfont[#1]{%
+ \def\hangfnt{\XK@adhoc@hangul@font\XK@adhoc@hangul@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@adhoc@hangul@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@adhoc@hangul@font\expandafter[\XKV@rm]}
+\let\hangulfontspec\adhochangulfont
+
+\protected\def\adhochanjafont{\@ifnextchar[\@adhochanjafont{\@adhochanjafont[]}}
+\def\@adhochanjafont[#1]{%
+ \def\hanifnt{\XK@adhoc@hanja@font\XK@adhoc@hanja@options}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \edef\XK@adhoc@hanja@options{\the\XK@font@options}%
+ \expandafter\newfontfamily\expandafter\XK@adhoc@hanja@font\expandafter[\XKV@rm]}
+\let\hanjafontspec\adhochanjafont
+
+% newhangulfontfamily/newhanjafontfamily
+\def\XK@newfont@family{XK@newfont@family}
+\def\XK@newfont@options{XK@newfont@options}
+
+\protected\def\newhangulfontfamily#1{%
+ \@ifnextchar[{\@newhangulfontfamily#1}{\@newhangulfontfamily#1[]}}
+\def\@newhangulfontfamily#1[#2]{%
+ \protected\def#1{\def\hangfnt{\csname\XK@newfont@family\string#1\endcsname
+ \csname\XK@newfont@options\string#1\endcsname}}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#2}%
+ \expandafter\edef\csname\XK@newfont@options\string#1\endcsname
+ {\the\XK@font@options}%
+ \expandafter\expandafter\expandafter\newfontfamily\expandafter
+ \csname\expandafter\XK@newfont@family\expandafter
+ \string\expandafter#1\expandafter\endcsname\expandafter[\XKV@rm]}
+
+\protected\def\newhanjafontfamily#1{%
+ \@ifnextchar[{\@newhanjafontfamily#1}{\@newhanjafontfamily#1[]}}
+\def\@newhanjafontfamily#1[#2]{%
+ \protected\def#1{\def\hanifnt{\csname\XK@newfont@family\string#1\endcsname
+ \csname\XK@newfont@options\string#1\endcsname}}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#2}%
+ \expandafter\edef\csname\XK@newfont@options\string#1\endcsname
+ {\the\XK@font@options}%
+ \expandafter\expandafter\expandafter\newfontfamily\expandafter
+ \csname\expandafter\XK@newfont@family\expandafter
+ \string\expandafter#1\expandafter\endcsname\expandafter[\XKV@rm]}
+
+% newhangulfontface/newhanjafontface
+\protected\def\newhangulfontface#1{%
+ \@ifnextchar[{\@newhangulfontface#1}{\@newhangulfontface#1[]}}
+\def\@newhangulfontface#1[#2]{%
+ \protected\def#1{\def\hangfnt{\csname\XK@newfont@family\string#1\endcsname
+ \csname\XK@newfont@options\string#1\endcsname}}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#2}%
+ \expandafter\edef\csname\XK@newfont@options\string#1\endcsname
+ {\the\XK@font@options}%
+ \expandafter\expandafter\expandafter\newfontface\expandafter
+ \csname\expandafter\XK@newfont@family\expandafter
+ \string\expandafter#1\expandafter\endcsname\expandafter[\XKV@rm]}
+
+\protected\def\newhanjafontface#1{%
+ \@ifnextchar[{\@newhanjafontface#1}{\@newhanjafontface#1[]}}
+\def\@newhanjafontface#1[#2]{%
+ \protected\def#1{\def\hanifnt{\csname\XK@newfont@family\string#1\endcsname
+ \csname\XK@newfont@options\string#1\endcsname}}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#2}%
+ \expandafter\edef\csname\XK@newfont@options\string#1\endcsname
+ {\the\XK@font@options}%
+ \expandafter\expandafter\expandafter\newfontface\expandafter
+ \csname\expandafter\XK@newfont@family\expandafter
+ \string\expandafter#1\expandafter\endcsname\expandafter[\XKV@rm]}
+
+% addhangulfontfeature/addhanjafontfeature
+\let\XK@orig@hangfnt\hangfnt
+\let\XK@orig@hanifnt\hanifnt
+
+\protected\def\addhangulfontfeature#1{%
+ \begingroup
+ \hangfnt
+ \unpresetkeys[xtxko]{font}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \global\toks@\expandafter{\the\XK@font@options}%
+ \addfontfeature{\XKV@rm}%
+ \global\let\XK@curr@family\f@family
+ \endgroup
+ \ifx\hangfnt\XK@orig@hangfnt
+ \edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
+ \ifx\XKprevfont\@tempb
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@sans@hangul@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \edef\XK@sans@hangul@options{\unexpanded\expandafter
+ {\XK@sans@hangul@options}\the\toks@}%
+ \else
+ \ifx\XKprevfont\@tempc
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@mono@hangul@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \else
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@main@hangul@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \edef\XK@main@hangul@options{\unexpanded\expandafter
+ {\XK@main@hangul@options}\the\toks@}%
+ \fi\fi
+ \else
+ \edef\hangfnt{\unexpanded\expandafter{\hangfnt\fontfamily}{\XK@curr@family}%
+ \noexpand\selectfont\the\toks@}%
+ \fi
+}
+\let\addhangulfontfeatures\addhangulfontfeature
+
+\protected\def\addhanjafontfeature#1{%
+ \begingroup
+ \hanifnt
+ \unpresetkeys[xtxko]{font}%
+ \XK@font@options{}%
+ \setkeys*[xtxko]{font}{#1}%
+ \global\toks@\expandafter{\the\XK@font@options}%
+ \addfontfeature{\XKV@rm}%
+ \global\let\XK@curr@family\f@family
+ \endgroup
+ \ifx\hanifnt\XK@orig@hanifnt
+ \edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
+ \ifx\XKprevfont\@tempb
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@sans@hanja@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \edef\XK@sans@hanja@options{\unexpanded\expandafter
+ {\XK@sans@hanja@options}\the\toks@}%
+ \else
+ \ifx\XKprevfont\@tempc
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@mono@hanja@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \else
+ \edef\@tempa{\noexpand\DeclareRobustCommand\noexpand\XK@main@hanja@font
+ {\noexpand\fontfamily{\XK@curr@family}\noexpand\selectfont}}\@tempa
+ \edef\XK@main@hanja@options{\unexpanded\expandafter
+ {\XK@main@hanja@options}\the\toks@}%
+ \fi\fi
+ \else
+ \edef\hanifnt{\unexpanded\expandafter{\hanifnt\fontfamily}{\XK@curr@family}%
+ \noexpand\selectfont\the\toks@}%
+ \fi
+}
+\let\addhanjafontfeatures\addhanjafontfeature
+
+%% we have to redefine \normalfont
+\protected\edef\normalfont{%
+ \unexpanded{%
+ \let\hangfnt\XK@orig@hangfnt
+ \let\hanifnt\XK@orig@hanifnt
+ }%
+ \unexpanded\expandafter{\normalfont}%
+}
+\let\reset@font\normalfont
+
+%%%%%%%%%%%%%%%%%%%%
+%% xetexkofontregime
+\define@key[xtxko]{char}{alphs}{\csname #1alphs\endcsname}
+\define@key[xtxko]{char}{nums}{\csname #1nums\endcsname}
+\define@key[xtxko]{char}{parens}{\csname #1parens\endcsname}
+\define@key[xtxko]{char}{quotes}{\csname #1quotes\endcsname}
+\define@key[xtxko]{char}{puncts}{\csname #1puncts\endcsname}
+\define@key[xtxko]{char}{colons}{\csname #1colons\endcsname}
+\define@key[xtxko]{char}{hyphens}{\csname #1hyphens\endcsname}
+\define@key[xtxko]{char}{cjksymbols}{\csname #1cjksymbols\endcsname}
+
+\protected\def\xetexkofontregime{%
+ \@ifnextchar[\@xetexkofontregime{\@xetexkofontregime[]}}
+\def\@xetexkofontregime[#1]#2{%
+ \csname #2marks\endcsname
+ \setkeys*[xtxko]{char}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% set unfonts if [unfonts]
+\if@unfonts
+ %% 한글폰트 지정하기 :
+ \setmainhangulfont
+ [ ExternalLocation,
+ Mapping=tex-text,
+ BoldFont=UnBatangBold,
+ ItalicFont=UnBatang, ItalicFeatures={FakeSlant=0.17},
+ SlantedFont=UnBatang, SlantedFeatures={FakeSlant=0.17},
+ BoldItalicFont=UnBatangBold, BoldItalicFeatures={FakeSlant=0.17},
+ BoldSlantedFont=UnBatangBold, BoldSlantedFeatures={FakeSlant=0.17},
+ interhchar=-0.045em,
+ lowerperiod=0.1em ]
+ {UnBatang}
+ \setsanshangulfont
+ [ ExternalLocation,
+ Mapping=tex-text,
+ BoldFont=UnDotumBold,
+ ItalicFont=UnDotum, ItalicFeatures={FakeSlant=0.17},
+ SlantedFont=UnDotum, SlantedFeatures={FakeSlant=0.17},
+ BoldItalicFont=UnDotumBold, BoldItalicFeatures={FakeSlant=0.17},
+ BoldSlantedFont=UnDotumBold, BoldSlantedFeatures={FakeSlant=0.17},
+ lowerperiod=0.1em ]
+ {UnDotum}
+ \setmonohangulfont
+ [ ExternalLocation,
+ Scale=1.05,
+ BoldFont=UnTaza, BoldFeatures={FakeBold=2},
+ ItalicFont=UnTaza, ItalicFeatures={FakeSlant=0.17},
+ SlantedFont=UnTaza, SlantedFeatures={FakeSlant=0.17},
+ BoldItalicFont=UnTaza, BoldItalicFeatures={FakeBold=2,FakeSlant=0.17},
+ BoldSlantedFont=UnTaza, BoldSlantedFeatures={FakeBold=2,FakeSlant=0.17}]
+ {UnTaza}
+ \let\hnjmonofont\korsansfont
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% for lazy font setting
+\AtBeginDocument{%
+ \ifdefined\kormainfont\else \let\kormainfont\relax
+ \PackageWarning{xetexko-font}{Main (Serif) Hangul Font is not set.^^J}
+ \fi
+ \ifdefined\korsansfont\else \let\korsansfont\kormainfont \fi
+ \ifdefined\kormonofont\else \let\kormonofont\korsansfont \fi
+ \ifdefined\hnjmainfont\else \let\hnjmainfont\kormainfont \fi
+ \ifdefined\hnjsansfont\else \let\hnjsansfont\korsansfont \fi
+ \ifdefined\hnjmonofont\else \let\hnjmonofont\kormonofont \fi
+ % set space glue from hangul font
+ \if@hangul
+ \edef\reserved@a{\familydefault}
+ \edef\reserved@b{\rmdefault}
+ \ifx\reserved@a\reserved@b
+ \XK@hangul@spaceskip{\kormainfont}
+ \else
+ \XK@hangul@spaceskip{\korsansfont}
+ \fi
+ \fi
+}
+\def\XK@hangul@spaceskip#1{%
+ \bgroup
+ \@for\reserved@a:=,\small,\footnotesize,\large,\Large,\LARGE\do{%
+ \reserved@a
+ \bgroup
+ #1%
+ \global\dimen@\fontdimen2\font
+ \global\dimen@ii\fontdimen7\font
+ \egroup
+ \fontdimen2\font=\dimen@
+ \fontdimen3\font=.5\dimen@
+ \fontdimen4\font=.3333\dimen@
+ \fontdimen7\font=\dimen@ii
+ }%
+ \egroup
+}
+
+%%%%%%%%%%%%%%%%%%%%%
+% hangul in math mode
+\def\setmathhangulfont{%
+ \@ifnextchar[{\setmathhangulfont@}{\setmathhangulfont@[]}}
+\def\setmathhangulfont@[#1]#2{%
+ \zf@fontspec{#1}{#2}%
+ \xdef\xetexko@math@hangul@family{\zf@family}}
+\AtBeginDocument{%
+ \begingroup
+ \ifx\xetexko@math@hangul@family\undefined
+ \edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
+ \ifx\f@family\@tempb \korsansfont \else
+ \ifx\f@family\@tempc \kormonofont \else
+ \kormainfont \fi\fi
+ \xdef\xetexko@math@hangul@family{\f@family}\fi
+ \endgroup
+ \DeclareSymbolFont{mathhangul}\zf@enc\xetexko@math@hangul@family
+ \mddefault\updefault
+ \ifcsname \zf@enc/\xetexko@math@hangul@family/\bfdefault/\updefault\endcsname
+ \SetSymbolFont{mathhangul}{bold}\zf@enc\xetexko@math@hangul@family
+ \bfdefault\updefault
+ \fi
+ \setmathhangulblock{AC00}{D7A3}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% under [hangul] option
+\if@hangul
+ \linespread{1.3888}
+ \footnotesep=1.3888\footnotesep
+ \skip\footins=1.3888\skip\footins plus6pt minus3pt
+\fi
+
+\endinput