From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- node_modules/svgo/plugins/convertColors.js | 127 +++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 node_modules/svgo/plugins/convertColors.js (limited to 'node_modules/svgo/plugins/convertColors.js') diff --git a/node_modules/svgo/plugins/convertColors.js b/node_modules/svgo/plugins/convertColors.js new file mode 100644 index 00000000..b856e130 --- /dev/null +++ b/node_modules/svgo/plugins/convertColors.js @@ -0,0 +1,127 @@ +'use strict'; + +exports.type = 'perItem'; + +exports.active = true; + +exports.description = 'converts colors: rgb() to #rrggbb and #rrggbb to #rgb'; + +exports.params = { + currentColor: false, + names2hex: true, + rgb2hex: true, + shorthex: true, + shortname: true +}; + +var collections = require('./_collections'), + rNumber = '([+-]?(?:\\d*\\.\\d+|\\d+\\.?)%?)', + rComma = '\\s*,\\s*', + regRGB = new RegExp('^rgb\\(\\s*' + rNumber + rComma + rNumber + rComma + rNumber + '\\s*\\)$'), + regHEX = /^\#(([a-fA-F0-9])\2){3}$/, + none = /\bnone\b/i; + +/** + * Convert different colors formats in element attributes to hex. + * + * @see http://www.w3.org/TR/SVG/types.html#DataTypeColor + * @see http://www.w3.org/TR/SVG/single-page.html#types-ColorKeywords + * + * @example + * Convert color name keyword to long hex: + * fuchsia ➡ #ff00ff + * + * Convert rgb() to long hex: + * rgb(255, 0, 255) ➡ #ff00ff + * rgb(50%, 100, 100%) ➡ #7f64ff + * + * Convert long hex to short hex: + * #aabbcc ➡ #abc + * + * Convert hex to short name + * #000080 ➡ navy + * + * @param {Object} item current iteration item + * @param {Object} params plugin params + * @return {Boolean} if false, item will be filtered out + * + * @author Kir Belevich + */ +exports.fn = function(item, params) { + + if (item.elem) { + + item.eachAttr(function(attr) { + + if (collections.colorsProps.indexOf(attr.name) > -1) { + + var val = attr.value, + match; + + // Convert colors to currentColor + if (params.currentColor) { + if (typeof params.currentColor === 'string') { + match = val === params.currentColor; + } else if (params.currentColor.exec) { + match = params.currentColor.exec(val); + } else { + match = !val.match(none); + } + if (match) { + val = 'currentColor'; + } + } + + // Convert color name keyword to long hex + if (params.names2hex && val.toLowerCase() in collections.colorsNames) { + val = collections.colorsNames[val.toLowerCase()]; + } + + // Convert rgb() to long hex + if (params.rgb2hex && (match = val.match(regRGB))) { + match = match.slice(1, 4).map(function(m) { + if (m.indexOf('%') > -1) + m = Math.round(parseFloat(m) * 2.55); + + return Math.max(0, Math.min(m, 255)); + }); + + val = rgb2hex(match); + } + + // Convert long hex to short hex + if (params.shorthex && (match = val.match(regHEX))) { + val = '#' + match[0][1] + match[0][3] + match[0][5]; + } + + // Convert hex to short name + if (params.shortname && val in collections.colorsShortNames) { + val = collections.colorsShortNames[val]; + } + + attr.value = val; + + } + + }); + + } + +}; + +/** + * Convert [r, g, b] to #rrggbb. + * + * @see https://gist.github.com/983535 + * + * @example + * rgb2hex([255, 255, 255]) // '#ffffff' + * + * @param {Array} rgb [r, g, b] + * @return {String} #rrggbb + * + * @author Jed Schmidt + */ +function rgb2hex(rgb) { + return '#' + ('00000' + (rgb[0] << 16 | rgb[1] << 8 | rgb[2]).toString(16)).slice(-6).toUpperCase(); +} -- cgit v1.2.3