(colorStr, rgbaArr)
| 2491 | lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); |
| 2492 | } |
| 2493 | function parse(colorStr, rgbaArr) { |
| 2494 | if (!colorStr) { |
| 2495 | return; |
| 2496 | } |
| 2497 | rgbaArr = rgbaArr || []; |
| 2498 | var cached = colorCache.get(colorStr); |
| 2499 | if (cached) { |
| 2500 | return copyRgba(rgbaArr, cached); |
| 2501 | } |
| 2502 | colorStr = colorStr + ''; |
| 2503 | var str = colorStr.replace(/ /g, '').toLowerCase(); |
| 2504 | if (str in kCSSColorTable) { |
| 2505 | copyRgba(rgbaArr, kCSSColorTable[str]); |
| 2506 | putToCache(colorStr, rgbaArr); |
| 2507 | return rgbaArr; |
| 2508 | } |
| 2509 | var strLen = str.length; |
| 2510 | if (str.charAt(0) === '#') { |
| 2511 | if (strLen === 4 || strLen === 5) { |
| 2512 | var iv = parseInt(str.slice(1, 4), 16); |
| 2513 | if (!(iv >= 0 && iv <= 0xfff)) { |
| 2514 | setRgba(rgbaArr, 0, 0, 0, 1); |
| 2515 | return; |
| 2516 | } |
| 2517 | setRgba(rgbaArr, ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), (iv & 0xf0) | ((iv & 0xf0) >> 4), (iv & 0xf) | ((iv & 0xf) << 4), strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1); |
| 2518 | putToCache(colorStr, rgbaArr); |
| 2519 | return rgbaArr; |
| 2520 | } |
| 2521 | else if (strLen === 7 || strLen === 9) { |
| 2522 | var iv = parseInt(str.slice(1, 7), 16); |
| 2523 | if (!(iv >= 0 && iv <= 0xffffff)) { |
| 2524 | setRgba(rgbaArr, 0, 0, 0, 1); |
| 2525 | return; |
| 2526 | } |
| 2527 | setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1); |
| 2528 | putToCache(colorStr, rgbaArr); |
| 2529 | return rgbaArr; |
| 2530 | } |
| 2531 | return; |
| 2532 | } |
| 2533 | var op = str.indexOf('('); |
| 2534 | var ep = str.indexOf(')'); |
| 2535 | if (op !== -1 && ep + 1 === strLen) { |
| 2536 | var fname = str.substr(0, op); |
| 2537 | var params = str.substr(op + 1, ep - (op + 1)).split(','); |
| 2538 | var alpha = 1; |
| 2539 | switch (fname) { |
| 2540 | case 'rgba': |
| 2541 | if (params.length !== 4) { |
| 2542 | return params.length === 3 |
| 2543 | ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1) |
| 2544 | : setRgba(rgbaArr, 0, 0, 0, 1); |
| 2545 | } |
| 2546 | alpha = parseCssFloat(params.pop()); |
| 2547 | case 'rgb': |
| 2548 | if (params.length !== 3) { |
| 2549 | setRgba(rgbaArr, 0, 0, 0, 1); |
| 2550 | return; |
no test coverage detected
searching dependent graphs…