Skip to content

Commit c131cf1

Browse files
committed
1 parent 8b22b16 commit c131cf1

File tree

4 files changed

+237
-6
lines changed

4 files changed

+237
-6
lines changed

org/w3c/css/properties/CSS3Properties.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ lighting-color: org.w3c.css.properties.css3.CssLightingC
543543
@font-face.line-gap-override: org.w3c.css.properties.css3.fontface.CssLineGapOverride
544544
@font-face.size-adjust: org.w3c.css.properties.css3.fontface.CssSizeAdjust
545545
@font-face.src: org.w3c.css.properties.css3.fontface.CssSrc
546+
@font-face.subscript-position-override org.w3c.css.properties.css3.fontface.CssSubscriptPositionOverride
546547
@font-face.superscript-position-override org.w3c.css.properties.css3.fontface.CssSuperscriptPositionOverride
547548
@font-face.unicode-range: org.w3c.css.properties.css3.fontface.CssUnicodeRange
548549

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
//
2+
// Author: Yves Lafon <ylafon@w3.org>
3+
//
4+
// (c) COPYRIGHT MIT, ERCIM, Keio, Beihang, 2021.
5+
// Please first read the full copyright statement in file COPYRIGHT.html
6+
7+
package org.w3c.css.properties.css.fontface;
8+
9+
import org.w3c.css.parser.CssStyle;
10+
import org.w3c.css.properties.css.CssProperty;
11+
import org.w3c.css.properties.css3.Css3Style;
12+
import org.w3c.css.util.ApplContext;
13+
import org.w3c.css.util.InvalidParamException;
14+
import org.w3c.css.values.CssExpression;
15+
import org.w3c.css.values.CssValue;
16+
17+
/**
18+
* @since CSS3
19+
*/
20+
public class CssSubscriptPositionOverride extends CssProperty {
21+
22+
public CssValue value;
23+
24+
/**
25+
* Create a new CssSubscriptPositionOverride
26+
*/
27+
public CssSubscriptPositionOverride() {
28+
}
29+
30+
/**
31+
* Creates a new CssSubscriptPositionOverride
32+
*
33+
* @param expression The expression for this property
34+
* @throws InvalidParamException Expressions are incorrect
35+
*/
36+
public CssSubscriptPositionOverride(ApplContext ac, CssExpression expression, boolean check)
37+
throws InvalidParamException {
38+
throw new InvalidParamException("value",
39+
expression.getValue().toString(),
40+
getPropertyName(), ac);
41+
}
42+
43+
public CssSubscriptPositionOverride(ApplContext ac, CssExpression expression)
44+
throws InvalidParamException {
45+
this(ac, expression, false);
46+
}
47+
48+
/**
49+
* Returns the value of this property
50+
*/
51+
public Object get() {
52+
return value;
53+
}
54+
55+
56+
/**
57+
* Returns the name of this property
58+
*/
59+
public final String getPropertyName() {
60+
return "subscript-position-override";
61+
}
62+
63+
/**
64+
* Returns true if this property is "softly" inherited
65+
* e.g. his value is equals to inherit
66+
*/
67+
public boolean isSoftlyInherited() {
68+
return value.equals(inherit);
69+
}
70+
71+
/**
72+
* Returns a string representation of the object.
73+
*/
74+
public String toString() {
75+
return value.toString();
76+
}
77+
78+
/**
79+
* Add this property to the CssStyle.
80+
*
81+
* @param style The CssStyle
82+
*/
83+
public void addToStyle(ApplContext ac, CssStyle style) {
84+
Css3Style s = (Css3Style) style;
85+
if (s.fontFaceCssSubscriptPositionOverride != null) {
86+
style.addRedefinitionWarning(ac, this);
87+
}
88+
s.fontFaceCssSubscriptPositionOverride = this;
89+
}
90+
91+
92+
/**
93+
* Compares two properties for equality.
94+
*
95+
* @param property The other property.
96+
*/
97+
public boolean equals(CssProperty property) {
98+
return (property instanceof CssSubscriptPositionOverride &&
99+
value.equals(((CssSubscriptPositionOverride) property).value));
100+
}
101+
102+
103+
/**
104+
* Get this property in the style.
105+
*
106+
* @param style The style where the property is
107+
* @param resolve if true, resolve the style to find this property
108+
*/
109+
public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
110+
if (resolve) {
111+
return ((Css3Style) style).getFontFaceCssSubscriptPositionOverride();
112+
} else {
113+
return ((Css3Style) style).fontFaceCssSubscriptPositionOverride;
114+
}
115+
}
116+
}
117+

org/w3c/css/properties/css3/Css3Style.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,6 @@
5252
import org.w3c.css.properties.css.CssBorderBlockWidth;
5353
import org.w3c.css.properties.css.CssBorderEndEndRadius;
5454
import org.w3c.css.properties.css.CssBorderEndStartRadius;
55-
import org.w3c.css.properties.css.CssHyphenateCharacter;
56-
import org.w3c.css.properties.css.CssHyphenateLimitChars;
57-
import org.w3c.css.properties.css.CssHyphenateLimitLast;
58-
import org.w3c.css.properties.css.CssHyphenateLimitLines;
59-
import org.w3c.css.properties.css.CssHyphenateLimitZone;
60-
import org.w3c.css.properties.css.CssImageRendering;
6155
import org.w3c.css.properties.css.CssBorderImageSource;
6256
import org.w3c.css.properties.css.CssBorderInline;
6357
import org.w3c.css.properties.css.CssBorderInlineColor;
@@ -151,9 +145,15 @@
151145
import org.w3c.css.properties.css.CssGridTemplateColumns;
152146
import org.w3c.css.properties.css.CssGridTemplateRows;
153147
import org.w3c.css.properties.css.CssHangingPunctuation;
148+
import org.w3c.css.properties.css.CssHyphenateCharacter;
149+
import org.w3c.css.properties.css.CssHyphenateLimitChars;
150+
import org.w3c.css.properties.css.CssHyphenateLimitLast;
151+
import org.w3c.css.properties.css.CssHyphenateLimitLines;
152+
import org.w3c.css.properties.css.CssHyphenateLimitZone;
154153
import org.w3c.css.properties.css.CssHyphens;
155154
import org.w3c.css.properties.css.CssIcon;
156155
import org.w3c.css.properties.css.CssImageOrientation;
156+
import org.w3c.css.properties.css.CssImageRendering;
157157
import org.w3c.css.properties.css.CssImageResolution;
158158
import org.w3c.css.properties.css.CssImeMode;
159159
import org.w3c.css.properties.css.CssInitialLetter;
@@ -338,6 +338,7 @@
338338
import org.w3c.css.properties.css.fontface.CssFontWeight;
339339
import org.w3c.css.properties.css.fontface.CssLineGapOverride;
340340
import org.w3c.css.properties.css.fontface.CssSizeAdjust;
341+
import org.w3c.css.properties.css.fontface.CssSubscriptPositionOverride;
341342
import org.w3c.css.properties.css.fontface.CssSuperscriptPositionOverride;
342343
import org.w3c.css.properties.css.fontface.CssUnicodeRange;
343344
import org.w3c.css.properties.css.viewport.CssMaxZoom;
@@ -633,6 +634,7 @@ public class Css3Style extends ATSCStyle {
633634
public org.w3c.css.properties.css.fontface.CssFontVariationSettings fontFaceCssFontVariationSettings;
634635
public CssSizeAdjust fontFaceCssSizeAdjust;
635636
public CssSuperscriptPositionOverride fontFaceCssSuperscriptPositionOverride;
637+
public CssSubscriptPositionOverride fontFaceCssSubscriptPositionOverride;
636638

637639
public CssColorAdjust cssColorAdjust;
638640
public CssForcedColorAdjust cssForcedColorAdjust;
@@ -1715,6 +1717,15 @@ public CssSuperscriptPositionOverride getFontFaceCssSuperscriptPositionOverride(
17151717
return fontFaceCssSuperscriptPositionOverride;
17161718
}
17171719

1720+
public CssSubscriptPositionOverride getFontFaceCssSubscriptPositionOverride() {
1721+
if (fontFaceCssSubscriptPositionOverride == null) {
1722+
fontFaceCssSubscriptPositionOverride =
1723+
(CssSubscriptPositionOverride) style.CascadingOrder(new CssSubscriptPositionOverride(),
1724+
style, selector);
1725+
}
1726+
return fontFaceCssSubscriptPositionOverride;
1727+
}
1728+
17181729
public CssFontDisplay getFontFaceCssFontDisplay() {
17191730
if (fontFaceCssFontDisplay == null) {
17201731
fontFaceCssFontDisplay =
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
//
2+
// Author: Yves Lafon <ylafon@w3.org>
3+
//
4+
// (c) COPYRIGHT W3C, 2018.
5+
// Please first read the full copyright statement in file COPYRIGHT.html
6+
package org.w3c.css.properties.css3.fontface;
7+
8+
import org.w3c.css.util.ApplContext;
9+
import org.w3c.css.util.InvalidParamException;
10+
import org.w3c.css.values.CssExpression;
11+
import org.w3c.css.values.CssIdent;
12+
import org.w3c.css.values.CssTypes;
13+
import org.w3c.css.values.CssValue;
14+
import org.w3c.css.values.CssValueList;
15+
16+
import java.util.ArrayList;
17+
18+
import static org.w3c.css.values.CssOperator.SPACE;
19+
20+
/**
21+
* @spec https://www.w3.org/TR/2026/WD-css-fonts-5-20260303/#descdef-font-face-subscript-position-override
22+
*/
23+
public class CssSubscriptPositionOverride extends org.w3c.css.properties.css.fontface.CssSubscriptPositionOverride {
24+
25+
public static final CssIdent[] allowed_values;
26+
27+
static {
28+
String[] _allowed_values = {"normal", "from-font"};
29+
allowed_values = new CssIdent[_allowed_values.length];
30+
int i = 0;
31+
for (String s : _allowed_values) {
32+
allowed_values[i++] = CssIdent.getIdent(s);
33+
}
34+
}
35+
36+
public static CssIdent getAllowedIdent(CssIdent ident) {
37+
for (CssIdent id : allowed_values) {
38+
if (id.equals(ident)) {
39+
return id;
40+
}
41+
}
42+
return null;
43+
}
44+
45+
/**
46+
* Create a new CssSubscriptPositionOverride
47+
*/
48+
public CssSubscriptPositionOverride() {
49+
value = initial;
50+
}
51+
52+
/**
53+
* Creates a new CssSubscriptPositionOverride
54+
*
55+
* @param expression The expression for this property
56+
* @throws InvalidParamException Expressions are incorrect
57+
*/
58+
public CssSubscriptPositionOverride(ApplContext ac, CssExpression expression, boolean check)
59+
throws InvalidParamException {
60+
if (check && expression.getCount() > 2) {
61+
throw new InvalidParamException("unrecognize", ac);
62+
}
63+
64+
setByUser();
65+
66+
char op;
67+
CssValue val;
68+
69+
ArrayList<CssValue> values = new ArrayList<>();
70+
71+
while (!expression.end()) {
72+
val = expression.getValue();
73+
op = expression.getOperator();
74+
switch (val.getType()) {
75+
case CssTypes.CSS_PERCENTAGE:
76+
values.add(val);
77+
break;
78+
case CssTypes.CSS_IDENT:
79+
if (getAllowedIdent(val.getIdent()) != null) {
80+
values.add(val);
81+
break;
82+
}
83+
default:
84+
throw new InvalidParamException("value",
85+
val.toString(),
86+
getPropertyName(), ac);
87+
}
88+
expression.next();
89+
if (!expression.end() && op != SPACE) {
90+
throw new InvalidParamException("operator", op, ac);
91+
}
92+
}
93+
value = (values.size() == 1) ? values.get(0) : new CssValueList(values);
94+
}
95+
96+
public CssSubscriptPositionOverride(ApplContext ac, CssExpression expression)
97+
throws InvalidParamException {
98+
this(ac, expression, false);
99+
}
100+
101+
}
102+

0 commit comments

Comments
 (0)