From eb480f903b82d1f5a5219820640c75cbbacbd464 Mon Sep 17 00:00:00 2001 From: mat ess Date: Sun, 11 Sep 2022 00:23:52 -0400 Subject: [PATCH] working ants!! --- .gitignore | 4 +- ants/main.lua | 154 ++++++++++++++ colorbrewer.lua | 555 ++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 41 ++-- nix/default.nix | 7 + nix/love.nix | 21 ++ nix/lume.nix | 20 ++ nix/lurker.nix | 20 ++ util.lua | 19 ++ 9 files changed, 814 insertions(+), 27 deletions(-) create mode 100644 ants/main.lua create mode 100644 colorbrewer.lua create mode 100644 nix/default.nix create mode 100644 nix/love.nix create mode 100644 nix/lume.nix create mode 100644 nix/lurker.nix create mode 100644 util.lua diff --git a/.gitignore b/.gitignore index dee1460..a0d9f52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .direnv -result \ No newline at end of file +.vscode +result +vendor \ No newline at end of file diff --git a/ants/main.lua b/ants/main.lua new file mode 100644 index 0000000..8276ad4 --- /dev/null +++ b/ants/main.lua @@ -0,0 +1,154 @@ +-- based on +-- https://github.com/healeYcodes/virtual-ants/blob/main/index.html + +require("util") + +local function round2even(num) + return 2 * math.floor(num / 2) +end + +local function rotate(direction, clockwise) + local match + if clockwise then + match = { + u = "r", + r = "d", + d = "l", + l = "u", + } + else + match = { + u = "l", + l = "d", + d = "r", + r = "u" + } + end + return match[direction] +end + +local function initColors(rules) + rules = rules:lower() + local colorbrewer = require("colorbrewer") + local scheme = colorbrewer.random() + local variant = scheme[#rules] + COLORS = {} + for i = 1, #rules do + COLORS[i] = { + clockwise = rules:sub(i, i) == "r", + rgba = variant[i] + } + end +end + +local function initScreen(width, height) + love.window.setMode(width, height, { highdpi = true }) + WIDTH, HEIGHT = round2even(width), round2even(height) + CANVAS = love.graphics.newCanvas(WIDTH, HEIGHT) + CANVAS:renderTo(function() + local color = COLORS[1].rgba + color[4] = 0.9 + love.graphics.setColor(color) + love.graphics.rectangle("fill", 0, 0, WIDTH, HEIGHT) + end) + UNITS = 8 +end + +local function initAnt() + ANT = { + x = (WIDTH / 2) - ((WIDTH / 2) % UNITS), + y = (HEIGHT / 2) - ((HEIGHT / 2) % UNITS), + direction = "u", + } +end + +local function initGrid() + GRID = {} + GRID.mt = {} + setmetatable(GRID, GRID.mt) + GRID.mt.__index = function(table, key) + table[key] = {} + table[key].mt = {} + setmetatable(table[key], table[key].mt) + table[key].mt.__index = function(innerTable, innerKey) + innerTable[innerKey] = 1 + return innerTable[innerKey] + end + return table[key] + end +end + +function love.load(args) + local width = args[1] or 800 + local height = args[2] or 600 + local rules = args[3] or "RL" + initColors(rules) + initScreen(width, height) + initAnt() + initGrid() +end + +local function color(x, y) + return GRID[x][y] +end + +local function current() + return color(ANT.x, ANT.y) +end + +local function setCurrent(index) + GRID[ANT.x][ANT.y] = index +end + +local function updateCurrent() + local val = current() + if val == #COLORS then + val = 1 + else + val = val + 1 + end + setCurrent(val) +end + +local function nextColor() + local c = COLORS[current()] + updateCurrent() + return c +end + +function love.update() + require("lurker").update() + local c = nextColor() + ANT.direction = rotate(ANT.direction, c.clockwise) + CANVAS:renderTo(function() + love.graphics.setBlendMode("alpha") + love.graphics.setColor(c.rgba) + love.graphics.rectangle("fill", ANT.x, ANT.y, UNITS, UNITS) + end) + if ANT.direction == "u" then + ANT.y = ANT.y - UNITS + elseif ANT.direction == "r" then + ANT.x = ANT.x + UNITS + elseif ANT.direction == "d" then + ANT.y = ANT.y + UNITS + else + ANT.x = ANT.x - UNITS + end + + if ANT.x >= WIDTH then + ANT.x = 0 + elseif ANT.x < 0 then + ANT.x = (WIDTH - 1) - ((WIDTH - 1) % UNITS) + end + if ANT.y >= HEIGHT then + ANT.y = 0 + elseif ANT.y < 0 then + ANT.y = (HEIGHT - 1) - ((HEIGHT - 1) % UNITS) + end +end + +function love.draw() + love.graphics.setBlendMode("screen", "premultiplied") + love.graphics.setColor(COLORS[1].rgba) + love.graphics.draw(CANVAS, 0, 0) +end diff --git a/colorbrewer.lua b/colorbrewer.lua new file mode 100644 index 0000000..8268cea --- /dev/null +++ b/colorbrewer.lua @@ -0,0 +1,555 @@ +-- based on +-- https://github.com/axismaps/colorbrewer/blob/master/colorbrewer_schemes.js + +local colorbrewer = {} + +-- Diverging +colorbrewer['Spectral'] = { + [3] = { { 252, 141, 89 }, { 255, 255, 191 }, { 153, 213, 148 } }, + [4] = { { 215, 25, 28 }, { 253, 174, 97 }, { 171, 221, 164 }, { 43, 131, 186 } }, + [5] = { { 215, 25, 28 }, { 253, 174, 97 }, { 255, 255, 191 }, { 171, 221, 164 }, { 43, 131, 186 } }, + [6] = { { 213, 62, 79 }, { 252, 141, 89 }, { 254, 224, 139 }, { 230, 245, 152 }, { 153, 213, 148 }, + { 50, 136, 189 } }, + [7] = { { 213, 62, 79 }, { 252, 141, 89 }, { 254, 224, 139 }, { 255, 255, 191 }, { 230, 245, 152 }, + { 153, 213, 148 }, { 50, 136, 189 } }, + [8] = { { 213, 62, 79 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, { 230, 245, 152 }, + { 171, 221, 164 }, { 102, 194, 165 }, { 50, 136, 189 } }, + [9] = { { 213, 62, 79 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, { 255, 255, 191 }, + { 230, 245, 152 }, { 171, 221, 164 }, { 102, 194, 165 }, { 50, 136, 189 } }, + [10] = { { 158, 1, 66 }, { 213, 62, 79 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, + { 230, 245, 152 }, { 171, 221, 164 }, { 102, 194, 165 }, { 50, 136, 189 }, { 94, 79, 162 } }, + [11] = { { 158, 1, 66 }, { 213, 62, 79 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, + { 255, 255, 191 }, { 230, 245, 152 }, { 171, 221, 164 }, { 102, 194, 165 }, { 50, 136, 189 }, { 94, 79, 162 } } +} +colorbrewer['RdYlGn'] = { + [3] = { { 252, 141, 89 }, { 255, 255, 191 }, { 145, 207, 96 } }, + [4] = { { 215, 25, 28 }, { 253, 174, 97 }, { 166, 217, 106 }, { 26, 150, 65 } }, + [5] = { { 215, 25, 28 }, { 253, 174, 97 }, { 255, 255, 191 }, { 166, 217, 106 }, { 26, 150, 65 } }, + [6] = { { 215, 48, 39 }, { 252, 141, 89 }, { 254, 224, 139 }, { 217, 239, 139 }, { 145, 207, 96 }, + { 26, 152, 80 } }, + [7] = { { 215, 48, 39 }, { 252, 141, 89 }, { 254, 224, 139 }, { 255, 255, 191 }, { 217, 239, 139 }, + { 145, 207, 96 }, { 26, 152, 80 } }, + [8] = { { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, { 217, 239, 139 }, + { 166, 217, 106 }, { 102, 189, 99 }, { 26, 152, 80 } }, + [9] = { { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, { 255, 255, 191 }, + { 217, 239, 139 }, { 166, 217, 106 }, { 102, 189, 99 }, { 26, 152, 80 } }, + [10] = { { 165, 0, 38 }, { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, + { 217, 239, 139 }, { 166, 217, 106 }, { 102, 189, 99 }, { 26, 152, 80 }, { 0, 104, 55 } }, + [11] = { { 165, 0, 38 }, { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 139 }, + { 255, 255, 191 }, { 217, 239, 139 }, { 166, 217, 106 }, { 102, 189, 99 }, { 26, 152, 80 }, { 0, 104, 55 } } +} +colorbrewer['RdBu'] = { + [3] = { { 239, 138, 98 }, { 247, 247, 247 }, { 103, 169, 207 } }, + [4] = { { 202, 0, 32 }, { 244, 165, 130 }, { 146, 197, 222 }, { 5, 113, 176 } }, + [5] = { { 202, 0, 32 }, { 244, 165, 130 }, { 247, 247, 247 }, { 146, 197, 222 }, { 5, 113, 176 } }, + [6] = { { 178, 24, 43 }, { 239, 138, 98 }, { 253, 219, 199 }, { 209, 229, 240 }, { 103, 169, 207 }, + { 33, 102, 172 } }, + [7] = { { 178, 24, 43 }, { 239, 138, 98 }, { 253, 219, 199 }, { 247, 247, 247 }, { 209, 229, 240 }, + { 103, 169, 207 }, { 33, 102, 172 } }, + [8] = { { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, { 209, 229, 240 }, + { 146, 197, 222 }, { 67, 147, 195 }, { 33, 102, 172 } }, + [9] = { { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, { 247, 247, 247 }, + { 209, 229, 240 }, { 146, 197, 222 }, { 67, 147, 195 }, { 33, 102, 172 } }, + [10] = { { 103, 0, 31 }, { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, + { 209, 229, 240 }, { 146, 197, 222 }, { 67, 147, 195 }, { 33, 102, 172 }, { 5, 48, 97 } }, + [11] = { { 103, 0, 31 }, { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, + { 247, 247, 247 }, { 209, 229, 240 }, { 146, 197, 222 }, { 67, 147, 195 }, { 33, 102, 172 }, { 5, 48, 97 } } +} +colorbrewer['PiYG'] = { + [3] = { { 233, 163, 201 }, { 247, 247, 247 }, { 161, 215, 106 } }, + [4] = { { 208, 28, 139 }, { 241, 182, 218 }, { 184, 225, 134 }, { 77, 172, 38 } }, + [5] = { { 208, 28, 139 }, { 241, 182, 218 }, { 247, 247, 247 }, { 184, 225, 134 }, { 77, 172, 38 } }, + [6] = { { 197, 27, 125 }, { 233, 163, 201 }, { 253, 224, 239 }, { 230, 245, 208 }, { 161, 215, 106 }, + { 77, 146, 33 } }, + [7] = { { 197, 27, 125 }, { 233, 163, 201 }, { 253, 224, 239 }, { 247, 247, 247 }, { 230, 245, 208 }, + { 161, 215, 106 }, { 77, 146, 33 } }, + [8] = { { 197, 27, 125 }, { 222, 119, 174 }, { 241, 182, 218 }, { 253, 224, 239 }, { 230, 245, 208 }, + { 184, 225, 134 }, { 127, 188, 65 }, { 77, 146, 33 } }, + [9] = { { 197, 27, 125 }, { 222, 119, 174 }, { 241, 182, 218 }, { 253, 224, 239 }, { 247, 247, 247 }, + { 230, 245, 208 }, { 184, 225, 134 }, { 127, 188, 65 }, { 77, 146, 33 } }, + [10] = { { 142, 1, 82 }, { 197, 27, 125 }, { 222, 119, 174 }, { 241, 182, 218 }, { 253, 224, 239 }, + { 230, 245, 208 }, { 184, 225, 134 }, { 127, 188, 65 }, { 77, 146, 33 }, { 39, 100, 25 } }, + [11] = { { 142, 1, 82 }, { 197, 27, 125 }, { 222, 119, 174 }, { 241, 182, 218 }, { 253, 224, 239 }, + { 247, 247, 247 }, { 230, 245, 208 }, { 184, 225, 134 }, { 127, 188, 65 }, { 77, 146, 33 }, { 39, 100, 25 } } +} +colorbrewer['PRGn'] = { + [3] = { { 175, 141, 195 }, { 247, 247, 247 }, { 127, 191, 123 } }, + [4] = { { 123, 50, 148 }, { 194, 165, 207 }, { 166, 219, 160 }, { 0, 136, 55 } }, + [5] = { { 123, 50, 148 }, { 194, 165, 207 }, { 247, 247, 247 }, { 166, 219, 160 }, { 0, 136, 55 } }, + [6] = { { 118, 42, 131 }, { 175, 141, 195 }, { 231, 212, 232 }, { 217, 240, 211 }, { 127, 191, 123 }, + { 27, 120, 55 } }, + [7] = { { 118, 42, 131 }, { 175, 141, 195 }, { 231, 212, 232 }, { 247, 247, 247 }, { 217, 240, 211 }, + { 127, 191, 123 }, { 27, 120, 55 } }, + [8] = { { 118, 42, 131 }, { 153, 112, 171 }, { 194, 165, 207 }, { 231, 212, 232 }, { 217, 240, 211 }, + { 166, 219, 160 }, { 90, 174, 97 }, { 27, 120, 55 } }, + [9] = { { 118, 42, 131 }, { 153, 112, 171 }, { 194, 165, 207 }, { 231, 212, 232 }, { 247, 247, 247 }, + { 217, 240, 211 }, { 166, 219, 160 }, { 90, 174, 97 }, { 27, 120, 55 } }, + [10] = { { 64, 0, 75 }, { 118, 42, 131 }, { 153, 112, 171 }, { 194, 165, 207 }, { 231, 212, 232 }, + { 217, 240, 211 }, { 166, 219, 160 }, { 90, 174, 97 }, { 27, 120, 55 }, { 0, 68, 27 } }, + [11] = { { 64, 0, 75 }, { 118, 42, 131 }, { 153, 112, 171 }, { 194, 165, 207 }, { 231, 212, 232 }, + { 247, 247, 247 }, { 217, 240, 211 }, { 166, 219, 160 }, { 90, 174, 97 }, { 27, 120, 55 }, { 0, 68, 27 } } +} +colorbrewer['RdYlBu'] = { + [3] = { { 252, 141, 89 }, { 255, 255, 191 }, { 145, 191, 219 } }, + [4] = { { 215, 25, 28 }, { 253, 174, 97 }, { 171, 217, 233 }, { 44, 123, 182 } }, + [5] = { { 215, 25, 28 }, { 253, 174, 97 }, { 255, 255, 191 }, { 171, 217, 233 }, { 44, 123, 182 } }, + [6] = { { 215, 48, 39 }, { 252, 141, 89 }, { 254, 224, 144 }, { 224, 243, 248 }, { 145, 191, 219 }, + { 69, 117, 180 } }, + [7] = { { 215, 48, 39 }, { 252, 141, 89 }, { 254, 224, 144 }, { 255, 255, 191 }, { 224, 243, 248 }, + { 145, 191, 219 }, { 69, 117, 180 } }, + [8] = { { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 144 }, { 224, 243, 248 }, + { 171, 217, 233 }, { 116, 173, 209 }, { 69, 117, 180 } }, + [9] = { { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 144 }, { 255, 255, 191 }, + { 224, 243, 248 }, { 171, 217, 233 }, { 116, 173, 209 }, { 69, 117, 180 } }, + [10] = { { 165, 0, 38 }, { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 144 }, + { 224, 243, 248 }, { 171, 217, 233 }, { 116, 173, 209 }, { 69, 117, 180 }, { 49, 54, 149 } }, + [11] = { { 165, 0, 38 }, { 215, 48, 39 }, { 244, 109, 67 }, { 253, 174, 97 }, { 254, 224, 144 }, + { 255, 255, 191 }, { 224, 243, 248 }, { 171, 217, 233 }, { 116, 173, 209 }, { 69, 117, 180 }, { 49, 54, 149 } } +} +colorbrewer['BrBG'] = { + [3] = { { 216, 179, 101 }, { 245, 245, 245 }, { 90, 180, 172 } }, + [4] = { { 166, 97, 26 }, { 223, 194, 125 }, { 128, 205, 193 }, { 1, 133, 113 } }, + [5] = { { 166, 97, 26 }, { 223, 194, 125 }, { 245, 245, 245 }, { 128, 205, 193 }, { 1, 133, 113 } }, + [6] = { { 140, 81, 10 }, { 216, 179, 101 }, { 246, 232, 195 }, { 199, 234, 229 }, { 90, 180, 172 }, + { 1, 102, 94 } }, + [7] = { { 140, 81, 10 }, { 216, 179, 101 }, { 246, 232, 195 }, { 245, 245, 245 }, { 199, 234, 229 }, + { 90, 180, 172 }, { 1, 102, 94 } }, + [8] = { { 140, 81, 10 }, { 191, 129, 45 }, { 223, 194, 125 }, { 246, 232, 195 }, { 199, 234, 229 }, + { 128, 205, 193 }, { 53, 151, 143 }, { 1, 102, 94 } }, + [9] = { { 140, 81, 10 }, { 191, 129, 45 }, { 223, 194, 125 }, { 246, 232, 195 }, { 245, 245, 245 }, + { 199, 234, 229 }, { 128, 205, 193 }, { 53, 151, 143 }, { 1, 102, 94 } }, + [10] = { { 84, 48, 5 }, { 140, 81, 10 }, { 191, 129, 45 }, { 223, 194, 125 }, { 246, 232, 195 }, + { 199, 234, 229 }, { 128, 205, 193 }, { 53, 151, 143 }, { 1, 102, 94 }, { 0, 60, 48 } }, + [11] = { { 84, 48, 5 }, { 140, 81, 10 }, { 191, 129, 45 }, { 223, 194, 125 }, { 246, 232, 195 }, + { 245, 245, 245 }, { 199, 234, 229 }, { 128, 205, 193 }, { 53, 151, 143 }, { 1, 102, 94 }, { 0, 60, 48 } } +} +colorbrewer['RdGy'] = { + [3] = { { 239, 138, 98 }, { 255, 255, 255 }, { 153, 153, 153 } }, + [4] = { { 202, 0, 32 }, { 244, 165, 130 }, { 186, 186, 186 }, { 64, 64, 64 } }, + [5] = { { 202, 0, 32 }, { 244, 165, 130 }, { 255, 255, 255 }, { 186, 186, 186 }, { 64, 64, 64 } }, + [6] = { { 178, 24, 43 }, { 239, 138, 98 }, { 253, 219, 199 }, { 224, 224, 224 }, { 153, 153, 153 }, + { 77, 77, 77 } }, + [7] = { { 178, 24, 43 }, { 239, 138, 98 }, { 253, 219, 199 }, { 255, 255, 255 }, { 224, 224, 224 }, + { 153, 153, 153 }, { 77, 77, 77 } }, + [8] = { { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, { 224, 224, 224 }, + { 186, 186, 186 }, { 135, 135, 135 }, { 77, 77, 77 } }, + [9] = { { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, { 255, 255, 255 }, + { 224, 224, 224 }, { 186, 186, 186 }, { 135, 135, 135 }, { 77, 77, 77 } }, + [10] = { { 103, 0, 31 }, { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, + { 224, 224, 224 }, { 186, 186, 186 }, { 135, 135, 135 }, { 77, 77, 77 }, { 26, 26, 26 } }, + [11] = { { 103, 0, 31 }, { 178, 24, 43 }, { 214, 96, 77 }, { 244, 165, 130 }, { 253, 219, 199 }, + { 255, 255, 255 }, { 224, 224, 224 }, { 186, 186, 186 }, { 135, 135, 135 }, { 77, 77, 77 }, { 26, 26, 26 } } +} +colorbrewer['PuOr'] = { + [3] = { { 241, 163, 64 }, { 247, 247, 247 }, { 153, 142, 195 } }, + [4] = { { 230, 97, 1 }, { 253, 184, 99 }, { 178, 171, 210 }, { 94, 60, 153 } }, + [5] = { { 230, 97, 1 }, { 253, 184, 99 }, { 247, 247, 247 }, { 178, 171, 210 }, { 94, 60, 153 } }, + [6] = { { 179, 88, 6 }, { 241, 163, 64 }, { 254, 224, 182 }, { 216, 218, 235 }, { 153, 142, 195 }, + { 84, 39, 136 } }, + [7] = { { 179, 88, 6 }, { 241, 163, 64 }, { 254, 224, 182 }, { 247, 247, 247 }, { 216, 218, 235 }, + { 153, 142, 195 }, { 84, 39, 136 } }, + [8] = { { 179, 88, 6 }, { 224, 130, 20 }, { 253, 184, 99 }, { 254, 224, 182 }, { 216, 218, 235 }, + { 178, 171, 210 }, { 128, 115, 172 }, { 84, 39, 136 } }, + [9] = { { 179, 88, 6 }, { 224, 130, 20 }, { 253, 184, 99 }, { 254, 224, 182 }, { 247, 247, 247 }, + { 216, 218, 235 }, { 178, 171, 210 }, { 128, 115, 172 }, { 84, 39, 136 } }, + [10] = { { 127, 59, 8 }, { 179, 88, 6 }, { 224, 130, 20 }, { 253, 184, 99 }, { 254, 224, 182 }, { 216, 218, 235 }, + { 178, 171, 210 }, { 128, 115, 172 }, { 84, 39, 136 }, { 45, 0, 75 } }, + [11] = { { 127, 59, 8 }, { 179, 88, 6 }, { 224, 130, 20 }, { 253, 184, 99 }, { 254, 224, 182 }, { 247, 247, 247 }, + { 216, 218, 235 }, { 178, 171, 210 }, { 128, 115, 172 }, { 84, 39, 136 }, { 45, 0, 75 } } +} + +-- Qualitative +colorbrewer['Set2'] = { + [3] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 } }, + [4] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 }, { 231, 138, 195 } }, + [5] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 }, { 231, 138, 195 }, { 166, 216, 84 } }, + [6] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 }, { 231, 138, 195 }, { 166, 216, 84 }, + { 255, 217, 47 } }, + [7] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 }, { 231, 138, 195 }, { 166, 216, 84 }, + { 255, 217, 47 }, { 229, 196, 148 } }, + [8] = { { 102, 194, 165 }, { 252, 141, 98 }, { 141, 160, 203 }, { 231, 138, 195 }, { 166, 216, 84 }, + { 255, 217, 47 }, { 229, 196, 148 }, { 179, 179, 179 } } +} +colorbrewer['Accent'] = { + [3] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 } }, + [4] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 }, { 255, 255, 153 } }, + [5] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 }, { 255, 255, 153 }, { 56, 108, 176 } }, + [6] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 }, { 255, 255, 153 }, { 56, 108, 176 }, + { 240, 2, 127 } }, + [7] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 }, { 255, 255, 153 }, { 56, 108, 176 }, + { 240, 2, 127 }, { 191, 91, 23 } }, + [8] = { { 127, 201, 127 }, { 190, 174, 212 }, { 253, 192, 134 }, { 255, 255, 153 }, { 56, 108, 176 }, + { 240, 2, 127 }, { 191, 91, 23 }, { 102, 102, 102 } } +} +colorbrewer['Set1'] = { + [3] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 } }, + [4] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 } }, + [5] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 }, { 255, 127, 0 } }, + [6] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 }, { 255, 127, 0 }, { 255, 255, 51 } }, + [7] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 }, { 255, 127, 0 }, { 255, 255, 51 }, + { 166, 86, 40 } }, + [8] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 }, { 255, 127, 0 }, { 255, 255, 51 }, + { 166, 86, 40 }, { 247, 129, 191 } }, + [9] = { { 228, 26, 28 }, { 55, 126, 184 }, { 77, 175, 74 }, { 152, 78, 163 }, { 255, 127, 0 }, { 255, 255, 51 }, + { 166, 86, 40 }, { 247, 129, 191 }, { 153, 153, 153 } } +} +colorbrewer['Set3'] = { + [3] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 } }, + [4] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 } }, + [5] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 } }, + [6] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 } }, + [7] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 } }, + [8] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 }, { 252, 205, 229 } }, + [9] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 }, { 252, 205, 229 }, { 217, 217, 217 } }, + [10] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 }, { 252, 205, 229 }, { 217, 217, 217 }, { 188, 128, 189 } }, + [11] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 }, { 252, 205, 229 }, { 217, 217, 217 }, { 188, 128, 189 }, { 204, 235, 197 } }, + [12] = { { 141, 211, 199 }, { 255, 255, 179 }, { 190, 186, 218 }, { 251, 128, 114 }, { 128, 177, 211 }, + { 253, 180, 98 }, { 179, 222, 105 }, { 252, 205, 229 }, { 217, 217, 217 }, { 188, 128, 189 }, { 204, 235, 197 }, + { 255, 237, 111 } } +} +colorbrewer['Dark2'] = { + [3] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 } }, + [4] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 }, { 231, 41, 138 } }, + [5] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 }, { 231, 41, 138 }, { 102, 166, 30 } }, + [6] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 }, { 231, 41, 138 }, { 102, 166, 30 }, { 230, 171, 2 } }, + [7] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 }, { 231, 41, 138 }, { 102, 166, 30 }, { 230, 171, 2 }, + { 166, 118, 29 } }, + [8] = { { 27, 158, 119 }, { 217, 95, 2 }, { 117, 112, 179 }, { 231, 41, 138 }, { 102, 166, 30 }, { 230, 171, 2 }, + { 166, 118, 29 }, { 102, 102, 102 } } +} +colorbrewer['Paired'] = { + [3] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 } }, + [4] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 } }, + [5] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 } }, + [6] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 } }, + [7] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 } }, + [8] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 } }, + [9] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 }, { 202, 178, 214 } }, + [10] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 }, { 202, 178, 214 }, { 106, 61, 154 } }, + [11] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 }, { 202, 178, 214 }, { 106, 61, 154 }, { 255, 255, 153 } }, + [12] = { { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, + { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 }, { 202, 178, 214 }, { 106, 61, 154 }, { 255, 255, 153 }, + { 177, 89, 40 } } +} +colorbrewer['Pastel2'] = { + [3] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 } }, + [4] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 }, { 244, 202, 228 } }, + [5] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 }, { 244, 202, 228 }, { 230, 245, 201 } }, + [6] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 }, { 244, 202, 228 }, { 230, 245, 201 }, + { 255, 242, 174 } }, + [7] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 }, { 244, 202, 228 }, { 230, 245, 201 }, + { 255, 242, 174 }, { 241, 226, 204 } }, + [8] = { { 179, 226, 205 }, { 253, 205, 172 }, { 203, 213, 232 }, { 244, 202, 228 }, { 230, 245, 201 }, + { 255, 242, 174 }, { 241, 226, 204 }, { 204, 204, 204 } } +} +colorbrewer['Pastel1'] = { + [3] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 } }, + [4] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 } }, + [5] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 }, { 254, 217, 166 } }, + [6] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 }, { 254, 217, 166 }, + { 255, 255, 204 } }, + [7] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 }, { 254, 217, 166 }, + { 255, 255, 204 }, { 229, 216, 189 } }, + [8] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 }, { 254, 217, 166 }, + { 255, 255, 204 }, { 229, 216, 189 }, { 253, 218, 236 } }, + [9] = { { 251, 180, 174 }, { 179, 205, 227 }, { 204, 235, 197 }, { 222, 203, 228 }, { 254, 217, 166 }, + { 255, 255, 204 }, { 229, 216, 189 }, { 253, 218, 236 }, { 242, 242, 242 } } +} + +-- Sequential +colorbrewer['OrRd'] = { + [3] = { { 254, 232, 200 }, { 253, 187, 132 }, { 227, 74, 51 } }, + [4] = { { 254, 240, 217 }, { 253, 204, 138 }, { 252, 141, 89 }, { 215, 48, 31 } }, + [5] = { { 254, 240, 217 }, { 253, 204, 138 }, { 252, 141, 89 }, { 227, 74, 51 }, { 179, 0, 0 } }, + [6] = { { 254, 240, 217 }, { 253, 212, 158 }, { 253, 187, 132 }, { 252, 141, 89 }, { 227, 74, 51 }, { 179, 0, 0 } }, + [7] = { { 254, 240, 217 }, { 253, 212, 158 }, { 253, 187, 132 }, { 252, 141, 89 }, { 239, 101, 72 }, + { 215, 48, 31 }, { 153, 0, 0 } }, + [8] = { { 255, 247, 236 }, { 254, 232, 200 }, { 253, 212, 158 }, { 253, 187, 132 }, { 252, 141, 89 }, + { 239, 101, 72 }, { 215, 48, 31 }, { 153, 0, 0 } }, + [9] = { { 255, 247, 236 }, { 254, 232, 200 }, { 253, 212, 158 }, { 253, 187, 132 }, { 252, 141, 89 }, + { 239, 101, 72 }, { 215, 48, 31 }, { 179, 0, 0 }, { 127, 0, 0 } } +} +colorbrewer['PuBu'] = { + [3] = { { 236, 231, 242 }, { 166, 189, 219 }, { 43, 140, 190 } }, + [4] = { { 241, 238, 246 }, { 189, 201, 225 }, { 116, 169, 207 }, { 5, 112, 176 } }, + [5] = { { 241, 238, 246 }, { 189, 201, 225 }, { 116, 169, 207 }, { 43, 140, 190 }, { 4, 90, 141 } }, + [6] = { { 241, 238, 246 }, { 208, 209, 230 }, { 166, 189, 219 }, { 116, 169, 207 }, { 43, 140, 190 }, + { 4, 90, 141 } }, + [7] = { { 241, 238, 246 }, { 208, 209, 230 }, { 166, 189, 219 }, { 116, 169, 207 }, { 54, 144, 192 }, + { 5, 112, 176 }, { 3, 78, 123 } }, + [8] = { { 255, 247, 251 }, { 236, 231, 242 }, { 208, 209, 230 }, { 166, 189, 219 }, { 116, 169, 207 }, + { 54, 144, 192 }, { 5, 112, 176 }, { 3, 78, 123 } }, + [9] = { { 255, 247, 251 }, { 236, 231, 242 }, { 208, 209, 230 }, { 166, 189, 219 }, { 116, 169, 207 }, + { 54, 144, 192 }, { 5, 112, 176 }, { 4, 90, 141 }, { 2, 56, 88 } } +} +colorbrewer['BuPu'] = { + [3] = { { 224, 236, 244 }, { 158, 188, 218 }, { 136, 86, 167 } }, + [4] = { { 237, 248, 251 }, { 179, 205, 227 }, { 140, 150, 198 }, { 136, 65, 157 } }, + [5] = { { 237, 248, 251 }, { 179, 205, 227 }, { 140, 150, 198 }, { 136, 86, 167 }, { 129, 15, 124 } }, + [6] = { { 237, 248, 251 }, { 191, 211, 230 }, { 158, 188, 218 }, { 140, 150, 198 }, { 136, 86, 167 }, + { 129, 15, 124 } }, + [7] = { { 237, 248, 251 }, { 191, 211, 230 }, { 158, 188, 218 }, { 140, 150, 198 }, { 140, 107, 177 }, + { 136, 65, 157 }, { 110, 1, 107 } }, + [8] = { { 247, 252, 253 }, { 224, 236, 244 }, { 191, 211, 230 }, { 158, 188, 218 }, { 140, 150, 198 }, + { 140, 107, 177 }, { 136, 65, 157 }, { 110, 1, 107 } }, + [9] = { { 247, 252, 253 }, { 224, 236, 244 }, { 191, 211, 230 }, { 158, 188, 218 }, { 140, 150, 198 }, + { 140, 107, 177 }, { 136, 65, 157 }, { 129, 15, 124 }, { 77, 0, 75 } } +} +colorbrewer['Oranges'] = { + [3] = { { 254, 230, 206 }, { 253, 174, 107 }, { 230, 85, 13 } }, + [4] = { { 254, 237, 222 }, { 253, 190, 133 }, { 253, 141, 60 }, { 217, 71, 1 } }, + [5] = { { 254, 237, 222 }, { 253, 190, 133 }, { 253, 141, 60 }, { 230, 85, 13 }, { 166, 54, 3 } }, + [6] = { { 254, 237, 222 }, { 253, 208, 162 }, { 253, 174, 107 }, { 253, 141, 60 }, { 230, 85, 13 }, + { 166, 54, 3 } }, + [7] = { { 254, 237, 222 }, { 253, 208, 162 }, { 253, 174, 107 }, { 253, 141, 60 }, { 241, 105, 19 }, + { 217, 72, 1 }, { 140, 45, 4 } }, + [8] = { { 255, 245, 235 }, { 254, 230, 206 }, { 253, 208, 162 }, { 253, 174, 107 }, { 253, 141, 60 }, + { 241, 105, 19 }, { 217, 72, 1 }, { 140, 45, 4 } }, + [9] = { { 255, 245, 235 }, { 254, 230, 206 }, { 253, 208, 162 }, { 253, 174, 107 }, { 253, 141, 60 }, + { 241, 105, 19 }, { 217, 72, 1 }, { 166, 54, 3 }, { 127, 39, 4 } } +} +colorbrewer['BuGn'] = { + [3] = { { 229, 245, 249 }, { 153, 216, 201 }, { 44, 162, 95 } }, + [4] = { { 237, 248, 251 }, { 178, 226, 226 }, { 102, 194, 164 }, { 35, 139, 69 } }, + [5] = { { 237, 248, 251 }, { 178, 226, 226 }, { 102, 194, 164 }, { 44, 162, 95 }, { 0, 109, 44 } }, + [6] = { { 237, 248, 251 }, { 204, 236, 230 }, { 153, 216, 201 }, { 102, 194, 164 }, { 44, 162, 95 }, + { 0, 109, 44 } }, + [7] = { { 237, 248, 251 }, { 204, 236, 230 }, { 153, 216, 201 }, { 102, 194, 164 }, { 65, 174, 118 }, + { 35, 139, 69 }, { 0, 88, 36 } }, + [8] = { { 247, 252, 253 }, { 229, 245, 249 }, { 204, 236, 230 }, { 153, 216, 201 }, { 102, 194, 164 }, + { 65, 174, 118 }, { 35, 139, 69 }, { 0, 88, 36 } }, + [9] = { { 247, 252, 253 }, { 229, 245, 249 }, { 204, 236, 230 }, { 153, 216, 201 }, { 102, 194, 164 }, + { 65, 174, 118 }, { 35, 139, 69 }, { 0, 109, 44 }, { 0, 68, 27 } } +} +colorbrewer['YlOrBr'] = { + [3] = { { 255, 247, 188 }, { 254, 196, 79 }, { 217, 95, 14 } }, + [4] = { { 255, 255, 212 }, { 254, 217, 142 }, { 254, 153, 41 }, { 204, 76, 2 } }, + [5] = { { 255, 255, 212 }, { 254, 217, 142 }, { 254, 153, 41 }, { 217, 95, 14 }, { 153, 52, 4 } }, + [6] = { { 255, 255, 212 }, { 254, 227, 145 }, { 254, 196, 79 }, { 254, 153, 41 }, { 217, 95, 14 }, { 153, 52, 4 } }, + [7] = { { 255, 255, 212 }, { 254, 227, 145 }, { 254, 196, 79 }, { 254, 153, 41 }, { 236, 112, 20 }, + { 204, 76, 2 }, { 140, 45, 4 } }, + [8] = { { 255, 255, 229 }, { 255, 247, 188 }, { 254, 227, 145 }, { 254, 196, 79 }, { 254, 153, 41 }, + { 236, 112, 20 }, { 204, 76, 2 }, { 140, 45, 4 } }, + [9] = { { 255, 255, 229 }, { 255, 247, 188 }, { 254, 227, 145 }, { 254, 196, 79 }, { 254, 153, 41 }, + { 236, 112, 20 }, { 204, 76, 2 }, { 153, 52, 4 }, { 102, 37, 6 } } +} +colorbrewer['YlGn'] = { + [3] = { { 247, 252, 185 }, { 173, 221, 142 }, { 49, 163, 84 } }, + [4] = { { 255, 255, 204 }, { 194, 230, 153 }, { 120, 198, 121 }, { 35, 132, 67 } }, + [5] = { { 255, 255, 204 }, { 194, 230, 153 }, { 120, 198, 121 }, { 49, 163, 84 }, { 0, 104, 55 } }, + [6] = { { 255, 255, 204 }, { 217, 240, 163 }, { 173, 221, 142 }, { 120, 198, 121 }, { 49, 163, 84 }, + { 0, 104, 55 } }, + [7] = { { 255, 255, 204 }, { 217, 240, 163 }, { 173, 221, 142 }, { 120, 198, 121 }, { 65, 171, 93 }, + { 35, 132, 67 }, { 0, 90, 50 } }, + [8] = { { 255, 255, 229 }, { 247, 252, 185 }, { 217, 240, 163 }, { 173, 221, 142 }, { 120, 198, 121 }, + { 65, 171, 93 }, { 35, 132, 67 }, { 0, 90, 50 } }, + [9] = { { 255, 255, 229 }, { 247, 252, 185 }, { 217, 240, 163 }, { 173, 221, 142 }, { 120, 198, 121 }, + { 65, 171, 93 }, { 35, 132, 67 }, { 0, 104, 55 }, { 0, 69, 41 } } +} +colorbrewer['Reds'] = { + [3] = { { 254, 224, 210 }, { 252, 146, 114 }, { 222, 45, 38 } }, + [4] = { { 254, 229, 217 }, { 252, 174, 145 }, { 251, 106, 74 }, { 203, 24, 29 } }, + [5] = { { 254, 229, 217 }, { 252, 174, 145 }, { 251, 106, 74 }, { 222, 45, 38 }, { 165, 15, 21 } }, + [6] = { { 254, 229, 217 }, { 252, 187, 161 }, { 252, 146, 114 }, { 251, 106, 74 }, { 222, 45, 38 }, + { 165, 15, 21 } }, + [7] = { { 254, 229, 217 }, { 252, 187, 161 }, { 252, 146, 114 }, { 251, 106, 74 }, { 239, 59, 44 }, + { 203, 24, 29 }, { 153, 0, 13 } }, + [8] = { { 255, 245, 240 }, { 254, 224, 210 }, { 252, 187, 161 }, { 252, 146, 114 }, { 251, 106, 74 }, + { 239, 59, 44 }, { 203, 24, 29 }, { 153, 0, 13 } }, + [9] = { { 255, 245, 240 }, { 254, 224, 210 }, { 252, 187, 161 }, { 252, 146, 114 }, { 251, 106, 74 }, + { 239, 59, 44 }, { 203, 24, 29 }, { 165, 15, 21 }, { 103, 0, 13 } } +} +colorbrewer['RdPu'] = { + [3] = { { 253, 224, 221 }, { 250, 159, 181 }, { 197, 27, 138 } }, + [4] = { { 254, 235, 226 }, { 251, 180, 185 }, { 247, 104, 161 }, { 174, 1, 126 } }, + [5] = { { 254, 235, 226 }, { 251, 180, 185 }, { 247, 104, 161 }, { 197, 27, 138 }, { 122, 1, 119 } }, + [6] = { { 254, 235, 226 }, { 252, 197, 192 }, { 250, 159, 181 }, { 247, 104, 161 }, { 197, 27, 138 }, + { 122, 1, 119 } }, + [7] = { { 254, 235, 226 }, { 252, 197, 192 }, { 250, 159, 181 }, { 247, 104, 161 }, { 221, 52, 151 }, + { 174, 1, 126 }, { 122, 1, 119 } }, + [8] = { { 255, 247, 243 }, { 253, 224, 221 }, { 252, 197, 192 }, { 250, 159, 181 }, { 247, 104, 161 }, + { 221, 52, 151 }, { 174, 1, 126 }, { 122, 1, 119 } }, + [9] = { { 255, 247, 243 }, { 253, 224, 221 }, { 252, 197, 192 }, { 250, 159, 181 }, { 247, 104, 161 }, + { 221, 52, 151 }, { 174, 1, 126 }, { 122, 1, 119 }, { 73, 0, 106 } } +} +colorbrewer['Greens'] = { + [3] = { { 229, 245, 224 }, { 161, 217, 155 }, { 49, 163, 84 } }, + [4] = { { 237, 248, 233 }, { 186, 228, 179 }, { 116, 196, 118 }, { 35, 139, 69 } }, + [5] = { { 237, 248, 233 }, { 186, 228, 179 }, { 116, 196, 118 }, { 49, 163, 84 }, { 0, 109, 44 } }, + [6] = { { 237, 248, 233 }, { 199, 233, 192 }, { 161, 217, 155 }, { 116, 196, 118 }, { 49, 163, 84 }, + { 0, 109, 44 } }, + [7] = { { 237, 248, 233 }, { 199, 233, 192 }, { 161, 217, 155 }, { 116, 196, 118 }, { 65, 171, 93 }, + { 35, 139, 69 }, { 0, 90, 50 } }, + [8] = { { 247, 252, 245 }, { 229, 245, 224 }, { 199, 233, 192 }, { 161, 217, 155 }, { 116, 196, 118 }, + { 65, 171, 93 }, { 35, 139, 69 }, { 0, 90, 50 } }, + [9] = { { 247, 252, 245 }, { 229, 245, 224 }, { 199, 233, 192 }, { 161, 217, 155 }, { 116, 196, 118 }, + { 65, 171, 93 }, { 35, 139, 69 }, { 0, 109, 44 }, { 0, 68, 27 } } +} +colorbrewer['YlGnBu'] = { + [3] = { { 237, 248, 177 }, { 127, 205, 187 }, { 44, 127, 184 } }, + [4] = { { 255, 255, 204 }, { 161, 218, 180 }, { 65, 182, 196 }, { 34, 94, 168 } }, + [5] = { { 255, 255, 204 }, { 161, 218, 180 }, { 65, 182, 196 }, { 44, 127, 184 }, { 37, 52, 148 } }, + [6] = { { 255, 255, 204 }, { 199, 233, 180 }, { 127, 205, 187 }, { 65, 182, 196 }, { 44, 127, 184 }, + { 37, 52, 148 } }, + [7] = { { 255, 255, 204 }, { 199, 233, 180 }, { 127, 205, 187 }, { 65, 182, 196 }, { 29, 145, 192 }, + { 34, 94, 168 }, { 12, 44, 132 } }, + [8] = { { 255, 255, 217 }, { 237, 248, 177 }, { 199, 233, 180 }, { 127, 205, 187 }, { 65, 182, 196 }, + { 29, 145, 192 }, { 34, 94, 168 }, { 12, 44, 132 } }, + [9] = { { 255, 255, 217 }, { 237, 248, 177 }, { 199, 233, 180 }, { 127, 205, 187 }, { 65, 182, 196 }, + { 29, 145, 192 }, { 34, 94, 168 }, { 37, 52, 148 }, { 8, 29, 88 } } +} +colorbrewer['Purples'] = { + [3] = { { 239, 237, 245 }, { 188, 189, 220 }, { 117, 107, 177 } }, + [4] = { { 242, 240, 247 }, { 203, 201, 226 }, { 158, 154, 200 }, { 106, 81, 163 } }, + [5] = { { 242, 240, 247 }, { 203, 201, 226 }, { 158, 154, 200 }, { 117, 107, 177 }, { 84, 39, 143 } }, + [6] = { { 242, 240, 247 }, { 218, 218, 235 }, { 188, 189, 220 }, { 158, 154, 200 }, { 117, 107, 177 }, + { 84, 39, 143 } }, + [7] = { { 242, 240, 247 }, { 218, 218, 235 }, { 188, 189, 220 }, { 158, 154, 200 }, { 128, 125, 186 }, + { 106, 81, 163 }, { 74, 20, 134 } }, + [8] = { { 252, 251, 253 }, { 239, 237, 245 }, { 218, 218, 235 }, { 188, 189, 220 }, { 158, 154, 200 }, + { 128, 125, 186 }, { 106, 81, 163 }, { 74, 20, 134 } }, + [9] = { { 252, 251, 253 }, { 239, 237, 245 }, { 218, 218, 235 }, { 188, 189, 220 }, { 158, 154, 200 }, + { 128, 125, 186 }, { 106, 81, 163 }, { 84, 39, 143 }, { 63, 0, 125 } } +} +colorbrewer['GnBu'] = { + [3] = { { 224, 243, 219 }, { 168, 221, 181 }, { 67, 162, 202 } }, + [4] = { { 240, 249, 232 }, { 186, 228, 188 }, { 123, 204, 196 }, { 43, 140, 190 } }, + [5] = { { 240, 249, 232 }, { 186, 228, 188 }, { 123, 204, 196 }, { 67, 162, 202 }, { 8, 104, 172 } }, + [6] = { { 240, 249, 232 }, { 204, 235, 197 }, { 168, 221, 181 }, { 123, 204, 196 }, { 67, 162, 202 }, + { 8, 104, 172 } }, + [7] = { { 240, 249, 232 }, { 204, 235, 197 }, { 168, 221, 181 }, { 123, 204, 196 }, { 78, 179, 211 }, + { 43, 140, 190 }, { 8, 88, 158 } }, + [8] = { { 247, 252, 240 }, { 224, 243, 219 }, { 204, 235, 197 }, { 168, 221, 181 }, { 123, 204, 196 }, + { 78, 179, 211 }, { 43, 140, 190 }, { 8, 88, 158 } }, + [9] = { { 247, 252, 240 }, { 224, 243, 219 }, { 204, 235, 197 }, { 168, 221, 181 }, { 123, 204, 196 }, + { 78, 179, 211 }, { 43, 140, 190 }, { 8, 104, 172 }, { 8, 64, 129 } } +} +colorbrewer['Greys'] = { + [3] = { { 240, 240, 240 }, { 189, 189, 189 }, { 99, 99, 99 } }, + [4] = { { 247, 247, 247 }, { 204, 204, 204 }, { 150, 150, 150 }, { 82, 82, 82 } }, + [5] = { { 247, 247, 247 }, { 204, 204, 204 }, { 150, 150, 150 }, { 99, 99, 99 }, { 37, 37, 37 } }, + [6] = { { 247, 247, 247 }, { 217, 217, 217 }, { 189, 189, 189 }, { 150, 150, 150 }, { 99, 99, 99 }, + { 37, 37, 37 } }, + [7] = { { 247, 247, 247 }, { 217, 217, 217 }, { 189, 189, 189 }, { 150, 150, 150 }, { 115, 115, 115 }, + { 82, 82, 82 }, { 37, 37, 37 } }, + [8] = { { 255, 255, 255 }, { 240, 240, 240 }, { 217, 217, 217 }, { 189, 189, 189 }, { 150, 150, 150 }, + { 115, 115, 115 }, { 82, 82, 82 }, { 37, 37, 37 } }, + [9] = { { 255, 255, 255 }, { 240, 240, 240 }, { 217, 217, 217 }, { 189, 189, 189 }, { 150, 150, 150 }, + { 115, 115, 115 }, { 82, 82, 82 }, { 37, 37, 37 }, { 0, 0, 0 } } +} +colorbrewer['YlOrRd'] = { + [3] = { { 255, 237, 160 }, { 254, 178, 76 }, { 240, 59, 32 } }, + [4] = { { 255, 255, 178 }, { 254, 204, 92 }, { 253, 141, 60 }, { 227, 26, 28 } }, + [5] = { { 255, 255, 178 }, { 254, 204, 92 }, { 253, 141, 60 }, { 240, 59, 32 }, { 189, 0, 38 } }, + [6] = { { 255, 255, 178 }, { 254, 217, 118 }, { 254, 178, 76 }, { 253, 141, 60 }, { 240, 59, 32 }, { 189, 0, 38 } }, + [7] = { { 255, 255, 178 }, { 254, 217, 118 }, { 254, 178, 76 }, { 253, 141, 60 }, { 252, 78, 42 }, + { 227, 26, 28 }, { 177, 0, 38 } }, + [8] = { { 255, 255, 204 }, { 255, 237, 160 }, { 254, 217, 118 }, { 254, 178, 76 }, { 253, 141, 60 }, + { 252, 78, 42 }, { 227, 26, 28 }, { 177, 0, 38 } }, + [9] = { { 255, 255, 204 }, { 255, 237, 160 }, { 254, 217, 118 }, { 254, 178, 76 }, { 253, 141, 60 }, + { 252, 78, 42 }, { 227, 26, 28 }, { 189, 0, 38 }, { 128, 0, 38 } } +} +colorbrewer['PuRd'] = { + [3] = { { 231, 225, 239 }, { 201, 148, 199 }, { 221, 28, 119 } }, + [4] = { { 241, 238, 246 }, { 215, 181, 216 }, { 223, 101, 176 }, { 206, 18, 86 } }, + [5] = { { 241, 238, 246 }, { 215, 181, 216 }, { 223, 101, 176 }, { 221, 28, 119 }, { 152, 0, 67 } }, + [6] = { { 241, 238, 246 }, { 212, 185, 218 }, { 201, 148, 199 }, { 223, 101, 176 }, { 221, 28, 119 }, + { 152, 0, 67 } }, + [7] = { { 241, 238, 246 }, { 212, 185, 218 }, { 201, 148, 199 }, { 223, 101, 176 }, { 231, 41, 138 }, + { 206, 18, 86 }, { 145, 0, 63 } }, + [8] = { { 247, 244, 249 }, { 231, 225, 239 }, { 212, 185, 218 }, { 201, 148, 199 }, { 223, 101, 176 }, + { 231, 41, 138 }, { 206, 18, 86 }, { 145, 0, 63 } }, + [9] = { { 247, 244, 249 }, { 231, 225, 239 }, { 212, 185, 218 }, { 201, 148, 199 }, { 223, 101, 176 }, + { 231, 41, 138 }, { 206, 18, 86 }, { 152, 0, 67 }, { 103, 0, 31 } } +} +colorbrewer['Blues'] = { + [3] = { { 222, 235, 247 }, { 158, 202, 225 }, { 49, 130, 189 } }, + [4] = { { 239, 243, 255 }, { 189, 215, 231 }, { 107, 174, 214 }, { 33, 113, 181 } }, + [5] = { { 239, 243, 255 }, { 189, 215, 231 }, { 107, 174, 214 }, { 49, 130, 189 }, { 8, 81, 156 } }, + [6] = { { 239, 243, 255 }, { 198, 219, 239 }, { 158, 202, 225 }, { 107, 174, 214 }, { 49, 130, 189 }, + { 8, 81, 156 } }, + [7] = { { 239, 243, 255 }, { 198, 219, 239 }, { 158, 202, 225 }, { 107, 174, 214 }, { 66, 146, 198 }, + { 33, 113, 181 }, { 8, 69, 148 } }, + [8] = { { 247, 251, 255 }, { 222, 235, 247 }, { 198, 219, 239 }, { 158, 202, 225 }, { 107, 174, 214 }, + { 66, 146, 198 }, { 33, 113, 181 }, { 8, 69, 148 } }, + [9] = { { 247, 251, 255 }, { 222, 235, 247 }, { 198, 219, 239 }, { 158, 202, 225 }, { 107, 174, 214 }, + { 66, 146, 198 }, { 33, 113, 181 }, { 8, 81, 156 }, { 8, 48, 107 } } +} +colorbrewer['PuBuGn'] = { + [3] = { { 236, 226, 240 }, { 166, 189, 219 }, { 28, 144, 153 } }, + [4] = { { 246, 239, 247 }, { 189, 201, 225 }, { 103, 169, 207 }, { 2, 129, 138 } }, + [5] = { { 246, 239, 247 }, { 189, 201, 225 }, { 103, 169, 207 }, { 28, 144, 153 }, { 1, 108, 89 } }, + [6] = { { 246, 239, 247 }, { 208, 209, 230 }, { 166, 189, 219 }, { 103, 169, 207 }, { 28, 144, 153 }, + { 1, 108, 89 } }, + [7] = { { 246, 239, 247 }, { 208, 209, 230 }, { 166, 189, 219 }, { 103, 169, 207 }, { 54, 144, 192 }, + { 2, 129, 138 }, { 1, 100, 80 } }, + [8] = { { 255, 247, 251 }, { 236, 226, 240 }, { 208, 209, 230 }, { 166, 189, 219 }, { 103, 169, 207 }, + { 54, 144, 192 }, { 2, 129, 138 }, { 1, 100, 80 } }, + [9] = { { 255, 247, 251 }, { 236, 226, 240 }, { 208, 209, 230 }, { 166, 189, 219 }, { 103, 169, 207 }, + { 54, 144, 192 }, { 2, 129, 138 }, { 1, 108, 89 }, { 1, 70, 54 } } +} + +local names = {} +for name, _ in pairs(colorbrewer) do + table.insert(names, name) +end + +local function toColor(rgb) + for i, val in ipairs(rgb) do + rgb[i] = val / 255 + end + rgb[4] = 1 + return rgb +end + +for _, scheme in pairs(colorbrewer) do + local highestVariant + for _, variant in pairs(scheme) do + -- save the highest variant for use in generating longer variants + highestVariant = variant + -- convert raw colors to love2d friendly values + for i, rgb in pairs(variant) do + variant[i] = toColor(rgb) + end + end + -- patch in a 2-color variant for each scheme + local first, last = scheme[3][1], scheme[3][3] + scheme[0] = {} + scheme[1] = { first } + scheme[2] = { first, last } + scheme.mt = {} + setmetatable(scheme, scheme.mt) + scheme.mt.__index = function(table, key) + if type(key) ~= "number" then + error("invalid key") + end + table[key] = {} + for i = 1, #highestVariant do + table[key][i] = highestVariant[i] + end + for i = #highestVariant + 1, key do + table[key][i] = highestVariant[i % #highestVariant] + end + return table[key] + end +end + +function colorbrewer.random() + local index = math.floor(math.random() * #names) + local scheme = names[index] + return colorbrewer[scheme] +end + +return colorbrewer diff --git a/flake.nix b/flake.nix index 2ef9ef7..3456852 100644 --- a/flake.nix +++ b/flake.nix @@ -12,32 +12,21 @@ imports = [ ]; systems = [ "x86_64-linux" "aarch64-darwin" ]; perSystem = { config, self', inputs', pkgs, system, ... }: { - devShells.default = pkgs.mkShell { - name = "love"; - packages = - let - love = pkgs.stdenv.mkDerivation { - pname = "love"; - version = "11.4"; - - src = pkgs.fetchzip { - url = "https://github.com/love2d/love/releases/download/11.4/love-11.4-macos.zip"; - sha256 = "sha256-1YZVh0fl1sSpdEk+NR+J2IJ6G0rYXwdEuhBPJjhxx5o="; - }; - - dontBuild = true; - - installPhase = '' - mkdir -p $out/bin - cp -r . $out/love.app - ln -s $out/love.app/Contents/MacOS/love $out/bin/love - ''; - - meta.platforms = pkgs.lib.platforms.darwin; - }; - in - [ love ]; - }; + devShells.default = + let + pkgs' = import ./nix { inherit pkgs; }; + inherit (pkgs') love lume lurker; + in + pkgs.mkShell { + LUA_PATH = "vendor/?.lua;;"; + name = "love"; + packages = [ love ]; + shellHook = '' + mkdir vendor + ln -snf ${lume}/lume.lua vendor/lume.lua + ln -snf ${lurker}/lurker.lua vendor/lurker.lua + ''; + }; }; }; } diff --git a/nix/default.nix b/nix/default.nix new file mode 100644 index 0000000..f0be2f8 --- /dev/null +++ b/nix/default.nix @@ -0,0 +1,7 @@ +{ pkgs }: + +let + files = [ "love" "lume" "lurker" ]; + buildPkg = name: pkgs.callPackage (./. + "/${name}.nix") { }; +in +pkgs.lib.genAttrs files buildPkg diff --git a/nix/love.nix b/nix/love.nix new file mode 100644 index 0000000..e62d2e3 --- /dev/null +++ b/nix/love.nix @@ -0,0 +1,21 @@ +{ stdenv, lib, fetchzip }: + +stdenv.mkDerivation { + pname = "love"; + version = "11.4"; + + src = fetchzip { + url = "https://github.com/love2d/love/releases/download/11.4/love-11.4-macos.zip"; + sha256 = "sha256-1YZVh0fl1sSpdEk+NR+J2IJ6G0rYXwdEuhBPJjhxx5o="; + }; + + dontBuild = true; + + installPhase = '' + mkdir -p $out/bin + cp -r . $out/love.app + ln -s $out/love.app/Contents/MacOS/love $out/bin/love + ''; + + meta.platforms = lib.platforms.darwin; +} diff --git a/nix/lume.nix b/nix/lume.nix new file mode 100644 index 0000000..f9eda58 --- /dev/null +++ b/nix/lume.nix @@ -0,0 +1,20 @@ +{ stdenv, lib, fetchFromGitHub }: + +stdenv.mkDerivation { + pname = "lume"; + version = "dev"; + + src = fetchFromGitHub { + owner = "rxi"; + repo = "lume"; + rev = "98847e7812cf28d3d64b289b03fad71dc704547d"; + sha256 = "sha256-/u23EqgjjkU8FV9oXvMNXBkY8JAOJUhJAzXTSibJthU="; + }; + + dontBuild = true; + + installPhase = '' + mkdir -p $out + cp lume.lua $out + ''; +} diff --git a/nix/lurker.nix b/nix/lurker.nix new file mode 100644 index 0000000..57018ee --- /dev/null +++ b/nix/lurker.nix @@ -0,0 +1,20 @@ +{ stdenv, lib, fetchFromGitHub }: + +stdenv.mkDerivation { + pname = "lurker"; + version = "dev"; + + src = fetchFromGitHub { + owner = "rxi"; + repo = "lurker"; + rev = "03d1373911f586c1c6d5d557527b5d510190fd94"; + sha256 = "sha256-px6ArMJLdAF11J9V9SGLTIWdkv9argsi67lxjujph48="; + }; + + dontBuild = true; + + installPhase = '' + mkdir -p $out + cp lurker.lua $out + ''; +} diff --git a/util.lua b/util.lua new file mode 100644 index 0000000..522a5a4 --- /dev/null +++ b/util.lua @@ -0,0 +1,19 @@ +function printt(t, prefix, maxdepth) + prefix = prefix or '' + maxdepth = maxdepth or 2 + for k, v in pairs(t) do + if prefix ~= '' then + k = prefix .. "." .. k + end + if type(v) == "table" then + if maxdepth > 1 then + print(k .. ":") + printt(v, k, maxdepth - 1) + else + print(k .. ": ") + end + else + print(k .. ": " .. tostring(v)) + end + end +end