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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
-- There can be multiple treatments.lfg files in the tree and all are loaded in
-- the order specified by tree order access. The first treatment of a file
-- always wins, so one can overload. These files are not (to be) loaded with
-- font definitions. (Experiment as part of writing the font manual.)
--
-- So there are several ways to fix a font: add a patcher to a goodie file and
-- load that one. Such a patch can end up in the cached file. Treatments are
-- applied at runtime. An experimental auto-loaded goodie approach is not yet
-- enabled and will never be if treatments can do the job.
local report = fonts.treatments.report
local fix_unifraktur = {
comment = "suspicious x height",
fixes = function(data)
local pfminfo = data.metadata.pfminfo
if pfminfo then
local os2_xheight = pfminfo.os2_xheight
if os2_xheight and os2_xheight < 350 then
report("suspicious x-height %a, nilling",os2_xheight)
pfminfo.os2_xheight_original = os2_xheight
pfminfo.os2_xheight = nil
end
end
end,
}
local fix_lmmonoregular = {
--
-- there are now some extra safeguards for idris
--
comment = "wrong widths of some glyphs",
fixes = function(data)
report("fixing some wrong widths")
local unicodes = data.resources.unicodes
local descriptions = data.descriptions
local function getdescription(name)
local unicode = unicodes[name]
if not unicode then
report("no valid unicode for %a",name)
return
end
local description = descriptions[unicode]
if not description then
report("no glyph names %a in font",name)
return
end
return description
end
local zero = getdescription("zero")
if not zero then
return
end
local defaultwidth = zero.width
local function setwidth(name)
local data = getdescription(name)
if data then
data.width = defaultwidth
end
end
setwidth("six")
setwidth("nine")
setwidth("caron")
setwidth("perthousand")
setwidth("numero")
setwidth("caron.cap")
setwidth("six.taboldstyle")
setwidth("nine.taboldstyle")
setwidth("dollar.oldstyle")
end
}
return {
name = "treatments",
version = "1.00",
comment = "Goodies that deals with some general issues.",
author = "Hans Hagen",
copyright = "ConTeXt development team",
treatments = {
-- we need to complete this list in order to be able to warn
-- users not to include these files unless permitted
["adobeheitistd-regular.otf"] = {
comment = "this font is part of acrobat",
ignored = false,
-- included = false, -- not yet
},
-- just an experiment .. normally no big deal but I ran into
-- such case
["crap.ttf"] = {
comment = "a text file with suffix ttf", -- used in test file
ignored = true,
},
["lingoes.ttf"] = {
comment = "bugged file",
ignored = true,
},
-- harmless example
-- ["copperplatethirtythreebc.ttf"] = {
-- comment = "hangs and has no hyphen",
-- ignored = true,
-- },
-- ["latinmodern-math.otf"] = {
-- comment = "experimental",
-- },
["lmmono12regular.otf"] = fix_lmmonoregular,
["unifrakturcook.ttf"] = fix_unifraktur,
["unifrakturmaguntia.ttf"] = fix_unifraktur,
},
}
|