summaryrefslogtreecommitdiff
path: root/src/fontloader/misc/fontloader-fonts-cbk.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/fontloader/misc/fontloader-fonts-cbk.lua')
-rw-r--r--src/fontloader/misc/fontloader-fonts-cbk.lua220
1 files changed, 0 insertions, 220 deletions
diff --git a/src/fontloader/misc/fontloader-fonts-cbk.lua b/src/fontloader/misc/fontloader-fonts-cbk.lua
deleted file mode 100644
index 9da8151..0000000
--- a/src/fontloader/misc/fontloader-fonts-cbk.lua
+++ /dev/null
@@ -1,220 +0,0 @@
-if not modules then modules = { } end modules ['luatex-fonts-cbk'] = {
- version = 1.001,
- comment = "companion to luatex-*.tex",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
-
-local fonts = fonts
-local nodes = nodes
-
--- Fonts: (might move to node-gef.lua)
-
-local traverse_id = node.traverse_id
-local free_node = node.free
-local remove_node = node.remove
-
-local glyph_code = nodes.nodecodes.glyph
-local disc_code = nodes.nodecodes.disc
-
--- from now on we apply ligaturing and kerning here because it might interfere with complex
--- opentype discretionary handling where the base ligature pass expect some weird extra
--- pointers (which then confuse the tail slider that has some checking built in)
-
-local ligaturing = node.ligaturing
-local kerning = node.kerning
-
-local basepass = true
-
-local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning = nil end
-local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning = nil end
-
-function node.ligaturing(...)
- if basepass and l_warning then
- l_warning()
- end
- return ligaturing(...)
-end
-
-function node.kerning(...)
- if basepass and k_warning then
- k_warning()
- end
- return kerning(...)
-end
-
-function nodes.handlers.setbasepass(v)
- basepass = v
-end
-
-function nodes.handlers.nodepass(head)
- local fontdata = fonts.hashes.identifiers
- if fontdata then
- local usedfonts = { }
- local basefonts = { }
- local prevfont = nil
- local basefont = nil
- local variants = nil
- local redundant = nil
- for n in traverse_id(glyph_code,head) do
- local font = n.font
- if font ~= prevfont then
- if basefont then
- basefont[2] = n.prev
- end
- prevfont = font
- local used = usedfonts[font]
- if not used then
- local tfmdata = fontdata[font] --
- if tfmdata then
- local shared = tfmdata.shared -- we need to check shared, only when same features
- if shared then
- local processors = shared.processes
- if processors and #processors > 0 then
- usedfonts[font] = processors
- elseif basepass then
- basefont = { n, nil }
- basefonts[#basefonts+1] = basefont
- end
- end
- local resources = tfmdata.resources
- variants = resources and resources.variants
- variants = variants and next(variants) and variants or false
- end
- else
- local tfmdata = fontdata[prevfont]
- if tfmdata then
- local resources = tfmdata.resources
- variants = resources and resources.variants
- variants = variants and next(variants) and variants or false
- end
- end
- end
- if variants then
- local char = n.char
- if char >= 0xFE00 and (char <= 0xFE0F or (char >= 0xE0100 and char <= 0xE01EF)) then
- local hash = variants[char]
- if hash then
- local p = n.prev
- if p and p.id == glyph_code then
- local variant = hash[p.char]
- if variant then
- p.char = variant
- if not redundant then
- redundant = { n }
- else
- redundant[#redundant+1] = n
- end
- end
- end
- end
- end
- end
- end
- if redundant then
- for i=1,#redundant do
- local n = redundant[i]
- remove_node(head,n)
- free_node(n)
- end
- end
- for d in traverse_id(disc_code,head) do
- local r = d.replace
- if r then
- for n in traverse_id(glyph_code,r) do
- local font = n.font
- if font ~= prevfont then
- prevfont = font
- local used = usedfonts[font]
- if not used then
- local tfmdata = fontdata[font] --
- if tfmdata then
- local shared = tfmdata.shared -- we need to check shared, only when same features
- if shared then
- local processors = shared.processes
- if processors and #processors > 0 then
- usedfonts[font] = processors
- end
- end
- end
- end
- end
- end
- end
- end
- if next(usedfonts) then
- for font, processors in next, usedfonts do
- for i=1,#processors do
- head = processors[i](head,font,0) or head
- end
- end
- end
- if basepass and #basefonts > 0 then
- for i=1,#basefonts do
- local range = basefonts[i]
- local start = range[1]
- local stop = range[2]
- -- maybe even: if start and start ~= stop then
- if start or stop then
- local prev = nil
- local next = nil
- local front = start == head
- if stop then
- next = stop.next
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then
- prev = start.prev
- start = ligaturing(start)
- start = kerning(start)
- end
- if prev then
- start.prev = prev
- prev.next = start
- end
- if next then
- stop.next = next
- next.prev = stop
- end
- if front then
- head = start
- end
- end
- end
- end
- return head, true
- else
- return head, false
- end
-end
-
-function nodes.handlers.basepass(head)
- if basepass then
- head = ligaturing(head)
- head = kerning(head)
- end
- return head, true
-end
-
-local nodepass = nodes.handlers.nodepass
-local basepass = nodes.handlers.basepass
-local injectpass = nodes.injections.handler
-local protectpass = nodes.handlers.protectglyphs
-
-function nodes.simple_font_handler(head)
- if head then
- head = nodepass(head)
- head = injectpass(head)
- head = basepass(head)
- protectpass(head)
- return head, true
- else
- return head, false
- end
-end