summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/lpdf-col.lua
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-07-13 16:28:12 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-07-13 16:28:12 +0200
commit5a923dc5ac055164721b40a58e4d1614fc7f2aa1 (patch)
treeb680cfbe5a20a623c6dd2593fd4be474d047adca /tex/context/base/mkiv/lpdf-col.lua
parentbf7fc74b4f42f6bc1c57488da72bbc142c47f86a (diff)
downloadcontext-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.lua55
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