--
luatexbase.provides_module({
name = 'luatexja.jfont',
- date = '2019/09/26',
+ date = '2020-04-01',
description = 'Loader for Japanese fonts',
})
-- LATEX INTERFACE
------------------------------------------------------------------------
do
+ local scan_arg = token.scan_argument
-- these function are called from ltj-latex.sty
local fenc_list, kyenc_list, ktenc_list = {}, {}, {}
- function luatexja.jfont.add_fenc_list(enc) fenc_list[enc] = 'true ' end
- function luatexja.jfont.add_kyenc_list(enc) kyenc_list[enc] = 'true ' end
- function luatexja.jfont.add_ktenc_list(enc) ktenc_list[enc] = 'true ' end
- function luatexja.jfont.is_kyenc(enc)
- tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ function luatexja.jfont.add_fenc_list() fenc_list[scan_arg()] = 'true ' end
+ function luatexja.jfont.add_kyenc_list() kyenc_list[scan_arg()] = 'true ' end
+ function luatexja.jfont.add_ktenc_list() ktenc_list[scan_arg()] = 'true ' end
+ function luatexja.jfont.is_kyenc()
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[scan_arg()] or 'false '))
end
- function luatexja.jfont.is_ktenc(enc)
- tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ktenc_list[enc] or 'false '))
+ function luatexja.jfont.is_ktenc()
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ktenc_list[scan_arg()] or 'false '))
end
- function luatexja.jfont.is_kenc(enc)
+ function luatexja.jfont.is_kenc()
+ local enc = scan_arg()
tex.sprint(cat_lp, '\\let\\ifin@\\if'
.. (kyenc_list[enc] or ktenc_list[enc] or 'false '))
end
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2020/03/27 Patch to NFSS2 for LuaTeX-ja]
+\ProvidesPackage{lltjfont}[2020-04-01 Patch to NFSS2 for LuaTeX-ja]
%% patching \DeclareTextComposite
\def\ltj@chardef@text@cmd#1{%
\DeclareRobustCommand\zstrut{\relax\hbox{\ltj@@orig@utod
\ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}}
-{%
- \def\cdp@elt#1#2#3#4{%
- \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}}%
- \cdp@list%
+
+
+\newluafunction\ltj@@add@fenc@@inner
+\newluafunction\ltj@@add@kyenc@@inner
+\newluafunction\ltj@@add@ktenc@@inner
+\newluafunction\ltj@@is@kyenc@@inner
+\newluafunction\ltj@@is@ktenc@@inner
+\newluafunction\ltj@@is@kenc@@inner
+\directlua{%
+ local lf = lua.get_functions_table()
+ lf[\the\ltj@@add@fenc@@inner] = luatexja.jfont.add_fenc_list
+ lf[\the\ltj@@add@kyenc@@inner] = luatexja.jfont.add_kyenc_list
+ lf[\the\ltj@@add@ktenc@@inner] = luatexja.jfont.add_ktenc_list
+ lf[\the\ltj@@is@kyenc@@inner] = luatexja.jfont.is_kyenc
+ lf[\the\ltj@@is@ktenc@@inner] = luatexja.jfont.is_ktenc
+ lf[\the\ltj@@is@kenc@@inner] = luatexja.jfont.is_kenc
}
+\luadef\ltj@@add@fenc \ltj@@add@fenc@@inner
+\luadef\ltj@@add@kyenc\ltj@@add@kyenc@@inner
+\luadef\ltj@@add@ktenc\ltj@@add@ktenc@@inner
+\luadef\ltj@@is@kyenc \ltj@@is@kyenc@@inner
+\luadef\ltj@@is@ktenc \ltj@@is@ktenc@@inner
+\luadef\ltj@@is@kenc \ltj@@is@kenc@@inner
+
+{\def\cdp@elt#1#2#3#4{\ltj@@add@fenc{#1}}\cdp@list}
\def\DeclareFontEncoding{%
\begingroup
{\default@family}{\default@series}%
{\default@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@cmd
- \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}%
+ \ltj@@add@fenc{#1}%
\else
\@font@info{Redeclaring font encoding #1}%
\fi
{\default@k@family}{\default@k@series}%
{\default@k@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
- \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}%
+ \ltj@@add@kyenc{#1}%
\else
\@font@info{Redeclaring KANJI (yoko) font encoding #1}%
\fi
{\default@k@family}{\default@k@series}%
{\default@k@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
- \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}%
+ \ltj@@add@ktenc{#1}%
\else
\@font@info{Redeclaring KANJI (tate) font encoding #1}%
\fi
\patchcmd\wrong@ja@fontshape{\default@series}{\default@k@series}{}{}
\patchcmd\wrong@ja@fontshape{\default@family}{\default@k@family}{}{}
\def\wrong@fontshape{%
- \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}\ifin@%
+ \ltj@@is@kenc{\f@encoding}\ifin@%
\wrong@ja@fontshape
\else
\wrong@al@fontshape
\math@fontsfalse
\every@math@size{}%
\fontsize{#6}\z@
- \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@%
+ \ltj@@is@kyenc{#2}\ifin@%
\ltjselectfont@force@definetrue
\usekanji{#2}{#3}{#4}{#5}%
\global\let#1\getjfont
\ltjselectfont@force@definefalse
\else
- \directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@%
+ \ltj@@is@ktenc{#2}\ifin@%
\ltjselectfont@force@definetrue
\usekanji{#2}{#3}{#4}{#5}%
\global\let#1\gettfont
\directlua{luatexja.base.start_time_measure('selectfont')}%
\let\tmp@error@fontshape\error@fontshape
\let\error@fontshape\error@kfontshape
- \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+ \ltj@@is@kyenc{\k@encoding}\ifin@%
\let\cy@encoding\k@encoding
\ensure@KanjiEncodingPair{t}%
\edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
\else
- \directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+ \ltj@@is@ktenc{\k@encoding}\ifin@%
\let\ct@encoding\k@encoding
\ensure@KanjiEncodingPair{y}%
\edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
\fi
}
\DeclareRobustCommand\fontencoding[1]{%
- \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@%
- \kanjiencoding{#1}\else\romanencoding{#1}\fi}
+ \ltj@@is@kyenc{#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@enc{'\luatexluaescapestring{\k@encoding}'}%
- \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@%
+ \ltj@@is@kyenc{\k@encoding}\ifin@
\let\cy@encoding\k@encoding
\else
- \directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@%
+ \ltj@@is@ktenc{\k@encoding}\ifin@
\let\ct@encoding\k@encoding
\else
\@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
\fi
%%%%
\protected\def\usefont#1#2#3#4{%
- \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@%
- \usekanji{#1}{#2}{#3}{#4}%
+ \ltj@@is@kenc{#1}\ifin@\usekanji{#1}{#2}{#3}{#4}%
\else\useroman{#1}{#2}{#3}{#4}%
\fi}
\DeclareRobustCommand\normalfont{%
%%%%%% LuaTeX-ja specific
-% #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
-\def\ltj@@IsFontJapanese#1{%
- \directlua{luatexja.jfont.is_kenc(string.match(
- '\luatexluaescapestring{#1}', '[^/]+'))}}
-
+% #1/#2 の展開結果から encoding 部分 (#1) をとりだし,それが和文用かどうかの結果を \ifin@ に代入
+\def\ltj@@IsFontJapanese#1/#2\relax{\ltj@@is@kenc{#1}}
\let\extract@afont\extract@font
\def\pickup@jfont{%
\aftergroup\subst@correction
}
\def\do@subst@correction{%
- \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}\ifin@%
+ \ltj@@is@kenc{\f@encoding}\ifin@%
\ltj@@ja@do@subst@correction
\else
\ltj@@al@do@subst@correction
% \M@<enc> から その <enc> が和文用か調べる
{\catcode`M=12%
-\gdef\ltj@@mathJapaneseFonts#1M#2#3\relax{\ltj@@IsFontJapanese{#3}}}
+\gdef\ltj@@mathJapaneseFonts#1M#2#3/#4\relax{\ltj@@is@kenc{#3}}}
\let\ltj@@al@getanddefine@fonts=\getanddefine@fonts
\def\ltj@@ja@getanddefine@fonts#1#2{%
}
\def\getanddefine@fonts#1#2{%
- \ltj@tempcnta=#1\ltj@@IsFontJapanese{\string#2}%
+ \ltj@tempcnta=#1\expandafter\ltj@@IsFontJapanese\string#2/\relax%
\ifin@\let\ltj@temp=\ltj@@ja@getanddefine@fonts%
\else \let\ltj@temp=\ltj@@al@getanddefine@fonts\fi
\ltj@temp{#1}{#2}%