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