@@ -28,6 +28,7 @@ class Selector : public RefCounted<Selector> {
28
28
FirstLetter,
29
29
Marker,
30
30
};
31
+ static auto constexpr PseudoElementCount = to_underlying(PseudoElement::Marker) + 1 ;
31
32
32
33
struct SimpleSelector {
33
34
enum class Type {
@@ -145,8 +146,75 @@ class Selector : public RefCounted<Selector> {
145
146
mutable Optional<u32 > m_specificity;
146
147
};
147
148
148
- constexpr StringView pseudo_element_name (Selector::PseudoElement);
149
- constexpr StringView pseudo_class_name (Selector::SimpleSelector::PseudoClass::Type);
149
+ constexpr StringView pseudo_element_name (Selector::PseudoElement pseudo_element)
150
+ {
151
+ switch (pseudo_element) {
152
+ case Selector::PseudoElement::Before:
153
+ return " before" sv;
154
+ case Selector::PseudoElement::After:
155
+ return " after" sv;
156
+ case Selector::PseudoElement::FirstLine:
157
+ return " first-line" sv;
158
+ case Selector::PseudoElement::FirstLetter:
159
+ return " first-letter" sv;
160
+ case Selector::PseudoElement::Marker:
161
+ return " marker" sv;
162
+ case Selector::PseudoElement::None:
163
+ break ;
164
+ }
165
+ VERIFY_NOT_REACHED ();
166
+ }
167
+
168
+ constexpr StringView pseudo_class_name (Selector::SimpleSelector::PseudoClass::Type pseudo_class)
169
+ {
170
+ switch (pseudo_class) {
171
+ case Selector::SimpleSelector::PseudoClass::Type::Link:
172
+ return " link" sv;
173
+ case Selector::SimpleSelector::PseudoClass::Type::Visited:
174
+ return " visited" sv;
175
+ case Selector::SimpleSelector::PseudoClass::Type::Hover:
176
+ return " hover" sv;
177
+ case Selector::SimpleSelector::PseudoClass::Type::Focus:
178
+ return " focus" sv;
179
+ case Selector::SimpleSelector::PseudoClass::Type::FirstChild:
180
+ return " first-child" sv;
181
+ case Selector::SimpleSelector::PseudoClass::Type::LastChild:
182
+ return " last-child" sv;
183
+ case Selector::SimpleSelector::PseudoClass::Type::OnlyChild:
184
+ return " only-child" sv;
185
+ case Selector::SimpleSelector::PseudoClass::Type::Empty:
186
+ return " empty" sv;
187
+ case Selector::SimpleSelector::PseudoClass::Type::Root:
188
+ return " root" sv;
189
+ case Selector::SimpleSelector::PseudoClass::Type::FirstOfType:
190
+ return " first-of-type" sv;
191
+ case Selector::SimpleSelector::PseudoClass::Type::LastOfType:
192
+ return " last-of-type" sv;
193
+ case Selector::SimpleSelector::PseudoClass::Type::OnlyOfType:
194
+ return " only-of-type" sv;
195
+ case Selector::SimpleSelector::PseudoClass::Type::NthOfType:
196
+ return " nth-of-type" sv;
197
+ case Selector::SimpleSelector::PseudoClass::Type::NthLastOfType:
198
+ return " nth-last-of-type" sv;
199
+ case Selector::SimpleSelector::PseudoClass::Type::Disabled:
200
+ return " disabled" sv;
201
+ case Selector::SimpleSelector::PseudoClass::Type::Enabled:
202
+ return " enabled" sv;
203
+ case Selector::SimpleSelector::PseudoClass::Type::Checked:
204
+ return " checked" sv;
205
+ case Selector::SimpleSelector::PseudoClass::Type::Active:
206
+ return " active" sv;
207
+ case Selector::SimpleSelector::PseudoClass::Type::NthChild:
208
+ return " nth-child" sv;
209
+ case Selector::SimpleSelector::PseudoClass::Type::NthLastChild:
210
+ return " nth-last-child" sv;
211
+ case Selector::SimpleSelector::PseudoClass::Type::Not:
212
+ return " not" sv;
213
+ case Selector::SimpleSelector::PseudoClass::Type::None:
214
+ break ;
215
+ }
216
+ VERIFY_NOT_REACHED ();
217
+ }
150
218
151
219
String serialize_a_group_of_selectors (NonnullRefPtrVector<Selector> const & selectors);
152
220
0 commit comments