scientificware / jdk

Read-only mirror of https://hg.openjdk.java.net/jdk/jdk
GNU General Public License v2.0
0 stars 0 forks source link

JDK-8294090 : Aligns the CSS `<rgb()>` and `<rgba()>` function behaviours #16

Open scientificware opened 1 year ago

scientificware commented 1 year ago

The purpose of this issue is to align the <rgb()> and <rgba()> function behaviours in CSS.java.

This is referenced in Java Bug Database as

This is tracked in JBS as

Related Pull Request

Aligns the <rgb()> and <rgba()> function behaviours in CSS.java, as described in : CSS Color Module Level 4 W3C Candidate Recommendation Snapshot, 5 July 2022 4.1 The <Color> syntax 6.1. The RGB functions: rgb() and rgba()

Status

Basic test

Consequences

Syntax

rgb()
rgb( [<percentage> \| none]{3} [ / [<alpha-value> \| none] ]? )
rgb( [<number> \| none]{3} [ / [<alpha-value> \| none] ]? )
rgb( <percentage>#{3} , <alpha-value>? )
rgb( <number>#{3} , <alpha-value>? )
number:= [+\|-]? [0...9]* [[. [0...9]*]]? [[e\|E]! [0...9]*]?

Some tests

Value Ret. Val. Before PR Ret. Val. after PR
null null :green_circle:
# null null :green_circle:
#f java.awt.Color[r=0,g=0,b=15] + a=255 null :white_circle:
#f0 java.awt.Color[r=0,g=0,b=240] + a=255 null :white_circle:
#f0f java.awt.Color[r=255,g=0,b=255] + a=255 java.awt.Color[r=255,g=0,b=255] + a=255 :green_circle:
#f0f1 java.awt.Color[r=0,g=240,b=241] + a=255 java.awt.Color[r=255,g=0,b=255] + a=17 :white_circle:
#f0f10 java.awt.Color[r=15,g=15,b=16] + a=255 null :white_circle:
#f0f109 java.awt.Color[r=240,g=241,b=9] + a=255 java.awt.Color[r=240,g=241,b=9] + a=255 :green_circle:
#f0f1092 java.awt.Color[r=240,g=241,b=9] + a=255 null :white_circle:
#f0f10928 java.awt.Color[r=240,g=241,b=9] + a=255 java.awt.Color[r=240,g=241,b=153] + a=40 :white_circle:
f0f10928 null java.awt.Color[r=240,g=241,b=9] + a=40 :white_circle:
#f0f109289 java.awt.Color[r=240,g=241,b=9] + a=255 null :white_circle:
f0f109289 null null :green_circle:
ppabcdef null null :green_circle:
b52k null null :green_circle:
#ppabcdef null null :green_circle:
#b52k null null :green_circle:
#ffffffff java.awt.Color[r=255,g=255,b=255] + a=255 java.awt.Color[r=255,g=255,b=255] + a=255 :green_circle:
ffffffff null java.awt.Color[r=255,g=255,b=255] + a=255 :white_circle:
#ffffff java.awt.Color[r=255,g=255,b=255] + a=255 java.awt.Color[r=255,g=255,b=255] + a=255 :green_circle:
ffffff java.awt.Color[r=255,g=255,b=255] + a=255 java.awt.Color[r=255,g=255,b=255] + a=255 :green_circle:
Value stringToColr Ret. Val. Expected Val.
rgb(12 24 200) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(-1 24 200%) java.awt.Color[r=0,g=24,b=255] + a=255 rgba(0 24 255 1.0) :green_circle: rgba(0 24 255 1.0)
rgb(300 24 28) java.awt.Color[r=255,g=24,b=28] + a=255 rgba(255 24 28 1.0) :green_circle: rgba(255 24 28 1.0)
rgb(12 24 200 / 82%) java.awt.Color[r=12,g=24,b=200] + a=209 rgba(12 24 200 0.82) :green_circle: rgba(12 24 200 0.82)
rgb(12 24 200 / 0.82) java.awt.Color[r=12,g=24,b=200] + a=209 rgba(12 24 200 0.82) :green_circle: rgba(12 24 200 0.82)
rgb(12 24 200 / -210) java.awt.Color[r=12,g=24,b=200] + a=0 rgba(12 24 200 0.0) :green_circle: rgba(12 24 200 0.0)
rgb(12, 24, 200) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(12, 24, 200, 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(12, 24, 200 , 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(12 , 24 , 200 , 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb( 12 , 24 , 200 , 210 ) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(12 ,24, 200 ,210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(12,24,200,210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(15% 60% 49%) java.awt.Color[r=38,g=153,b=125] + a=255 rgba(38 153 125 1.0) :green_circle: rgba(38 153 125 1.0)
rgb(15% 60% 49% / 82%) java.awt.Color[r=38,g=153,b=125] + a=209 rgba(38 153 125 0.82) :green_circle: rgba(38 153 125 0.82)
rgb(15%, 60%, 49% / 82%) java.awt.Color[r=38,g=153,b=125] + a=209 rgba(38 153 125 0.82) :green_circle: rgba(38 153 125 0.82)
rgb(0.14 60% 52.3 / 0.98) java.awt.Color[r=0,g=153,b=52] + a=250 rgba(0 153 52 0.98) :green_circle: rgba(0 153 52 0.98)
rgb(none none none) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0)
rgb(none none none / none) java.awt.Color[r=0,g=0,b=0] + a=0 rgba(0 0 0 0.0) :green_circle: rgba(0 0 0 0.0)
rgb(none none none / none) java.awt.Color[r=0,g=0,b=0] + a=0 rgba(0 0 0 0.0) :green_circle: rgba(0 0 0 0.0)
rgb(none none 30) java.awt.Color[r=0,g=0,b=30] + a=255 rgba(0 0 30 1.0) :green_circle: rgba(0 0 30 1.0)
rgb(none 20 none) java.awt.Color[r=0,g=20,b=0] + a=255 rgba(0 20 0 1.0) :green_circle: rgba(0 20 0 1.0)
rgb(10 none none) java.awt.Color[r=10,g=0,b=0] + a=255 rgba(10 0 0 1.0) :green_circle: rgba(10 0 0 1.0)
rgb(none none none) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0)
rgb(10 50 13% / 50%) java.awt.Color[r=10,g=50,b=33] + a=128 rgba(10 50 33 0.5) :green_circle: rgba(10 50 33 0.5)
rgb(10 50 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0)
rgb(10 50,, 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0)
rgb(10 50 ,, 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0)
rgb(1.2e1 0.24e2 2e2) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
rgb(1200e-2 2400e-2 200000e-3) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0)
Value stringToColr Ret. Val. Exp. Val. (R, G, B) comp. Valid Exp. Val. (R, G, B) comp. Valid
rgb(12 24 200) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12 24 200%) java.awt.Color[r=12,g=24,b=255] + a=255 rgba(12 24 255 1.0) :green_circle: rgba(12 24 255 1.0) :green_circle:
rgb(-1 24 200%) java.awt.Color[r=0,g=24,b=255] + a=255 rgba(0 24 255 1.0) :green_circle: rgba(0 24 255 1.0) :green_circle:
rgb(300 24 28) java.awt.Color[r=255,g=24,b=28] + a=255 rgba(255 24 28 1.0) :green_circle: rgba(255 24 28 1.0) :green_circle:
rgb(12 24 200 / 82%) java.awt.Color[r=12,g=24,b=200] + a=209 rgba(12 24 200 0.82) :green_circle: rgba(12 24 200 0.82) :green_circle:
rgb(12 24 200 / 0.82) java.awt.Color[r=12,g=24,b=200] + a=209 rgba(12 24 200 0.82) :green_circle: rgba(12 24 200 0.82) :green_circle:
rgb(12 24 200 / -210) java.awt.Color[r=12,g=24,b=200] + a=0 rgba(12 24 200 0.0) :green_circle: rgba(12 24 200 0.0) :green_circle:
rgb(12, 24, 200) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12, 24, 200, 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12, 24, 200 , 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12 , 24 , 200 , 210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb( 12 , 24 , 200 , 210 ) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12 ,24, 200 ,210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(12,24,200,210) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(15% 60% 49%) java.awt.Color[r=38,g=153,b=125] + a=255 rgba(38 153 125 1.0) :green_circle: rgba(38 153 125 1.0) :green_circle:
rgb(15% 60% 49% / 82%) java.awt.Color[r=38,g=153,b=125] + a=209 rgba(38 153 125 0.82) :green_circle: rgba(38 153 125 0.82) :green_circle:
rgb(15%, 60%, 49% / 82%) java.awt.Color[r=38,g=153,b=125] + a=209 rgba(38 153 125 0.82) :green_circle: rgba(38 153 125 0.82) :green_circle:
rgb(0.14 60% 52.3 / 0.98) java.awt.Color[r=0,g=153,b=52] + a=250 rgba(0 153 52 0.98) :green_circle: rgba(0 153 52 0.98) :green_circle:
rgb(none none none) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0) :green_circle:
rgb(none none none / none) java.awt.Color[r=0,g=0,b=0] + a=0 rgba(0 0 0 0.0) :green_circle: rgba(0 0 0 0.0) :green_circle:
rgb(none none none/none) java.awt.Color[r=0,g=0,b=0] + a=0 rgba(0 0 0 0.0) :green_circle: rgba(0 0 0 0.0) :green_circle:
rgb(none none 30) java.awt.Color[r=0,g=0,b=30] + a=255 rgba(0 0 30 1.0) :green_circle: rgba(0 0 30 1.0) :green_circle:
rgb(none 20 none) java.awt.Color[r=0,g=20,b=0] + a=255 rgba(0 20 0 1.0) :green_circle: rgba(0 20 0 1.0) :green_circle:
rgb(10 none none) java.awt.Color[r=10,g=0,b=0] + a=255 rgba(10 0 0 1.0) :green_circle: rgba(10 0 0 1.0) :green_circle:
rgb(none none none) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0) :green_circle:
rgb(10 50 13% / 50%) java.awt.Color[r=10,g=50,b=33] + a=128 rgba(10 50 33 0.5) :green_circle: rgba(10 50 33 0.5) :green_circle:
rgb(10 50 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0) :green_circle:
rgb(10 50,, 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0) :green_circle:
rgb(10 50 ,, 13% // 50%) java.awt.Color[r=0,g=0,b=0] + a=255 rgba(0 0 0 1.0) :green_circle: rgba(0 0 0 1.0) :green_circle:
rgb(1.2e1 0.24e2 2e2) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(1200e-2 2400e-2 200000e-3) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:
rgb(120560.64646464632469823160676064670646798706406464098706464097970906464067e-4 2400e-2 200000e-3) java.awt.Color[r=12,g=24,b=200] + a=255 rgba(12 24 200 1.0) :green_circle: rgba(12 24 200 1.0) :green_circle:

About performances

Run Nb Tests Befor PR (ms) First Ext Impl. (ms) V1 Ext Impl. (ms) V1 Ext Impl. optimised (ms) V3 Ext Impl. (ms)
<rgb> alpha support :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
<rgb> none support :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Number Gen Ext Impl. :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
<rgb> base-ten floating-point notation support :heavy_check_mark:
1 1 650 000 249 342 222 157 166
2 1 650 000 243 342 221 162
3 1 650 000 239 340 222 167
4 1 650 000 258 340 223 166
5 1 650 000 243 339 217 165

:heavy_check_mark:

scientificware commented 1 year ago

https://github.com/openjdk/jdk/blob/8816b1c36d42f4acdee56d21df1573f9a20ce21f/src/java.desktop/share/classes/javax/swing/text/html/CSS.java#L1657

Don't detect E symbol.