OSDN Git Service

Merge branch 'kitagawa_test' of git.sourceforge.jp:/gitroot/luatex-ja/luatexja into...
[luatex-ja/luatexja.git] / src / ltj-jfont.lua
index dbe4254..3e4e0b1 100644 (file)
@@ -62,7 +62,6 @@ local function norm_val(a)
    end
 end
 
-
 function define_jfm(t)
    local real_char -- Does current character class have the 'real' character?
    if t.dir~=jfm_dir then
@@ -75,16 +74,13 @@ function define_jfm(t)
       if type(i) == 'number' then -- char_type
         if not v.chars then
            if i ~= 0 then defjfm_res= nil; return  end
-           real_char = true
         else
-           real_char = false
            for j,w in pairs(v.chars) do
               if type(w) == 'number' and w~=-1 then
-                 real_char = true;
               elseif type(w) == 'string' and utf.len(w)==1 then
-                 real_char = true; w = utf.byte(w)
+                 w = utf.byte(w)
               elseif type(w) == 'string' and utf.len(w)==2 and utf.sub(w,2) == '*' then
-                 real_char = true; w = utf.byte(utf.sub(w,1,1))
+                 w = utf.byte(utf.sub(w,1,1))
               end
               if not t.chars[w] then
                  t.chars[w] = i
@@ -92,43 +88,37 @@ function define_jfm(t)
                  defjfm_res= nil; return
               end
            end
-            if type(v.align)~='string' then
-               v.align = 'left' -- left
-            end
-           if real_char then
-              if type(v.width)~='number' and v.width~='prop' then
-                 defjfm_res= nil; return
-              else
-                 if v.width=='prop' and jfm_dir=='tate' then
-                    v.width = 1.0
-                 end
-                 if type(v.height)~='number' then
-                    v.height = 0.0
-                 end
-                 if type(v.depth)~='number' then
-                    v.depth = 0.0
-                 end
-                 if type(v.italic)~='number' then
-                    v.italic = 0.0
-                 end
-                 if type(v.left)~='number' then
-                    v.left = 0.0
-                 end
-                 if type(v.down)~='number' then
-                    v.down = 0.0
-                 end
-              end
-           end
            v.chars = nil
         end
+        if type(v.align)~='string' then
+           v.align = 'left' -- left
+        end
+        if type(v.width)~='number' then
+           v.width = (jfm_dir=='tate') and  1.0
+        end
+        if type(v.height)~='number' then
+           v.height = (jfm_dir=='tate') and  0.0
+        end
+        if type(v.depth)~='number' then
+           v.depth =  (jfm_dir=='tate') and  0.0
+        end
+        if type(v.italic)~='number' then
+           v.italic = 0.0
+        end
+        if type(v.left)~='number' then
+           v.left = 0.0
+        end
+        if type(v.down)~='number' then
+           v.down = 0.0
+        end
         v.kern = v.kern or {}; v.glue = v.glue or {}
         for j,x in pairs(v.glue) do
            if v.kern[j] then defjfm_res= nil; return end
            x.ratio, x[5] = (x.ratio or (x[5] and 0.5*(1+x[5]) or 0.5)), nil
            x.priority, x[4] = (x.priority or x[4] or 0), nil
-           x.ksp_natural = norm_val(x.ksp_natural)
-           x.ksp_stretch = norm_val(x.ksp_stretch)
-           x.ksp_shrink = norm_val(x.ksp_shrink)
+           x.kanjiskip_natural = norm_val(x.kanjiskip_natural)
+           x.kanjiskip_stretch = norm_val(x.kanjiskip_stretch)
+           x.kanjiskip_shrink = norm_val(x.kanjiskip_shrink)
         end
         for j,x in pairs(v.kern) do
            if type(x)=='number' then
@@ -180,9 +170,9 @@ do
                  true, h, 
                  ratio=w.ratio/sz, 
                  priority=FROM_JFM + w.priority/sz,
-                 ksp_natural = w.ksp_natural and w.ksp_natural/sz,
-                 ksp_stretch = w.ksp_stretch and w.ksp_stretch/sz,
-                 ksp_shrink =  w.ksp_shrink  and w.ksp_shrink/sz,
+                 kanjiskip_natural = w.kanjiskip_natural and w.kanjiskip_natural/sz,
+                 kanjiskip_stretch = w.kanjiskip_stretch and w.kanjiskip_stretch/sz,
+                 kanjiskip_shrink =  w.kanjiskip_shrink  and w.kanjiskip_shrink/sz,
               }
               setfield(h, 'width', w[1])
               setfield(h, 'stretch', w[2])
@@ -296,7 +286,7 @@ do
       local ad = identifiers[fn].parameters
       local sz = metrics[j].size_cache[f.size]
       local fmtable = { jfm = j, size = f.size, var = jfm_var,
-                       ksp = jfm_ksp, 
+                       with_kanjiskip = jfm_ksp, 
                        zw = sz.zw, zh = sz.zh,
                        ascent = ad.ascender,
                        descent = ad.descender,
@@ -373,9 +363,11 @@ do
            name = name .. 'jfmvar=' .. jfm_var
         end
       end
-      if name:match('-ltjksp') then jfm_ksp = false end
+      for x in string.gmatch (name, "[:;]([+%%-]?)ltjks") do
+        jfm_ksp = not (x=='-')
+      end
       if jfm_dir == 'tate' then
-        is_vert_enabled = (not name:match('-vert')) and (not  name:match('-vrt2'))
+        is_vert_enabled = (not name:match('[:;]%-vert')) and (not  name:match('[:;]%-vrt2'))
          if not name:match('vert') and not name:match('vrt2') then
             name = name .. ';vert;vrt2'
          end