From 60155ffadae3953bbd417f69c9d8cb3d4744b84a Mon Sep 17 00:00:00 2001 From: Lionel Date: Tue, 24 Feb 2015 17:16:23 +0100 Subject: [PATCH] Preserve spaces in calc expressions --- cssmin.js | 8 ++++++++ tests/files/preserve-space-calc.css | 6 ++++++ tests/files/preserve-space-calc.css.min | 1 + 3 files changed, 15 insertions(+) create mode 100644 tests/files/preserve-space-calc.css create mode 100644 tests/files/preserve-space-calc.css.min diff --git a/cssmin.js b/cssmin.js index 4aec1bf..fe04ab0 100755 --- a/cssmin.js +++ b/cssmin.js @@ -236,6 +236,11 @@ function cssmin(css, linebreakpos) { return m.replace(/\:/g, "___YUICSSMIN_PSEUDOCLASSCOLON___"); }); + // Preserve spaces in calc expressions + css = css.replace(/calc\s*\(\s*(.*?)\s*\)/g, function (m, c) { + return m.replace(c, c.replace(/\s+/g, "___YUICSSMIN_SPACE_IN_CALC___")); + }); + css = css.replace(/\s+([!{};:>+\(\)\],])/g, '$1'); css = css.replace(/___YUICSSMIN_PSEUDOCLASSCOLON___/g, ":"); @@ -258,6 +263,9 @@ function cssmin(css, linebreakpos) { // Remove the spaces after the things that should not have spaces after them. css = css.replace(/([!{}:;>+\(\[,])\s+/g, '$1'); + // Restore preserved spaces in calc expressions + css = css.replace(/___YUICSSMIN_SPACE_IN_CALC___/g, " "); + // remove unnecessary semicolons css = css.replace(/;+\}/g, "}"); diff --git a/tests/files/preserve-space-calc.css b/tests/files/preserve-space-calc.css new file mode 100644 index 0000000..d84c077 --- /dev/null +++ b/tests/files/preserve-space-calc.css @@ -0,0 +1,6 @@ +.preserved { + width : calc ( 100% - 30px); + height: calc (80px + 10px + 10% ); + top: calc(3px - 3px); + left: calc( 40% - 10% + 30% + 10px ) ; +} diff --git a/tests/files/preserve-space-calc.css.min b/tests/files/preserve-space-calc.css.min new file mode 100644 index 0000000..3ce04a5 --- /dev/null +++ b/tests/files/preserve-space-calc.css.min @@ -0,0 +1 @@ +.preserved{width:calc(100% - 30px);height:calc(80px + 10px + 10%);top:calc(3px - 3px);left:calc(40% - 10% + 30% + 10px)}