diff options
Diffstat (limited to 'tex/context/base/mkiv/font-imp-unicode.lua')
-rw-r--r-- | tex/context/base/mkiv/font-imp-unicode.lua | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/font-imp-unicode.lua b/tex/context/base/mkiv/font-imp-unicode.lua new file mode 100644 index 000000000..ddb965ec9 --- /dev/null +++ b/tex/context/base/mkiv/font-imp-unicode.lua @@ -0,0 +1,82 @@ +if not modules then modules = { } end modules ['font-imp-unicode'] = { + version = 1.001, + comment = "companion to font-ini.mkiv and hand-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +if not context then return end + +local next = next + +local fonts = fonts +local helpers = fonts.helpers +local constructors = fonts.constructors +local registerotffeature = fonts.handlers.otf.features.register + +local extraprivates = helpers.extraprivates +local addprivate = helpers.addprivate + +local function initialize(tfmdata) + for i=1,#extraprivates do + local e = extraprivates[i] + local c = e[2](tfmdata) + if c then + addprivate(tfmdata, e[1], c) + end + end +end + +constructors.newfeatures.otf.register { + name = "extraprivates", + description = "extra privates", + default = true, + manipulators = { + base = initialize, + node = initialize, + } +} + +local tounicode = fonts.mappings.tounicode + +local function initialize(tfmdata,key,value) + if value == "ligatures" then + local private = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 + local collected = fonts.handlers.otf.readers.getcomponents(tfmdata.shared.rawdata) + if collected and next(collected)then + for unicode, char in next, tfmdata.characters do + local u = collected[unicode] + if u then + local n = #u + for i=1,n do + if u[i] > private then + n = 0 + break + end + end + if n > 0 then + if n == 1 then + u = u[1] + end + char.unicode = u + char.tounicode = tounicode(u) + end + end + end + end + end +end + +-- forceunicodes=ligatures : aggressive lig resolving (e.g. for emoji) +-- +-- kind of like: \enabletrackers[fonts.mapping.forceligatures] + +registerotffeature { + name = "forceunicodes", + description = "forceunicodes", + manipulators = { + base = initialize, + node = initialize, + } +} |