summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/m-newotf.mkiv
blob: 267d124fa9bc6072c41abd558e925c05b1ec086f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
%D \module
%D   [       file=m-newotf,
%D        version=2015.07.08,
%D          title=\CONTEXT\ Extra Modules,
%D       subtitle=Experimental OTF Loader,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

% \endinput

%D This module will go away as soon as we use the new loader code by default.
%D That will happen after extensive testing. Generic support will happen after
%D that.

\unprotect

\startluacode
    local files = {
        "font-otj",
        "font-otr",
        "font-cff",
        "font-ttf",
        "font-dsp",
        "font-oup",
        "font-otl",
        "font-ots",
        "font-oto",
        "font-otd",
        "font-otc",
        "font-osd",
        "font-map",
        "font-fbk",
        "font-gds",
    }
    local report    = logs.reporter("newotf")
    local findfile  = resolvers.findfile
    local addsuffix = file.addsuffix
    report()
    if fonts.handlers.otf.version >= 3.000 then
        report("replacing new font loader code by experimental code")
    else
        report("replacing old font loader code by new loader code")
    end
    report()
    for i=1,#files do
        local foundfile = findfile(addsuffix(files[i],"lua"))
        if foundfile and foundfile ~= "" then
            report("loading %a",foundfile)
            dofile(foundfile)
        end
    end
    report()

    -- needed for testing:

    local nuts      = nodes.nuts
    local copy_node = nuts.copy
    local kern      = nuts.pool.register(nuts.pool.kern())
    local setfield  = nuts.setfield

    nuts.setattr(kern,attributes.private('fontkern'),1) -- we can have several, attributes are shared

    nodes.injections.installnewkern(function(k)
        local c = copy_node(kern)
        setfield(c,"kern",k)
        return c
    end)

    directives.register("nodes.injections.fontkern", function(v) setfield(kern,"subtype",v and 0 or 1) end)

    local fonts    = fonts
    local handlers = fonts.handlers
    local otf      = handlers.otf -- brrr
    local afm      = handlers.afm -- brrr
    local getters  = fonts.getters

    getters.kern        .opentype = otf.getkern
    getters.substitution.opentype = otf.getsubstitution
    getters.alternate   .opentype = otf.getalternate
    getters.multiple    .opentype = otf.getmultiple

\stopluacode

\protect \endinput