OSDN Git Service

ltj-direction.lua: fix that direction can be changed by accident in an align.
[luatex-ja/luatexja.git] / src / ltj-jfont.lua
index afa2889..42af5c4 100644 (file)
@@ -11,7 +11,6 @@ module('luatexja.jfont', package.seeall)
 luatexja.load_module('base');      local ltjb = luatexja.base
 luatexja.load_module('charrange'); local ltjc = luatexja.charrange
 
-local mem_leak_glue, mem_leak_gs, mem_leak_kern = 0, 0, 0
 
 local Dnode = node.direct or node
 
@@ -235,7 +234,7 @@ do
       local t = token.get_next()
       cstemp=token.csname_name(t)
       global_flag = g and '\\global' or ''
-      tex.sprint(cat_lp, '\\expandafter\\font\\csname ' .. cstemp .. '\\endcsname')
+      tex.sprint(cat_lp, '\\expandafter\\font\\csname ', cstemp, '\\endcsname')
    end
 
    luatexbase.create_callback("luatexja.define_jfont", "data", function (ft, fn) return ft end)
@@ -252,8 +251,8 @@ do
                            "bad JFM `" .. jfm_file_name .. "'",
                            'The JFM file you specified is not valid JFM file.\n'..
                               'So defining Japanese font is cancelled.')
-        tex.sprint(cat_lp, global_flag .. '\\expandafter\\let\\csname ' ..cstemp
-                      .. '\\endcsname=\\relax')
+        tex.sprint(cat_lp, global_flag, '\\expandafter\\let\\csname ', cstemp,
+                      '\\endcsname=\\relax')
         return
       end
       update_jfm_cache(j, f.size)
@@ -269,9 +268,9 @@ do
 
       fmtable = luatexbase.call_callback("luatexja.define_jfont", fmtable, fn)
       font_metric_table[fn]=fmtable
-      tex.sprint(cat_lp, global_flag .. '\\protected\\expandafter\\def\\csname '
-                   .. cstemp  .. '\\endcsname{\\ltj@cur'
-                   .. (dir == 'yoko' and 'j' or 't') .. 'fnt=' .. fn .. '\\relax}')
+      tex.sprint(cat_lp, global_flag, '\\protected\\expandafter\\def\\csname ',
+                   cstemp , '\\endcsname{\\ltj@cur'..
+                   (dir == 'yoko' and 'j' or 't') .. 'fnt', fn, '\\relax}')
    end
 end
 
@@ -289,38 +288,49 @@ end
 
 do
    -- extract jfm_file_name and jfm_var
+   -- normalize position of 'jfm=' and 'jfmvar=' keys
    local function extract_metric(name)
-      local basename=name
-      local tmp = utf.sub(basename, 1, 5)
       jfm_file_name = ''; jfm_var = ''
+      local tmp, index = name:sub(1, 5), 1
       if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
-        basename = utf.sub(basename, 6)
+        index = 6
       end
-      local p = utf.find(basename, ":")
-      if p then
-        basename = utf.sub(basename, p+1)
-      else return
+      local p = name:find(":", index); index = p and (p+1) or index
+      while index do
+        local l = name:len()+1
+        local q = name:find(";", index+1) or l
+        if name:sub(index, index+3)=='jfm=' and q>index+4 then
+           jfm_file_name = name:sub(index+4, q-1)
+           if l~=q then
+              name = name:sub(1,index-1) .. name:sub(q+1)
+           else
+              name = name:sub(1,index-1)
+              index = nil
+           end
+        elseif name:sub(index, index+6)=='jfmvar=' and q>index+6 then
+           jfm_var = name:sub(index+7, q-1)
+           if l~=q then
+              name = name:sub(1,index-1) .. name:sub(q+1)
+           else
+              name = name:sub(1,index-1)
+              index = nil
+           end
+        else
+           index = (l~=q) and (q+1) or nil
+        end
       end
-      -- now basename contains 'features' only.
-      p=1
-      while p do
-        local q = utf.find(basename, ";", p+1) or utf.len(basename)+1
-        if utf.sub(basename, p, p+3)=='jfm=' and q>p+4 then
-           jfm_file_name = utf.sub(basename, p+4, q-1)
-        elseif utf.sub(basename, p, p+6)=='jfmvar=' and q>p+6 then
-           jfm_var = utf.sub(basename, p+7, q-1)
+      if jfm_file_name~='' then
+        local l = name:sub(-1)
+        name = name 
+           .. ((l==':' or l==';') and '' or ';')
+           .. 'jfm=' .. jfm_file_name
+        if jfm_var~='' then
+           name = name .. 'jfmvar=' .. jfm_var
         end
-        if utf.len(basename)+1==q then p = nil else p = q + 1 end
       end
-      return
+      return name
    end
-
-   -- replace fonts.define.read()
-   luatexbase.add_to_callback('luatexja.define_font',
-                             function (res, name)
-                                extract_metric(name)
-                             end,
-                             'extract_jfm_name', 1)
+   luatexja.jfont.extract_metric = extract_metric
 end
 
 ------------------------------------------------------------------------