%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2011/11/22 Patch to NFSS2 for LuaLaTeX-ja]
+\ProvidesPackage{lltjfont}[2014/01/23 Patch to NFSS2 for LuaTeX-ja]
\let\k@encoding\@empty
\let\ck@encoding\@empty
\ifdefined\chs\else\newdimen\chs\fi
\ifdefined\cHT\else\newdimen\cHT\fi
%\let\afont\font
-\def\inlist@#1#2{%
- \def\in@@##1<#1>##2##3\in@@{%
- \ifx\in@##2\in@false\else\in@true\fi}%
- \in@@#2<#1>\in@\in@@}
-\def\fam@elt{\noexpand\fam@elt}
-\def\enc@elt{\noexpand\enc@elt}
-\let\kenc@list\@empty
-\let\kyenc@list\@empty
-\let\ktenc@list\@empty
+
\newbox\tstrutbox
\newbox\zstrutbox
\def\strut{\relax
\expandafter\endgroup
\DeclareYokoKanjiEncoding@}
\def\DeclareYokoKanjiEncoding@#1#2#3{%
- \expandafter
- \ifx\csname T@#1\endcsname\relax
+ \expandafter\ifx\csname T@#1\endcsname\relax
\def\cdp@elt{\noexpand\cdp@elt}%
\xdef\cdp@list{\cdp@list\cdp@elt{#1}%
{\default@k@family}{\default@k@series}%
{\default@k@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
- \def\enc@elt{\noexpand\enc@elt}%
- \xdef\kyenc@list{\kyenc@list\enc@elt<#1>}%
- \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+ \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}%
\else
\@font@info{Redeclaring KANJI (yoko) font encoding #1}%
\fi
\expandafter\endgroup
\DeclareTateKanjiEncoding@}
\def\DeclareTateKanjiEncoding@#1#2#3{%
- \expandafter
- \ifx\csname T@#1\endcsname\relax
+ \expandafter\ifx\csname T@#1\endcsname\relax
\def\cdp@elt{\noexpand\cdp@elt}%
\xdef\cdp@list{\cdp@list\cdp@elt{#1}%
{\default@k@family}{\default@k@series}%
{\default@k@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
- \def\enc@elt{\noexpand\enc@elt}%
- \xdef\ktenc@list{\ktenc@list\enc@elt<#1>}%
- \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+ \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}%
\else
\@font@info{Redeclaring KANJI (tate) font encoding #1}%
\fi
\math@fontsfalse
\every@math@size{}%
\fontsize{#6}\z@
- \edef\tmp@item{{#2}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
- \ifin@
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@%
\usekanji{#2}{#3}{#4}{#5}%
\global\let#1\getjfont
\else
- %\expandafter\expandafter\expandafter
- %\inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
- %\ifin@
+ %\directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@%
% \usekanji{#2}{#3}{#4}{#5}%
% \let\font\tfont
%\else
\fi
\endgroup
}
+\def\DLMfontsw@standard#1#2#3{#1{#2{#3}}}
\def\reDeclareMathAlphabet#1#2#3{%
- \edef#1{\noexpand\protect\expandafter\noexpand\csname%
- \expandafter\@gobble\string#1\space\space\endcsname}%
- \edef\@tempa{\expandafter\@gobble\string#2}%
- \edef\@tempb{\expandafter\@gobble\string#3}%
- \edef\@tempc{\string @\expandafter\@gobbletwo\string#2}%
- \ifx\@tempc\@tempa%
- \edef\@tempa{\expandafter\@gobbletwo\string#2}%
- \edef\@tempb{\expandafter\@gobbletwo\string#3}%
+ \ifdefined#2
+ \@temptokena\expandafter{#2}%
+ \else
+ \@temptokena{#2}%
\fi
- \expandafter\edef\csname\expandafter\@gobble\string#1\space\space\endcsname%
- {\noexpand\DualLang@mathalph@bet%
- {\expandafter\noexpand\csname\@tempa\space\endcsname}%
- {\expandafter\noexpand\csname\@tempb\space\endcsname}%
- }%
-}
-\@onlypreamble\reDeclareMathAlphabet
-\def\DualLang@mathalph@bet#1#2{%
- \relax\ifmmode
- \ifx\math@bgroup\bgroup% 2e normal style (\mathrm{...})
- \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
- \else
- \ifx\math@bgroup\relax% 2e two letter style (\rm->\mathrm)
- \let\DualLang@Mfontsw\DLMfontsw@oldstyle
- \else
- \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
- \fi
- \fi
+ \ifdefined#3
+ \toks0\expandafter{#3}%
\else
- \let\DualLang@Mfontsw\@firstoftwo
+ \toks0{#3}%
\fi
- \DualLang@Mfontsw{#1}{#2}%
+ \long\protected\edef#1{%
+ \noexpand\DLMfontsw@standard{\the\@temptokena}{\the\toks0}}%
}
-\def\DLMfontsw@standard#1#2#3{#1{#2{#3}}\egroup}
-\def\DLMfontsw@oldstyle#1#2{#1\relax\@fontswitch\relax{#2}}
-\def\DLMfontsw@oldlfont#1#2{#1\relax#2\relax}
+\@onlypreamble\reDeclareMathAlphabet
\def\all@shape{all}%
\def\DeclareRelationFont#1#2#3#4#5#6#7#8{%
\def\rel@shape{#4}%
\DeclareRobustCommand\selectfont{%
\let\tmp@error@fontshape\error@fontshape
\let\error@fontshape\error@kfontshape
- \edef\tmp@item{{\k@encoding}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
- \ifin@
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
\let\cy@encoding\k@encoding
\edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
\else
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
- \ifin@
- \let\ct@encoding\k@encoding
- \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
- \else
+ %\directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+ % \let\ct@encoding\k@encoding
+ % \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
+ %\else
\@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
- \fi
+ %\fi
\fi
- %\let\font\tfont
- %\let\k@encoding\ct@encoding
- %\xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
- %\pickup@font
- %\font@name
\let\k@encoding\cy@encoding
\xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
\pickup@jfont
\font@name
- \expandafter\def\expandafter\k@encoding\tmp@item
+ \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item
\kenc@update
\let\error@fontshape\tmp@error@fontshape
\if@knjcmd \@knjcmdfalse
\csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
\fi
\fi
- %\let\font\afont
\xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
\pickup@font
\font@name
\ifx\f@linespread\baselinestretch \else
\set@fontsize\baselinestretch\f@size\f@baselineskip
\fi
- \size@update}
+ \size@update
+% ここからは altfont 用
+ \ltj@@does@alt@set{\curr@kfontshape}%
+ % alt fonts の定義
+ \directlua{luatexja.jfont.output_alt_font_cmd('\luatexluaescapestring{\curr@kfontshape}')}%
+ % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
+ \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
+ \fi
+}
\def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
\KanjiEncodingPair{JY3}{JT3}
\def\set@fontsize#1#2#3{%
\fi
}
\DeclareRobustCommand\fontencoding[1]{%
- \edef\tmp@item{{#1}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
- \ifin@ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@%
+ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
\def\@@kenc@update{%
\default@KT
\csname T@\k@encoding\endcsname
\csname D@\k@encoding\endcsname
\let\kenc@update\relax
\let\ck@encoding\k@encoding
- \edef\tmp@item{{\k@encoding}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
- \ifin@ \let\cy@encoding\k@encoding
+ \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}
+ \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@%
+ \let\cy@encoding\k@encoding
\else
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
- \ifin@ \let\ct@encoding\k@encoding
- \else
+ %\directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@%
+ % \let\ct@encoding\k@encoding
+ %\else
\@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
- \fi
+ %\fi
\fi
}
\let\kenc@update\relax
\newif\if@tempswz
\DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
\DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
-% \notkfam@list@<enc>: list of non-defined kanji families under <enc>
-% \kfam@list@<enc>: list of kanji families under <enc>, defined in a .fd file
\DeclareRobustCommand\fontfamily[1]{%
- \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+ \@notkfamfalse\@notffamfalse
+ \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+ \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}%
\ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
\edef\k@family{#1}%
\else % search font definition file...
- \ifcsname kfam@list@\k@encoding\endcsname\else
- \expandafter\gdef\csname kfam@list@\k@encoding\endcsname{}
- \expandafter\gdef\csname notkfam@list@\k@encoding\endcsname{}
- \fi
- \edef\@templist{\@nameuse{kfam@list@\k@encoding}}%
- \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \directlua{luatexja.jfont.is_kfam(\tmp@enc, \tmp@item)}%
\ifin@\edef\k@family{#1}\else%
- \edef\@templist{\@nameuse{notkfam@list@\k@encoding}}%
- \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \directlua{luatexja.jfont.is_Nkfam(\tmp@enc, \tmp@item)}%
\ifin@\@notkfamtrue\else%
- \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\k@encoding+%
- \message{(I search kanjifont definition file: \@@temp#1.fd)}%
+ \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\k@encoding+%
+ \message{(I search kanjifont definition file: \@@temp)}%
\IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
\if@tempswz
- \expandafter\xdef\csname kfam@list@\k@encoding\endcsname
- {\@nameuse{kfam@list@\k@encoding}\fam@elt<#1>}\edef\k@family{#1}%
+ \directlua{luatexja.jfont.add_kfam_list(\tmp@enc, \tmp@item)}%
+ \edef\k@family{#1}%
\else
- \expandafter\xdef\csname notkfam@list@\k@encoding\endcsname
- {\@nameuse{notkfam@list@\k@encoding}\fam@elt<#1>}\@notkfamtrue%
+ \directlua{luatexja.jfont.add_Nkfam_list(\tmp@enc, \tmp@item)}%
+ \@notkfamtrue%
\fi
\fi
\fi
\fi
+ \edef\tmp@enc{'\luatexluaescapestring{\f@encoding}'}%
\ifcsname \f@encoding+#1\endcsname
\edef\f@family{#1}%
\else % search font definition file...
- \ifcsname ffam@list@\f@encoding\endcsname\else
- \expandafter\gdef\csname ffam@list@\f@encoding\endcsname{}
- \expandafter\gdef\csname notffam@list@\f@encoding\endcsname{}
- \fi
- \edef\@templist{\@nameuse{ffam@list@\f@encoding}}%
- \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \directlua{luatexja.jfont.is_ffam(\tmp@enc, \tmp@item)}%
\ifin@\edef\f@family{#1}\else
- \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
- \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \directlua{luatexja.jfont.is_Nffam(\tmp@enc, \tmp@item)}%
\ifin@\@notffamtrue\else
- \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\f@encoding+%
- \message{(I search font definition file: \@@temp#1.fd)}%
+ \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
+ \message{(I search font definition file: \@@temp)}%
\IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
\if@tempswz
- \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
- {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
+ \directlua{luatexja.jfont.add_ffam_list(\tmp@enc, \tmp@item)}%
+ \edef\f@family{#1}%
\else
- \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
- {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
+ \directlua{luatexja.jfont.add_Nffam_list(\tmp@enc, \tmp@item)}%
+ \@notffamtrue%
\fi
\fi
\fi
\def\useroman#1#2#3#4{%
\romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
\selectfont\ignorespaces}
-\def\usefont#1#2#3#4{%
- \edef\tmp@item{{#1}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
- \ifin@ \usekanji{#1}{#2}{#3}{#4}%
+\protected\def\usefont#1#2#3#4{%
+ \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@%
+ \usekanji{#1}{#2}{#3}{#4}%
\else\useroman{#1}{#2}{#3}{#4}%
\fi}
\DeclareRobustCommand\normalfont{%
\romanseries{\seriesdefault}%
\romanshape{\shapedefault}%
\selectfont\ignorespaces}
-\adjustbaseline
\let\reset@font\normalfont
\DeclareRobustCommand\mcfamily
{\not@math@alphabet\mcfamily\mathmc
% #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
\def\ltj@@IsFontJapanese#1{%
- \expandafter\ltj@@IsFontJapaneseX#1//:%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kenc@list}}
-\def\ltj@@IsFontJapaneseX#1/#2/:{\edef\tmp@item{{\directlua{tex.print('#1')}}}}
+ \directlua{luatexja.jfont.is_kenc(string.match(
+ '\luatexluaescapestring{#1}', '[^/]+'))}}
\let\extract@afont\extract@font
\fi
\let\getjfont\font@name}
+% 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように
+% わざと「ゴミをつける」
+\def\ltj@@patch@external@font#1 at{%
+ #1\directlua{luatexja.jfont.print_aftl_address()}\space at%
+}
\def\extract@jfont{%
- \get@external@font
+ \get@external@font
+ \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}%
+ \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
+ \fi
\expandafter\globaljfont\font@name\external@font\relax
\font@name%\global\zw=\zw\global\zh=\zh
\csname \f@encoding+\f@family\endcsname
\aftergroup\subst@correction
}
\def\do@subst@correction{%
- \ltj@@IsFontJapanese{\curr@fontshape}\ifin@
+ \ltj@@IsFontJapanese{\curr@fontshape}\ifin@%
\ltj@@ja@do@subst@correction
\else
\ltj@@al@do@subst@correction
\pickup@jfont\let\scriptfont@name\font@name
\xdef\font@name{\csname \string#2/\ssf@size\endcsname}%
\pickup@jfont
- \edef\math@fonts{\math@fonts\ltjsetparameter{%
- jatextfont={#1,\textfont@name},%
- jascriptfont={#1,\scriptfont@name},%
- jascriptscriptfont={#1,\font@name}}}%
+ \edef\math@fonts{\math@fonts\ltj@setpar@global%
+ \ltj@@set@stackfont#1,\textfont@name:{MJT}%
+ \ltj@@set@stackfont#1,\scriptfont@name:{MJS}%
+ \ltj@@set@stackfont#1,\font@name:{MJSS}%
+ }%
}
\def\getanddefine@fonts#1#2{%
\ifin@\jfam#2\relax\else\mathgroup#2\relax\fi
\expandafter\math@egroup\fi}%
+%%%%%% Alternate Japanese Fonts
+%%%% \DeclareAlternateKanjiFont<Benc><Bfam><Bser><Bshape><Aenc><Afam><Aser><Ashape><range>
+% いつも global
+\def\DeclareAlternateKanjiFont#1#2#3#4#5#6#7#8#9{%
+ {\def\ltj@temp@bfont{#1/#2/#3/#4}\def\ltj@temp@afont{#5/#6/#7/#8}%
+ \expandafter\ltj@@altfont@latex#9,,}\ignorespaces}
+\def\ltj@@altfont@latex#1,{\def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\let\@next=\relax\else
+ \ltj@@altfont@latexA{#1}\let\@next=\ltj@@altfont@latex\fi\@next}
+\def\ltj@@altfont@latexA#1{\ltj@@altfont@latexB#1--\@nil}
+\def\ltj@@altfont@latexB#1-#2-#3\@nil{\def\ltj@temp{#3}%
+ \ifx\ltj@temp\empty
+ \ltj@tempcnta=#1\relax\ltj@tempcntb=\ltj@tempcnta
+ \else
+ \def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\ltj@tempcnta='200\else\ltj@tempcnta=#1\fi\relax
+ \def\ltj@temp{#2}%
+ \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF\else\ltj@tempcntb=#2\fi\relax%"
+ \fi
+ \directlua{luatexja.jfont.set_alt_font_latex(
+ \the\ltj@tempcnta,\the\ltj@tempcntb,
+ '\luatexluaescapestring{\ltj@temp@afont}',
+ '\luatexluaescapestring{\ltj@temp@bfont}')}%
+ }
+
+%%%% \ClearAlternateKanjiFont<Benc><Bfam><Bser><Bshape>
+% いつも global
+\def\ClearAlternateKanjiFont#1#2#3#4{%
+ \directlua{luatexja.jfont.clear_alt_font_latex('\luatexluaescapestring{#1/#2/#3/#4}')}}
+
+\def\ltj@pickup@altfont@aux#1{%
+ {\edef\font@name{\csname #1/\f@size\endcsname}\pickup@jfont}%
+}
+\def\ltj@pickup@altfont@copy#1#2{%
+ \ltj@@getjfontnumber#1%
+ \directlua{luatexja.jfont.pickup_alt_font_b(\the\ltj@tempcntc,'\luatexluaescapestring{#2}')}%
+}
+
+\def\ltj@@does@alt@set#1{%
+ \directlua{luatexja.jfont.does_alt_set'\luatexluaescapestring{#1}'}}
+
\endinput