diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-07-13 16:28:12 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-07-13 16:28:12 +0200 |
commit | 5a923dc5ac055164721b40a58e4d1614fc7f2aa1 (patch) | |
tree | b680cfbe5a20a623c6dd2593fd4be474d047adca /tex/context/base/mkiv/lpdf-col.lua | |
parent | bf7fc74b4f42f6bc1c57488da72bbc142c47f86a (diff) | |
download | context-5a923dc5ac055164721b40a58e4d1614fc7f2aa1.tar.gz |
2016-07-13 15:15:00
Diffstat (limited to 'tex/context/base/mkiv/lpdf-col.lua')
-rw-r--r-- | tex/context/base/mkiv/lpdf-col.lua | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/tex/context/base/mkiv/lpdf-col.lua b/tex/context/base/mkiv/lpdf-col.lua index 5075ecd48..15d21cbf3 100644 --- a/tex/context/base/mkiv/lpdf-col.lua +++ b/tex/context/base/mkiv/lpdf-col.lua @@ -8,6 +8,7 @@ if not modules then modules = { } end modules ['lpdf-col'] = { local type, next, tostring, tonumber = type, next, tostring, tonumber local char, byte, format, gsub, rep, gmatch = string.char, string.byte, string.format, string.gsub, string.rep, string.gmatch +local settings_to_array, settings_to_numbers = utilities.parsers.settings_to_array, utilities.parsers.settings_to_numbers local concat = table.concat local round = math.round local formatters = string.formatters @@ -166,9 +167,9 @@ local pdf_device_cmyk = pdfconstant("DeviceCMYK") local pdf_device_gray = pdfconstant("DeviceGray") local pdf_extgstate = pdfconstant("ExtGState") -local pdf_rbg_range = pdfarray { 0, 1, 0, 1, 0, 1 } -local pdf_cmyk_range = pdfarray { 0, 1, 0, 1, 0, 1, 0, 1 } -local pdf_gray_range = pdfarray { 0, 1 } +local pdf_rgb_range = pdfarray { 0, 1, 0, 1, 0, 1 } +local pdf_cmyk_range = pdfarray { 0, 1, 0, 1, 0, 1, 0, 1 } +local pdf_gray_range = pdfarray { 0, 1 } local f_rgb_function = formatters["dup %s mul exch dup %s mul exch %s mul"] local f_cmyk_function = formatters["dup %s mul exch dup %s mul exch dup %s mul exch %s mul"] @@ -304,13 +305,15 @@ local function registersomeindexcolor(name,noffractions,names,p,colorspace,range noffractions = tonumber(noffractions) or 1 -- to be checked local cnames = pdfarray() local domain = pdfarray() - if names == "" then - names = name .. ",None" - else - names = names .. ",None" - end - for n in gmatch(names,"[^,]+") do - cnames[#cnames+1] = pdfconstant(spotcolornames[n] or n) + local names = settings_to_array(#names == 0 and name or names) + local values = settings_to_numbers(p) + names [#names +1] = "None" + values[#values+1] = 1 + -- check for #names == #values + for i=1,#names do + local name = names[i] + local spot = spotcolornames[name] + cnames[#cnames+1] = pdfconstant(spot ~= "" and spot or name) domain[#domain+1] = 0 domain[#domain+1] = 1 end @@ -326,19 +329,10 @@ local function registersomeindexcolor(name,noffractions,names,p,colorspace,range colorspace, pdfreference(n), } - if p == "" then - p = "1" - else - p = p .. ",1" - end - local pi = { } - for pp in gmatch(p,"[^,]+") do - pi[#pi+1] = tonumber(pp) - end - local vector, set, n = { }, { }, #pi + local vector, set, n = { }, { }, #values for i=255,0,-1 do for j=1,n do - set[j] = format("%02X",round(pi[j]*i)) + set[j] = format("%02X",round(values[j]*i)) end vector[#vector+1] = concat(set) end @@ -356,21 +350,24 @@ local function delayindexcolor(name,names,func) end local function indexcolorref(name) -- actually, names (parent) is the hash - if not indexcolorhash[name] then - local delayedindexcolor = delayedindexcolors[name] + local parent = colors.spotcolorparent(name) + local data = indexcolorhash[name] + if data == nil then + local delayedindexcolor = delayedindexcolors[parent] if type(delayedindexcolor) == "function" then - indexcolorhash[name] = delayedindexcolor() - delayedindexcolors[name] = true + data = delayedindexcolor() + delayedindexcolors[parent] = true end + indexcolorhash[parent] = data or false end - return indexcolorhash[name] + return data end function registrations.rgbspotcolor(name,noffractions,names,p,r,g,b) if noffractions == 1 then - registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_rgb_function(r,g,b)) + registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b)) else - registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_num_3(r,g,b)) + registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_num_3(r,g,b)) end delayindexcolor(name,names,function() return registersomeindexcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b)) @@ -413,7 +410,7 @@ end function codeinjections.setfigurecolorspace(data,figure) local color = data.request.color - if color then + if color then -- != v_default local ref = indexcolorref(color) if ref then figure.colorspace = ref |