From 01d5655795dbae217c6b6da4022f00c999469515 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 28 Nov 2016 14:27:18 +0000 Subject: [PATCH 1/2] Fix parsing numbers, bump version. Fixes #17 --- package.json | 2 +- src/grammar.ne | 2 +- src/index.js | 5 ++++- src/index.test.js | 15 +++++++++++---- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 96c290f..ac50a10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "1.0.5", + "version": "1.0.6", "description": "Convert CSS text to a React Native stylesheet object", "main": "dist/index.js", "scripts": { diff --git a/src/grammar.ne b/src/grammar.ne index c69a116..846b318 100644 --- a/src/grammar.ne +++ b/src/grammar.ne @@ -50,7 +50,7 @@ %} number - -> "-":? ([0-9]:? "." [0-9]:+ | [1-9] [0-9]:* | "0") {% d => Number(text(d)) %} + -> "-":? ([0-9]:? "." [0-9]:+ | [1-9] [0-9]:* ("." [0-9]:+):? | "0") {% d => Number(text(d)) %} angle -> number ("deg" | "rad") {% text %} diff --git a/src/index.js b/src/index.js index 7f726d6..227fdc1 100644 --- a/src/index.js +++ b/src/index.js @@ -27,11 +27,14 @@ const transformRawValue = input => ( : input ); +export const parseProp = (propName, value) => + new nearley.Parser(grammar.ParserRules, propName).feed(value).results[0]; + export const getStylesForProperty = (propName, inputValue) => { const value = inputValue.trim(); const propValue = (transforms.indexOf(propName) !== -1) - ? (new nearley.Parser(grammar.ParserRules, propName).feed(value).results[0]) + ? parseProp(propName, value) : transformRawValue(value); return (propValue && propValue.$merge) diff --git a/src/index.test.js b/src/index.test.js index 792d521..85afebb 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,5 +1,5 @@ /* global jest it, expect */ -import transformCss from '.'; +import transformCss, { parseProp } from '.'; const runTest = (inputCss, expectedStyles) => { const actualStyles = transformCss(inputCss); @@ -13,9 +13,16 @@ it('transforms numbers', () => runTest([ ['bottom', '0'], ], { top: 0, left: 0, right: 0, bottom: 0 })); -it('allows decimal values', () => runTest([ - ['top', '1.5'], -], { top: 1.5 })); +it('allows decimal values', () => { + expect(parseProp('number', '0.5')).toBe(0.5); + expect(parseProp('number', '1.5')).toBe(1.5); + expect(parseProp('number', '10.5')).toBe(10.5); + expect(parseProp('number', '100.5')).toBe(100.5); + expect(parseProp('number', '-0.5')).toBe(-0.5); + expect(parseProp('number', '-1.5')).toBe(-1.5); + expect(parseProp('number', '-10.5')).toBe(-10.5); + expect(parseProp('number', '-100.5')).toBe(-100.5); +}); it('allows decimal values in transformed values', () => runTest([ ['border-radius', '1.5'], From b14b66c6fff1592ab18dddd2ecaa65ff57657fa6 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 28 Nov 2016 14:40:25 +0000 Subject: [PATCH 2/2] Allow css-style .5 numbers --- src/grammar.ne | 8 +++++++- src/index.test.js | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/grammar.ne b/src/grammar.ne index 846b318..debbc08 100644 --- a/src/grammar.ne +++ b/src/grammar.ne @@ -49,8 +49,14 @@ }; %} +int + -> "0" | [1-9] [0-9]:* + +decimal + -> "." [0-9]:+ + number - -> "-":? ([0-9]:? "." [0-9]:+ | [1-9] [0-9]:* ("." [0-9]:+):? | "0") {% d => Number(text(d)) %} + -> "-":? (int decimal | int | decimal) {% d => Number(text(d)) %} angle -> number ("deg" | "rad") {% text %} diff --git a/src/index.test.js b/src/index.test.js index 2ba1681..c30d6ad 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -22,6 +22,8 @@ it('allows decimal values', () => { expect(parseProp('number', '-1.5')).toBe(-1.5); expect(parseProp('number', '-10.5')).toBe(-10.5); expect(parseProp('number', '-100.5')).toBe(-100.5); + expect(parseProp('number', '.5')).toBe(0.5); + expect(parseProp('number', '-.5')).toBe(-0.5); }); it('allows decimal values in transformed values', () => runTest([