UNPKG

color-parser

Version:

CSS color string parser

128 lines (110 loc) 1.85 kB
/** * Module dependencies. */ var colors = require('./colors'); /** * Expose `parse`. */ module.exports = parse; /** * Parse `str`. * * @param {String} str * @return {Object} * @api public */ function parse(str) { return named(str) || hex3(str) || hex6(str) || rgb(str) || rgba(str); } /** * Parse named css color `str`. * * @param {String} str * @return {Object} * @api private */ function named(str) { var c = colors[str.toLowerCase()]; if (!c) return; return { r: c[0], g: c[1], b: c[2] } } /** * Parse rgb(n, n, n) * * @param {String} str * @return {Object} * @api private */ function rgb(str) { if (0 == str.indexOf('rgb(')) { str = str.match(/rgb\(([^)]+)\)/)[1]; var parts = str.split(/ *, */).map(Number); return { r: parts[0], g: parts[1], b: parts[2], a: 1 } } } /** * Parse rgba(n, n, n, n) * * @param {String} str * @return {Object} * @api private */ function rgba(str) { if (0 == str.indexOf('rgba(')) { str = str.match(/rgba\(([^)]+)\)/)[1]; var parts = str.split(/ *, */).map(Number); return { r: parts[0], g: parts[1], b: parts[2], a: parts[3] } } } /** * Parse #nnnnnn * * @param {String} str * @return {Object} * @api private */ function hex6(str) { if ('#' == str[0] && 7 == str.length) { return { r: parseInt(str.slice(1, 3), 16), g: parseInt(str.slice(3, 5), 16), b: parseInt(str.slice(5, 7), 16), a: 1 } } } /** * Parse #nnn * * @param {String} str * @return {Object} * @api private */ function hex3(str) { if ('#' == str[0] && 4 == str.length) { return { r: parseInt(str[1] + str[1], 16), g: parseInt(str[2] + str[2], 16), b: parseInt(str[3] + str[3], 16), a: 1 } } }