summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/page-flt.lua
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-04-22 22:14:39 +0000
committerKarl Berry <karl@freefriends.org>2016-04-22 22:14:39 +0000
commitfc4466b32ed330a956ac603b00fd145524cff49a (patch)
tree2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master/texmf-dist/tex/context/base/page-flt.lua
parent50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff)
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-flt.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/page-flt.lua377
1 files changed, 0 insertions, 377 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-flt.lua b/Master/texmf-dist/tex/context/base/page-flt.lua
deleted file mode 100644
index e91285d0a64..00000000000
--- a/Master/texmf-dist/tex/context/base/page-flt.lua
+++ /dev/null
@@ -1,377 +0,0 @@
-if not modules then modules = { } end modules ['page-flt'] = {
- version = 1.001,
- comment = "companion to page-flt.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- floats -> managers.floats
--- some functions are a tex/lua mix so we need a separation
-
-local insert, remove = table.insert, table.remove
-local find = string.find
-
-local trace_floats = false trackers.register("graphics.floats", function(v) trace_floats = v end) -- name might change
-
-local report_floats = logs.reporter("structure","floats")
-
-local C, S, P, lpegmatch = lpeg.C, lpeg.S, lpeg.P, lpeg.match
-
--- we use floatbox, floatwidth, floatheight
--- text page leftpage rightpage (todo: top, bottom, margin, order)
-
-local copy_node_list = node.copy_list
-local flush_node_list = node.flush_list
-local copy_node = node.copy
-
-local setdimen = tex.setdimen
-local setcount = tex.setcount
-local texgetbox = tex.getbox
-local texsetbox = tex.setbox
-local textakebox = nodes.takebox
-
-floats = floats or { }
-local floats = floats
-
-local noffloats = 0
-local last = nil
-local default = "text"
-local pushed = { }
-
-local function initialize()
- return {
- text = { },
- page = { },
- leftpage = { },
- rightpage = { },
- somewhere = { },
- }
-end
-
-local stacks = initialize()
-
--- list location
-
-function floats.stacked(which) -- floats.thenofstacked
- return #stacks[which or default]
-end
-
-function floats.push()
- insert(pushed,stacks)
- stacks = initialize()
- setcount("global","savednoffloats",0)
-end
-
-function floats.pop()
- local popped = remove(pushed)
- if popped then
- for which, stack in next, stacks do
- for i=1,#stack do
- insert(popped[which],stack[i])
- end
- end
- stacks = popped
- setcount("global","savednoffloats",#stacks[default])
- end
-end
-
-local function setdimensions(b)
- local w, h, d = 0, 0, 0
- if b then
- w, h, d = b.width, b.height, b.depth
- end
- setdimen("global","floatwidth", w)
- setdimen("global","floatheight", h+d)
- return w, h, d
-end
-
-local function get(stack,n,bylabel)
- if bylabel then
- for i=1,#stack do
- local s = stack[i]
- local n = string.topattern(tostring(n)) -- to be sure
- if find(s.data.label,n) then
- return s, s.box, i
- end
- end
- else
- n = n or #stack
- if n > 0 then
- local t = stack[n]
- if t then
- return t, t.box, n
- end
- end
- end
-end
-
-function floats.save(which,data)
- which = which or default
- local b = textakebox("floatbox")
- if b then
- local stack = stacks[which]
- noffloats = noffloats + 1
- local t = {
- n = noffloats,
- data = data or { },
- box = b,
- }
- insert(stack,t)
- setcount("global","savednoffloats",#stacks[default])
- if trace_floats then
- report_floats("%s, category %a, number %a, slot %a, width %p, height %p, depth %p","saving",
- which,noffloats,#stack,b.width,b.height,b.depth)
- else
- interfaces.showmessage("floatblocks",2,noffloats)
- end
- else
- report_floats("ignoring empty, category %a, number %a",which,noffloats)
- end
-end
-
-function floats.resave(which)
- if last then
- which = which or default
- local stack = stacks[which]
- local b = textakebox("floatbox")
- last.box = b
- insert(stack,1,last)
- setcount("global","savednoffloats",#stacks[default])
- if trace_floats then
- report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","resaving",
- which,noffloats,#stack,b.width,b.height,b.depth)
- else
- interfaces.showmessage("floatblocks",2,noffloats)
- end
- else
- report_floats("unable to resave float")
- end
-end
-
-function floats.flush(which,n,bylabel)
- which = which or default
- local stack = stacks[which]
- local t, b, n = get(stack,n or 1,bylabel)
- if t then
- if trace_floats then
- local w, h, d = setdimensions(b) -- ?
- report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","flushing",
- which,t.n,n,w,h,d)
- else
- interfaces.showmessage("floatblocks",3,t.n)
- end
- texsetbox("floatbox",b)
- last = remove(stack,n)
- last.box = nil
- setcount("global","savednoffloats",#stacks[default]) -- default?
- else
- setdimensions()
- end
-end
-
-function floats.consult(which,n)
- which = which or default
- local stack = stacks[which]
- local t, b, n = get(stack,n)
- if t then
- if trace_floats then
- local w, h, d = setdimensions(b)
- report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","consulting",
- which,t.n,n,w,h,d)
- end
- return t, b, n
- else
- if trace_floats then
- report_floats("nothing to consult")
- end
- setdimensions()
- end
-end
-
-function floats.collect(which,maxwidth,distance)
- which = which or default
- local stack = stacks[which]
- local n, m = #stack, 0
- for i=1,n do
- local t, b, n = get(stack,i)
- if t then
- local w, h, d = setdimensions(b)
- if w + distance < maxwidth then
- m = m + 1
- maxwidth = maxwidth - w - distance
- else
- break
- end
- else
- break
- end
- end
- if m == 0 then
- m = 1
- end
- setcount("global","nofcollectedfloats",m)
-end
-
-function floats.getvariable(name,default)
- local value = last and last.data[name] or default
- return value ~= "" and value
-end
-
-function floats.checkedpagefloat(packed)
- if structures.pages.is_odd() then
- if #stacks.rightpage > 0 then
- return "rightpage"
- elseif #stacks.page > 0 then
- return "page"
- elseif #stacks.leftpage > 0 then
- if packed then
- return "leftpage"
- end
- end
- else
- if #stacks.leftpage > 0 then
- return "leftpage"
- elseif #stacks.page > 0 then
- return "page"
- elseif #stacks.rightpage > 0 then
- if packed then
- return "rightpage"
- end
- end
- end
-end
-
-function floats.nofstacked(which)
- return #stacks[which or default] or 0
-end
-
-function floats.hasstacked(which)
- return (#stacks[which or default] or 0) > 0
-end
-
--- todo: check for digits !
-
-local method = C((1-S(", :"))^1)
-local position = P(":") * C((1-S("*,"))^1) * (P("*") * C((1-S(","))^1))^0
-local label = P(":") * C((1-S(",*: "))^0)
-
-local pattern = method * (
- label * position * C("")
- + C("") * position * C("")
- + label * C("") * C("")
- + C("") * C("") * C("")
-) + C("") * C("") * C("") * C("")
-
--- inspect { lpegmatch(pattern,"somewhere:blabla,crap") }
--- inspect { lpegmatch(pattern,"somewhere:1*2") }
--- inspect { lpegmatch(pattern,"somewhere:blabla:1*2") }
--- inspect { lpegmatch(pattern,"somewhere::1*2") }
--- inspect { lpegmatch(pattern,"somewhere,") }
--- inspect { lpegmatch(pattern,"somewhere") }
--- inspect { lpegmatch(pattern,"") }
-
-function floats.analysemethod(str) -- will become a more extensive parser
- return lpegmatch(pattern,str or "")
-end
-
--- interface
-
-local context = context
-local commands = commands
-local implement = interfaces.implement
-local setmacro = interfaces.setmacro
-
-implement {
- name = "flushfloat",
- actions = floats.flush,
- arguments = { "string", "integer" },
-}
-
-implement {
- name = "flushlabeledfloat",
- actions = floats.flush,
- arguments = { "string", "string", true },
-}
-
-implement {
- name = "savefloat",
- actions = floats.save,
- arguments = "string"
-}
-
-implement {
- name = "savespecificfloat",
- actions = floats.save,
- arguments = {
- "string",
- {
- { "specification" },
- { "label" },
- }
- }
-}
-
-implement {
- name = "resavefloat",
- actions = floats.resave,
- arguments = "string"
-}
-
-implement {
- name = "pushfloat",
- actions = floats.push
-}
-
-implement {
- name = "popfloat",
- actions = floats.pop
-}
-
-implement {
- name = "consultfloat",
- actions = floats.consult,
- arguments = "string",
-}
-
-implement {
- name = "collectfloat",
- actions = floats.collect,
- arguments = { "string", "dimen", "dimen" }
-}
-
-implement {
- name = "getfloatvariable",
- actions = { floats.getvariable, context },
- arguments = "string"
-}
-
-implement {
- name = "checkedpagefloat",
- actions = { floats.checkedpagefloat, context },
- arguments = "string"
-}
-
-implement {
- name = "nofstackedfloats",
- actions = { floats.nofstacked, context },
- arguments = "string"
-}
-
-implement {
- name = "doifelsestackedfloats",
- actions = { floats.hasstacked, commands.doifelse },
- arguments = "string"
-}
-
-implement {
- name = "analysefloatmethod",
- actions = function(str)
- local method, label, row, column = floats.analysemethod(str)
- setmacro("floatmethod",method or "")
- setmacro("floatlabel", label or "")
- setmacro("floatrow", row or "")
- setmacro("floatcolumn",column or "")
- end,
- arguments = "string"
-}