From bab164e4ca40850809022ea61c2174e579071d4f Mon Sep 17 00:00:00 2001 From: deepsweet Date: Thu, 6 Dec 2012 22:20:25 +0200 Subject: [PATCH] E-notated numbers in paths not recognised (fix #63) --- plugins/cleanupNumericValues.js | 4 ++-- plugins/convertPathData.js | 14 +++++++------- test/plugins/convertPathData.01.orig.svg | 1 + test/plugins/convertPathData.01.should.svg | 1 + 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/plugins/cleanupNumericValues.js b/plugins/cleanupNumericValues.js index e4b1efa8..f1ed1a2d 100644 --- a/plugins/cleanupNumericValues.js +++ b/plugins/cleanupNumericValues.js @@ -1,6 +1,6 @@ 'use strict'; -var regNumericValues = /^([\-+]?\d*\.?\d+)(px|pt|pc|mm|cm|m|in|ft|em|ex|%)?$/, +var regNumericValues = /^([\-+]?\d*\.?\d+(\.\d+)?([eE][\-+]?\d+)?)(px|pt|pc|mm|cm|m|in|ft|em|ex|%)?$/, removeLeadingZero = require('../lib/svgo/tools').removeLeadingZero; /** @@ -26,7 +26,7 @@ exports.cleanupNumericValues = function(item, params) { if (match) { // round it to the fixed precision var num = +(+match[1]).toFixed(params.floatPrecision), - units = match[2] || ''; + units = match[4] || ''; // and remove leading zero if (params.leadingZero) { diff --git a/plugins/convertPathData.js b/plugins/convertPathData.js index e8caf4aa..411deab3 100644 --- a/plugins/convertPathData.js +++ b/plugins/convertPathData.js @@ -2,7 +2,7 @@ var cleanupOutData = require('../lib/svgo/tools').cleanupOutData, regPathInstructions = /([MmLlHhVvCcSsQqTtAaZz])\s*/, - regPathData = /(?=-)|[\s,]+/, + regPathData = /[\-+]?\d*\.?\d+(\.\d+)?([eE][\-+]?\d+)?/g, pathElems = ['path', 'glyph', 'missing-glyph'], hasMarkerMid; @@ -73,17 +73,17 @@ function path2js(pathString) { // data item } else { - // M 35.898 14.374 L 35.898 14.374 → M35.898 14.374L35.898 14.374 - data = data.trim().split(regPathData).map(function(str) { - return +str; - }); + data = data.trim().match(regPathData); - // very stupid defense strategy - if (typeof data[0] === 'number' && !isNaN(data[0])) { + if (data) { var index = 0, pair = 2; + data = data.map(function(str) { + return +str; + }); + // deal with very first 'Mm' and multiple points data if ('Mm'.indexOf(instruction) > -1) { diff --git a/test/plugins/convertPathData.01.orig.svg b/test/plugins/convertPathData.01.orig.svg index 9bb3bdb6..dea20fb2 100644 --- a/test/plugins/convertPathData.01.orig.svg +++ b/test/plugins/convertPathData.01.orig.svg @@ -3,6 +3,7 @@ + diff --git a/test/plugins/convertPathData.01.should.svg b/test/plugins/convertPathData.01.should.svg index 6b08ce5f..734b5636 100644 --- a/test/plugins/convertPathData.01.should.svg +++ b/test/plugins/convertPathData.01.should.svg @@ -3,6 +3,7 @@ +