summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/font-ocl.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-11-18 16:12:36 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2018-11-18 16:12:36 +0100
commit744095aa4676553437db0d71c281a74557a3222f (patch)
treebfdf5d203b5fbfa44ee7db705d3b3475361ad28f /tex/context/base/mkiv/font-ocl.lua
parente2ee706a3114129601a30908d6b8cbb57068d32c (diff)
downloadcontext-744095aa4676553437db0d71c281a74557a3222f.tar.gz
2018-11-18 14:16:00
Diffstat (limited to 'tex/context/base/mkiv/font-ocl.lua')
-rw-r--r--tex/context/base/mkiv/font-ocl.lua92
1 files changed, 27 insertions, 65 deletions
diff --git a/tex/context/base/mkiv/font-ocl.lua b/tex/context/base/mkiv/font-ocl.lua
index f97487ecd..866d6dd36 100644
--- a/tex/context/base/mkiv/font-ocl.lua
+++ b/tex/context/base/mkiv/font-ocl.lua
@@ -306,17 +306,6 @@ fonts.handlers.otf.features.register {
do
- -- local f_setstream = formatters[ [[io.savedata("svg-glyph-%05i",%q)]] ]
- -- local f_getstream = formatters[ [[svg-glyph-%05i]] ]
-
- -- function otfsvg.storepdfdata(pdf)
- -- nofstreams = nofstreams + 1
- -- storepdfdata = function(pdf)
- -- nofstreams = nofstreams + 1
- -- return f_setstream(nofstreams,pdf), f_getstream(nofstreams)
- -- end
- -- end
-
local nofstreams = 0
local f_name = formatters[ [[pdf-glyph-%05i]] ]
local f_used = context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
@@ -336,7 +325,7 @@ do
done = f_used(n)
hashed[pdf] = done
end
- return nil, done, nil
+ return done
end
else
@@ -353,48 +342,16 @@ do
done = f_used(n)
hashed[pdf] = done
end
- return nil, done, nil
+ return done
end
end
- -- maybe more efficient but much slower (and we hash already)
- --
- -- if context then
- --
- -- local storepdfdata = otf.storepdfdata
- -- local initialized = false
- --
- -- function otf.storepdfdata(pdf)
- -- if not initialized then
- -- if resolvers.setmemstream then
- -- local f_setstream = formatters[ [[resolvers.setmemstream("pdf-glyph-%05i",%q,true)]] ]
- -- local f_getstream = formatters[ [[memstream:///pdf-glyph-%05i]] ]
- -- local f_nilstream = formatters[ [[resolvers.resetmemstream("pdf-glyph-%05i",true)]] ]
- -- storepdfdata = function(pdf)
- -- local done = hashed[pdf]
- -- local set = nil
- -- local reset = nil
- -- if not done then
- -- nofstreams = nofstreams + 1
- -- set = f_setstream(nofstreams,pdf)
- -- done = f_getstream(nofstreams)
- -- reset = f_nilstream(nofstreams)
- -- hashed[pdf] = done
- -- end
- -- return set, done, reset
- -- end
- -- otf.storepdfdata = storepdfdata
- -- end
- -- initialized = true
- -- end
- -- return storepdfdata(pdf)
- -- end
- --
- -- end
-
end
+-- I'll probably make a variant for context as we can do it more efficient there than in
+-- generic.
+
local function pdftovirtual(tfmdata,pdfshapes,kind) -- kind = sbix|svg
if not tfmdata or not pdfshapes or not kind then
return
@@ -418,6 +375,12 @@ local function pdftovirtual(tfmdata,pdfshapes,kind) -- kind = sbix|svg
local actualb = { "pdf", "page", b } -- saves tables
local actuale = { "pdf", "page", e } -- saves tables
--
+ local vfimage = lpdf and lpdf.vfimage or function(wd,ht,dp,data,name)
+ -- needed for generic (if used there at all)
+ local name = storepdfdata(data)
+ return { "image", { filename = name, width = wd, height = ht, depth = dp } }
+ end
+ --
for unicode, character in sortedhash(characters) do -- sort is nicer for svg
local index = character.index
if index then
@@ -438,23 +401,20 @@ local function pdftovirtual(tfmdata,pdfshapes,kind) -- kind = sbix|svg
if data then
-- We can delay storage by a lua function in commands: but then we need to
-- be able to provide our own mem stream name (so that we can reserve it).
- local setcode, name, nilcode = storepdfdata(data)
- if name then
- local bt = unicode and getactualtext(unicode)
- local wd = character.width or 0
- local ht = character.height or 0
- local dp = character.depth or 0
- character.commands = {
- not unicode and actualb or { "pdf", "page", (getactualtext(unicode)) },
- downcommand[dp + dy * hfactor],
- rightcommand[dx * hfactor],
- -- setcode and { "lua", setcode } or nop,
- { "image", { filename = name, width = wd, height = ht, depth = dp } },
- -- nilcode and { "lua", nilcode } or nop,
- actuale,
- }
- character[kind] = true
- end
+ -- Anyway, we will do this different in a future version of context.
+ local bt = unicode and getactualtext(unicode)
+ local wd = character.width or 0
+ local ht = character.height or 0
+ local dp = character.depth or 0
+ -- The down and right will change too (we can move that elsewhere).
+ character.commands = {
+ not unicode and actualb or { "pdf", "page", (getactualtext(unicode)) },
+ downcommand[dp + dy * hfactor],
+ rightcommand[dx * hfactor],
+ vfimage(wd,ht,dp,data,name),
+ actuale,
+ }
+ character[kind] = true
end
end
end
@@ -668,6 +628,8 @@ do
end
+-- This will change in a future version of context. More direct.
+
local function initializesbix(tfmdata,kind,value) -- hm, always value
if value and otf.sbixenabled then
local sbix = tfmdata.properties.sbix