summaryrefslogtreecommitdiff
path: root/tex/context/base/typo-drp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/typo-drp.lua')
-rw-r--r--tex/context/base/typo-drp.lua208
1 files changed, 0 insertions, 208 deletions
diff --git a/tex/context/base/typo-drp.lua b/tex/context/base/typo-drp.lua
deleted file mode 100644
index 903140dae..000000000
--- a/tex/context/base/typo-drp.lua
+++ /dev/null
@@ -1,208 +0,0 @@
-if not modules then modules = { } end modules ['typo-drp'] = {
- version = 1.001,
- comment = "companion to typo-drp.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- This ons is sensitive for order (e.g. when combined with first line
--- processing.
-
-local tonumber, type, next = tonumber, type, next
-local ceil = math.ceil
-
-local utfbyte = utf.byte
-local utfchar = utf.char
-
-local trace_initials = false trackers.register("typesetters.initials", function(v) trace_initials = v end)
-local report_initials = logs.reporter("nodes","initials")
-
-local initials = typesetters.paragraphs or { }
-typesetters.initials = initials or { }
-
-local nodes = nodes
-local tasks = nodes.tasks
-
-local hpack_nodes = nodes.hpack
-local nodecodes = nodes.nodecodes
-local whatsitcodes = nodes.whatsitcodes
-
-local nodepool = nodes.pool
-local new_kern = nodepool.kern
-
-local insert_before = nodes.insert_before
-local insert_after = nodes.insert_after
-
-local variables = interfaces.variables
-local v_default = variables.default
-local v_margin = variables.margin
-
-local texget = tex.get
-local texsetattribute = tex.setattribute
-local unsetvalue = attributes.unsetvalue
-
-local glyph_code = nodecodes.glyph
-local hlist_code = nodecodes.hlist
-local kern_node = nodecodes.kern
-local whatsit_code = nodecodes.whatsit
-local localpar_code = whatsitcodes.localpar
-
-local actions = { }
-initials.actions = actions
-
-local a_initial = attributes.private("initial")
-local a_color = attributes.private('color')
-local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
-
-local settings = nil
-
-function initials.set(specification)
- settings = specification or { }
- settings.enabled = true
- tasks.enableaction("processors","typesetters.initials.handler")
- if trace_initials then
- report_initials("enabling initials")
- end
- texsetattribute(a_initial,1)
-end
-
-commands.setinitial = initials.set
-
--- dropped caps experiment (will be done properly when luatex
--- stores the state in the local par node) .. btw, search still
--- works with dropped caps, as does an export
-
--- we need a 'par' attribute and in fact for dropped caps we don't need
--- need an attribute ... dropit will become s state counter (or end up
--- in the localpar user data
-
--- for the moment, each paragraph gets a number as id (attribute) ..problem
--- with nesting .. or anyhow, needed for tagging anyway
-
--- todo: prevent linebreak .. but normally a initial ends up at the top of
--- a page so this has a low priority
-
-actions[v_default] = function(head,setting)
- local done = false
- if head.id == whatsit_code and head.subtype == localpar_code then
- -- begin of par
- local first = head.next
- -- parbox .. needs to be set at 0
- if first and first.id == hlist_code then
- first = first.next
- end
- -- we need to skip over kerns and glues (signals)
- while first and first.id ~= glyph_code do
- first = first.next
- end
- if first and first.id == glyph_code then
- local char = first.char
- local prev = first.prev
- local next = first.next
- -- if prev.id == hlist_code then
- -- -- set the width to 0
- -- end
- if next and next.id == kern_node then
- next.kern = 0
- end
- if setting.font then
- first.font = setting.font
- end
- if setting.dynamic > 0 then
- first[0] = setting.dynamic
- end
- -- can be a helper
- local ma = setting.ma or 0
- local ca = setting.ca
- local ta = setting.ta
- if ca and ca > 0 then
- first[a_colorspace] = ma == 0 and 1 or ma
- first[a_color] = ca
- end
- if ta and ta > 0 then
- first[a_transparency] = ta
- end
- --
- local width = first.width
- local height = first.height
- local depth = first.depth
- local distance = setting.distance or 0
- local voffset = setting.voffset or 0
- local hoffset = setting.hoffset or 0
- local parindent = tex.parindent
- local baseline = texget("baselineskip").width
- local lines = tonumber(setting.n) or 0
- --
- first.xoffset = - width - hoffset - distance - parindent
- first.yoffset = - voffset -- no longer - height here
- -- We pack so that successive handling cannot touch the dropped cap. Packaging
- -- in a hlist is also needed because we cannot locally adapt e.g. parindent (not
- -- yet stored in with localpar).
- first.prev = nil
- first.next = nil
- local h = hpack_nodes(first)
- h.width = 0
- h.height = 0
- h.depth = 0
- prev.next = h
- next.prev = h
- h.next = next
- h.prev = prev
-
- -- end of packaging
- if setting.location == v_margin then
- -- okay
- else
- if lines == 0 then -- safeguard, not too precise
- lines = ceil((height+voffset) / baseline)
- end
- -- We cannot set parshape yet ... when we can I'll add a slope
- -- option (positive and negative, in emwidth).
- local hangafter = - lines
- local hangindent = width + distance + parindent
- if trace_initials then
- report_initials("setting hangafter to %i and hangindent to %p",hangafter,hangindent)
- end
- tex.hangafter = hangafter
- tex.hangindent = hangindent
- if parindent ~= 0 then
- insert_after(first,first,new_kern(-parindent))
- end
- end
- done = true
- end
- end
- return head, done
-end
-
-function initials.handler(head)
- local start = head
- local attr = nil
- while start do
- attr = start[a_initial]
- if attr then
- break
- elseif start.id == glyph then
- break
- else
- start = start.next
- end
- end
- if attr then
- -- here as we can process nested boxes first so we need to keep state
- tasks.disableaction("processors","typesetters.initials.handler")
- -- texsetattribute(attribute,unsetvalue)
- local alternative = settings.alternative or v_default
- local action = actions[alternative] or actions[v_default]
- if action then
- if trace_initials then
- report_initials("processing initials, alternative %a",alternative)
- end
- local head, done = action(head,settings)
- return head, done
- end
- end
- return head, false
-end