Skip to content

Commit 445f7d9

Browse files
authored
Merge pull request #215 from w3c/color--value-fix
Color value fix
2 parents a59c0aa + 90e0999 commit 445f7d9

23 files changed

+785
-454
lines changed

org/w3c/css/parser/analyzer/CssParser.java

Lines changed: 72 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,69 @@
22
/* Generated By:JavaCC: Do not edit this line. CssParser.java */
33
package org.w3c.css.parser.analyzer;
44

5+
import java.io.InputStream;
6+
import java.io.InputStreamReader;
7+
import java.io.UnsupportedEncodingException;
8+
import java.util.ArrayList;
9+
import java.util.Iterator;
10+
import java.net.URL;
11+
import java.math.BigDecimal;
12+
13+
import org.w3c.css.values.CssValue;
14+
import org.w3c.css.values.CssOperator;
15+
import org.w3c.css.values.CssAngle;
16+
import org.w3c.css.values.CssCheckableValue;
17+
import org.w3c.css.values.CssExpression;
18+
import org.w3c.css.values.CssString;
19+
import org.w3c.css.values.CssURL;
20+
import org.w3c.css.values.CssLength;
21+
import org.w3c.css.values.CssNumber;
22+
import org.w3c.css.values.CssAttr;
23+
import org.w3c.css.values.CssBracket;
24+
import org.w3c.css.values.CssCalc;
25+
import org.w3c.css.values.CssColor;
26+
import org.w3c.css.values.CssFlexibleLength;
27+
import org.w3c.css.values.CssFrequency;
28+
import org.w3c.css.values.CssHashIdent;
29+
import org.w3c.css.values.CssIdent;
30+
import org.w3c.css.values.CssImage;
31+
import org.w3c.css.values.CssPercentage;
32+
import org.w3c.css.values.CssTime;
33+
import org.w3c.css.values.CssSwitch;
34+
import org.w3c.css.values.CssFunction;
35+
import org.w3c.css.values.CssUnicodeRange;
36+
import org.w3c.css.values.CssResolution;
37+
import org.w3c.css.values.CssRatio;
38+
import org.w3c.css.values.CssSemitone;
39+
import org.w3c.css.values.CssTypes;
40+
import org.w3c.css.values.CssVolume;
41+
import org.w3c.css.properties.css.CssProperty;
42+
import org.w3c.css.parser.Frame;
43+
import org.w3c.css.parser.CssError;
44+
import org.w3c.css.parser.CssErrorToken;
45+
import org.w3c.css.parser.CssSelectors;
46+
import org.w3c.css.parser.CssParseException;
47+
import org.w3c.css.parser.AtRule;
48+
import org.w3c.css.atrules.svg.AtRuleColorProfile;
549
import org.w3c.css.atrules.css.AtRuleCounterStyle;
650
import org.w3c.css.atrules.css.AtRuleFontFace;
751
import org.w3c.css.atrules.css.AtRuleKeyframes;
852
import org.w3c.css.atrules.css.AtRuleMedia;
53+
import org.w3c.css.atrules.css.media.MediaFeature;
954
import org.w3c.css.atrules.css.AtRulePage;
1055
import org.w3c.css.atrules.css.AtRulePhoneticAlphabet;
1156
import org.w3c.css.atrules.css.AtRulePreference;
1257
import org.w3c.css.atrules.css.AtRuleSupports;
13-
import org.w3c.css.atrules.css.AtRuleViewport;
14-
import org.w3c.css.atrules.css.media.MediaFeature;
1558
import org.w3c.css.atrules.css.supports.SupportsFeature;
16-
import org.w3c.css.atrules.svg.AtRuleColorProfile;
17-
import org.w3c.css.parser.AtRule;
18-
import org.w3c.css.parser.CssError;
19-
import org.w3c.css.parser.CssErrorToken;
20-
import org.w3c.css.parser.CssParseException;
21-
import org.w3c.css.parser.CssSelectors;
22-
import org.w3c.css.properties.css.CssProperty;
59+
import org.w3c.css.atrules.css.AtRuleViewport;
60+
import org.w3c.css.util.ApplContext;
61+
import org.w3c.css.util.CssProfile;
62+
import org.w3c.css.util.CssVersion;
63+
import org.w3c.css.util.InvalidParamException;
64+
import org.w3c.css.util.WarningParamException;
65+
import org.w3c.css.util.Util;
66+
import org.w3c.css.util.Messages;
67+
2368
import org.w3c.css.selectors.AdjacentSiblingSelector;
2469
import org.w3c.css.selectors.AttributeSelector;
2570
import org.w3c.css.selectors.ChildSelector;
@@ -36,46 +81,6 @@
3681
import org.w3c.css.selectors.attributes.AttributeStart;
3782
import org.w3c.css.selectors.attributes.AttributeSubstr;
3883
import org.w3c.css.selectors.attributes.AttributeSuffix;
39-
import org.w3c.css.util.ApplContext;
40-
import org.w3c.css.util.CssProfile;
41-
import org.w3c.css.util.CssVersion;
42-
import org.w3c.css.util.InvalidParamException;
43-
import org.w3c.css.util.Util;
44-
import org.w3c.css.util.WarningParamException;
45-
import org.w3c.css.values.CssAngle;
46-
import org.w3c.css.values.CssAttr;
47-
import org.w3c.css.values.CssBracket;
48-
import org.w3c.css.values.CssCalc;
49-
import org.w3c.css.values.CssCheckableValue;
50-
import org.w3c.css.values.CssColor;
51-
import org.w3c.css.values.CssExpression;
52-
import org.w3c.css.values.CssFlexibleLength;
53-
import org.w3c.css.values.CssFrequency;
54-
import org.w3c.css.values.CssFunction;
55-
import org.w3c.css.values.CssHashIdent;
56-
import org.w3c.css.values.CssIdent;
57-
import org.w3c.css.values.CssImage;
58-
import org.w3c.css.values.CssLength;
59-
import org.w3c.css.values.CssNumber;
60-
import org.w3c.css.values.CssOperator;
61-
import org.w3c.css.values.CssPercentage;
62-
import org.w3c.css.values.CssRatio;
63-
import org.w3c.css.values.CssResolution;
64-
import org.w3c.css.values.CssSemitone;
65-
import org.w3c.css.values.CssString;
66-
import org.w3c.css.values.CssSwitch;
67-
import org.w3c.css.values.CssTime;
68-
import org.w3c.css.values.CssTypes;
69-
import org.w3c.css.values.CssURL;
70-
import org.w3c.css.values.CssUnicodeRange;
71-
import org.w3c.css.values.CssValue;
72-
import org.w3c.css.values.CssVolume;
73-
74-
import java.io.InputStream;
75-
import java.io.InputStreamReader;
76-
import java.io.UnsupportedEncodingException;
77-
import java.net.URL;
78-
import java.util.ArrayList;
7984

8085
/**
8186
* A CSS parser
@@ -6103,6 +6108,9 @@ final public boolean prio() throws ParseException {
61036108
} else if (funcname.equals("hsla(")) {
61046109
color.setHSLAColor(exp, ac);
61056110
{if ("" != null) return color;}
6111+
} else if (funcname.equals("hwb(")) {
6112+
color.setHWBColor(exp, ac);
6113+
{if ("" != null) return color;}
61066114
} else if (funcname.equals("image(")) {
61076115
CssImage img = new CssImage();
61086116
img.setImageList(exp, ac);
@@ -7063,6 +7071,17 @@ private boolean jj_3R_190()
70637071
return false;
70647072
}
70657073

7074+
private boolean jj_3R_214()
7075+
{
7076+
Token xsp;
7077+
xsp = jj_scanpos;
7078+
if (jj_scan_token(39)) {
7079+
jj_scanpos = xsp;
7080+
if (jj_scan_token(40)) return true;
7081+
}
7082+
return false;
7083+
}
7084+
70667085
private boolean jj_3R_189()
70677086
{
70687087
if (jj_scan_token(ABSOLUTLENGTH)) return true;
@@ -7081,17 +7100,6 @@ private boolean jj_3R_187()
70817100
return false;
70827101
}
70837102

7084-
private boolean jj_3R_214()
7085-
{
7086-
Token xsp;
7087-
xsp = jj_scanpos;
7088-
if (jj_scan_token(39)) {
7089-
jj_scanpos = xsp;
7090-
if (jj_scan_token(40)) return true;
7091-
}
7092-
return false;
7093-
}
7094-
70957103
private boolean jj_3R_186()
70967104
{
70977105
if (jj_scan_token(PERCENTAGE)) return true;
@@ -7186,15 +7194,15 @@ private boolean jj_3R_169()
71867194
return false;
71877195
}
71887196

7189-
private boolean jj_3_1()
7197+
private boolean jj_3R_217()
71907198
{
7191-
if (jj_3R_147()) return true;
7199+
if (jj_scan_token(IDENT)) return true;
71927200
return false;
71937201
}
71947202

7195-
private boolean jj_3R_217()
7203+
private boolean jj_3_1()
71967204
{
7197-
if (jj_scan_token(IDENT)) return true;
7205+
if (jj_3R_147()) return true;
71987206
return false;
71997207
}
72007208

org/w3c/css/parser/analyzer/CssParser.jj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3048,6 +3048,9 @@ CssValue function() :
30483048
} else if (funcname.equals("hsla(")) {
30493049
color.setHSLAColor(exp, ac);
30503050
return color;
3051+
} else if (funcname.equals("hwb(")) {
3052+
color.setHWBColor(exp, ac);
3053+
return color;
30513054
} else if (funcname.equals("image(")) {
30523055
CssImage img = new CssImage();
30533056
img.setImageList(exp, ac);

org/w3c/css/util/Messages.properties.en

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ error.degree: Position must be described in terms of degrees.
257257
error.elevation.range: Specifies the elevation as an angle, between \u201C-90deg\u201D and \u201C90deg'.
258258

259259
# used by org.w3c.css.aural.ACssPitchRange
260-
error.range: The value is out of range.This value must be between \u201C0\u201D and \u201C100'.
260+
error.range: The value is out of range.This value must be between \u201C0\u201D and \u201C100\u201D'.
261261

262262
# used by org.w3c.css.properties.CssTextShadow
263263
error.two-lengths: A shadow offset is specified with two <length> values (A blur radius may optionally be specified after the shadow offset.)

org/w3c/css/values/CssAngle.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public final int getType() {
3737
return type;
3838
}
3939

40-
private static final BigDecimal deg360;
40+
protected static final BigDecimal deg360;
4141

4242
static {
4343
deg360 = BigDecimal.valueOf(360);
@@ -165,12 +165,21 @@ public boolean equals(Object value) {
165165
unit.equals(((CssAngle) value).unit));
166166
}
167167

168-
private BigDecimal normalize(BigDecimal degree) {
168+
private BigDecimal normalize(BigDecimal value) {
169+
BigDecimal degree = value.multiply(factor);
170+
if ((degree.compareTo(BigDecimal.ZERO) >= 0) && (degree.compareTo(deg360) <= 0)) {
171+
// no need to normalize
172+
return value;
173+
}
169174
degree = degree.remainder(deg360);
170175
if (degree.compareTo(BigDecimal.ZERO) < 0) {
171176
degree.add(deg360);
172177
}
173-
return degree;
178+
return degree.divide(factor, 9, BigDecimal.ROUND_HALF_DOWN).stripTrailingZeros();
179+
}
180+
181+
public void normalizeValue() {
182+
value = normalize(value);
174183
}
175184

176185
public CssAngle getAngle() {
@@ -180,7 +189,7 @@ public CssAngle getAngle() {
180189
//@@FIXME I should return the remainder for all ...
181190

182191
public float getDegree() {
183-
return normalize(value.multiply(factor)).floatValue();
192+
return normalize(value).multiply(factor).floatValue();
184193
}
185194

186195
/**
@@ -189,7 +198,7 @@ public float getDegree() {
189198
* @return a boolean
190199
*/
191200
public boolean isPositive() {
192-
return (normalize(value).signum() >= 0);
201+
return (value.signum() >= 0);
193202
}
194203

195204
/**
@@ -198,7 +207,7 @@ public boolean isPositive() {
198207
* @return a boolean
199208
*/
200209
public boolean isStrictlyPositive() {
201-
return (normalize(value).signum() == 1);
210+
return (value.signum() == 1);
202211
}
203212

204213
/**
@@ -229,8 +238,8 @@ public void checkEqualsZero(ApplContext ac, String callername)
229238
* @param ac the validation context
230239
* @param callername the String value of the object it is defined in
231240
*/
232-
public void warnEqualsZero(ApplContext ac, String callername) {
233-
warnEqualsZero(ac, new String[]{"angle", callername});
241+
public boolean warnEqualsZero(ApplContext ac, String callername) {
242+
return warnEqualsZero(ac, new String[]{"angle", callername});
234243
}
235244

236245
}

org/w3c/css/values/CssAttr.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,13 @@ public void checkInteger(ApplContext ac, String callername)
307307
* @param ac the validation context
308308
* @param property the property the value is defined in
309309
*/
310-
public void warnPositiveness(ApplContext ac, CssProperty property) {
310+
public boolean warnPositiveness(ApplContext ac, CssProperty property) {
311311
// TODO do our best...
312312
if (false/*!isPositive()*/) {
313313
ac.getFrame().addWarning("negative", toString());
314+
return false;
314315
}
316+
return true;
315317
}
316318

317319
public CssLength getLength() throws InvalidParamException {
@@ -377,10 +379,12 @@ public void checkEqualsZero(ApplContext ac, String callername)
377379
* @param ac the validation context
378380
* @param callername the property the value is defined in
379381
*/
380-
public void warnEqualsZero(ApplContext ac, String callername) {
382+
public boolean warnEqualsZero(ApplContext ac, String callername) {
381383
// TODO should we do that only for CSS_NUMBER type?
382384
if (!isZero()) {
383385
ac.getFrame().addWarning("dynamic", new String[]{toString(), callername});
386+
return false;
384387
}
388+
return true;
385389
}
386390
}

org/w3c/css/values/CssCalc.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,13 @@ public void checkInteger(ApplContext ac, String callername)
356356
* @param ac the validation context
357357
* @param callername the property the value is defined in
358358
*/
359-
public void warnPositiveness(ApplContext ac, String callername) {
359+
public boolean warnPositiveness(ApplContext ac, String callername) {
360360
// TODO do our best...
361361
if (false/*!isPositive()*/) {
362362
ac.getFrame().addWarning("negative", toString());
363+
return false;
363364
}
365+
return true;
364366
}
365367

366368
public CssLength getLength() throws InvalidParamException {
@@ -455,10 +457,12 @@ public void checkEqualsZero(ApplContext ac, String callername)
455457
* @param ac the validation context
456458
* @param callername the property the value is defined in
457459
*/
458-
public void warnEqualsZero(ApplContext ac, String callername) {
460+
public boolean warnEqualsZero(ApplContext ac, String callername) {
459461
// TODO should we do that only for CSS_NUMBER type?
460462
if (!isZero()) {
461463
ac.getFrame().addWarning("dynamic", toString());
464+
return false;
462465
}
466+
return true;
463467
}
464468
}

0 commit comments

Comments
 (0)