summaryrefslogtreecommitdiff
path: root/tex/context/base/font-ctx.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2013-03-15 19:22:00 +0100
committerHans Hagen <pragma@wxs.nl>2013-03-15 19:22:00 +0100
commitf134097269c02c4c42583281168c5ac71a4c2473 (patch)
tree6148e432ca8dba4135aad07e7da74099e51469bd /tex/context/base/font-ctx.lua
parentd85ec4e39d1529a187aa1435f45625d5ac00f9d3 (diff)
downloadcontext-f134097269c02c4c42583281168c5ac71a4c2473.tar.gz
beta 2013.03.15 19:22
Diffstat (limited to 'tex/context/base/font-ctx.lua')
-rw-r--r--tex/context/base/font-ctx.lua38
1 files changed, 19 insertions, 19 deletions
diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua
index 0c99268a4..2e5b9b6cd 100644
--- a/tex/context/base/font-ctx.lua
+++ b/tex/context/base/font-ctx.lua
@@ -147,7 +147,7 @@ end
commands.resetnullfont = definers.resetnullfont
-setmetatableindex(fontdata, function(t,k) return nulldata end)
+setmetatableindex(fontdata, function(t,k) return k == true and t[currentfont()] or nulldata end)
-- we might make an font-hsh.lua
@@ -315,7 +315,6 @@ local function checkedscript(tfmdata,resources,features)
script = latn and "latn" or "dflt"
end
if trace_automode then
--- report_defining("auto script mode, using script %a in font %a",script,file.basename(tfmdata.properties.name))
report_defining("auto script mode, using script %a in font %!font:name!",script,tfmdata)
end
features.script = script
@@ -341,8 +340,6 @@ local function checkedmode(tfmdata,resources,features)
if found then
-- more than one lookup
if trace_automode then
--- report_defining("forcing mode %a, font %a, feature %a, script %a, language %a, %s",
--- "node",file.basename(tfmdata.properties.name),feature,script,language,"multiple lookups")
report_defining("forcing mode %a, font %!font:name!, feature %a, script %a, language %a, %s",
"node",tfmdata,feature,script,language,"multiple lookups")
end
@@ -350,8 +347,6 @@ local function checkedmode(tfmdata,resources,features)
return "node"
elseif needsnodemode[sequence.type] then
if trace_automode then
--- report_defining("forcing mode %a, font %a, feature %a, script %a, language %a, %s",
--- "node",file.basename(tfmdata.properties.name),feature,script,language,"no base support")
report_defining("forcing mode %a, font %!font:name!, feature %a, script %a, language %a, %s",
"node",tfmdata,feature,script,language,"no base support")
end
@@ -377,7 +372,6 @@ definers.checkedmode = checkedmode
local function modechecker(tfmdata,features,mode) -- we cannot adapt features as they are shared!
if trace_features then
--- report_features("fontname %a, features % a",file.basename(tfmdata.properties.name),features)
report_features("fontname %!font:name!, features %!font:features!",tfmdata,features)
end
local rawdata = tfmdata.shared.rawdata
@@ -391,7 +385,6 @@ local function modechecker(tfmdata,features,mode) -- we cannot adapt features as
mode = checkedmode(tfmdata,resources,features)
end
else
--- report_features("missing resources for font %a",file.basename(tfmdata.properties.name))
report_features("missing resources for font %!font:name!",tfmdata)
end
return mode
@@ -709,11 +702,10 @@ local function registercontext(fontnumber,extraname,option)
end
end
-local function registercontextfeature(fontnumber,extraname,how)
+local function registercontextfeature(mergedname,extraname,how)
local extra = setups[extraname]
if extra then
- local mergedfeatures, mergedname = { }, nil
- mergedname = fontnumber .. how .. extraname
+ local mergedfeatures = { }
for k, v in next, extra do
mergedfeatures[k] = v
end
@@ -1700,25 +1692,33 @@ local cache = { }
function commands.feature(how,parent,name,font)
if not how then
+ if trace_features and texattribute[0] ~= 0 then
+ report_cummulative("font %!font:name!, reset",fontdata[font or true])
+ end
texattribute[0] = 0
+ elseif how == true then
+ local hash = "feature > " .. parent
+ local done = cache[hash]
+ if trace_features and done then
+ report_cummulative("font %!font:name!, revive %a : %!font:features!",fontdata[font or true],parent,setups[numbers[done]])
+ end
+ texattribute[0] = done or 0
else
- local font = font or currentfont()
local full = parent .. how .. name
- local hash = font .. how .. full -- what, hm
+ local hash = "feature > " .. full
local done = cache[hash]
- if done then
- else
+ if not done then
local n = setups[full]
if n then
-- already defined
else
- n = mergecontextfeatures(parent,name,how,full) -- registers parent .. "+" .. name
+ n = mergecontextfeatures(parent,name,how,full)
end
- done = registercontextfeature(font,full,how)
+ done = registercontextfeature(hash,full,how)
cache[hash] = done
if trace_features then
- report_cummulative("font %!font:name!, number %a, set %a : %!font:features!",
- fontdata[font],done,full,setups[numbers[done]])
+ report_cummulative("font %!font:name!, %s %a : %!font:features!",
+ fontdata[font or true],how == "+" and "add" or how == "-" and "subtract" or "replace",full,setups[numbers[done]])
end
end
texattribute[0] = done