diff options
author | Mojca Miklavec <mojca.miklavec@gmail.com> | 2012-05-14 17:38:55 +0000 |
---|---|---|
committer | Mojca Miklavec <mojca.miklavec@gmail.com> | 2012-05-14 17:38:55 +0000 |
commit | 15995e10bfc68edf79970c4ea4fbb6678566c46e (patch) | |
tree | 2de7ca2a83f2d37ef043ad7429a5cb945bb79ddb /Master/texmf-dist/tex/context/base/lpdf-epd.lua | |
parent | c9a39f716f1e5ec820ed3aab2c9aef25c5a9d730 (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.lua | 41 |
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 |