Skip to content

Commit 8304da0

Browse files
committed
moved color-mix, checked that it's not use for CSS < 3
1 parent 431d6cf commit 8304da0

2 files changed

Lines changed: 64 additions & 40 deletions

File tree

org/w3c/css/values/CssColor.java

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.w3c.css.util.ApplContext;
1111
import org.w3c.css.util.CssVersion;
1212
import org.w3c.css.util.InvalidParamException;
13+
import org.w3c.css.values.color.ColorMix;
1314
import org.w3c.css.values.color.HSL;
1415
import org.w3c.css.values.color.HWB;
1516
import org.w3c.css.values.color.LAB;
@@ -18,7 +19,6 @@
1819
import org.w3c.css.values.color.OKLAB;
1920
import org.w3c.css.values.color.OKLCH;
2021

21-
import java.util.ArrayList;
2222
import java.util.Locale;
2323

2424
import static org.w3c.css.values.CssOperator.COMMA;
@@ -925,41 +925,7 @@ public void setDeviceCMYKColor(ApplContext ac, CssExpression exp)
925925

926926
public void setColorMix(ApplContext ac, CssExpression exp)
927927
throws InvalidParamException {
928-
ColorMix colorMix = new ColorMix();
929-
ArrayList<CssExpression> expressions = new ArrayList<>(3);
930-
CssValue val;
931-
char op;
932-
CssExpression e = new CssExpression();
933-
while (!exp.end()) {
934-
val = exp.getValue();
935-
op = exp.getOperator();
936-
e.addValue(val);
937-
if (op == COMMA) {
938-
expressions.add(e);
939-
e = new CssExpression();
940-
} else if (op != SPACE) {
941-
throw new InvalidParamException("operator",
942-
Character.toString(op), ac);
943-
}
944-
exp.next();
945-
}
946-
if (e.getCount() != 0) {
947-
expressions.add(e);
948-
}
949-
// now check if the first one is interpolation.
950-
if (expressions.isEmpty()) {
951-
throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "color-mix", ac);
952-
}
953-
954-
e = expressions.get(0);
955-
val = e.getValue();
956-
if (val.getType() == CssTypes.CSS_IDENT && ColorMix.in.equals(val.getIdent())) {
957-
colorMix.setColorInterpolationMethod(ac, e, this);
958-
expressions.remove(0);
959-
}
960-
for (CssExpression colorex : expressions) {
961-
colorMix.addColorPercentageValue(ac, colorex, this);
962-
}
928+
colormix = ColorMix.parseColorMix(ac, exp, this);
963929
}
964930

965931
}
Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,24 @@
44
// (c) COPYRIGHT MIT, ERCIM, Keio University, Beihang University 2018.
55
// Please first read the full copyright statement in file COPYRIGHT.html
66
//
7-
package org.w3c.css.values;
7+
package org.w3c.css.values.color;
88

9-
import org.w3c.css.properties.css3.CssColor;
109
import org.w3c.css.util.ApplContext;
10+
import org.w3c.css.util.CssVersion;
1111
import org.w3c.css.util.InvalidParamException;
12+
import org.w3c.css.values.CssColor;
13+
import org.w3c.css.values.CssExpression;
14+
import org.w3c.css.values.CssIdent;
15+
import org.w3c.css.values.CssOperator;
16+
import org.w3c.css.values.CssTypes;
17+
import org.w3c.css.values.CssValue;
18+
import org.w3c.css.values.CssValueList;
1219

1320
import java.util.ArrayList;
1421

22+
import static org.w3c.css.values.CssOperator.COMMA;
23+
import static org.w3c.css.values.CssOperator.SPACE;
24+
1525
public class ColorMix {
1626
public final static CssIdent in = CssIdent.getIdent("in");
1727
public final static CssIdent hue = CssIdent.getIdent("hue");
@@ -60,6 +70,54 @@ public static final CssIdent getAllowedValue(CssIdent ident, CssIdent[] allowedV
6070
public ColorMix() {
6171
}
6272

73+
public static ColorMix parseColorMix(ApplContext ac, CssExpression exp, CssColor caller)
74+
throws InvalidParamException {
75+
ColorMix colorMix = new ColorMix();
76+
ArrayList<CssExpression> expressions = new ArrayList<>(3);
77+
CssValue val;
78+
char op;
79+
80+
if (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0) {
81+
StringBuilder sb = new StringBuilder();
82+
sb.append("color-mix(").append(exp.toStringFromStart()).append(')');
83+
throw new InvalidParamException("notversion", sb.toString(),
84+
ac.getCssVersionString(), ac);
85+
}
86+
87+
CssExpression e = new CssExpression();
88+
while (!exp.end()) {
89+
val = exp.getValue();
90+
op = exp.getOperator();
91+
e.addValue(val);
92+
if (op == COMMA) {
93+
expressions.add(e);
94+
e = new CssExpression();
95+
} else if (op != SPACE) {
96+
throw new InvalidParamException("operator",
97+
Character.toString(op), ac);
98+
}
99+
exp.next();
100+
}
101+
if (e.getCount() != 0) {
102+
expressions.add(e);
103+
}
104+
// now check if the first one is interpolation.
105+
if (expressions.isEmpty()) {
106+
throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "color-mix", ac);
107+
}
108+
109+
e = expressions.get(0);
110+
val = e.getValue();
111+
if (val.getType() == CssTypes.CSS_IDENT && ColorMix.in.equals(val.getIdent())) {
112+
colorMix.setColorInterpolationMethod(ac, e, caller);
113+
expressions.remove(0);
114+
}
115+
for (CssExpression colorex : expressions) {
116+
colorMix.addColorPercentageValue(ac, colorex, caller);
117+
}
118+
return colorMix;
119+
}
120+
63121
public static CssValue parseColorInterpolationMethod(ApplContext ac, CssExpression exp, CssValue caller)
64122
throws InvalidParamException {
65123
ArrayList<CssValue> values;
@@ -176,7 +234,7 @@ static public CssValue parseColorPercentageValue(ApplContext ac, CssExpression e
176234
} else {
177235
CssExpression e = new CssExpression();
178236
e.addValue(val);
179-
css3Color = new CssColor(ac, e);
237+
css3Color = new org.w3c.css.properties.css3.CssColor(ac, e);
180238
values.add(css3Color.getColor());
181239
}
182240
exp.next();
@@ -198,7 +256,7 @@ static public CssValue parseColorPercentageValue(ApplContext ac, CssExpression e
198256
}
199257
CssExpression e = new CssExpression();
200258
e.addValue(val);
201-
css3Color = new CssColor(ac, e);
259+
css3Color = new org.w3c.css.properties.css3.CssColor(ac, e);
202260
values.add(css3Color.getColor());
203261
}
204262
exp.next();

0 commit comments

Comments
 (0)