OSDN Git Service

use scan_argument() for possible speedup
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 1 Apr 2020 00:13:06 +0000 (09:13 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 1 Apr 2020 00:13:06 +0000 (09:13 +0900)
src/addons/luatexja-fontspec.sty
src/ltj-jfont.lua
src/patches/lltjfont.sty
src/patches/lltjp-microtype.sty

index e32d20a..60c4c75 100644 (file)
@@ -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
 
 
 % 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
index d63da29..bb5d995 100644 (file)
@@ -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
index 082d1e3..a218bbe 100644 (file)
@@ -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{%
 \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}%
index 3e94cfb..efd3360 100644 (file)
    (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