@@ -46,9 +46,9 @@ partial interface CSS {
4646 CSSParserRule parseRule(DOMString css, optional CSSParserOptions options);
4747 sequence<(CSSParserDeclaration or CSSParserRule)> parseDeclarationList(DOMString css, optional CSSParserOptions options);
4848 CSSParserDeclaration parseDeclaration(DOMString css, optional CSSParserOptions options);
49- ( CSSParserValue or DOMString) parseValue(DOMString css);
50- sequence<( CSSParserValue or DOMString) > parseValueList(DOMString css);
51- sequence<sequence<( CSSParserValue or DOMString) >> parseCommaValueList(DOMString css);
49+ CSSParserValue parseValue(DOMString css);
50+ sequence<CSSParserValue> parseValueList(DOMString css);
51+ sequence<sequence<CSSParserValue>> parseCommaValueList(DOMString css);
5252};
5353
5454dictionary CSSParserOptions {
@@ -57,6 +57,23 @@ dictionary CSSParserOptions {
5757};
5858</pre>
5959
60+ Issue: {{parseCommaValueList()}} is in Syntax, and thus here,
61+ because it's actually a very common operation.
62+ It's trivial to do yourself
63+ (just call {{parseValueList()}} and then split into an array on top-level commas),
64+ but comma-separated lists are so common
65+ that it was worthwhile to improve spec ergonomics
66+ by providing a shortcut for that functionality.
67+ Is it worth it to provide this to JS as well?
68+
69+ Issue: Do we handle comments?
70+ Currently I don't;
71+ Syntax by default just drops comments,
72+ but allows an impl to preserve information about them if they want.
73+ Maybe add an option to preserve comments?
74+ If so, they can appear *anywhere*,
75+ in any API that returns a sequence.
76+
6077Parser Values {#parser-values}
6178==============================
6279
@@ -66,54 +83,62 @@ interface CSSParserRule {
6683};
6784
6885interface CSSParserAtRule : CSSParserRule {
69-
86+ attribute DOMString name;
87+ attribute sequence<CSSParserValue> prelude;
88+ attribute sequence<CSSParserRule>? body;
89+ /* nullable to handle at-statements */
7090};
7191
7292interface CSSParserQualifiedRule : CSSParserRule {
73-
93+ attribute sequence<CSSParserValue> prelude;
94+ attribute sequence<CSSParserRule> body;
7495};
7596
76- interface CSSParserDeclaration {
77-
97+ interface CSSParserDeclaration : CSSParserRule {
98+ attribute DOMString name;
99+ attribute sequence<CSSParserValue> body;
78100};
79101
80102interface CSSParserValue {
81-
82103};
83104
84105interface CSSParserBlock : CSSParserValue {
85-
106+ attribute DOMString name; /* "[]", "{}", or "()" */
107+ attribute sequence<CSSParserValue> body;
86108};
87109
88110interface CSSParserFunction : CSSParserValue {
89-
111+ attribute DOMString name;
112+ attribute sequence<sequence<CSSParserValue>> args;
90113};
91114
92115interface CSSParserIdent : CSSParserValue {
93-
116+ attribute DOMString value;
94117};
95118
96119interface CSSParserNumber : CSSParserValue {
97-
120+ attribute double value;
98121};
99122
100123interface CSSParserPercentage : CSSParserValue {
101-
124+ attribute double value;
102125};
103126
104127interface CSSParserDimension : CSSParserValue {
105-
128+ attribute double value;
129+ attribute DOMString type;
106130};
107131
108132interface CSSParserAtKeyword : CSSParserValue {
109-
133+ attribute DOMString value;
110134};
111135
112136interface CSSParserHash : CSSParserValue {
113-
137+ attribute DOMString value;
138+ /* expose an "is ident" boolean? */
114139};
115140
116141interface CSSParserString : CSSParserValue {
117-
142+ attribute DOMString value;
118143};
119144</pre>
0 commit comments