font-imp-tex.lua / last modification: 2020-01-30 14:16
if not modules then modules = { } end modules ['font-imp-tex'] = {
    version   = 1.001,
    comment   = "companion to font-ini.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

local next = next

local fonts              = fonts
local otf                = fonts.handlers.otf
local registerotffeature = otf.features.register
local addotffeature      = otf.addfeature

-- tlig (we need numbers for some fonts so ...)

local specification = {
    type     = "ligature",
    order    = { "tlig" },
    prepend  = true,
    data     = {
     -- endash        = "hyphen hyphen",
     -- emdash        = "hyphen hyphen hyphen",
        [0x2013]      = { 0x002D, 0x002D },
        [0x2014]      = { 0x002D, 0x002D, 0x002D },
     -- quotedblleft  = "quoteleft quoteleft",
     -- quotedblright = "quoteright quoteright",
     -- quotedblleft  = "grave grave",
     -- quotedblright = "quotesingle quotesingle",
     -- quotedblbase  = "comma comma",
    },
}

addotffeature("tlig",specification)

registerotffeature {
    -- this makes it a known feature (in tables)
    name        = "tlig",
    description = "tex ligatures",
}

-- trep

local specification = {
    type      = "substitution",
    order     = { "trep" },
    prepend   = true,
    data      = {
     -- [0x0022] = 0x201D,
        [0x0027] = 0x2019,
     -- [0x0060] = 0x2018,
    },
}

addotffeature("trep",specification)

registerotffeature {
    -- this makes it a known feature (in tables)
    name        = "trep",
    description = "tex replacements",
}

-- some day this will be moved to font-imp-scripts.lua

-- anum

local anum_arabic = {
    [0x0030] = 0x0660,
    [0x0031] = 0x0661,
    [0x0032] = 0x0662,
    [0x0033] = 0x0663,
    [0x0034] = 0x0664,
    [0x0035] = 0x0665,
    [0x0036] = 0x0666,
    [0x0037] = 0x0667,
    [0x0038] = 0x0668,
    [0x0039] = 0x0669,
}

local anum_persian = {
    [0x0030] = 0x06F0,
    [0x0031] = 0x06F1,
    [0x0032] = 0x06F2,
    [0x0033] = 0x06F3,
    [0x0034] = 0x06F4,
    [0x0035] = 0x06F5,
    [0x0036] = 0x06F6,
    [0x0037] = 0x06F7,
    [0x0038] = 0x06F8,
    [0x0039] = 0x06F9,
}

local function valid(data)
    local features = data.resources.features
    if features then
        for k, v in next, features do
            for k, v in next, v do
                if v.arab then
                    return true
                end
            end
        end
    end
end

local specification = {
    {
        type     = "substitution",
        features = { arab = { urd = true, dflt = true } },
        order    = { "anum" },
        data     = anum_arabic,
        valid    = valid,
    },
    {
        type     = "substitution",
        features = { arab = { urd = true } },
        order    = { "anum" },
        data     = anum_persian,
        valid    = valid,
    },
}

addotffeature("anum",specification)

registerotffeature {
    -- this makes it a known feature (in tables)
    name        = "anum",
    description = "arabic digits",
}

-- -- example:
--
-- fonts.handlers.otf.addfeature {
--     name     = "hangulfix",
--     type     = "substitution",
--     features = { ["hang"] = { ["*"] = true } },
--     data     = {
--         [0x1160] = 0x119E,
--     },
--     order    = { "hangulfix" },
--     flags    = { },
--     prepend  = true,
-- })