From 6a3e9401193afeb6b98086078a7d00e0279cd6b7 Mon Sep 17 00:00:00 2001 From: Jan Potoms Date: Sat, 16 Apr 2016 22:23:38 +0200 Subject: [PATCH] Fix __parseFont to not crash --- canvas2svg.js | 2 +- test/unit.spec.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/canvas2svg.js b/canvas2svg.js index e02d1b7..839964c 100644 --- a/canvas2svg.js +++ b/canvas2svg.js @@ -880,7 +880,7 @@ * @private */ ctx.prototype.__parseFont = function() { - var regex = /^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-,\"\sa-z]+?)\s*$/i; + var regex = /^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-,\'\"\sa-z]+?)\s*$/i; var fontPart = regex.exec( this.font ); var data = { style : fontPart[1] || 'normal', diff --git a/test/unit.spec.js b/test/unit.spec.js index bcafbd1..302cb10 100644 --- a/test/unit.spec.js +++ b/test/unit.spec.js @@ -297,6 +297,19 @@ describe('canvas2svg', function() { }); + describe("supports fonts", function () { + it("doesn't crash when using a font", function () { + var ctx = new C2S(); + ctx.font = "normal 12px 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"; + ctx.fillText("A Text Example", 0, 50); + var svg = ctx.getSvg(); + expect(svg.querySelector("text").getAttribute("font-family")).to.equal("\'Helvetica Neue\', \'Helvetica\', \'Arial\', sans-serif"); + expect(svg.querySelector("text").getAttribute("font-size")).to.equal("12px"); + expect(svg.querySelector("text").getAttribute("font-weight")).to.equal("normal"); + expect(svg.querySelector("text").getAttribute("font-style")).to.equal("normal"); + }); + }); + describe("supports globalOpacity", function() { it("set stroke-opacity when stroking and set fill-opacity when filling",function() { var ctx = new C2S();