OSDN Git Service

Non-embedded fonts in vertical direction
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 27 Jan 2019 23:21:46 +0000 (08:21 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 27 Jan 2019 23:22:43 +0000 (08:22 +0900)
src/ltj-jfmglue.lua
src/ltj-jfont.lua
src/ltj-plain.sty
src/ltj-rmlgbm.lua
src/luatexja.lua

index ec017fa..5b864ff 100644 (file)
@@ -609,7 +609,7 @@ do
         local f = (lig ==1) and nullfunc or node_tail
          local xc, xs = getcomponents(x), getsubtype(x)
         while xc and xs and xs%4>=2 do
-           x = f(xc); 
+           x = f(xc);
            if getid(x)==id_disc then x, xc, xs = nil, getfield(x,'replace'), 2
            else xc, xs = getcomponents(x), getsubtype(x) end
         end
index 76ec212..e6f5bfe 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.jfont',
-  date = '2018/12/15',
+  date = '2019/01/28',
   description = 'Loader for Japanese fonts',
 })
 
@@ -340,8 +340,8 @@ do
                         chars_cbcache = {},
                         vert_activated = is_vert_enabled,
       }
+      local t = identifiers[fn]
       if auto_enable_vrt2 then
-         local t = identifiers[fn]
          local lang, scr = t.properties.language, t.properties.script
          local vrt2_exist = provides_feature(
            fn, t.properties.script, t.properties.language, 'vrt2'
@@ -1168,6 +1168,7 @@ do
    local node_write = node.direct.write
    local font = font
    local new_ic_kern
+   local dir_tate = luatexja.dir_table.dir_tate
    if status.luatex_version>=89 then
        new_ic_kern = function(g)  return node_new(id_kern,3) end
    else
index c980d43..fa8d6f8 100644 (file)
 \fi
 \let\ltj@@cfgread\relax\advance\count16\m@ne\relax
 
-\jfont\tenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm at 9.62216pt
-\jfont\sevenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm at 6.73551pt
-\jfont\fivemin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm at 4.81108pt
-\jfont\tengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm at 9.62216pt
-\jfont\sevengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm at 6.73551pt
-\jfont\fivegt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm at 4.81108pt
+\jfont\tenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 9.62216pt
+\jfont\sevenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 6.73551pt
+\jfont\fivemin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 4.81108pt
+\jfont\tengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 9.62216pt
+\jfont\sevengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 6.73551pt
+\jfont\fivegt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 4.81108pt
 
-\tfont\tentmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm at 9.62216pt
-\tfont\seventmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm at 6.73551pt
-\tfont\fivetmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm at 4.81108pt
-\tfont\tentgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm at 9.62216pt
-\tfont\seventgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm at 6.73551pt
-\tfont\fivetgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm at 4.81108pt
+\tfont\tentmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 9.62216pt
+\tfont\seventmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 6.73551pt
+\tfont\fivetmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 4.81108pt
+\tfont\tentgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 9.62216pt
+\tfont\seventgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 6.73551pt
+\tfont\fivetgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 4.81108pt
 
 \def\mc{\tenmin\tentmin}
 \def\gt{\tengt\tentgt}
index f12e1a3..cf32261 100644 (file)
@@ -106,6 +106,13 @@ do
    local function entry(a)
       return {index = a}
    end
+   local feat_dummy_vert = { gsub={vert={dflt={dflt=true}}} }
+   local seq_dummy_vert={{
+     features={vert={dflt={dflt=true}}},
+     --flags={false,false,false,false},
+     --index=1, name="s_s_0", skiphash=false, steps={coverage={},index=1},
+     ["type"]="gsub_single", order='vert',
+   }}
    make_cid_font = function ()
       local kx = cid_replace[cid_name]
       if not kx then return end
@@ -146,14 +153,17 @@ do
             cidinfo= k.cidinfo, verbose = false,
             shared = { featuredata = {}, },
          },
-         dynamics = {}, features = {}, processes = {},
-         --rawdata = { descriptions = {} },
+         dynamics = {}, processes = {},
+         rawdata = {}, features={},
       }
-      k.resources = { 
-         unicodes = ttu, 
-        features = { dummy={dummy={dflt=true}} }
+      k.resources = {
+         unicodes = ttu,
+        features = feat_dummy_vert,
+        sequences = seq_dummy_vert,
       }
       k.descriptions = {}
+      k.shared.rawdata.resources=k.resources
+      k.shared.rawdata.descriptions=k.descriptions
       cache_chars[cid_name]  = { [655360] = k.characters }
 
       -- 縦書用字形
@@ -199,16 +209,21 @@ end
 --
 local cidf_vert_processor
 do
-   local traverse_id = node.traverse_id
+   local traverse_id, is_node = node.direct.traverse_id, node.is_node
+   local to_direct = node.direct.todirect
    local id_glyph = node.id('glyph')
+   local getfont = node.direct.getfont
+   local getchar = node.direct.getchar
+   local setchar = node.direct.setchar
    cidf_vert_processor = {
       function (head, fnum)
          local fontdata = identifiers[fnum]
-         if luatexja.jfont.font_metric_table[fnum].vert_activated then
-            local vt = fontdata.shared.ltj_vert_table
+         if head and luatexja.jfont.font_metric_table[fnum].vert_activated then
+           local vt = fontdata.shared.ltj_vert_table
+           local nh = is_node(head) and to_direct(head) or head 
             for n in traverse_id(id_glyph, head) do
-               if n.font==fnum then
-                  n.char = vt[n.char] or n.char
+               if getfont(n)==fnum then
+                local c = getchar(n); setchar(n, vt[c] or c)
                end
             end
             return head, false
@@ -252,7 +267,12 @@ local function mk_rml(name, size, id)
    local specification = definers.analyze(name,size)
    --specification = definers.resolve(specification) (not needed)
    specification.detail = specification.detail or ''
-
+   do
+      local n = specification.name
+      if n:sub(1,1)=="{" then n=n:sub(2) end
+      if n:sub(-1)=="}" then  n=n:sub(1,-2) end
+      specification.name=n
+   end
    local fontdata = {}
    local cachedata = {}
    local s = cidfont_data[cid_name]
@@ -351,9 +371,6 @@ local function font_callback(name, size, id, fallback)
            if xname:len()+1==q then p = nil else p = q + 1 end
         end
       end
-      p = basename:find(":")
-      if p then basename=basename:sub(1,p-1) end
-      if basename:sub(1,1)=="{" and basename:sub(-1)=="}" then basename = basename:sub(2,-2) end
       cid_reg, cid_order = string.match(s, "^(.-)%-(.-)%-(%d-)$")
       if not cid_reg then
          cid_reg, cid_order = string.match(s, "^(.-)%-(.-)$")
index 9dcc29a..8fb24a8 100644 (file)
@@ -475,7 +475,7 @@ local function debug_show_node_X(p,print_fn, limit)
            debug_show_node_X(q, print_fn, limit)
         end
       end
-      prefix=k       
+      prefix=k
    elseif pt == 'glue' then
       s = base .. ' ' ..  print_spec(p)
       if get_attr_icflag(p)>icflag_table.KINSOKU