From 502ccfa48c08884095a060f533e5b5a0eeb80932 Mon Sep 17 00:00:00 2001 From: fuwanqun Date: Fri, 3 Dec 2021 21:02:13 +0800 Subject: [PATCH 1/8] fix: Colors can be stringified with expontential alphas, but cannot be parsed --- index.js | 9 ++++++--- test/basic.js | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index a01f14f..1033b13 100644 --- a/index.js +++ b/index.js @@ -136,8 +136,11 @@ cs.get.hsl = function (string) { if (!string) { return null; } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?[\d\.]+)\s*)?\)$/; + /** + * scientific-notation regexp + * [+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)? + */ + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hsl); if (match) { @@ -158,7 +161,7 @@ cs.get.hwb = function (string) { return null; } - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hwb); if (match) { diff --git a/test/basic.js b/test/basic.js index 380c430..cfcb583 100644 --- a/test/basic.js +++ b/test/basic.js @@ -74,7 +74,10 @@ assert.deepEqual(string.get.rgb('rgba(200 +20 -233 / -0.0)'), [200, 20, 0, 0]); assert.deepEqual(string.get.rgb('rgba(200, +20, -233, -0.0)'), [200, 20, 0, 0]); assert.deepEqual(string.get.rgb('rgba(200 +20 -233 / -0.0)'), [200, 20, 0, 0]); assert.deepEqual(string.get.hsl('hsla(+200, 100%, 50%, -0.2)'), [200, 100, 50, 0]); +assert.deepEqual(string.get.hsl('hsla(+200, 100%, 50%, -1e-7)'), [200, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / -0.2)'), [200, 100, 50, 0]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / -1e-7)'), [200, 100, 50, 0]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / +1e7)'), [200, 100, 50, 1]); assert.deepEqual(string.get.hsl('hsla(-10.0, 100%, 50%, -0.2)'), [350, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(-10.0 100% 50% / -0.2)'), [350, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsla(.5, 100%, 50%, -0.2)'), [0.5, 100, 50, 0]); @@ -82,6 +85,8 @@ assert.deepEqual(string.get.hsl('hsl(.5 100% 50% / -0.2)'), [0.5, 100, 50, 0]); assert.deepEqual(string.get.hwb('hwb(+240, 100%, 50.5%)'), [240, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +0.6)'), [120, 100, 50.5, 0.6]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e-7)'), [120, 100, 50.5, 1e-7]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e7)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(10.0deg, 100%, 50.5%)'), [10, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-.5, 100%, 50.5%)'), [359.5, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-10.0deg, 100%, 50.5%, +0.6)'), [350, 100, 50.5, 0.6]); @@ -105,8 +110,11 @@ assert.deepEqual(string.get.rgb('rgba(100%, 30%, 90%, 0.2)'), [255, 77, 229, 0.2 assert.deepEqual(string.get.rgb('rgba(100% 30% 90% / 0.2)'), [255, 77, 229, 0.2]); assert.deepEqual(string.get.rgb('rgba(100% 30% 90% / 20%)'), [255, 77, 229, 0.2]); assert.deepEqual(string.get.hsl('hsla(200, 20%, 33%, 0.2)'), [200, 20, 33, 0.2]); +assert.deepEqual(string.get.hsl('hsla(200, 20%, 33%, 1e-7)'), [200, 20, 33, 1e-7]); assert.deepEqual(string.get.hsl('hsl(200 20% 33% / 0.2)'), [200, 20, 33, 0.2]); +assert.deepEqual(string.get.hsl('hsl(200 20% 33% / 1e-7)'), [200, 20, 33, 1e-7]); assert.deepEqual(string.get.hwb('hwb(200, 20%, 33%, 0.2)'), [200, 20, 33, 0.2]); +assert.deepEqual(string.get.hwb('hwb(200, 20%, 33%, 1e-7)'), [200, 20, 33, 1e-7]); // no alpha assert.deepEqual(string.get.rgb('#fef'), [255, 238, 255, 1]); From ade4b9c25dc5c788d7f43c336e95e7a1e1e1c66a Mon Sep 17 00:00:00 2001 From: onepiece_luck Date: Fri, 3 Dec 2021 22:24:11 +0800 Subject: [PATCH 2/8] delete comment --- index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/index.js b/index.js index 1033b13..c0ffab9 100644 --- a/index.js +++ b/index.js @@ -136,10 +136,6 @@ cs.get.hsl = function (string) { if (!string) { return null; } - /** - * scientific-notation regexp - * [+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)? - */ var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hsl); From 73469dcb59ce85fc60488bf6b4a844768e6e24c9 Mon Sep 17 00:00:00 2001 From: onepiece_luck Date: Fri, 3 Dec 2021 22:25:01 +0800 Subject: [PATCH 3/8] add invalid test inputs --- test/basic.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/basic.js b/test/basic.js index cfcb583..a7bd917 100644 --- a/test/basic.js +++ b/test/basic.js @@ -157,6 +157,11 @@ assert.strictEqual(string.get.rgb('#45ab45e'), null); assert.strictEqual(string.get.hsl('hsl(41, 50%, 45%)1234'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45%)1234'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 3)1234'), null); +assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 1e)'), null); +assert.strictEqual(string.get.hsl('hsl(41 50% 45% / e)'), null); +assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e-)'), null); +assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e+)'), null); +assert.strictEqual(string.get.hsl('hsl(41 50% 45% / +000e33)'), null); assert.strictEqual(string.get.hwb('hwb(240, 100%, 50.5%)1234'), null); // generators From 98ead8035ce3127a09f0fb8054883afb9526a3ce Mon Sep 17 00:00:00 2001 From: onepiece_luck Date: Fri, 3 Dec 2021 22:39:57 +0800 Subject: [PATCH 4/8] add valid exponential test input --- test/basic.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/basic.js b/test/basic.js index a7bd917..b762e6b 100644 --- a/test/basic.js +++ b/test/basic.js @@ -87,6 +87,9 @@ assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%)'), [120, 100, 50.5, 1 assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +0.6)'), [120, 100, 50.5, 0.6]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e-7)'), [120, 100, 50.5, 1e-7]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e7)'), [120, 100, 50.5, 1]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, 127.88e4)'), [120, 100, 50.5, 1]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, 0.2e3)'), [120, 100, 50.5, 1]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, .1e-4)'), [120, 100, 50.5, 1e-5]); assert.deepEqual(string.get.hwb('hwb(10.0deg, 100%, 50.5%)'), [10, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-.5, 100%, 50.5%)'), [359.5, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-10.0deg, 100%, 50.5%, +0.6)'), [350, 100, 50.5, 0.6]); From 3d257a0b7304aa7da396ec5eb83cafa9ffc9190d Mon Sep 17 00:00:00 2001 From: babycannotsay <335658202@qq.com> Date: Fri, 3 Dec 2021 23:16:26 +0800 Subject: [PATCH 5/8] add valid exponential test input --- test/basic.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/basic.js b/test/basic.js index b762e6b..9a57223 100644 --- a/test/basic.js +++ b/test/basic.js @@ -77,7 +77,11 @@ assert.deepEqual(string.get.hsl('hsla(+200, 100%, 50%, -0.2)'), [200, 100, 50, 0 assert.deepEqual(string.get.hsl('hsla(+200, 100%, 50%, -1e-7)'), [200, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / -0.2)'), [200, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / -1e-7)'), [200, 100, 50, 0]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / -2.e7)'), [200, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / +1e7)'), [200, 100, 50, 1]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / 127.88e4)'), [200, 100, 50, 1]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / 0.2e3)'), [200, 100, 50, 1]); +assert.deepEqual(string.get.hsl('hsl(+200 100% 50% / .1e-4)'), [200, 100, 50, 1e-5]); assert.deepEqual(string.get.hsl('hsla(-10.0, 100%, 50%, -0.2)'), [350, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsl(-10.0 100% 50% / -0.2)'), [350, 100, 50, 0]); assert.deepEqual(string.get.hsl('hsla(.5, 100%, 50%, -0.2)'), [0.5, 100, 50, 0]); @@ -86,6 +90,8 @@ assert.deepEqual(string.get.hwb('hwb(+240, 100%, 50.5%)'), [240, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +0.6)'), [120, 100, 50.5, 0.6]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e-7)'), [120, 100, 50.5, 1e-7]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, -2.e7)'), [120, 100, 50.5, 0]); +assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e7)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, +1e7)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, 127.88e4)'), [120, 100, 50.5, 1]); assert.deepEqual(string.get.hwb('hwb(-240deg, 100%, 50.5%, 0.2e3)'), [120, 100, 50.5, 1]); From 1939c052c3ed2426617a675f5db01d9ebf509973 Mon Sep 17 00:00:00 2001 From: babycannotsay <335658202@qq.com> Date: Fri, 3 Dec 2021 23:17:26 +0800 Subject: [PATCH 6/8] revert empty line --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index c0ffab9..fea47fa 100644 --- a/index.js +++ b/index.js @@ -136,6 +136,7 @@ cs.get.hsl = function (string) { if (!string) { return null; } + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hsl); From 8a2e02b9808bcc49c6049fb5cea8a3faae2c7e8c Mon Sep 17 00:00:00 2001 From: babycannotsay <335658202@qq.com> Date: Fri, 3 Dec 2021 23:23:33 +0800 Subject: [PATCH 7/8] add test input --- test/basic.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/basic.js b/test/basic.js index 9a57223..dd24c26 100644 --- a/test/basic.js +++ b/test/basic.js @@ -171,7 +171,11 @@ assert.strictEqual(string.get.hsl('hsl(41 50% 45% / e)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e-)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e+)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / +000e33)'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, 50.5%)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 1e)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, e)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e-)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e+)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, +000e33)1234'), null); // generators assert.equal(string.to.hex([255, 10, 35]), '#FF0A23'); From 31a22568d90b250aa31dfc4f7f09ecb7b54051df Mon Sep 17 00:00:00 2001 From: babycannotsay <335658202@qq.com> Date: Fri, 3 Dec 2021 23:25:59 +0800 Subject: [PATCH 8/8] fix test case --- test/basic.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/basic.js b/test/basic.js index dd24c26..37b730b 100644 --- a/test/basic.js +++ b/test/basic.js @@ -171,11 +171,11 @@ assert.strictEqual(string.get.hsl('hsl(41 50% 45% / e)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e-)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / 0e+)'), null); assert.strictEqual(string.get.hsl('hsl(41 50% 45% / +000e33)'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, 1e)1234'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, e)1234'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e-)1234'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e+)1234'), null); -assert.strictEqual(string.get.hwb('hwb(240, 100%, +000e33)1234'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 1e'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, e'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e-'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, 0e+'), null); +assert.strictEqual(string.get.hwb('hwb(240, 100%, +000e33'), null); // generators assert.equal(string.to.hex([255, 10, 35]), '#FF0A23');