@@ -46,9 +46,9 @@ partial interface CSS {
46
46
CSSParserRule parseRule(DOMString css, optional CSSParserOptions options);
47
47
sequence<(CSSParserDeclaration or CSSParserRule)> parseDeclarationList(DOMString css, optional CSSParserOptions options);
48
48
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);
52
52
};
53
53
54
54
dictionary CSSParserOptions {
@@ -57,6 +57,23 @@ dictionary CSSParserOptions {
57
57
};
58
58
</pre>
59
59
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
+
60
77
Parser Values {#parser-values}
61
78
==============================
62
79
@@ -66,54 +83,62 @@ interface CSSParserRule {
66
83
};
67
84
68
85
interface CSSParserAtRule : CSSParserRule {
69
-
86
+ attribute DOMString name;
87
+ attribute sequence<CSSParserValue> prelude;
88
+ attribute sequence<CSSParserRule>? body;
89
+ /* nullable to handle at-statements */
70
90
};
71
91
72
92
interface CSSParserQualifiedRule : CSSParserRule {
73
-
93
+ attribute sequence<CSSParserValue> prelude;
94
+ attribute sequence<CSSParserRule> body;
74
95
};
75
96
76
- interface CSSParserDeclaration {
77
-
97
+ interface CSSParserDeclaration : CSSParserRule {
98
+ attribute DOMString name;
99
+ attribute sequence<CSSParserValue> body;
78
100
};
79
101
80
102
interface CSSParserValue {
81
-
82
103
};
83
104
84
105
interface CSSParserBlock : CSSParserValue {
85
-
106
+ attribute DOMString name; /* "[]", "{}", or "()" */
107
+ attribute sequence<CSSParserValue> body;
86
108
};
87
109
88
110
interface CSSParserFunction : CSSParserValue {
89
-
111
+ attribute DOMString name;
112
+ attribute sequence<sequence<CSSParserValue>> args;
90
113
};
91
114
92
115
interface CSSParserIdent : CSSParserValue {
93
-
116
+ attribute DOMString value;
94
117
};
95
118
96
119
interface CSSParserNumber : CSSParserValue {
97
-
120
+ attribute double value;
98
121
};
99
122
100
123
interface CSSParserPercentage : CSSParserValue {
101
-
124
+ attribute double value;
102
125
};
103
126
104
127
interface CSSParserDimension : CSSParserValue {
105
-
128
+ attribute double value;
129
+ attribute DOMString type;
106
130
};
107
131
108
132
interface CSSParserAtKeyword : CSSParserValue {
109
-
133
+ attribute DOMString value;
110
134
};
111
135
112
136
interface CSSParserHash : CSSParserValue {
113
-
137
+ attribute DOMString value;
138
+ /* expose an "is ident" boolean? */
114
139
};
115
140
116
141
interface CSSParserString : CSSParserValue {
117
-
142
+ attribute DOMString value;
118
143
};
119
144
</pre>
0 commit comments