diff options
-rw-r--r-- | luaotfload.dtx | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/luaotfload.dtx b/luaotfload.dtx index 6c776e1..567cd37 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -664,24 +664,34 @@ end initializers.base.otf.color = initializers.common.color initializers.node.otf.color = initializers.common.color -local res1 = tex.pdfpageresources -local res2 = '/TransGs1<</ca 1/CA 1>>' +local function hex2dec(hex,one) + if one then + return format("%.1g", tonumber(hex, 16)/255) + else + return format("%.3g", tonumber(hex, 16)/255) + end +end + +local res -local function hex2dec(hex) - return format("%.3g", tonumber(hex, 16)/255) +local function pageresources(a) + local res2 + if not res then + res = "/TransGs1<</ca 1/CA 1>>" + end + res2 = format("/TransGs%s<</ca %s/CA %s>>", a, a, a) + res = format("%s%s", res, res:find(res2) and "" or res2) end local function hex_to_rgba(hex) local r, g, b, a, push, pop, res3 if hex then if #hex == 6 then - _, _, r, g, b = hex:find('(..)(..)(..)') + _, _, r, g, b = hex:find('(..)(..)(..)') elseif #hex == 8 then - _, _, r, g, b, a = hex:find('(..)(..)(..)(..)') - a = hex2dec(a) - res3 = format('/TransGs%g<</ca %g/CA %g>>', a, a, a) - res2 = format('%s%s', res2, res2:find(res3) and "" or res3) - tex.pdfpageresources = format('%s/ExtGState<<%s>>', res1, res2) + _, _, r, g, b, a = hex:find('(..)(..)(..)(..)') + a = hex2dec(a,true) + pageresources(a) end else return nil @@ -735,8 +745,14 @@ local function colorize(head) return head end +local function finalize(head) + tex.pdfpageresources = format("%s\n/ExtGState<<%s>>", tex.pdfpageresources, res) + return head +end + callback.add("hpack_filter", colorize, "Font color") callback.add("pre_linebreak_filter", colorize, "Font color") +callback.add("pre_output_filter", finalize, "Finalize hack") % \end{macrocode} % \iffalse |