* @param {string} colorStr * @param {Array. } out * @return {Array. } * @memberOf module:zrender/util/color
(colorStr, rgbaArr)
| 3855 | * @memberOf module:zrender/util/color |
| 3856 | */ |
| 3857 | function parse(colorStr, rgbaArr) { |
| 3858 | if (!colorStr) { |
| 3859 | return; |
| 3860 | } |
| 3861 | rgbaArr = rgbaArr || []; |
| 3862 | |
| 3863 | var cached = colorCache.get(colorStr); |
| 3864 | if (cached) { |
| 3865 | return copyRgba(rgbaArr, cached); |
| 3866 | } |
| 3867 | |
| 3868 | // colorStr may be not string |
| 3869 | colorStr = colorStr + ''; |
| 3870 | // Remove all whitespace, not compliant, but should just be more accepting. |
| 3871 | var str = colorStr.replace(/ /g, '').toLowerCase(); |
| 3872 | |
| 3873 | // Color keywords (and transparent) lookup. |
| 3874 | if (str in kCSSColorTable) { |
| 3875 | copyRgba(rgbaArr, kCSSColorTable[str]); |
| 3876 | putToCache(colorStr, rgbaArr); |
| 3877 | return rgbaArr; |
| 3878 | } |
| 3879 | |
| 3880 | // #abc and #abc123 syntax. |
| 3881 | if (str.charAt(0) === '#') { |
| 3882 | if (str.length === 4) { |
| 3883 | var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. |
| 3884 | if (!(iv >= 0 && iv <= 0xfff)) { |
| 3885 | setRgba(rgbaArr, 0, 0, 0, 1); |
| 3886 | return; // Covers NaN. |
| 3887 | } |
| 3888 | setRgba(rgbaArr, |
| 3889 | ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), |
| 3890 | (iv & 0xf0) | ((iv & 0xf0) >> 4), |
| 3891 | (iv & 0xf) | ((iv & 0xf) << 4), |
| 3892 | 1 |
| 3893 | ); |
| 3894 | putToCache(colorStr, rgbaArr); |
| 3895 | return rgbaArr; |
| 3896 | } |
| 3897 | else if (str.length === 7) { |
| 3898 | var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. |
| 3899 | if (!(iv >= 0 && iv <= 0xffffff)) { |
| 3900 | setRgba(rgbaArr, 0, 0, 0, 1); |
| 3901 | return; // Covers NaN. |
| 3902 | } |
| 3903 | setRgba(rgbaArr, |
| 3904 | (iv & 0xff0000) >> 16, |
| 3905 | (iv & 0xff00) >> 8, |
| 3906 | iv & 0xff, |
| 3907 | 1 |
| 3908 | ); |
| 3909 | putToCache(colorStr, rgbaArr); |
| 3910 | return rgbaArr; |
| 3911 | } |
| 3912 | |
| 3913 | return; |
| 3914 | } |
no test coverage detected