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

luoyi luoyi.ly at gmail.com
Mon Mar 2 09:05:31 CET 2009


could you tell me where  can I find the document about the structure
of the subfonts table ?  I  can't fullly understand your example code
without know the exactly structure of the table.

thank you

2009/3/2 Hans Hagen <pragma at wxs.nl>:
> 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