From 0a463fa9b9377a100344f81a6976090e0d317f4a Mon Sep 17 00:00:00 2001 From: Caleb Hearon Date: Thu, 16 Aug 2018 21:58:51 -0400 Subject: [PATCH] support scientific notation in number values Fixes #37 --- lib/unit.js | 16 +++++++++++----- test/unit.js | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/unit.js b/lib/unit.js index c813057..0347523 100644 --- a/lib/unit.js +++ b/lib/unit.js @@ -1,32 +1,36 @@ var minus = '-'.charCodeAt(0); var plus = '+'.charCodeAt(0); var dot = '.'.charCodeAt(0); +var exp = 'e'.charCodeAt(0); +var EXP = 'E'.charCodeAt(0); module.exports = function (value) { var pos = 0; var length = value.length; var dotted = false; + var sciPos = -1; var containsNumber = false; var code; - var number = ''; while (pos < length) { code = value.charCodeAt(pos); if (code >= 48 && code <= 57) { - number += value[pos]; containsNumber = true; + } else if (code === exp || code === EXP) { + if (sciPos > -1) { + break; + } + sciPos = pos; } else if (code === dot) { if (dotted) { break; } dotted = true; - number += value[pos]; } else if (code === plus || code === minus) { if (pos !== 0) { break; } - number += value[pos]; } else { break; } @@ -34,8 +38,10 @@ module.exports = function (value) { pos += 1; } + if (sciPos + 1 === pos) pos--; + return containsNumber ? { - number: number, + number: value.slice(0, pos), unit: value.slice(pos) } : false; }; diff --git a/test/unit.js b/test/unit.js index 6474072..f7882a2 100644 --- a/test/unit.js +++ b/test/unit.js @@ -25,6 +25,21 @@ var tests = [{ }, { fixture: '.rem', expected: false +}, { + fixture: '1e4px', + expected: { number: '1e4', unit: 'px' } +}, { + fixture: '1em', + expected: { number: '1', unit: 'em' } +}, { + fixture: '1e10', + expected: { number: '1e10', unit: '' } +}, { + fixture: '', + expected: false +}, { + fixture: 'e', + expected: false }]; test('Unit', function (t) {