lpdf-fix.lmt /size: 3494 b    last modification: 2024-01-16 10:22
1if not modules then modules = { } end modules ['lpdf-fix'] = {
2    version   = 1.001,
3    comment   = "companion to lpdf-ini.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files"
7}
8
9-- local everything = {
10--     embed = {
11--         type0    = true,
12--         truetype = true,
13--         type1    = true,
14--     },
15--     merge = {
16--         type0    = true, -- check if a..z A..Z 0..9
17--         truetype = true,
18--         type1    = true,
19--         type3    = true,
20--         LMTX     = true,
21--     },
22--     strip = {
23--         transparency = true, -- when zero
24--         extgstate    = true,
25--         cmyk         = true,
26--     },
27--     add = {
28--         cidset, -- when missing or even fix
29--     },
30-- }
31
32-- local report = logs.reporter("graphics","compactors")
33
34do
35
36    local pdfbackend        = backends.registered.pdf
37    local codeinjections    = pdfbackend.codeinjections
38    local setmetatableindex = table.setmetatableindex
39
40    local variables         = interfaces.variables
41
42    local compactors = {
43     -- [variables.no]   = false,
44     -- [variables.nono] = false,
45     -- [""]             = false,
46    }
47
48    function codeinjections.registercompactor(name,data)
49        if not data then
50            data = name
51            name = data.name
52        end
53        compactors[name] = setmetatableindex(data,"table")
54    end
55
56    function codeinjections.validcompactor(name)
57        return name and compactors[name] or false
58    end
59
60    compactors["preset:yes"] = {
61        merge = {
62            lmtx = true,
63        },
64    }
65
66    compactors[interfaces.variables.yes] = compactors["preset:yes"]
67
68    compactors["preset:merge"] = {
69        merge = {
70            type0    = true,
71            truetype = true,
72            type1    = true,
73         -- type3    = true,
74            lmtx     = true,
75        },
76    }
77
78end
79
80do
81
82    local sequencers  = utilities.sequencers
83    local appendgroup = sequencers.appendgroup
84
85    local pdfcontentmanipulators = sequencers.new {
86        name      = "pdfcontentmanipulators",
87        arguments = "pdfdoc,page,pagenumber,resources,compactor",
88    }
89
90    appendgroup(pdfcontentmanipulators,"before") -- user
91    appendgroup(pdfcontentmanipulators,"system") -- private
92    appendgroup(pdfcontentmanipulators,"after" ) -- user
93
94    function lpdf.epdf.contentplugin(pdfdoc,page,pagenumber,resources,compactor)
95        local runner = pdfcontentmanipulators.runner
96        if runner then
97            runner(pdfdoc,page,pagenumber,resources,compactor)
98        end
99    end
100
101    -- todo: contents: table first time, concat last time .. automatic .. when
102    -- performance becomes an issue
103
104    local pdfpagemanipulators = sequencers.new {
105        name      = "pdfpagemanipulators",
106        arguments = "pdfdoc,page,pagenumber,resources,compactor",
107    }
108
109    appendgroup(pdfpagemanipulators,"before") -- user
110    appendgroup(pdfpagemanipulators,"system") -- private
111    appendgroup(pdfpagemanipulators,"after" ) -- user
112
113    sequencers.appendaction("pdfpagemanipulators","system","lpdf.epdf.contentplugin")
114    sequencers.enableaction("pdfpagemanipulators","lpdf.epdf.contentplugin")
115
116    function lpdf.epdf.pageplugin(pdfdoc,page,pagenumber,resources,compactor)
117        local runner = pdfpagemanipulators.runner
118        if runner then
119            runner(pdfdoc,page,pagenumber,resources,compactor)
120        end
121    end
122
123end
124