Skip to content

Commit

Permalink
Consolidate code.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Sep 25, 2019
1 parent 6d5e89c commit fd380cd
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 13 deletions.
20 changes: 7 additions & 13 deletions src/color.js
Expand Up @@ -8,10 +8,7 @@ export var brighter = 1 / darker;
var reI = "\\s*([+-]?\\d+)\\s*",
reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
reHex3 = /^#([0-9a-f]{3})$/,
reHex4 = /^#([0-9a-f]{4})$/,
reHex6 = /^#([0-9a-f]{6})$/,
reHex8 = /^#([0-9a-f]{8})$/,
reHex = /^#([0-9a-f]{3,8})$/,
reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
Expand Down Expand Up @@ -197,12 +194,13 @@ function color_formatRgb() {
}

export default function color(format) {
var m;
var m, l;
format = (format + "").trim().toLowerCase();
return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
: (m = reHex4.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff)) // #f000
: (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
: (m = reHex8.exec(format)) ? rgbn8(parseInt(m[1], 16)) // #ff000000
return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
: l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
: l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
: l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
: null) // invalid hex
: (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
: (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
: (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
Expand All @@ -218,10 +216,6 @@ function rgbn(n) {
return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
}

function rgbn8(n) {
return new Rgb(n >> 24 & 0xff, n >> 16 & 0xff, n >> 8 & 0xff, (n & 0xff) / 0xff);
}

function rgba(r, g, b, a) {
if (a <= 0) r = g = b = NaN;
return new Rgb(r, g, b, a);
Expand Down
5 changes: 5 additions & 0 deletions test/color-test.js
Expand Up @@ -26,6 +26,11 @@ tape("color(format) parses 3-digit hexadecimal (e.g., \"#abc\")", function(test)
test.end();
});

tape("color(format) does not parse 7-digit hexadecimal (e.g., \"#abcdef3\")", function(test) {
test.strictEqual(color.color("#abcdef3"), null);
test.end();
});

tape("color(format) parses 8-digit hexadecimal (e.g., \"#abcdef33\")", function(test) {
test.rgbEqual(color.color("#abcdef33"), 171, 205, 239, 0.2);
test.end();
Expand Down

0 comments on commit fd380cd

Please sign in to comment.