luoyi wrote:
the following lua code is just a simple demo of TrueType&OpenType font
load process for myself use. and I've found that it can't work with
some OTF files recently. for example: AdobeSongStd-Light.otf. but it's
ok when I try to load the TrueType font for example: SimHei.ttf

callback.register('define_font',
    function(name, size)
      filename=kpse.find_file(name,"truetype fonts")
      if (filename) then
        ttffont = fontforge.to_table(fontforge.open(filename))
        if ttffont then
          f = { }
          f.name = ttffont.fontname
          f.fullname = ttffont.names[1].names.fullname
          f.size = size
          f.characters = {}

         for char, glyph in pairs(ttffont.map.map) do
            glyph_table = ttffont.glyphs[glyph]

            f.characters[char] = {
              index = glyph,
              width = glyph_table.width * size/ttffont.units_per_em,
              name = glyph_table.name,
            }
          end
          f.filename = filename
          f.type = 'real'
          f.format = 'truetype'
          f.cidinfo = {
            registry = "Adobe",
            ordering = "Identity",
            supplement = 0,
            version = 1
          }
        end
      else
        f = font.read_tfm(name, size)
      end
    return f
    end
  )
}

and luatex give me the error:
! LuaTeX error <\directlua0>:1: attempt to index field 'map' (a nil value).

I doubt  maybe the OpenType file support in the fontforge is broken
now.  Can anyone help to check this ?

it's a CID font so you need to use the subfonts table in combination with cid vectors; you can think of the glyphs table being like like this:

for n, subfont in pairs(yourtable.subfonts) do
    for index, glyph in pairs(subfont.glyphs) do
        glyphs[index] = glyph
    end
end

the relevant cid info is in a subtable in the root of the fonts

["cidinfo"]={
  ["ordering"]="GB1",
  ["registry"]="Adobe",
  ["supplement"]=5,
  ["version"]=5,
 },

Hans

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------
_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to