You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2024/04/24 22:12:27 UTC
(royale-compiler) 04/06: CSS.g: add support for modern rgb()/rgba() function syntax that has whitespace instead of commas between values, and forward slash / before alpha
This is an automated email from the ASF dual-hosted git repository.
joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit 98be294b365f6db09bc0caec30c0674181b83cd9
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Wed Apr 24 14:46:23 2024 -0700
CSS.g: add support for modern rgb()/rgba() function syntax that has whitespace instead of commas between values, and forward slash / before alpha
Now supports both new and legacy syntax
rgb(100%, 100%, 100%) /* legacy rgb() */
rgb(100% 100% 100%) /* new rgb() */
rgba(100%, 100%, 100%, 100%) /* legacy rgba() */
rgba(100% 100% 100% / 100%) /* new rgba() */
---
.../org/apache/royale/compiler/internal/css/CSS.g | 6 +++---
.../compiler/internal/css/CSSRgbColorPropertyValue.java | 4 ++--
.../internal/css/CSSRgbaColorPropertyValue.java | 17 +++++++++--------
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/compiler/src/main/antlr3/org/apache/royale/compiler/internal/css/CSS.g b/compiler/src/main/antlr3/org/apache/royale/compiler/internal/css/CSS.g
index 4e872d06d..dc960f7c6 100644
--- a/compiler/src/main/antlr3/org/apache/royale/compiler/internal/css/CSS.g
+++ b/compiler/src/main/antlr3/org/apache/royale/compiler/internal/css/CSS.g
@@ -673,7 +673,7 @@ MATRIX3D_VALUE : 'matrix3d(' ( WS* NUMBER WS* ) ','
;
/**
- * Matches an rgba definition - rgba(100%,100%,100%,100%)
+ * Matches an rgba definition - rgba(100%,100%,100%,100%) or rgba(100% 100% 100% / 100%)
*/
RGBA : 'rgba(' ( WS* NUMBER ( PERCENT | ) WS* ) ','
( WS* NUMBER ( PERCENT | ) WS* ) ','
@@ -682,13 +682,13 @@ RGBA : 'rgba(' ( WS* NUMBER ( PERCENT | ) WS* ) ','
')'
| 'rgba(' ( WS* NUMBER ( PERCENT | ) WS* )
( WS* NUMBER ( PERCENT | ) WS* )
- ( WS* NUMBER ( PERCENT | ) WS* )
+ ( WS* NUMBER ( PERCENT | ) WS* ) '/'
( WS* NUMBER ( PERCENT | ) WS* )
')'
;
/**
- * Matches a rgb definition - rgb(100%,100%,100%)
+ * Matches a rgb definition - rgb(100%,100%,100%) or rgb(100% 100% 100%)
*/
RGB : 'rgb(' ( WS* NUMBER ( PERCENT | ) WS* ) ','
( WS* NUMBER ( PERCENT | ) WS* ) ','
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbColorPropertyValue.java b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbColorPropertyValue.java
index bdcf1b4d3..9a2d3721f 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbColorPropertyValue.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbColorPropertyValue.java
@@ -58,7 +58,7 @@ public class CSSRgbColorPropertyValue extends CSSPropertyValue
* @return int value bit color.
*/
protected static int getIntValue(String rgb)
- {
+ {
rgb = rgb.substring(4, rgb.length() - 1);
StringBuffer sb = new StringBuffer();
@@ -71,7 +71,7 @@ public class CSSRgbColorPropertyValue extends CSSPropertyValue
}
else
{
- // separated by whitespace is allowed instead of commas
+ // separated by whitespace is considered modern
String[] elements = rgb.split("\\s+");
iterator = Arrays.<Object>stream(elements).iterator();
}
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbaColorPropertyValue.java b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbaColorPropertyValue.java
index aa2034c7f..2b4f969f7 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbaColorPropertyValue.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSRgbaColorPropertyValue.java
@@ -54,11 +54,11 @@ public class CSSRgbaColorPropertyValue extends CSSPropertyValue
/**
* Computes from the given rgb definition a int value.
*
- * @param rgb definition - rgba(100, 0, 0)
+ * @param rgba definition - rgba(100, 0, 0)
* @return int value bit color.
*/
protected static long getIntValue(String rgb)
- {
+ {
rgb = rgb.substring(5, rgb.length() - 1);
StringBuffer sb = new StringBuffer();
@@ -71,10 +71,11 @@ public class CSSRgbaColorPropertyValue extends CSSPropertyValue
}
else
{
- // separated by whitespace is allowed instead of commas
- String[] elements = rgb.split("\\s+");
+ // separated by whitespace (with / before alpha) is considered modern
+ String[] elements = rgb.split("(\\s*\\/\\s*)|(\\s+)");
iterator = Arrays.<Object>stream(elements).iterator();
}
+ int tokenIndex = 0;
while (iterator.hasNext())
{
int digit;
@@ -89,22 +90,22 @@ public class CSSRgbaColorPropertyValue extends CSSPropertyValue
}
else
{
- if (iterator.hasNext())
+ if (tokenIndex < 3)
{
digit = Float.valueOf(t).intValue();
sb.append(Character.forDigit((digit >> 4) & 15, 16));
sb.append(Character.forDigit(digit & 15, 16));
}
- else
+ else // alpha
{
- // alpha
Float alpha = Float.valueOf(t);
alpha *= 255;
digit = alpha.intValue();
sb.insert(0, Character.forDigit((digit >> 4) & 15, 16));
sb.insert(1, Character.forDigit(digit & 15, 16));
}
- }
+ }
+ tokenIndex++;
}
return Long.parseLong( sb.substring(0, 8), 16 );
}