1/* C++ code produced by gperf version 3.1 */
2/* Command-line: /usr/bin/gperf --key-positions='*' -m 10 -s 2 --output-file=SelectorPseudoClassAndCompatibilityElementMap.cpp SelectorPseudoClassAndCompatibilityElementMap.gperf */
3
4#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
5 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
6 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
7 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
8 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
9 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
10 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
11 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
12 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
13 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
14 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
15 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
16 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
17 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
18 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
19 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
20 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
21 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
22 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
23 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
24 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
25 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
26 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
27/* The character set is not based on ISO-646. */
28#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
29#endif
30
31#line 2 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
32
33/*
34 * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
35 *
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
38 * are met:
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 *
45 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
46 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
47 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
48 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
49 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
55 * THE POSSIBILITY OF SUCH DAMAGE.
56 */
57
58// This file is automatically generated from SelectorPseudoTypeMap.in by makeprop, do not edit by hand.
59
60#include "config.h"
61#include "SelectorPseudoTypeMap.h"
62
63#include "CSSParserSelector.h"
64
65IGNORE_WARNINGS_BEGIN("implicit-fallthrough")
66
67// Older versions of gperf like to use the `register` keyword.
68#define register
69
70namespace WebCore {
71
72struct SelectorPseudoClassOrCompatibilityPseudoElementEntry {
73 const char* name;
74 PseudoClassOrCompatibilityPseudoElement pseudoTypes;
75};
76
77enum
78 {
79 TOTAL_KEYWORDS = 71,
80 MIN_WORD_LENGTH = 3,
81 MAX_WORD_LENGTH = 40,
82 MIN_HASH_VALUE = 6,
83 MAX_HASH_VALUE = 217
84 };
85
86/* maximum key range = 212, duplicates = 0 */
87
88#ifndef GPERF_DOWNCASE
89#define GPERF_DOWNCASE 1
90static unsigned char gperf_downcase[256] =
91 {
92 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
93 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
94 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
95 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
96 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
97 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
98 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
99 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
100 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
101 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
102 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
103 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
104 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
105 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
106 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
107 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
108 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
109 255
110 };
111#endif
112
113#ifndef GPERF_CASE_STRNCMP
114#define GPERF_CASE_STRNCMP 1
115static int
116gperf_case_strncmp (const char *s1, const char *s2, size_t n)
117{
118 for (; n > 0;)
119 {
120 unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
121 unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
122 if (c1 != 0 && c1 == c2)
123 {
124 n--;
125 continue;
126 }
127 return (int)c1 - (int)c2;
128 }
129 return 0;
130}
131#endif
132
133class SelectorPseudoClassAndCompatibilityElementMapHash
134{
135private:
136 static inline unsigned int hash (const char *str, size_t len);
137public:
138 static const struct SelectorPseudoClassOrCompatibilityPseudoElementEntry *in_word_set (const char *str, size_t len);
139};
140
141inline unsigned int
142SelectorPseudoClassAndCompatibilityElementMapHash::hash (const char *str, size_t len)
143{
144 static const unsigned char asso_values[] =
145 {
146 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
147 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
148 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
149 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
150 218, 218, 218, 218, 218, 1, 218, 218, 218, 218,
151 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
152 218, 218, 218, 218, 218, 3, 36, 5, 4, 2,
153 4, 32, 6, 1, 218, 5, 3, 43, 1, 1,
154 8, 8, 1, 1, 1, 5, 63, 2, 218, 10,
155 2, 218, 218, 218, 218, 218, 218, 3, 36, 5,
156 4, 2, 4, 32, 6, 1, 218, 5, 3, 43,
157 1, 1, 8, 8, 1, 1, 1, 5, 63, 2,
158 218, 10, 2, 218, 218, 218, 218, 218, 218, 218,
159 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
160 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
161 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
162 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
163 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
164 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
165 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
166 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
167 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
168 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
169 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
170 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
171 218, 218, 218, 218, 218, 218
172 };
173 unsigned int hval = len;
174
175 switch (hval)
176 {
177 default:
178 hval += asso_values[static_cast<unsigned char>(str[39])];
179 /*FALLTHROUGH*/
180 case 39:
181 hval += asso_values[static_cast<unsigned char>(str[38])];
182 /*FALLTHROUGH*/
183 case 38:
184 hval += asso_values[static_cast<unsigned char>(str[37])];
185 /*FALLTHROUGH*/
186 case 37:
187 hval += asso_values[static_cast<unsigned char>(str[36])];
188 /*FALLTHROUGH*/
189 case 36:
190 hval += asso_values[static_cast<unsigned char>(str[35])];
191 /*FALLTHROUGH*/
192 case 35:
193 hval += asso_values[static_cast<unsigned char>(str[34])];
194 /*FALLTHROUGH*/
195 case 34:
196 hval += asso_values[static_cast<unsigned char>(str[33])];
197 /*FALLTHROUGH*/
198 case 33:
199 hval += asso_values[static_cast<unsigned char>(str[32])];
200 /*FALLTHROUGH*/
201 case 32:
202 hval += asso_values[static_cast<unsigned char>(str[31])];
203 /*FALLTHROUGH*/
204 case 31:
205 hval += asso_values[static_cast<unsigned char>(str[30])];
206 /*FALLTHROUGH*/
207 case 30:
208 hval += asso_values[static_cast<unsigned char>(str[29])];
209 /*FALLTHROUGH*/
210 case 29:
211 hval += asso_values[static_cast<unsigned char>(str[28])];
212 /*FALLTHROUGH*/
213 case 28:
214 hval += asso_values[static_cast<unsigned char>(str[27])];
215 /*FALLTHROUGH*/
216 case 27:
217 hval += asso_values[static_cast<unsigned char>(str[26])];
218 /*FALLTHROUGH*/
219 case 26:
220 hval += asso_values[static_cast<unsigned char>(str[25])];
221 /*FALLTHROUGH*/
222 case 25:
223 hval += asso_values[static_cast<unsigned char>(str[24])];
224 /*FALLTHROUGH*/
225 case 24:
226 hval += asso_values[static_cast<unsigned char>(str[23])];
227 /*FALLTHROUGH*/
228 case 23:
229 hval += asso_values[static_cast<unsigned char>(str[22])];
230 /*FALLTHROUGH*/
231 case 22:
232 hval += asso_values[static_cast<unsigned char>(str[21])];
233 /*FALLTHROUGH*/
234 case 21:
235 hval += asso_values[static_cast<unsigned char>(str[20])];
236 /*FALLTHROUGH*/
237 case 20:
238 hval += asso_values[static_cast<unsigned char>(str[19])];
239 /*FALLTHROUGH*/
240 case 19:
241 hval += asso_values[static_cast<unsigned char>(str[18])];
242 /*FALLTHROUGH*/
243 case 18:
244 hval += asso_values[static_cast<unsigned char>(str[17])];
245 /*FALLTHROUGH*/
246 case 17:
247 hval += asso_values[static_cast<unsigned char>(str[16])];
248 /*FALLTHROUGH*/
249 case 16:
250 hval += asso_values[static_cast<unsigned char>(str[15])];
251 /*FALLTHROUGH*/
252 case 15:
253 hval += asso_values[static_cast<unsigned char>(str[14])];
254 /*FALLTHROUGH*/
255 case 14:
256 hval += asso_values[static_cast<unsigned char>(str[13])];
257 /*FALLTHROUGH*/
258 case 13:
259 hval += asso_values[static_cast<unsigned char>(str[12])];
260 /*FALLTHROUGH*/
261 case 12:
262 hval += asso_values[static_cast<unsigned char>(str[11])];
263 /*FALLTHROUGH*/
264 case 11:
265 hval += asso_values[static_cast<unsigned char>(str[10])];
266 /*FALLTHROUGH*/
267 case 10:
268 hval += asso_values[static_cast<unsigned char>(str[9])];
269 /*FALLTHROUGH*/
270 case 9:
271 hval += asso_values[static_cast<unsigned char>(str[8])];
272 /*FALLTHROUGH*/
273 case 8:
274 hval += asso_values[static_cast<unsigned char>(str[7])];
275 /*FALLTHROUGH*/
276 case 7:
277 hval += asso_values[static_cast<unsigned char>(str[6])];
278 /*FALLTHROUGH*/
279 case 6:
280 hval += asso_values[static_cast<unsigned char>(str[5])];
281 /*FALLTHROUGH*/
282 case 5:
283 hval += asso_values[static_cast<unsigned char>(str[4])];
284 /*FALLTHROUGH*/
285 case 4:
286 hval += asso_values[static_cast<unsigned char>(str[3])];
287 /*FALLTHROUGH*/
288 case 3:
289 hval += asso_values[static_cast<unsigned char>(str[2])];
290 /*FALLTHROUGH*/
291 case 2:
292 hval += asso_values[static_cast<unsigned char>(str[1])];
293 /*FALLTHROUGH*/
294 case 1:
295 hval += asso_values[static_cast<unsigned char>(str[0])];
296 break;
297 }
298 return hval;
299}
300
301static const struct SelectorPseudoClassOrCompatibilityPseudoElementEntry wordlist[] =
302 {
303 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
304 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
305 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
306 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
307 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
308 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
309#line 103 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
310 {"not", {CSSSelector::PseudoClassNot, CSSSelector::PseudoElementUnknown}},
311 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
312#line 117 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
313 {"root", {CSSSelector::PseudoClassRoot, CSSSelector::PseudoElementUnknown}},
314#line 78 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
315 {"dir", {CSSSelector::PseudoClassDir, CSSSelector::PseudoElementUnknown}},
316#line 83 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
317 {"end", {CSSSelector::PseudoClassEnd, CSSSelector::PseudoElementUnknown}},
318#line 116 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
319 {"role", {CSSSelector::PseudoClassRole, CSSSelector::PseudoElementUnknown}},
320#line 120 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
321 {"start", {CSSSelector::PseudoClassStart, CSSSelector::PseudoElementUnknown}},
322#line 91 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
323 {"host", {CSSSelector::PseudoClassHost, CSSSelector::PseudoElementUnknown}},
324#line 100 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
325 {"link", {CSSSelector::PseudoClassLink, CSSSelector::PseudoElementUnknown}},
326 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
327#line 70 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
328 {"after", {CSSSelector::PseudoClassUnknown, CSSSelector::PseudoElementAfter}},
329#line 132 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
330 {"past", {CSSSelector::PseudoClassPast, CSSSelector::PseudoElementUnknown}},
331 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
332 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
333 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
334#line 88 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
335 {"focus", {CSSSelector::PseudoClassFocus, CSSSelector::PseudoElementUnknown}},
336#line 118 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
337 {"scope", {CSSSelector::PseudoClassScope, CSSSelector::PseudoElementUnknown}},
338 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
339#line 131 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
340 {"future", {CSSSelector::PseudoClassFuture, CSSSelector::PseudoElementUnknown}},
341#line 77 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
342 {"defined", {CSSSelector::PseudoClassDefined, CSSSelector::PseudoElementUnknown}},
343#line 86 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
344 {"first-line", {CSSSelector::PseudoClassUnknown, CSSSelector::PseudoElementFirstLine}},
345#line 110 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
346 {"optional", {CSSSelector::PseudoClassOptional, CSSSelector::PseudoElementUnknown}},
347#line 114 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
348 {"read-write", {CSSSelector::PseudoClassReadWrite, CSSSelector::PseudoElementUnknown}},
349#line 76 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
350 {"default", {CSSSelector::PseudoClassDefault, CSSSelector::PseudoElementUnknown}},
351#line 90 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
352 {"horizontal", {CSSSelector::PseudoClassHorizontal, CSSSelector::PseudoElementUnknown}},
353#line 85 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
354 {"first-letter", {CSSSelector::PseudoClassUnknown, CSSSelector::PseudoElementFirstLetter}},
355#line 115 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
356 {"required", {CSSSelector::PseudoClassRequired, CSSSelector::PseudoElementUnknown}},
357#line 71 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
358 {"any-link", {CSSSelector::PseudoClassAnyLink, CSSSelector::PseudoElementUnknown}},
359 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
360#line 113 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
361 {"read-only", {CSSSelector::PseudoClassReadOnly, CSSSelector::PseudoElementUnknown}},
362#line 73 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
363 {"checked", {CSSSelector::PseudoClassChecked, CSSSelector::PseudoElementUnknown}},
364#line 104 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
365 {"nth-child", {CSSSelector::PseudoClassNthChild, CSSSelector::PseudoElementUnknown}},
366#line 98 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
367 {"last-child", {CSSSelector::PseudoClassLastChild, CSSSelector::PseudoElementUnknown}},
368#line 84 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
369 {"first-child", {CSSSelector::PseudoClassFirstChild, CSSSelector::PseudoElementUnknown}},
370 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
371#line 89 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
372 {"focus-within", {CSSSelector::PseudoClassFocusWithin, CSSSelector::PseudoElementUnknown}},
373#line 74 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
374 {"corner-present", {CSSSelector::PseudoClassCornerPresent, CSSSelector::PseudoElementUnknown}},
375#line 97 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
376 {"lang", {CSSSelector::PseudoClassLang, CSSSelector::PseudoElementUnknown}},
377 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
378#line 108 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
379 {"only-child", {CSSSelector::PseudoClassOnlyChild, CSSSelector::PseudoElementUnknown}},
380#line 121 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
381 {"target", {CSSSelector::PseudoClassTarget, CSSSelector::PseudoElementUnknown}},
382#line 107 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
383 {"nth-of-type", {CSSSelector::PseudoClassNthOfType, CSSSelector::PseudoElementUnknown}},
384#line 99 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
385 {"last-of-type", {CSSSelector::PseudoClassLastOfType, CSSSelector::PseudoElementUnknown}},
386#line 87 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
387 {"first-of-type", {CSSSelector::PseudoClassFirstOfType, CSSSelector::PseudoElementUnknown}},
388#line 93 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
389 {"in-range", {CSSSelector::PseudoClassInRange, CSSSelector::PseudoElementUnknown}},
390#line 105 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
391 {"nth-last-child", {CSSSelector::PseudoClassNthLastChild, CSSSelector::PseudoElementUnknown}},
392#line 72 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
393 {"before", {CSSSelector::PseudoClassUnknown, CSSSelector::PseudoElementBefore}},
394 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
395 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
396#line 109 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
397 {"only-of-type", {CSSSelector::PseudoClassOnlyOfType, CSSSelector::PseudoElementUnknown}},
398 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
399#line 102 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
400 {"no-button", {CSSSelector::PseudoClassNoButton, CSSSelector::PseudoElementUnknown}},
401#line 82 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
402 {"enabled", {CSSSelector::PseudoClassEnabled, CSSSelector::PseudoElementUnknown}},
403 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
404 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
405#line 106 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
406 {"nth-last-of-type", {CSSSelector::PseudoClassNthLastOfType, CSSSelector::PseudoElementUnknown}},
407#line 79 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
408 {"disabled", {CSSSelector::PseudoClassDisabled, CSSSelector::PseudoElementUnknown}},
409 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
410 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
411#line 111 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
412 {"out-of-range", {CSSSelector::PseudoClassOutOfRange, CSSSelector::PseudoElementUnknown}},
413#line 94 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
414 {"increment", {CSSSelector::PseudoClassIncrement, CSSSelector::PseudoElementUnknown}},
415#line 112 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
416 {"placeholder-shown", {CSSSelector::PseudoClassPlaceholderShown, CSSSelector::PseudoElementUnknown}},
417#line 101 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
418 {"matches", {CSSSelector::PseudoClassMatches, CSSSelector::PseudoElementUnknown}},
419#line 81 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
420 {"empty", {CSSSelector::PseudoClassEmpty, CSSSelector::PseudoElementUnknown}},
421#line 75 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
422 {"decrement", {CSSSelector::PseudoClassDecrement, CSSSelector::PseudoElementUnknown}},
423 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
424 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
425 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
426#line 63 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
427 {"-webkit-any", {CSSSelector::PseudoClassAny, CSSSelector::PseudoElementUnknown}},
428 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
429#line 95 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
430 {"indeterminate", {CSSSelector::PseudoClassIndeterminate, CSSSelector::PseudoElementUnknown}},
431 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
432#line 92 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
433 {"hover", {CSSSelector::PseudoClassHover, CSSSelector::PseudoElementUnknown}},
434#line 122 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
435 {"valid", {CSSSelector::PseudoClassValid, CSSSelector::PseudoElementUnknown}},
436#line 124 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
437 {"visited", {CSSSelector::PseudoClassVisited, CSSSelector::PseudoElementUnknown}},
438#line 69 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
439 {"active", {CSSSelector::PseudoClassActive, CSSSelector::PseudoElementUnknown}},
440 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
441#line 96 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
442 {"invalid", {CSSSelector::PseudoClassInvalid, CSSSelector::PseudoElementUnknown}},
443 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
444 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
445#line 65 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
446 {"-webkit-autofill", {CSSSelector::PseudoClassAutofill, CSSSelector::PseudoElementUnknown}},
447#line 123 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
448 {"vertical", {CSSSelector::PseudoClassVertical, CSSSelector::PseudoElementUnknown}},
449 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
450 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
451#line 64 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
452 {"-webkit-any-link", {CSSSelector::PseudoClassAnyLinkDeprecated, CSSSelector::PseudoElementUnknown}},
453 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
454 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
455 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
456 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
457 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
458#line 127 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
459 {"-webkit-full-screen", {CSSSelector::PseudoClassFullScreen, CSSSelector::PseudoElementUnknown}},
460 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
461 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
462#line 119 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
463 {"single-button", {CSSSelector::PseudoClassSingleButton, CSSSelector::PseudoElementUnknown}},
464 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
465#line 67 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
466 {"-webkit-drag", {CSSSelector::PseudoClassDrag, CSSSelector::PseudoElementUnknown}},
467 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
468 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
469#line 125 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
470 {"window-inactive", {CSSSelector::PseudoClassWindowInactive, CSSSelector::PseudoElementUnknown}},
471 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
472 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
473 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
474 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
475 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
476#line 80 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
477 {"double-button", {CSSSelector::PseudoClassDoubleButton, CSSSelector::PseudoElementUnknown}},
478#line 62 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
479 {"-khtml-drag", {CSSSelector::PseudoClassDrag, CSSSelector::PseudoElementUnknown}},
480 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
481 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
482 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
483 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
484 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
485 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
486 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
487 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
488 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
489#line 128 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
490 {"-webkit-full-screen-ancestor", {CSSSelector::PseudoClassFullScreenAncestor, CSSSelector::PseudoElementUnknown}},
491 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
492 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
493 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
494 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
495 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
496 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
497 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
498 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
499 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
500 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
501 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
502 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
503 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
504 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
505 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
506 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
507 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
508 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
509 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
510 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
511 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
512 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
513 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
514 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
515#line 130 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
516 {"-webkit-full-screen-controls-hidden", {CSSSelector::PseudoClassFullScreenControlsHidden, CSSSelector::PseudoElementUnknown}},
517 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
518 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
519 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
520 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
521 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
522 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
523 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
524 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
525 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
526 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
527 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
528 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
529 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
530 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
531 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
532#line 66 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
533 {"-webkit-autofill-strong-password", {CSSSelector::PseudoClassAutofillStrongPassword, CSSSelector::PseudoElementUnknown}},
534 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
535 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
536 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
537 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
538 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
539#line 129 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
540 {"-webkit-full-screen-document", {CSSSelector::PseudoClassFullScreenDocument, CSSSelector::PseudoElementUnknown}},
541 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
542 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
543 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
544 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
545 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
546 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
547 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
548 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
549 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
550 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
551 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
552 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
553 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
554 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
555 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
556 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
557 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
558 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
559#line 68 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
560 {"-webkit-full-page-media", {CSSSelector::PseudoClassFullPageMedia, CSSSelector::PseudoElementUnknown}},
561 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
562 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
563 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
564 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
565 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
566 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
567 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
568 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
569 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
570 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
571 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
572 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
573 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
574 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
575 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
576 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
577 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
578 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
579 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
580 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
581 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
582 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
583 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
584 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
585 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
586 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
587 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
588 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
589 {"",{CSSSelector::PseudoClassUnknown,CSSSelector::PseudoElementUnknown}},
590#line 126 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
591 {"-webkit-animating-full-screen-transition", {CSSSelector::PseudoClassAnimatingFullScreenTransition, CSSSelector::PseudoElementUnknown}}
592 };
593
594const struct SelectorPseudoClassOrCompatibilityPseudoElementEntry *
595SelectorPseudoClassAndCompatibilityElementMapHash::in_word_set (const char *str, size_t len)
596{
597 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
598 {
599 unsigned int key = hash (str, len);
600
601 if (key <= MAX_HASH_VALUE)
602 {
603 const char *s = wordlist[key].name;
604
605 if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
606 return &wordlist[key];
607 }
608 }
609 return 0;
610}
611#line 133 "SelectorPseudoClassAndCompatibilityElementMap.gperf"
612
613
614static inline const SelectorPseudoClassOrCompatibilityPseudoElementEntry* parsePseudoClassAndCompatibilityElementString(const LChar* characters, unsigned length)
615{
616 return SelectorPseudoClassAndCompatibilityElementMapHash::in_word_set(reinterpret_cast<const char*>(characters), length);
617}
618
619static inline const SelectorPseudoClassOrCompatibilityPseudoElementEntry* parsePseudoClassAndCompatibilityElementString(const UChar* characters, unsigned length)
620{
621 const unsigned maxKeywordLength = 40;
622 LChar buffer[maxKeywordLength];
623 if (length > maxKeywordLength)
624 return nullptr;
625
626 for (unsigned i = 0; i < length; ++i) {
627 UChar character = characters[i];
628 if (character & ~0xff)
629 return nullptr;
630
631 buffer[i] = static_cast<LChar>(character);
632 }
633 return parsePseudoClassAndCompatibilityElementString(buffer, length);
634}
635
636PseudoClassOrCompatibilityPseudoElement parsePseudoClassAndCompatibilityElementString(const StringView& pseudoTypeString)
637{
638 const SelectorPseudoClassOrCompatibilityPseudoElementEntry* entry;
639 if (pseudoTypeString.is8Bit())
640 entry = parsePseudoClassAndCompatibilityElementString(pseudoTypeString.characters8(), pseudoTypeString.length());
641 else
642 entry = parsePseudoClassAndCompatibilityElementString(pseudoTypeString.characters16(), pseudoTypeString.length());
643
644 if (entry)
645 return entry->pseudoTypes;
646 return { CSSSelector::PseudoClassUnknown, CSSSelector::PseudoElementUnknown };
647}
648
649} // namespace WebCore
650
651IGNORE_WARNINGS_END
652
653