[Dev-luatex] fontforge library can't load OpenType file correctly

Hans Hagen pragma at wxs.nl
Sun Mar 1 17:31:50 CET 2009


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
-----------------------------------------------------------------


More information about the dev-luatex mailing list