summaryrefslogtreecommitdiff
path: root/luaotfload-fonts-cbk.lua
diff options
context:
space:
mode:
authorElie Roux <elie.roux@telecom-bretagne.eu>2013-04-23 07:24:49 -0700
committerElie Roux <elie.roux@telecom-bretagne.eu>2013-04-23 07:24:49 -0700
commit63ee07f1f4021d07c5d89b706f2a9f1d8a4d97c9 (patch)
tree44ad64b7785d86d3ad47a1a2032e22f0c866c042 /luaotfload-fonts-cbk.lua
parent9291e1983240e72d93815a096963dc28a7acd770 (diff)
parent80ab69f3c89c4ee576310e073510f286ad0f3b66 (diff)
downloadluaotfload-63ee07f1f4021d07c5d89b706f2a9f1d8a4d97c9.tar.gz
Merge pull request #1 from phi-gamma/master
Updating with current master
Diffstat (limited to 'luaotfload-fonts-cbk.lua')
-rw-r--r--luaotfload-fonts-cbk.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/luaotfload-fonts-cbk.lua b/luaotfload-fonts-cbk.lua
new file mode 100644
index 0000000..9db94f6
--- /dev/null
+++ b/luaotfload-fonts-cbk.lua
@@ -0,0 +1,68 @@
+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 glyph_code = nodes.nodecodes.glyph
+
+function nodes.handlers.characters(head)
+ local fontdata = fonts.hashes.identifiers
+ if fontdata then
+ local usedfonts, done, prevfont = { }, false, nil
+ for n in traverse_id(glyph_code,head) 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
+ done = true
+ end
+ end
+ end
+ end
+ end
+ end
+ if done then
+ for font, processors in next, usedfonts do
+ for i=1,#processors do
+ local h, d = processors[i](head,font,0)
+ head, done = h or head, done or d
+ end
+ end
+ end
+ return head, true
+ else
+ return head, false
+ end
+end
+
+function nodes.simple_font_handler(head)
+-- lang.hyphenate(head)
+ head = nodes.handlers.characters(head)
+ nodes.injections.handler(head)
+ nodes.handlers.protectglyphs(head)
+ head = node.ligaturing(head)
+ head = node.kerning(head)
+ return head
+end