diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-07-02 12:19:51 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-07-02 12:19:51 +0200 |
commit | da9149010f4d34eef23a504682d82cdcf4fac8f5 (patch) | |
tree | a213e0a93e1e4ac2b8a6a724e32db3e8d6dc1fc5 /tex/context/base/mkiv/colo-ini.lua | |
parent | c6fcaaa08d694397e9db4d1f9497926c193a5d95 (diff) | |
download | context-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.lua | 150 |
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) |