summaryrefslogtreecommitdiff
path: root/luaotfload-colors.lua
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2013-05-04 19:52:03 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2013-05-04 19:52:03 +0200
commitb6df45277d50880e6a66dc93bc19615a7d3310c4 (patch)
tree7bee3db1818a0fb0e789775c4e5035da2d2834b6 /luaotfload-colors.lua
parentc50ea5d545136b0140532d552bf0a59ba0398987 (diff)
downloadluaotfload-b6df45277d50880e6a66dc93bc19615a7d3310c4.tar.gz
move colorization to ``pre_linebreak_filter``
also introduces a config option: *color_callback* that controls which callback will be activated. set it to pre_output_filter to restore the previous behavior.
Diffstat (limited to 'luaotfload-colors.lua')
-rw-r--r--luaotfload-colors.lua29
1 files changed, 26 insertions, 3 deletions
diff --git a/luaotfload-colors.lua b/luaotfload-colors.lua
index bc3d46f..ec076c2 100644
--- a/luaotfload-colors.lua
+++ b/luaotfload-colors.lua
@@ -6,6 +6,24 @@ if not modules then modules = { } end modules ['luaotfload-colors'] = {
license = "GNU GPL v2"
}
+--[[doc--
+buggy coloring with the pre_output_filter when expansion is enabled
+ · tfmdata for different expansion values is split over different objects
+ · in ``initializeexpansion()``, chr.expansion_factor is set, and only
+ those characters that have it are affected
+ · in constructors.scale: chr.expansion_factor = ve*1000 if commented out
+ makes the bug vanish
+--doc]]--
+
+
+local color_callback = config.luaotfload.color_callback
+if not color_callback then
+ --- maybe this would be better as a method: "early" | "late"
+ color_callback = "pre_linebreak_filter"
+-- color_callback = "pre_output_filter" --- old behavior, breaks expansion
+end
+
+
local newnode = node.new
local nodetype = node.id
local traverse_nodes = node.traverse
@@ -225,7 +243,9 @@ node_colorize = function (head, current_color, next_color)
--- loading (see ``setcolor()`` above)
if tfmdata and tfmdata.properties and tfmdata.properties.color then
local font_color = tfmdata.properties.color
--- luaotfload.info(cnt, utf.char(n.char), n.font, "<TRUE>", font_color)
+-- luaotfload.info(
+-- "n: %d; %s; %d %s, %s",
+-- cnt, utf.char(n.char), n.font, "<TRUE>", font_color)
if font_color ~= current_color then
local pushcolor = hex_to_rgba(font_color)
local push = newnode(whatsit_t, 8)
@@ -243,8 +263,11 @@ node_colorize = function (head, current_color, next_color)
head = insert_node_after(head, n, pop)
current_color = nil
end
+
-- else
--- luaotfload.info(cnt, utf.char(n.char), n.font, "<FALSE>")
+-- luaotfload.info(
+-- "n: %d; %s; %d %s",
+-- cnt, utf.char(n.char), n.font, "<FALSE>")
end
end
end
@@ -273,7 +296,7 @@ local color_callback_activated = 0
--- unit -> unit
add_color_callback = function ( )
if color_callback_activated == 0 then
- luatexbase.add_to_callback("pre_output_filter",
+ luatexbase.add_to_callback(color_callback,
color_handler,
"luaotfload.color_handler")
color_callback_activated = 1