From 2173c277ae40e8c31a445fa97729c4bceec6579f Mon Sep 17 00:00:00 2001
From: MoyuScript <i@moyu.moe>
Date: Wed, 12 Jun 2013 15:48:00 -0700
Subject: [PATCH] Better text-shadow parsing

---
 src/Parse.js | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/Parse.js b/src/Parse.js
index e6fe643..946c518 100644
--- a/src/Parse.js
+++ b/src/Parse.js
@@ -75,6 +75,8 @@ _html2canvas.Parse = function (images, options) {
     }
   }
 
+  // reuse the regex
+  var PARSE_TEXT_SHADOW = /(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;
   function setTextVariables(ctx, el, text_decoration, color) {
     var align = false,
     bold = getCSS(el, "fontWeight"),
@@ -96,14 +98,11 @@ _html2canvas.Parse = function (images, options) {
     ctx.setVariable("textAlign", (align) ? "right" : "left");
 
     if (shadow !== "none") {
-
-      // TODO: better text-shadow parsing
-      var parseShadow = /(rgba\([^)]*\))\s([^\s]*)\s([^\s]*)\s([^\s]*)/;
-      var bits = parseShadow.exec(shadow);
-      var color = bits[1],
-        sX = bits[2].replace('px', ''),
-        sY = bits[3].replace('px', ''),
-        blur = bits[4].replace('px', '');
+      var s = shadow.match(PARSE_TEXT_SHADOW),
+        color = s[0],
+        sX = s[1] ? s[1].replace('px', '') : 0,
+        sY = s[2] ? s[2].replace('px', '') : 0,
+        blur = s[3] ? s[3].replace('px', '') : 0;
 
       // apply the text shadow
       ctx.setVariable("shadowColor", color);