1 local rmlgbm_data = require('luatexja-rmlgbm-data')
2 local cache_chars = { [655360] = rmlgbm_data.characters }
4 local function mk_rml(name, size, id)
5 local specification = fonts.define.analyze(name,size)
6 specification = fonts.define.specify[':'](specification)
7 local features = specification.features.normal
11 for k, v in pairs(rmlgbm_data) do
15 fontdata.characters = nil
16 cachedata.characters = nil
17 fontdata.unicodes = nil
20 local shared = cachedata.shared
21 for k, v in pairs(rmlgbm_data.shared) do
25 shared.set_dynamics = fonts.otf.set_dynamics
26 shared.processes, shared.features = fonts.otf.set_features(cachedata,fonts.define.check(features,fonts.otf.features.default))
28 -- characters & scaling
29 if size < 0 then size = -size * 655.36 end
30 local scale = size / 655360
31 if not cache_chars[size] then
32 cache_chars[size] = {}
33 for k, v in pairs(cache_chars[655360]) do
34 cache_chars[size][k] = {}
35 cache_chars[size][k].index = v.index
36 cache_chars[size][k].width = v.width * scale
37 cache_chars[size][k].tounicode = v.tounicode
40 fontdata.characters = cache_chars[size]
41 cachedata.characters = cache_chars[size]
44 for k, v in pairs(rmlgbm_data.parameters) do
45 parameters[k] = v * scale
47 fontdata.parameters = parameters
48 cachedata.parameters = parameters
50 fontdata.ascender = fontdata.ascender * scale
51 cachedata.ascender = fontdata.ascender
52 fontdata.descender = fontdata.descender * scale
53 cachedata.descender = fontdata.descender
54 fontdata.factor = fontdata.factor * scale
55 cachedata.factor = fontdata.factor
56 fontdata.hfactor = fontdata.hfactor * scale
57 cachedata.hfactor = fontdata.hfactor
58 fontdata.vfactor = fontdata.vfactor * scale
59 cachedata.vfactor = fontdata.vfactor
64 fontdata.name = specification.name .. size
65 cachedata.name = fontdata.name
66 fontdata.fullname = specification.name
67 cachedata.fullname = fontdata.fullname
68 fontdata.psname = specification.name
69 cachedata.psname = fontdata.psname
71 fonts.ids[id] = cachedata
76 local dr_orig = fonts.define.read
77 function fonts.define.read(name, size, id)
78 local p = utf.find(name, ":") or utf.len(name)+1
79 if utf.sub(name, 1, p-1) == 'psft' then
80 return mk_rml(utf.sub(name,p+1), size, id)
82 return dr_orig(name, size, id)