summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/lpdf-epd.lua
diff options
context:
space:
mode:
authorMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
committerMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
commit15995e10bfc68edf79970c4ea4fbb6678566c46e (patch)
tree2de7ca2a83f2d37ef043ad7429a5cb945bb79ddb /Master/texmf-dist/tex/context/base/lpdf-epd.lua
parentc9a39f716f1e5ec820ed3aab2c9aef25c5a9d730 (diff)
ConTeXt 2012.05.14 16:00
git-svn-id: svn://tug.org/texlive/trunk@26371 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/lpdf-epd.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-epd.lua41
1 files changed, 32 insertions, 9 deletions
diff --git a/Master/texmf-dist/tex/context/base/lpdf-epd.lua b/Master/texmf-dist/tex/context/base/lpdf-epd.lua
index 19c1f9bd8d9..76d258cefdf 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-epd.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-epd.lua
@@ -23,8 +23,25 @@ if not modules then modules = { } end modules ['lpdf-epd'] = {
-- We cannot access all destinations in one run.
local setmetatable, rawset, rawget, tostring, tonumber = setmetatable, rawset, rawget, tostring, tonumber
-local lower, match, char = string.lower, string.match, string.char
+local lower, match, char, find, sub = string.lower, string.match, string.char, string.find, string.sub
local concat = table.concat
+local toutf = string.toutf
+
+-- a bit of protection
+
+local limited = false
+
+directives.register("system.inputmode", function(v)
+ if not limited then
+ local i_limiter = io.i_limiter(v)
+ if i_limiter then
+ epdf.open = i_limiter.protect(epdf.open)
+ limited = true
+ end
+ end
+end)
+
+--
function epdf.type(o)
local t = lower(match(tostring(o),"[^ :]+"))
@@ -51,8 +68,10 @@ local function prepare(document,d,t,n,k)
--
else
c = checked_access[v:getTypeName()](v,document,r)
- document.cache[r] = c
- document.xrefs[c] = r
+ if c then
+ document.cache[r] = c
+ document.xrefs[c] = r
+ end
end
t[d:getKey(i)] = c
end
@@ -149,7 +168,7 @@ checked_access = {
return v:getNum()
end,
string = function(v)
- return v:getString()
+ return toutf(v:getString())
end,
boolean = function(v)
return v:getBool()
@@ -241,7 +260,8 @@ local function getpages(document)
local cata = data:getCatalog()
local xref = data:getXRef()
local pages = { }
- for pagenumber=1,cata:getNumPages() do
+ local nofpages = cata:getNumPages()
+ for pagenumber=1,nofpages do
local pagereference = cata:getPageRef(pagenumber).num
local pagedata = some_dictionary(xref:fetch(pagereference,0):getDict(),document,pagereference)
pagedata.number = pagenumber
@@ -249,6 +269,7 @@ local function getpages(document)
xrefs[pagedata] = pagereference
cache[pagereference] = pagedata
end
+ pages.n = nofpages
return pages
end
@@ -281,14 +302,16 @@ function lpdf.epdf.load(filename)
data = data,
}
local Catalog = some_dictionary(data:getXRef():getCatalog():getDict(),document)
+ local Info = some_dictionary(data:getXRef():getDocInfo():getDict(),document)
document.Catalog = Catalog
+ document.Info = Info
-- document.catalog = Catalog
-- a few handy helper tables
document.pages = delayed(document,"pages", function() return getpages(document) end)
- document.destinations = delayed(document,"destinations", function() return getnames(document,Catalog.Names.Dests) end)
- document.javascripts = delayed(document,"javascripts", function() return getnames(document,Catalog.Names.JS) end)
- document.widgets = delayed(document,"widgets", function() return getnames(document,Catalog.Names.AcroForm) end)
- document.embeddedfiles = delayed(document,"embeddedfiles",function() return getnames(document,Catalog.Names.EmbeddedFiles) end)
+ document.destinations = delayed(document,"destinations", function() return getnames(document,Catalog.Names and Catalog.Names.Dests) end)
+ document.javascripts = delayed(document,"javascripts", function() return getnames(document,Catalog.Names and Catalog.Names.JS) end)
+ document.widgets = delayed(document,"widgets", function() return getnames(document,Catalog.Names and Catalog.Names.AcroForm) end)
+ document.embeddedfiles = delayed(document,"embeddedfiles",function() return getnames(document,Catalog.Names and Catalog.Names.EmbeddedFiles) end)
document.layers = delayed(document,"layers", function() return getlayers(document) end)
else
document = false