summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty355
1 files changed, 355 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty b/Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty
new file mode 100644
index 00000000000..2a837045d5a
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/luatexko/luatexko-core.sty
@@ -0,0 +1,355 @@
+% $Id: luatexko-core.sty,v 1.22 2012/11/23 05:06:02 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.
+
+\ifx\ProvidesPackage\undefined
+ \input luaotfload.sty
+ \catcode`@ = 11
+\else
+ \ProvidesPackage{luatexko-core}[2013/05/10 v1.0 Typesetting Korean with LuaTeX]
+ \RequirePackage{luaotfload}
+\fi
+
+%% attributes
+\newluatexattribute\finemathattr \finemathattr\@ne % finemath on by default
+\newluatexattribute\cjtypesetattr
+\newluatexattribute\dotemphattr
+\newluatexattribute\autojosaattr
+\newluatexattribute\luakorubyattr \chardef\luakorubyattrnum\the\allocationnumber
+\newluatexattribute\hangfntattr
+\newluatexattribute\hanjfntattr
+
+%% load lua modules
+\RequireLuaModule{luatexko}
+
+%% japanese/chinese/pre-modern
+\protected\def\japanese{\frenchspacing\cjtypesetattr\@ne
+ \luatexkolatinspaceskip\parindent1em }
+\protected\def\Schinese{\frenchspacing\cjtypesetattr\tw@
+ \luatexkolatinspaceskip\parindent2em }
+\protected\def\Tchinese{\frenchspacing\cjtypesetattr\thr@@
+ \luatexkolatinspaceskip\parindent2em }
+\let\chinese\Schinese
+% korean in japanese/chinese env.
+\protected\def\korean{\unsetluatexattribute\cjtypesetattr}
+
+% inhibitglue
+\protected\def\inhibitglue{{\unsetluatexattribute\cjtypesetattr\hskip\z@skip}}
+
+\def\luatexkolatinspaceskip{\spaceskip\fontdimen\tw@\the\font
+ plus \fontdimen\thr@@\the\font minus \fontdimen4\the\font}
+
+%% auto josa
+\protected\def\은{{\autojosaattr\@ne 은}}
+\let\는\은
+
+\protected\def\을{{\autojosaattr\@ne 을}}
+\let\를\을
+
+\protected\def\와{{\autojosaattr\@ne 와}}
+\let\과\와
+
+\protected\def\가{{\autojosaattr\@ne 가}}
+\protected\def\이{{\autojosaattr\@ne 이}}
+\protected\def\라{\이라}
+
+\protected\def\으{{\autojosaattr\@ne 으}}
+\protected\def\로{\으로}
+
+%% dot-emphasis
+\def\dotemphraise{0.4em }
+\unless\ifdefined\bfseries\let\bfseries\bf\fi
+\def\dotemphchar{\bfseries ^^^^02d9}
+\newcount\dotemph@cnt \dotemph@cnt\z@
+\protected\def\dotemph#1{{%
+ \ifnum\dotemph@cnt > 100 \global\dotemph@cnt\z@ \fi
+ \global\advance\dotemph@cnt\@ne
+ \setbox\z@\hbox{\raise\dotemphraise\hbox{\dotemphchar}}\ht\z@\z@\dp\z@\z@
+ \directlua{luatexko.dotemphnode[\the\dotemph@cnt] = node.copy_list(tex.box[0])}%
+ \dotemphattr\dotemph@cnt #1}}
+
+%% ruby : ruby.sty by Lemberg is excellent; but
+%% it doesn't match well with luatexko, so implemented anew
+%% with plain tex support and enhanced features.
+\def\rubysize{0.6} % size of ruby compared to base character
+\def\rubysep{0.1ex} % distance between base character and ruby
+% users can define \rubyfont : eg. \font\rubyfont={foo:+ruby}
+\newif\ifruby@overlap
+\let\rubyoverlap\ruby@overlaptrue
+\let\rubynooverlap\ruby@overlapfalse
+\rubyoverlap % ruby may protrude over adjacent chars
+\newcount\luakorubyattr@cnt\luakorubyattr@cnt\z@
+\protected\def\ruby#1#2{%
+ \ifnum\luakorubyattr@cnt > 1000 \global\luakorubyattr@cnt\z@ \fi
+ \global\advance\luakorubyattr@cnt\@ne
+ \begingroup
+ \setbox\z@\hbox attr\luakorubyattrnum\luakorubyattr@cnt{% base character
+ \vrule width\z@ height.88em depth\z@\relax #1}%
+ \setbox\tw@\hbox{% ruby
+ \ifdefined\rubyfont \rubyfont \fi
+ \expandafter\dimen@\pdffontsize\the\font
+ \dimen@\rubysize\dimen@
+ \ifcsname selectfont\endcsname
+ \fontsize\dimen@\dimen@\selectfont
+ \else
+ \ifdefined\rubyfont \else
+ \resizecurrentfont{\the\dimen@}%
+ \fi
+ \fi #2}\ht\tw@\z@\dp\tw@\z@
+ \directlua{%
+ luatexko.rubynode[\the\luakorubyattr@cnt] = {
+ node.copy_list(tex.box[2]),
+ \number\numexpr\dimexpr\rubysep\relax\relax,
+ \ifruby@overlap true\else false\fi}}%
+ \leavevmode\box\z@
+ \endgroup}
+
+\ifcsname selectfont\endcsname\else
+ % font resize under plain tex
+ % ex: \resizecurrentfont{9pt}
+ \def\resizecurrentfont#1{%
+ \edef\curr@font@name{\directlua{
+ local f = font.current()
+ f = f and fonts.hashes.identifiers[f]
+ f = f and f.properties and f.properties.name
+ if not f then
+ f = "\fontname\font"
+ f = string.gsub(f," at .+","")
+ end
+ if f then
+ tex.sprint(f)
+ else
+ error("cannot get current font name")
+ end
+ }}%
+ \font\resized@font={\curr@font@name} at #1\resized@font}
+\fi
+
+%% vertical typesetting
+%% EXPERIMENTAL code: don't use this
+\def\luatexko@vertical{%
+ \ifnum\cjtypesetattr<\@ne
+ \cjtypesetattr\z@ % korean-vertical
+ \spaceskip 0.5em plus 0.15em minus 0.06em
+ \parindent 1em
+ \fi
+}
+\protected\def\vertical#1{%
+ \leavevmode
+ \setbox\z@\vbox\bgroup
+ \hsize#1\relax
+ \luatexko@vertical
+ \parindent\z@
+ \everypar{}%
+ \leftskip\z@
+ \rightskip\z@ }
+\protected\def\endvertical{\egroup\luatexkorotatebox\z@\box\z@}
+\protected\def\luatexkorotatebox#1{%
+ \ifvbox#1\count@\@ne\else\count@\z@\fi
+ \dimen@\wd#1\dimen@ii\dimexpr\ht#1+\dp#1\relax
+ \setbox#1\ifnum\count@=\@ne
+ \vbox to\dimen@\bgroup\hbox to\dimen@ii\bgroup\hfil\else
+ \hbox to\dimen@ii\bgroup\vbox to\dimen@\bgroup\fi
+ \wd#1\z@ \ht#1\z@ \dp#1\z@
+ \pdfliteral{ q 0 -1 1 0 0 0 cm}\box#1\pdfliteral{ Q}%
+ \ifnum\count@=\@ne\egroup\vfil\else\vfil\egroup\hfil\fi\egroup}
+
+% do not veticalize headline/footline
+\ifdefined\ProvidesPackage % for latex
+ \def\verticaltypesetting{%
+ \maxdepth\z@ \luatexko@vertical
+ \dimen@\textwidth \textwidth\textheight \textheight\dimen@
+ \edef\@outputpage{\unexpanded{\luatexkorotatebox\@outputbox
+ \textwidth\textheight}\unexpanded\expandafter{\@outputpage}}}
+\else % for plain
+ \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}\luatexkorotatebox\z@\box\z@}%
+ \maxdepth\z@ \luatexko@vertical}
+\fi
+
+%% underline using post_linebreak_filter
+%% ulem doesn't work well with luatexko;
+%% especially linebreak does not occur inside cjk words.
+\def\ulinewidth{0.04em }
+\def\ulinedown {0.25em }
+\newcount\ulinebox@cnt\ulinebox@cnt\z@
+\protected\def\uline#1{%
+ \ifnum\ulinebox@cnt > 100 \global\ulinebox@cnt\z@ \fi
+ \global\advance\ulinebox@cnt\@ne
+ \dimen@\dimexpr\ulinedown+\ulinewidth\relax
+ \dimen@ii-\dimexpr\ulinedown\relax
+ \setbox\z@\hbox{\vrule width\z@ height\dimen@ii depth\dimen@}%
+ \directlua{luatexko.ulinebox[\the\ulinebox@cnt]=node.copy_list(tex.box[0].head)}%
+ \leavevmode\special{luako:ulinebegin=\the\ulinebox@cnt}%
+ #1\special{luako:ulineend}}
+% strike-out
+\protected\def\sout#1{{\def\ulinedown{-0.5ex-\ulinewidth/2}\uline{#1}}}
+% ulem with arbitray box
+\protected\def\markoverwidth#1#2{%
+ \ifnum\ulinebox@cnt > 100 \global\ulinebox@cnt\z@ \fi
+ \global\advance\ulinebox@cnt\@ne
+ \setbox\z@\hbox{#1}%
+ \directlua{luatexko.ulinebox[\the\ulinebox@cnt]=node.copy_list(tex.box[0])}%
+ \leavevmode\special{luako:ulinebegin=\the\ulinebox@cnt}%
+ #2\special{luako:ulineend}}
+\protected\def\uuline{\dimen@ii-\dimexpr\ulinedown\relax
+ \dimen@\dimexpr\ulinedown+\ulinewidth\relax
+ \markoverwidth{\vtop{\hrule width.2em height\dimen@ii depth\dimen@
+ \kern.1em\hrule height\dimen@ii depth\dimen@}}}
+\protected\def\uwave {\ifx\ltxko@sixly\undefined \font\ltxko@sixly=lasy6 \fi
+ \markoverwidth{\lower4\p@\hbox{\ltxko@sixly\char58}}}
+\protected\def\xout {\markoverwidth{\hbox to.35em{/\hss}}}
+\protected\def\dashuline{\markoverwidth{\kern.125em\vtop{\kern\ulinedown
+ \hrule width.3em height\z@ depth\ulinewidth}\kern.125em}}
+\protected\def\dotuline{\dimen@\dimexpr\ulinedown+0.1ex\relax
+ \markoverwidth{\lower\dimen@\hbox{\kern.1em .\kern.04em}}}
+
+%% hangul font -- core
+\def\luatexko@hangul@selectfont{%
+ \begingroup
+ \let\luatexko@hangul@selectfont\relax
+ \let\luatexko@hanja@selectfont\relax
+ \check@hangul@family
+ \ifdefined\hangul@font \hangul@font \fi
+ \expandafter\endgroup
+ \directlua{
+ local i = font.current()
+ local name = fonts.hashes.identifiers[i]
+ name = name and name.properties and name.properties.name
+ luatexko.tmpfntname = name or "luatexkodefault"
+ }%
+ \directlua{
+ local name = luatexko.tmpfntname
+ local hang = luatexko.hangulfont[name]
+ if hang then
+ tex.setattribute("hangfntattr", hang)
+ else
+ local c = luatexko.hangulcount
+ c = c + 1
+ luatexko.hangulcount = c
+ tex.setattribute("hangfntattr",c)
+ luatexko.hangulfont[name] = c
+ luatexko.hangulfont[c] = name
+ end }%
+}
+\def\luatexko@hanja@selectfont{%
+ \begingroup
+ \let\luatexko@hangul@selectfont\relax
+ \let\luatexko@hanja@selectfont\relax
+ \check@hanja@family
+ \ifdefined\hanja@font \hanja@font \fi
+ \expandafter\endgroup
+ \directlua{
+ local i = font.current()
+ local name = fonts.hashes.identifiers[i]
+ name = name and name.properties and name.properties.name
+ luatexko.tmpfntname = name or "luatexkodefault"
+ }%
+ \directlua{
+ local name = luatexko.tmpfntname
+ local hanj = luatexko.hangulfont[name]
+ if hanj then
+ tex.setattribute("hanjfntattr", hanj)
+ else
+ local c = luatexko.hangulcount
+ c = c + 1
+ luatexko.hangulcount = c
+ tex.setattribute("hanjfntattr",c)
+ luatexko.hangulfont[name] = c
+ luatexko.hangulfont[c] = name
+ end }%
+ \ifnum\cjtypesetattr>\z@\luatexkolatinspaceskip\fi
+}
+\let\check@hangul@family\relax
+\let\check@hanja@family \relax
+% user interface for plain tex
+\protected\def\hangulfont
+ {\afterassignment\luatexko@hangul@selectfont\font\hangul@font}
+\protected\def\hanjafont
+ {\afterassignment\luatexko@hanja@selectfont \font\hanja@font }
+
+%% hangul in math mode -- general
+\def\setmathhangulblock#1#2{%
+ \count@="#1
+ \loop
+ \luatexUmathcode\count@ = 7 \symmathhangul \count@
+ \ifnum\count@<"#2
+ \advance\count@\@ne
+ \repeat}
+\ifdefined\ProvidesPackage
+ \let\setmathhangulfont\@gobble
+\else
+ % for plain; see luatexko.sty for latex
+ \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}
+\fi
+
+%% hangul normalization
+\def\luatexhangulnormalize{\RequireLuaModule{luatexko-normalize}%
+ \afterassignment\luatexh@ngulnorm@lize\count@}
+\def\luatexh@ngulnorm@lize{%
+ \ifnum\count@=\z@
+ \directlua{ luatexkonormalize.unload() }%
+ \else\ifnum\count@=\@ne % nfc
+ \directlua{ luatexkonormalize.compose() }%
+ \else\ifnum\count@=\tw@ % nfd
+ \directlua{ luatexkonormalize.decompose() }%
+ \fi\fi\fi}
+
+%% uhc to utf8
+\def\luatexuhcinputencoding{\RequireLuaModule{luatexko-uhc2utf8}%
+ \afterassignment\luatexuhcinput@ncoding\count@}
+\def\luatexuhcinput@ncoding{%
+ \ifnum\count@>\z@
+ \directlua{ luatexkouhc2utf8.startconvert() }%
+ \else
+ \directlua{ luatexkouhc2utf8.stopconvert() }%
+ \fi}
+
+%% uhc file names
+\def\luatexuhcfilenames{\RequireLuaModule{luatexko-uhc2utf8}%
+ \afterassignment\luatexuhcfilen@mes\count@}
+\def\luatexuhcfilen@mes{%
+ \ifnum\count@>\z@
+ \directlua{ luatexkouhc2utf8.start_uhc_filename() }%
+ \else
+ \directlua{ luatexkouhc2utf8.stop_uhc_filename() }%
+ \fi}
+
+%% use hanja font for hanja chars
+\def\hanjafontforhanja{\afterassignment\h@nj@fontforh@nj@\count@}
+\let\hanjabyhanjafont\hanjafontforhanja
+\def\h@nj@fontforh@nj@{%
+ \ifnum\count@>\z@
+ \directlua{ luatexko.hanjafontforhanja = true }%
+ \else
+ \directlua{ luatexko.hanjafontforhanja = false }%
+ \fi}
+
+%% frenchspacing is default
+\frenchspacing
+
+%% 말줄임표
+\def\hellipsis{^^^^2026\kern-.1em ^^^^2026}
+
+\endinput