diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua')
-rw-r--r-- | Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua new file mode 100644 index 00000000000..8c835babb91 --- /dev/null +++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua @@ -0,0 +1,104 @@ +if not modules then modules = { } end modules ['luatex-gadgets'] = { + version = 1.001, + comment = "companion to luatex-gadgets.tex", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +if context then return end + +-- This module contains some maybe useful gadgets. More might show up here +-- as side effect of tutorials or articles. Don't use this file in ConTeXt +-- because we often have similar mechanisms already. + +gadgets = gadgets or { } -- global namespace + +-- marking content for optional removal + +local marking = { } +gadgets.marking = marking + +local marksignal = 5001 -- will be set in the tex module +local lastmarked = 0 +local marked = { } +local local_par = 6 +local whatsit_node = 8 + +function marking.setsignal(n) + marksignal = tonumber(n) or marksignal +end + +function marking.mark(str) + local currentmarked = marked[str] + if not currentmarked then + lastmarked = lastmarked + 1 + currentmarked = lastmarked + marked[str] = currentmarked + end + tex.setattribute(marksignal,currentmarked) +end + +function marking.remove(str) + local attr = marked[str] + if not attr then + return + end + local list = tex.nest[tex.nest.ptr] + if list then + local head = list.head + local tail = list.tail + local last = tail + if last[marksignal] == attr then + local first = last + while true do + local prev = first.prev + if not prev + or prev[marksignal] ~= attr + or (prev.id == whatsit_node and prev.subtype == local_par) then + break + else + first = prev + end + end + if first == head then + list.head = nil + list.tail = nil + else + local prev = first.prev + list.tail = prev + prev.next = nil + end + node.flush_list(first) + end + end +end + +-- local imgscan = img.scan +-- +-- local valid = { +-- ["png"] = "^" .. string.char(0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A), +-- ["jpg"] = "^" .. string.char(0xFF,0xD8,0xFF), +-- ["jp2"] = "^" .. string.char(0x00,0x00,0x00,0x0C,0x6A,0x50,0x20,0x20,0x0D,0x0A), +-- ["pdf"] = "^" .. ".-%%PDF", +-- } +-- +-- function img.scan(t) +-- if t and t.filename then +-- local f = io.open(t.filename,"rb") +-- if f then +-- local d = f:read(4096) +-- for k, v in next,valid do +-- if string.find(d,v) then +-- f:close() -- be nice +-- return imgscan(t) +-- end +-- end +-- f:close() -- be nice +-- end +-- end +-- end +-- +-- print(img.scan({filename = "hacker1b.tif"})) +-- print(img.scan({filename = "cow.pdf"})) +-- print(img.scan({filename = "mill.png"})) |