OSDN Git Service

More use or token.scan_argument()
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 19 Apr 2020 00:10:18 +0000 (09:10 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 19 Apr 2020 00:10:18 +0000 (09:10 +0900)
src/ltj-jfont.lua
src/patches/lltjfont.sty

index bb5d995..2d73f5c 100644 (file)
@@ -449,9 +449,10 @@ do
    otfl_fdr= luatexbase.remove_from_callback('define_font', 'luaotfload.define_font')
    luatexbase.add_to_callback('define_font',luatexja.font_callback,"luatexja.font_callback", 1)
 
-   local match, sp = string.match, tex.sp
-   local function load_jfmonly(spec, dir)
-      local spec, size = match(spec,'(.+)%s+at%s*([%.%w]*)')
+   local match, sp, scan_arg = string.match, tex.sp, token.scan_argument
+   local function load_jfmonly()
+      local spec, size = match(scan_arg(), '(.+)%s+at%s*([%.%w]*)')
+      local dir = scan_arg()
       size = sp(size); extract_metric(spec)
       jfm_dir = dir
       local i = load_jfont_metric()
@@ -485,10 +486,12 @@ do
    end
 
    local kfam_list, Nkfam_list = {}, {}
-   function luatexja.jfont.add_kfam(fam)
-      kfam_list[fam]=true
+   function luatexja.jfont.add_kfam()
+      kfam_list[scan_arg()]=true
    end
-   function luatexja.jfont.search_kfam(fam, use_fd)
+   function luatexja.jfont.search_kfam()
+      local fam = scan_arg()
+      local use_fd = (scan_arg() =='true')
       if kfam_list[fam] then
          tex.sprint(cat_lp, '\\let\\ifin@\\iftrue '); return
       elseif Nkfam_list[fam] then
@@ -510,11 +513,11 @@ do
       end
    end
    local ffam_list, Nffam_list = {}, {}
-   function luatexja.jfont.is_ffam(fam)
-      tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ffam_list[fam] or 'false '))
+   function luatexja.jfont.is_ffam()
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ffam_list[scan_arg()] or 'false '))
    end
-   function luatexja.jfont.add_ffam(fam)
-      ffam_list[fam]='true '
+   function luatexja.jfont.add_ffam()
+      ffam_list[scan_arg()]='true '
    end
    function luatexja.jfont.search_ffam_declared()
      local s = ''
@@ -523,7 +526,8 @@ do
      end
      tex.sprint(cat_lp, s)
    end
-   function luatexja.jfont.search_ffam_fd(fam)
+   function luatexja.jfont.search_ffam_fd()
+      local fam = scan_arg()
       if Nffam_list[fam] then
          tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
       else
@@ -645,11 +649,12 @@ end
 
 -- ここから先は 新 \selectfont の内部でしか実行されない
 do
+   local scan_arg = token.scan_argument
    local alt_font_base, alt_font_base_num
    local aftl_base
    -- EXT
-   function luatexja.jfont.does_alt_set(bbase)
-      aftl_base = alt_font_table_latex[bbase]
+   function luatexja.jfont.does_alt_set()
+      aftl_base = alt_font_table_latex[scan_arg()]
       tex.sprint(cat_lp, aftl_base and '\\@firstofone' or '\\@gobble')
    end
    -- EXT
index e5f79a8..4de0ea2 100644 (file)
@@ -91,6 +91,9 @@
 \newluafunction\ltj@@is@kyenc@@inner
 \newluafunction\ltj@@is@ktenc@@inner
 \newluafunction\ltj@@is@kenc@@inner
+\newluafunction\ltj@@is@ffam@@inner
+\newluafunction\ltj@@add@ffam@@inner
+\newluafunction\ltj@@add@kfam@@inner
 \directlua{%
   local lf = lua.get_functions_table()
   lf[\the\ltj@@add@fenc@@inner]  = luatexja.jfont.add_fenc_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
+  lf[\the\ltj@@is@ffam@@inner]   = luatexja.jfont.is_ffam
+  lf[\the\ltj@@add@ffam@@inner]  = luatexja.jfont.add_ffam
+  lf[\the\ltj@@add@kfam@@inner]  = luatexja.jfont.add_kfam
 }
 \luadef\ltj@@add@fenc \ltj@@add@fenc@@inner
 \luadef\ltj@@add@kyenc\ltj@@add@kyenc@@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
+\luadef\ltj@@is@ffam  \ltj@@is@ffam@@inner
+\luadef\ltj@@add@ffam \ltj@@add@ffam@@inner
+\luadef\ltj@@add@kfam \ltj@@add@kfam@@inner
 
 {\def\cdp@elt#1#2#3#4{\ltj@@add@fenc{#1}}\cdp@list}
 
               \@empty
             \else \reserved@a
             \fi
-     \directlua{luatexja.jfont.add_ffam('\luatexluaescapestring{#2}')}%
+     \ltj@@add@ffam{#2}%
     }%
 }
 \def\DeclareKanjiFamily#1#2#3{%
               \@empty
             \else \reserved@a
             \fi
-     \directlua{luatexja.jfont.add_kfam('\luatexluaescapestring{#2}')}%
+     \ltj@@add@kfam{#2}%
      }%
 }
 \def\DeclareKanjiSubstitution#1#2#3#4{%
 \DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
 \DeclareRobustCommand\fontfamily[1]{%
   \@notkfamfalse\@notffamfalse
-  \edef\tmp@item{'\luatexluaescapestring{#1}'}%
   %
-  \directlua{luatexja.jfont.search_kfam(\tmp@item, \@ltj@use@fd)}%
+  \directlua{luatexja.jfont.search_kfam()}{#1}{\@ltj@use@fd}%
   \ifin@\edef\k@family{#1}\else\@notkfamtrue\fi
   %
   % alphabetic fonts part
-  \directlua{luatexja.jfont.is_ffam(\tmp@item)}%
+  \ltj@@is@ffam{#1}%
   \ifin@\edef\f@family{#1}\else
     % checking is_stored_ffam is not sufficient,
     % since LuaTeX-ja doesn't know whats fonts are defined before LuaTeX-ja is loaded.
     \ifcsname \f@encoding+#1\endcsname % easy case
-      \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}%
+      \ltj@@add@ffam{#1}\edef\f@family{#1}%
     \else
       \@tempswafalse
-      \def\cdp@elt##1{\ifcsname ##1+#1\endcsname\@tempswatrue\fi}%
-      \directlua{luatexja.jfont.search_ffam_declared()}%
+      \def\cdp@elt##1{\ifcsname ##1+#1\endcsname%
+       \@tempswatrue\def\cdp@elt####1\relax{}%
+      \fi}%
+      \directlua{luatexja.jfont.search_ffam_declared()}\relax%
       \if@tempswz
-        \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}%
+        \ltj@@add@ffam{#1}\edef\f@family{#1}%
       \else
         % now we search Nffam_list and font definition files.
-        \directlua{luatexja.jfont.search_ffam_fd(\tmp@item)}%
+        \directlua{luatexja.jfont.search_ffam_fd()}{#1}%
         \ifin@\edef\f@family{#1}\else\@notffamtrue\fi
       \fi
     \fi
     \expandafter\globaltfont\font@name\external@font\relax\font@name
     \csname \f@encoding+\f@family\endcsname
     \csname\curr@fontshape\endcsname}
+
+\newluafunction\ltj@@jfont@@jfmonly@@inner
+\directlua{%
+  local lf = lua.get_functions_table()
+  lf[\the\ltj@@jfont@@jfmonly@@inner]  = luatexja.jfont.load_jfmonly
+}
+\luadef\ltj@@jfont@@jfmonly  \ltj@@jfont@@jfmonly@@inner
 \def\extract@jfont@onlyjfm{%
        \get@external@font
        \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{%
-         \directlua{%
-               luatexja.jfont.load_jfmonly('\luatexluaescapestring{\external@font}', 'yoko')
-         }%
+          \ltj@@jfont@@jfmonly{\external@font}{yoko}%
        }}
 \def\extract@tfont@onlyjfm{%
        \get@external@font
        \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{%
-         \directlua{%
-               luatexja.jfont.load_jfmonly('\luatexluaescapestring{\external@font}', 'tate')
-         }%
+          \ltj@@jfont@@jfmonly{\external@font}{tate}%
        }}
 
 \let\ltj@@al@do@subst@correction=\do@subst@correction
 
 %%%% \ClearAlternateKanjiFont<Benc><Bfam><Bser><Bshape>
 % いつも global
+\newluafunction\ltj@@does@alt@set@@inner
+\directlua{%
+  local lf = lua.get_functions_table()
+  lf[\the\ltj@@does@alt@set@@inner]  = luatexja.jfont.does_alt_set
+}
+\def\ltj@@does@alt@set#1#2{\luafunction\ltj@@does@alt@set@@inner{#1}{#2}}
 \def\ClearAlternateKanjiFont#1#2#3#4{%
    \directlua{luatexja.jfont.clear_alt_font_latex('\luatexluaescapestring{#1/#2/#3/#4}')}}
 
   \directlua{luatexja.jfont.pickup_alt_font_b(\the\ltj@tempcntc,'\luatexluaescapestring{#2}')}%
 }
 
-\def\ltj@@does@alt@set#1#2{%
-  \directlua{luatexja.jfont.does_alt_set'\luatexluaescapestring{#1}'}{#2}}
-
 %%%% patch \@text@composite because of {y,t}albaselineshift
 
 % %% \pltx@isletter from plfonts.dtx