This is an automated email from the ASF dual-hosted git repository.

benw pushed a commit to branch TAP5-2708
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit f3e110df8cb4908b9b40bb1322cc378848c4e70c
Author: Ben Weidig <b...@netzgut.net>
AuthorDate: Thu May 18 13:11:51 2023 +0200

    TAP5-2753: CssCompressor no longer breaks CSS variables in calc
---
 .../tapestry5/internal/webresources/CssCompressor.java  |  2 +-
 .../t5/webresources/tests/CssCompressorSpec.groovy      | 17 +++++++++++++++++
 .../test/resources/t5/webresources/css/tap5-2753.css    |  4 ++++
 .../resources/t5/webresources/css/tap5-2753.css.min     |  1 +
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java
 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java
index 31de21c38..77bf1ea2f 100644
--- 
a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java
+++ 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java
@@ -538,7 +538,7 @@ public class CssCompressor {
             String s = m.group();
             
             s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\+", " + ");
-            s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\-", " - ");
+            s = 
s.replaceAll("(?<=[-|%|px|em|rem|vw|\\)|\\d]+)(?<!var\\([a-z-0-9]+)\\-", " - ");
             s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\*", " * ");
             s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\/", " / ");
             
diff --git 
a/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy
 
b/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy
index 3612a621a..7a6428c0c 100644
--- 
a/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy
+++ 
b/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy
@@ -23,6 +23,23 @@ class CssCompressorSpec extends Specification {
         writer.toString() == '''@keyframes 
anim{0%{opacity:0}100%{opacity:1}}'''
     }
 
+    @Issue('TAP5-2753')
+    def "preserve space for calc operators"() {
+        given:
+        def is = 
CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/tap5-2753.css")
+        def reader = new InputStreamReader(is)
+        def compressor = new CssCompressor(reader)
+        def expected = 
CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/tap5-2753.css.min").text.strip()
+
+        def writer = new StringWriter()
+
+        when:
+        def result = compressor.compress(writer, -1)
+
+        then:
+        writer.toString() == expected
+    }
+
     def "yui compressor test '#rawFile'"() {
         given:
         def is = 
CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/yui/$rawFile")
diff --git 
a/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css 
b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css
new file mode 100644
index 000000000..7f28665b6
--- /dev/null
+++ b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css
@@ -0,0 +1,4 @@
+.some-class
+{
+padding-top: calc(10px + var(--default-page-header-height));
+}
\ No newline at end of file
diff --git 
a/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min
 
b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min
new file mode 100644
index 000000000..8245d9a37
--- /dev/null
+++ 
b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min
@@ -0,0 +1 @@
+.some-class{padding-top:calc(10px + var(--default-page-header-height))}
\ No newline at end of file

Reply via email to