diff options
| author | Khaled Hosny <khaledhosny@eglug.org> | 2009-12-31 21:32:55 +0200 | 
|---|---|---|
| committer | Khaled Hosny <khaledhosny@eglug.org> | 2009-12-31 22:32:06 +0200 | 
| commit | 7a4089c8a2e03094284c0484b216f9fa72be3a73 (patch) | |
| tree | eff7e0e79d86114723d83b21eb6ce3cc81e75945 | |
| parent | 9a9286967af9ded80bc2884588c5ce460c59dc77 (diff) | |
| download | luaotfload-7a4089c8a2e03094284c0484b216f9fa72be3a73.tar.gz | |
Fix LuaTeX crash with transparency
Apparently, LuaTeX weren't happy by massive assignments to
tex.pdfpageresources (we were reassigning it for almost every node!).
Now the code seems to work, but it is just a big hack at best.
| -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 | 
