From: Hironori Kitagawa Date: Wed, 1 Apr 2020 00:13:06 +0000 (+0900) Subject: use scan_argument() for possible speedup X-Git-Tag: 20200412.0~10 X-Git-Url: http://git.osdn.jp/view?a=commitdiff_plain;h=b63e8444e3a6c4bad1f38e73d1ed8e99751ee85d;p=luatex-ja%2Fluatexja.git use scan_argument() for possible speedup --- diff --git a/src/addons/luatexja-fontspec.sty b/src/addons/luatexja-fontspec.sty index e32d20a..60c4c75 100644 --- a/src/addons/luatexja-fontspec.sty +++ b/src/addons/luatexja-fontspec.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec}[2019/09/26 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec}[2020-04-01 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e,luatexja} \ExplSyntaxOn @@ -36,10 +36,9 @@ % We must redefine \try@load@fontshape to ignore kanjifont definitions at all. \def\try@load@fontshape{% - \expandafter - \ifx\csname \f@encoding+\f@family\endcsname\relax - \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}% -\ifin@\else % Alphabetic font + \expandafter + \ifx\csname \f@encoding+\f@family\endcsname\relax + \ltj@@is@kenc{\f@encoding}\ifin@\else % Alphabetic font \@font@info{Trying loading font information for \f@encoding+\f@family}% \global\expandafter\let \csname\f@encoding+\f@family\endcsname\@empty @@ -50,7 +49,7 @@ \noexpand\InputIfFileExists{\f@encoding\f@family.fd}}}% \reserved@a\relax {\@input@{\f@encoding\f@family.fd}}% -\fi - \fi} + \fi + \fi} \endinput diff --git a/src/ltj-jfont.lua b/src/ltj-jfont.lua index d63da29..bb5d995 100644 --- a/src/ltj-jfont.lua +++ b/src/ltj-jfont.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.jfont', - date = '2019/09/26', + date = '2020-04-01', description = 'Loader for Japanese fonts', }) @@ -466,18 +466,20 @@ end -- 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 diff --git a/src/patches/lltjfont.sty b/src/patches/lltjfont.sty index 082d1e3..a218bbe 100644 --- a/src/patches/lltjfont.sty +++ b/src/patches/lltjfont.sty @@ -3,7 +3,7 @@ % \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{% @@ -83,11 +83,31 @@ \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 @@ -102,7 +122,7 @@ {\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 @@ -133,7 +153,7 @@ {\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 @@ -152,7 +172,7 @@ {\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 @@ -233,7 +253,7 @@ \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 @@ -257,13 +277,13 @@ \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 @@ -361,12 +381,12 @@ \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}% @@ -514,19 +534,17 @@ \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 @@ -761,8 +779,7 @@ \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{% @@ -879,11 +896,8 @@ %%%%%% 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{% @@ -983,7 +997,7 @@ \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 @@ -996,7 +1010,7 @@ % \M@ から その が和文用か調べる {\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{% @@ -1017,7 +1031,7 @@ } \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}% diff --git a/src/patches/lltjp-microtype.sty b/src/patches/lltjp-microtype.sty index 3e94cfb..efd3360 100644 --- a/src/patches/lltjp-microtype.sty +++ b/src/patches/lltjp-microtype.sty @@ -12,22 +12,19 @@ (lltjp-microtype.sty, 2019-11-08) may not work} \patchcmd\MT@register@font {\xdef\MT@font@list{\MT@font@list\MT@font,}}% - {\directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}% - \unless\ifin@ + {\ltj@@is@kenc{\f@encoding}\unless\ifin@ \xdef\MT@font@list{\MT@font@list\MT@font,}% \fi }{}{} \patchcmd\MT@register@subst@font {\xdef\MT@font@list{\MT@font@list\font@name,}}% - {\directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}% - \unless\ifin@ + {\ltj@@is@kenc{\f@encoding}\unless\ifin@ \xdef\MT@font@list{\MT@font@list\font@name,}% \fi}{}{} \let\ltj@MT@tracking@\MT@tracking@ \patchcmd\MT@tracking@ {\xdef\MT@tr@font@list{\MT@tr@font@list\MT@font,}}% - {\directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}% - \unless\ifin@ + {\ltj@@is@kenc{\f@encoding}\unless\ifin@ \xdef\MT@tr@font@list{\MT@tr@font@list\MT@font,}% \fi}{}{} \ifx\MT@tracking\ltj@MT@tracking@\let\MT@tracking\MT@tracking@\fi