code/colors.js
var AvisynthError = require('./errors').AvisynthError;
// This file contains logic that mimics Avisynth's color parsing.
// See http://avisynth.nl/index.php/Colors for more.
exports.parse = function(color) {
// A valid number.
if (typeof color === 'number' && color >= 0 && color <= 0xFFFFFF) {
return hexColor(Math.round(color));
}
// Hex triplet format.
if (typeof color === 'string' && /^[0-9A-F]{3}$/i.test(color)) {
color = color.replace(/(.)/g, '$1$1'); // convert to hexad.
}
// Hexad format.
if (typeof color === 'string' && /^[0-9A-F]{6}$/i.test(color)) {
return hexColor(parseInt(color, 16));
}
// Color name.
// Note that this can safely be here because no color name resembles
// a triplet or hexad. Was this by design? I have no idea. But cool!
if (typeof color === 'string' && color.toLowerCase() in colors) {
return hexColor(colors[color.toLowerCase()]);
}
throw new AvisynthError('Color format wrong: "' + color + '"');
};
// This function converts an int representing the color 0xRRGGBB into its
// hexad counterpart in Avisynth syntax such as $RRGGBB.
// In case of colors with more room, it will still be in hex (alpha channel maybe?).
function hexColor(value) {
// We pad it with zeroes.
var pad = Array(Math.max(0, 7 - value.toString(16).length)).join(0);
return '$' + pad + value.toString(16).toUpperCase();
}
// The named color definitions, taken from http://avisynth.nl/index.php/Color_presets
// All these colors are lowercase here, but in the original, four were inconsistent:
// * darkoliveGreen -> darkolivegreen
// * darkseaGreen -> darkseagreen
// * darkslateBlue -> darkslateblue
// * darkslateGray -> darkslategray
// What baffles me is that these are not even consistent with *themselves*.
var colors = {
aliceblue : 0xF0F8FF,
antiquewhite : 0xFAEBD7,
aqua : 0x00FFFF,
aquamarine : 0x7FFFD4,
azure : 0xF0FFFF,
beige : 0xF5F5DC,
bisque : 0xFFE4C4,
black : 0x000000,
blanchedalmond : 0xFFEBCD,
blue : 0x0000FF,
blueviolet : 0x8A2BE2,
brown : 0xA52A2A,
burlywood : 0xDEB887,
cadetblue : 0x5F9EA0,
chartreuse : 0x7FFF00,
chocolate : 0xD2691E,
coral : 0xFF7F50,
cornflowerblue : 0x6495ED,
cornsilk : 0xFFF8DC,
crimson : 0xDC143C,
cyan : 0x00FFFF,
darkblue : 0x00008B,
darkcyan : 0x008B8B,
darkgoldenrod : 0xB8860B,
darkgray : 0xA9A9A9,
darkgreen : 0x006400,
darkkhaki : 0xBDB76B,
darkmagenta : 0x8B008B,
darkolivegreen : 0x556B2F,
darkorange : 0xFF8C00,
darkorchid : 0x9932CC,
darkred : 0x8B0000,
darksalmon : 0xE9967A,
darkseagreen : 0x8FBC8F,
darkslateblue : 0x483D8B,
darkslategray : 0x2F4F4F,
darkturquoise : 0x00CED1,
darkviolet : 0x9400D3,
deeppink : 0xFF1493,
deepskyblue : 0x00BFFF,
dimgray : 0x696969,
dodgerblue : 0x1E90FF,
firebrick : 0xB22222,
floralwhite : 0xFFFAF0,
forestgreen : 0x228B22,
fuchsia : 0xFF00FF,
gainsboro : 0xDCDCDC,
ghostwhite : 0xF8F8FF,
gold : 0xFFD700,
goldenrod : 0xDAA520,
gray : 0x808080,
green : 0x008000,
greenyellow : 0xADFF2F,
honeydew : 0xF0FFF0,
hotpink : 0xFF69B4,
indianred : 0xCD5C5C,
indigo : 0x4B0082,
ivory : 0xFFFFF0,
khaki : 0xF0E68C,
lavender : 0xE6E6FA,
lavenderblush : 0xFFF0F5,
lawngreen : 0x7CFC00,
lemonchiffon : 0xFFFACD,
lightblue : 0xADD8E6,
lightcoral : 0xF08080,
lightcyan : 0xE0FFFF,
lightgoldenrodyellow : 0xFAFAD2,
lightgreen : 0x90EE90,
lightgrey : 0xD3D3D3,
lightpink : 0xFFB6C1,
lightsalmon : 0xFFA07A,
lightseagreen : 0x20B2AA,
lightskyblue : 0x87CEFA,
lightslategray : 0x778899,
lightsteelblue : 0xB0C4DE,
lightyellow : 0xFFFFE0,
lime : 0x00FF00,
limegreen : 0x32CD32,
linen : 0xFAF0E6,
magenta : 0xFF00FF,
maroon : 0x800000,
mediumaquamarine : 0x66CDAA,
mediumblue : 0x0000CD,
mediumorchid : 0xBA55D3,
mediumpurple : 0x9370DB,
mediumseagreen : 0x3CB371,
mediumslatenlue : 0x7B68EE,
mediumspringgreen : 0x00FA9A,
mediumturquoise : 0x48D1CC,
mediumvioletred : 0xC71585,
midnightblue : 0x191970,
mintcream : 0xF5FFFA,
mistyrose : 0xFFE4E1,
moccasin : 0xFFE4B5,
navajowhite : 0xFFDEAD,
navy : 0x000080,
oldlace : 0xFDF5E6,
olive : 0x808000,
olivedrab : 0x6B8E23,
orange : 0xFFA500,
orangered : 0xFF4500,
orchid : 0xDA70D6,
palegoldenrod : 0xEEE8AA,
palegreen : 0x98FB98,
paleturquoise : 0xAFEEEE,
palevioletred : 0xDB7093,
papayawhip : 0xFFEFD5,
peachpuff : 0xFFDAB9,
peru : 0xCD853F,
pink : 0xFFC0CB,
plum : 0xDDA0DD,
powderblue : 0xB0E0E6,
purple : 0x800080,
red : 0xFF0000,
rosybrown : 0xBC8F8F,
royalblue : 0x4169E1,
saddlebrown : 0x8B4513,
salmon : 0xFA8072,
sandybrown : 0xF4A460,
seagreen : 0x2E8B57,
seashell : 0xFFF5EE,
sienna : 0xA0522D,
silver : 0xC0C0C0,
skyblue : 0x87CEEB,
slateblue : 0x6A5ACD,
slategray : 0x708090,
snow : 0xFFFAFA,
springgreen : 0x00FF7F,
steelblue : 0x4682B4,
tan : 0xD2B48C,
teal : 0x008080,
thistle : 0xD8BFD8,
tomato : 0xFF6347,
turquoise : 0x40E0D0,
violet : 0xEE82EE,
wheat : 0xF5DEB3,
white : 0xFFFFFF,
whitesmoke : 0xF5F5F5,
yellow : 0xFFFF00,
yellowgreen : 0x9ACD32,
gray10 : 0x191919,
gray20 : 0x323232,
gray30 : 0x4B4B4B,
gray40 : 0x656565,
gray50 : 0x7F7F7F,
gray60 : 0x989898,
gray70 : 0xB1B1B1,
gray80 : 0xCACACA,
gray90 : 0xE4E4E4
};