diff options
author | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
commit | 13ec4b540e0d46c97fd7b089e0b7413da81e0a9f (patch) | |
tree | bebfa563a17c06b3bd3bf8f6f4ba6d025e00d107 /tex/context/base/spac-ali.lua | |
parent | 69ad13650cda027526271179e95b5294694143a1 (diff) | |
download | context-13ec4b540e0d46c97fd7b089e0b7413da81e0a9f.tar.gz |
beta 2013.05.19 19:27
Diffstat (limited to 'tex/context/base/spac-ali.lua')
-rw-r--r-- | tex/context/base/spac-ali.lua | 268 |
1 files changed, 134 insertions, 134 deletions
diff --git a/tex/context/base/spac-ali.lua b/tex/context/base/spac-ali.lua index ceb278433..6357f0f15 100644 --- a/tex/context/base/spac-ali.lua +++ b/tex/context/base/spac-ali.lua @@ -1,134 +1,134 @@ -if not modules then modules = { } end modules ['spac-ali'] = { - version = 1.001, - comment = "companion to spac-ali.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -local div = math.div -local format = string.format - -local tasks = nodes.tasks -local appendaction = tasks.appendaction -local prependaction = tasks.prependaction -local disableaction = tasks.disableaction -local enableaction = tasks.enableaction - -local slide_nodes = node.slide -local hpack_nodes = node.hpack -- nodes.fasthpack not really faster here - -local unsetvalue = attributes.unsetvalue - -local concat_nodes = nodes.concat - -local nodecodes = nodes.nodecodes -local listcodes = nodes.listcodes - -local hlist_code = nodecodes.hlist -local vlist_code = nodecodes.vlist -local line_code = listcodes.line - -local nodepool = nodes.pool - -local new_stretch = nodepool.stretch - -local a_realign = attributes.private("realign") - -local texattribute = tex.attribute -local texcount = tex.count - -local isleftpage = layouts.status.isleftpage - -typesetters = typesetters or { } -local alignments = { } -typesetters.alignments = alignments - -local report_realign = logs.reporter("typesetters","margindata") -local trace_realign = trackers.register("typesetters.margindata", function(v) trace_margindata = v end) - -local nofrealigned = 0 - --- leftskip rightskip parfillskip --- raggedleft 0 + 0 - --- raggedright 0 0 fil --- raggedcenter 0 + 0 + - - -local function handler(head,leftpage,realpageno) - local current = head - local done = false - while current do - local id = current.id - if id == hlist_code then - if current.subtype == line_code then - local a = current[a_realign] - if not a or a == 0 then - -- skip - else - local align = a % 10 - local pageno = div(a,10) - if pageno == realpageno then - -- already ok - else - local action = 0 - if align == 1 then -- flushright - action = leftpage and 1 or 2 - elseif align == 2 then -- flushleft - action = leftpage and 2 or 1 - end - if action == 1 then - current.list = hpack_nodes(concat_nodes{current.list,new_stretch(3)},current.width,"exactly") - if trace_realign then - report_realign("flushing left, align %a, page %a, realpage %a",align,pageno,realpageno) - end - elseif action == 2 then - current.list = hpack_nodes(concat_nodes{new_stretch(3),current.list},current.width,"exactly") - if trace_realign then - report_realign("flushing right. align %a, page %a, realpage %a",align,pageno,realpageno) - end - elseif trace_realign then - report_realign("invalid flushing, align %a, page %a, realpage %a",align,pageno,realpageno) - end - done = true - nofrealigned = nofrealigned + 1 - end - current[a_realign] = unsetvalue - end - end - handler(current.list,leftpage,realpageno) - elseif id == vlist_code then - handler(current.list,leftpage,realpageno) - end - current = current.next - end - return head, done -end - -function alignments.handler(head) - local leftpage = isleftpage(true,false) - local realpageno = texcount.realpageno - return handler(head,leftpage,realpageno) -end - -local enabled = false - -function alignments.set(n) - if not enabled then - enableaction("shipouts","typesetters.alignments.handler") - enabled = true - if trace_realign then - report_realign("enabled") - end - end - texattribute[a_realign] = texcount.realpageno * 10 + n -end - -commands.setrealign = alignments.set - -statistics.register("realigning", function() - if nofrealigned > 0 then - return format("%s processed",nofrealigned) - else - return nil - end -end) +if not modules then modules = { } end modules ['spac-ali'] = {
+ version = 1.001,
+ comment = "companion to spac-ali.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local div = math.div
+local format = string.format
+
+local tasks = nodes.tasks
+local appendaction = tasks.appendaction
+local prependaction = tasks.prependaction
+local disableaction = tasks.disableaction
+local enableaction = tasks.enableaction
+
+local slide_nodes = node.slide
+local hpack_nodes = node.hpack -- nodes.fasthpack not really faster here
+
+local unsetvalue = attributes.unsetvalue
+
+local concat_nodes = nodes.concat
+
+local nodecodes = nodes.nodecodes
+local listcodes = nodes.listcodes
+
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local line_code = listcodes.line
+
+local nodepool = nodes.pool
+
+local new_stretch = nodepool.stretch
+
+local a_realign = attributes.private("realign")
+
+local texattribute = tex.attribute
+local texcount = tex.count
+
+local isleftpage = layouts.status.isleftpage
+
+typesetters = typesetters or { }
+local alignments = { }
+typesetters.alignments = alignments
+
+local report_realign = logs.reporter("typesetters","margindata")
+local trace_realign = trackers.register("typesetters.margindata", function(v) trace_margindata = v end)
+
+local nofrealigned = 0
+
+-- leftskip rightskip parfillskip
+-- raggedleft 0 + 0 -
+-- raggedright 0 0 fil
+-- raggedcenter 0 + 0 + -
+
+local function handler(head,leftpage,realpageno)
+ local current = head
+ local done = false
+ while current do
+ local id = current.id
+ if id == hlist_code then
+ if current.subtype == line_code then
+ local a = current[a_realign]
+ if not a or a == 0 then
+ -- skip
+ else
+ local align = a % 10
+ local pageno = div(a,10)
+ if pageno == realpageno then
+ -- already ok
+ else
+ local action = 0
+ if align == 1 then -- flushright
+ action = leftpage and 1 or 2
+ elseif align == 2 then -- flushleft
+ action = leftpage and 2 or 1
+ end
+ if action == 1 then
+ current.list = hpack_nodes(concat_nodes{current.list,new_stretch(3)},current.width,"exactly")
+ if trace_realign then
+ report_realign("flushing left, align %a, page %a, realpage %a",align,pageno,realpageno)
+ end
+ elseif action == 2 then
+ current.list = hpack_nodes(concat_nodes{new_stretch(3),current.list},current.width,"exactly")
+ if trace_realign then
+ report_realign("flushing right. align %a, page %a, realpage %a",align,pageno,realpageno)
+ end
+ elseif trace_realign then
+ report_realign("invalid flushing, align %a, page %a, realpage %a",align,pageno,realpageno)
+ end
+ done = true
+ nofrealigned = nofrealigned + 1
+ end
+ current[a_realign] = unsetvalue
+ end
+ end
+ handler(current.list,leftpage,realpageno)
+ elseif id == vlist_code then
+ handler(current.list,leftpage,realpageno)
+ end
+ current = current.next
+ end
+ return head, done
+end
+
+function alignments.handler(head)
+ local leftpage = isleftpage(true,false)
+ local realpageno = texcount.realpageno
+ return handler(head,leftpage,realpageno)
+end
+
+local enabled = false
+
+function alignments.set(n)
+ if not enabled then
+ enableaction("shipouts","typesetters.alignments.handler")
+ enabled = true
+ if trace_realign then
+ report_realign("enabled")
+ end
+ end
+ texattribute[a_realign] = texcount.realpageno * 10 + n
+end
+
+commands.setrealign = alignments.set
+
+statistics.register("realigning", function()
+ if nofrealigned > 0 then
+ return format("%s processed",nofrealigned)
+ else
+ return nil
+ end
+end)
|