summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElie Roux <eroux@dedibox.ebzao.info>2010-01-21 13:26:40 +0100
committerElie Roux <eroux@dedibox.ebzao.info>2010-01-21 13:26:40 +0100
commit6e76892d76cf5a82fc02b6e678152606c2b921fe (patch)
treedbacc8bda317fdf6ebabdb28459eb93e849265b2
parentde91415cf4c05bd72a4dfad14623069ed016348e (diff)
downloadluaotfload-6e76892d76cf5a82fc02b6e678152606c2b921fe.tar.gz
Improving style guessing based on real-life fonts
Now all the informations are printed in the guessed_style, for parsing facilities. Light and Heavy are not treated as weight anymore (some fonts are heavy regular or heavy bold in the same family). Treating the condensed style separately. If it could be tested on a large database it would help me improve it. Of course perverse styles like the ones of semaphor are not guessed, but they are not usual styles so it's not a problem.
-rw-r--r--luaotfload-fonts.lua94
1 files changed, 58 insertions, 36 deletions
diff --git a/luaotfload-fonts.lua b/luaotfload-fonts.lua
index aba210d..0502a9c 100644
--- a/luaotfload-fonts.lua
+++ b/luaotfload-fonts.lua
@@ -69,12 +69,12 @@ end
-- table containing hard to guess styles
local styles = {
- calibrii = "italic",
- bookosi = "italic",
- bookosb = "bold",
- lsansi = "italic",
- antquab = "bold",
- antquai = "italic",
+ calibrii = "reg-no-no-norm-0-text",
+ bookosi = "reg-it-no-norm-0-text",
+ bookosb = "bd-no-no-norm-0-text",
+ lsansi = "reg-it-no-norm-0-text",
+ antquab = "bd-no-no-norm-0-text",
+ antquai = "reg-it-no-norm-0-text",
}
-- euristics to normalize the style
@@ -82,27 +82,37 @@ local function normalize_style(style, family)
local s = {}
if style:find("semibold") or style:find("demibold")
or style:find("lightbold") or style:match("lb$") then
- s.weight = "demibold"
- elseif style:find("bold") or style:find("heavy") or style:match("xb$")
+ s.weight = "smbd"
+ elseif style:find("bold") or style:match("xb$")
or style:match("bd$") or style:match("bb$") then
- s.weight = "bold"
+ s.weight = "bd"
elseif style:find("medium") or style:find("med") then
- s.weight = "medium"
- elseif style:find("light") or style:find("narrow") then
- s.weight = "narrow" -- ?
+ s.weight = "med"
+ elseif style:find("narrow") then
+ s.weight = "nar" -- ?
end
if style:find("italic") or style:find("oblique") or style:match("it$") then
- s.italic = true
+ s.italic = "it"
+ elseif style:find("oblique") then
+ s.italic = "obl"
+ end
+ if style:find("heavy") then
+ s.type = "heavy"
+ elseif style:find("light") then
+ s.type = "light"
end
if style:find("regular") or style:match("rg$") then
s.regular = true
end
+ if style:find("condensed") then
+ s.condensed = true
+ end
if style:find("caption") or style:find("capt") then
- s.size_type = 'caption'
+ s.size_type = 'capt'
elseif style:find("display") or style:find("disp") then
- s.size_type = 'display'
+ s.size_type = 'disp'
elseif style:find("subhead") or style:find("subh") then
- s.size_type = 'subhead'
+ s.size_type = 'subh'
end
local size = tonumber(string.match(style, "%d+"))
if size and size > 4 and size < 25 then
@@ -113,35 +123,47 @@ local function normalize_style(style, family)
local endletter = style:sub(-1, -1)
if family:find(truncated) and family:sub(-1,-1) ~= endletter then
if endletter =='b' then
- s.weight = "bold"
+ s.weight = "bd"
elseif endletter == 'i' then
- s.italic = true
+ s.italic = "it"
end
end
end
if not next(s) and styles[style] then
return styles[style]
end
- if not next(s) then
- return style -- or "regular ?"
+ local result = nil
+ if s.weight then
+ result = s.weight
else
- local result = nil
- if s.weight then
- result = s.weight
- else
- result = 'regular'
- end
- if s.italic then
- result = result.."-italic"
- end
- if s.size then
- result = result.."-"..s.size
- end
- if s.size_type then
- result = result.."-"..s.size_type
- end
- return result
+ result = 'reg'
+ end
+ if s.italic then
+ result = result.."-"..s.italic
+ else
+ result = result.."-no"
end
+ if s.condensed then
+ result = result.."-cond"
+ else
+ result = result.."-no"
+ end
+ if s.type then
+ result = result.."-"..s.type
+ else
+ result = result.."-norm"
+ end
+ if s.size then
+ result = result.."-"..s.size
+ else
+ result = result.."-0"
+ end
+ if s.size_type then
+ result = result.."-"..s.size_type
+ else
+ result = result.."-text"
+ end
+ return result
end
local function load_font(filename, names, texmf)