From 66eff7a5cb6fea0dbb8737bc40bcc3f7ee23c8c0 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Fri, 20 Jan 2012 14:55:52 -0500 Subject: [PATCH] more robust fontMatrix parsing, error checking --- src/canvas.js | 10 ++++++++++ src/fonts.js | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/canvas.js b/src/canvas.js index 5ef900861..6ec8076cf 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -551,6 +551,16 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { throw 'Can\'t find font for ' + fontRefName; } + // If any of the diagonal elements of a transformation matrix are null + // ctx.restore() will fail in FF. See bugzilla bug #719844. + if (fontObj.fontMatrix[0] === 0 || + fontObj.fontMatrix[3] === 0 ) { + warn('Invalid font matrix for font ' + fontRefName); + + // Fallback + fontObj.fontMatrix = IDENTITY_MATRIX; + } + var name = fontObj.loadedName || 'sans-serif'; this.current.font = fontObj; diff --git a/src/fonts.js b/src/fonts.js index f96c15458..96a11d1fa 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -2594,7 +2594,15 @@ var Type1Parser = function type1Parser() { while (str[index++] != ']') count++; - var array = str.substr(start, count).split(' '); + str = str.substr(start, count); + + // Trim + str = str.replace(/^\s+/, ''); + str = str.replace(/\s+$/, ''); + // Remove adjacent spaces + str = str.replace(/\s+/g, ' '); + + var array = str.split(' '); for (var i = 0, ii = array.length; i < ii; i++) array[i] = parseFloat(array[i] || 0); return array;