summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/colo-ini.lua
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-07-02 12:19:51 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-07-02 12:19:51 +0200
commitda9149010f4d34eef23a504682d82cdcf4fac8f5 (patch)
treea213e0a93e1e4ac2b8a6a724e32db3e8d6dc1fc5 /tex/context/base/mkiv/colo-ini.lua
parentc6fcaaa08d694397e9db4d1f9497926c193a5d95 (diff)
downloadcontext-da9149010f4d34eef23a504682d82cdcf4fac8f5.tar.gz
2016-07-01 16:31:00
Diffstat (limited to 'tex/context/base/mkiv/colo-ini.lua')
-rw-r--r--tex/context/base/mkiv/colo-ini.lua150
1 files changed, 147 insertions, 3 deletions
diff --git a/tex/context/base/mkiv/colo-ini.lua b/tex/context/base/mkiv/colo-ini.lua
index 1a055242b..a2e761eae 100644
--- a/tex/context/base/mkiv/colo-ini.lua
+++ b/tex/context/base/mkiv/colo-ini.lua
@@ -26,6 +26,9 @@ local context = context
local commands = commands
local implement = interfaces.implement
+local getnamespace = interfaces.getnamespace
+
+local mark = utilities.storage.mark
local settings_to_hash_strict = utilities.parsers.settings_to_hash_strict
@@ -33,8 +36,11 @@ local colors = attributes.colors
local transparencies = attributes.transparencies
local colorintents = attributes.colorintents
local registrations = backends.registrations
+
local texsetattribute = tex.setattribute
local texgetattribute = tex.getattribute
+local texgetcount = tex.getcount
+local texgettoks = tex.gettoks
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
@@ -46,12 +52,30 @@ local attributes_list = attributes.list
local colorvalues = colors.values
local transparencyvalues = transparencies.values
-colors.sets = colors.sets or { } -- sets are mostly used for
+colors.sets = mark(colors.sets or { }) -- sets are mostly used for
local colorsets = colors.sets -- showing lists of defined
local colorset = { } -- colors
colorsets.default = colorset
+local valid = mark(colors.valid or { })
+colors.valid = valid
+local counts = mark(colors.counts or { })
+colors.counts = counts
+
+storage.register("attributes/colors/sets", colorsets, "attributes.colors.sets")
+storage.register("attributes/colors/valid", valid, "attributes.colors.valid")
+storage.register("attributes/colors/counts", counts, "attributes.colors.counts")
-storage.register("attributes/colors/sets",colorsets,"attributes.colors.sets")
+local function synccolor(name)
+ valid[name] = true
+end
+
+local function synccolorclone(name,clone)
+ valid[name] = clone
+end
+
+local function synccolorcount(name,n)
+ counts[name] = n
+end
local stack = { }
@@ -585,10 +609,112 @@ local function mpcolor(model,ca,ta,default)
return formatters["(%s,%s,%s)"](default,default,default)
end
+-- local function mpnamedcolor(name)
+-- return mpcolor(texgetattribute(a_colorspace),l_color[name] or l_color.black,l_transparency[name] or false)
+-- end
+
+local colornamespace = getnamespace("colornumber")
+local paletnamespace = getnamespace("colorpalet")
+
+-- local function mpnamedcolor(name)
+-- local prefix = texgettoks("t_colo_prefix")
+-- local cn
+-- if prefix ~= "" then
+-- local v = valid[prefix..name]
+-- if not v then
+-- local n = paletnamespace .. prefix .. name
+-- local p = valid[n]
+-- if p == true then
+-- cn = colornamespace .. n
+-- elseif p then
+-- cn = colornamespace .. p
+-- else
+-- cn = colornamespace .. name
+-- end
+-- elseif v == true then
+-- cn = colornamespace .. paletnamespace .. prefix .. name
+-- else
+-- cn = colornamespace .. v
+-- end
+-- elseif valid[name] then
+-- cn = colornamespace .. name
+-- else
+-- return mpcolor(texgetattribute(a_colorspace),l_color.black)
+-- end
+-- -- return mpcolor(texgetattribute(a_colorspace),l_color[name] or l_color.black)
+-- return mpcolor(texgetattribute(a_colorspace),texgetcount(cn),l_transparency[name])
+-- end
+
+-- local function mpnamedcolor(name)
+-- local colorspace = texgetattribute(a_colorspace)
+-- local prefix = texgettoks("t_colo_prefix")
+-- local cn
+-- if prefix ~= "" then
+-- local v = valid[prefix..name]
+-- if not v then
+-- local n = paletnamespace .. prefix .. name
+-- local p = valid[n]
+-- if p == true then
+-- cn = n
+-- elseif p then
+-- cn = p
+-- else
+-- cn = name
+-- end
+-- elseif v == true then
+-- cn = paletnamespace .. prefix .. name
+-- else
+-- cn = v
+-- end
+-- elseif valid[name] then
+-- cn = name
+-- else
+-- return mpcolor(colorspace,l_color.black)
+-- end
+-- cn = counts[cn]
+-- cn = cn and texgetcount(cn) or l_color[name] or l_color.black -- fall back to old method
+-- return mpcolor(colorspace,cn,l_transparency[name])
+-- end
+
local function mpnamedcolor(name)
- return mpcolor(texgetattribute(a_colorspace),l_color[name] or l_color.black)
+ local space = texgetattribute(a_colorspace)
+ local prefix = texgettoks("t_colo_prefix")
+ local color
+ if prefix ~= "" then
+ color = valid[prefix..name]
+ if not color then
+ local n = paletnamespace .. prefix .. name
+ color = valid[n]
+ if not color then
+ color = name
+ elseif color == true then
+ color = n
+ end
+ elseif color == true then
+ color = paletnamespace .. prefix .. name
+ end
+ elseif valid[name] then
+ color = name
+ else
+ return mpcolor(space,l_color.black)
+ end
+ color = counts[color]
+ if color then
+ color = texgetcount(color)
+ else
+ color = l_color[name] -- fall back on old method
+ end
+ if color then
+ return mpcolor(space,color,l_transparency[name])
+ else
+ return mpcolor(space,l_color.black)
+ end
end
+-- mp.NamedColor = function(str)
+-- mpprint(mpnamedcolor(str))
+-- end
+
local function mpoptions(model,ca,ta,default) -- will move to mlib-col
return formatters["withcolor %s"](mpcolor(model,ca,ta,default))
end
@@ -869,6 +995,24 @@ end
local setcolormodel = colors.setmodel
implement {
+ name = "synccolorcount",
+ actions = synccolorcount,
+ arguments = { "string", "integer" }
+}
+
+implement {
+ name = "synccolor",
+ actions = synccolor,
+ arguments = "string",
+}
+
+implement {
+ name = "synccolorclone",
+ actions = synccolorclone,
+ arguments = { "string", "string" },
+}
+
+implement {
name = "setcolormodel",
arguments = { "string", "boolean" },
actions = function(model,weight)