/src/mozilla-central/parser/html/nsHtml5ElementName.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2008-2017 Mozilla Foundation |
3 | | * |
4 | | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | | * copy of this software and associated documentation files (the "Software"), |
6 | | * to deal in the Software without restriction, including without limitation |
7 | | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
8 | | * and/or sell copies of the Software, and to permit persons to whom the |
9 | | * Software is furnished to do so, subject to the following conditions: |
10 | | * |
11 | | * The above copyright notice and this permission notice shall be included in |
12 | | * all copies or substantial portions of the Software. |
13 | | * |
14 | | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
15 | | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
16 | | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
17 | | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
18 | | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
19 | | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | | * DEALINGS IN THE SOFTWARE. |
21 | | */ |
22 | | |
23 | | /* |
24 | | * THIS IS A GENERATED FILE. PLEASE DO NOT EDIT. |
25 | | * Please edit ElementName.java instead and regenerate. |
26 | | */ |
27 | | |
28 | | #ifndef nsHtml5ElementName_h |
29 | | #define nsHtml5ElementName_h |
30 | | |
31 | | #include "nsAtom.h" |
32 | | #include "nsHtml5AtomTable.h" |
33 | | #include "nsHtml5String.h" |
34 | | #include "nsNameSpaceManager.h" |
35 | | #include "nsIContent.h" |
36 | | #include "nsTraceRefcnt.h" |
37 | | #include "jArray.h" |
38 | | #include "nsHtml5ArrayCopy.h" |
39 | | #include "nsAHtml5TreeBuilderState.h" |
40 | | #include "nsGkAtoms.h" |
41 | | #include "nsHtml5ByteReadable.h" |
42 | | #include "nsHtml5Macros.h" |
43 | | #include "nsIContentHandle.h" |
44 | | #include "nsHtml5Portability.h" |
45 | | #include "nsHtml5ContentCreatorFunction.h" |
46 | | |
47 | | class nsHtml5StreamParser; |
48 | | |
49 | | class nsHtml5AttributeName; |
50 | | class nsHtml5Tokenizer; |
51 | | class nsHtml5TreeBuilder; |
52 | | class nsHtml5MetaScanner; |
53 | | class nsHtml5UTF16Buffer; |
54 | | class nsHtml5StateSnapshot; |
55 | | class nsHtml5Portability; |
56 | | |
57 | | class nsHtml5ElementName |
58 | | { |
59 | | public: |
60 | | static const int32_t GROUP_MASK = 127; |
61 | | |
62 | | static const int32_t NOT_INTERNED = (1 << 30); |
63 | | |
64 | | static const int32_t SPECIAL = (1 << 29); |
65 | | |
66 | | static const int32_t FOSTER_PARENTING = (1 << 28); |
67 | | |
68 | | static const int32_t SCOPING = (1 << 27); |
69 | | |
70 | | static const int32_t SCOPING_AS_SVG = (1 << 26); |
71 | | |
72 | | static const int32_t SCOPING_AS_MATHML = (1 << 25); |
73 | | |
74 | | static const int32_t HTML_INTEGRATION_POINT = (1 << 24); |
75 | | |
76 | | static const int32_t OPTIONAL_END_TAG = (1 << 23); |
77 | | |
78 | | private: |
79 | | nsAtom* name; |
80 | | nsAtom* camelCaseName; |
81 | | mozilla::dom::HTMLContentCreatorFunction htmlCreator; |
82 | | mozilla::dom::SVGContentCreatorFunction svgCreator; |
83 | | |
84 | | public: |
85 | | int32_t flags; |
86 | 0 | inline nsAtom* getName() { return name; } |
87 | | |
88 | 0 | inline nsAtom* getCamelCaseName() { return camelCaseName; } |
89 | | |
90 | | inline mozilla::dom::HTMLContentCreatorFunction getHtmlCreator() |
91 | 0 | { |
92 | 0 | return htmlCreator; |
93 | 0 | } |
94 | | |
95 | | inline mozilla::dom::SVGContentCreatorFunction getSvgCreator() |
96 | 0 | { |
97 | 0 | return svgCreator; |
98 | 0 | } |
99 | | |
100 | 0 | inline int32_t getFlags() { return flags; } |
101 | | |
102 | 0 | inline int32_t getGroup() { return flags & nsHtml5ElementName::GROUP_MASK; } |
103 | | |
104 | | inline bool isInterned() |
105 | 0 | { |
106 | 0 | return !(flags & nsHtml5ElementName::NOT_INTERNED); |
107 | 0 | } |
108 | | |
109 | | inline static int32_t levelOrderBinarySearch(jArray<int32_t, int32_t> data, |
110 | | int32_t key) |
111 | 0 | { |
112 | 0 | int32_t n = data.length; |
113 | 0 | int32_t i = 0; |
114 | 0 | while (i < n) { |
115 | 0 | int32_t val = data[i]; |
116 | 0 | if (val < key) { |
117 | 0 | i = 2 * i + 2; |
118 | 0 | } else if (val > key) { |
119 | 0 | i = 2 * i + 1; |
120 | 0 | } else { |
121 | 0 | return i; |
122 | 0 | } |
123 | 0 | } |
124 | 0 | return -1; |
125 | 0 | } |
126 | | |
127 | | inline static nsHtml5ElementName* |
128 | | elementNameByBuffer(char16_t* buf, int32_t length, nsHtml5AtomTable* interner) |
129 | 0 | { |
130 | 0 | uint32_t hash = nsHtml5ElementName::bufToHash(buf, length); |
131 | 0 | jArray<int32_t, int32_t> hashes; |
132 | 0 | hashes = nsHtml5ElementName::ELEMENT_HASHES; |
133 | 0 | int32_t index = levelOrderBinarySearch(hashes, hash); |
134 | 0 | if (index < 0) { |
135 | 0 | return nullptr; |
136 | 0 | } else { |
137 | 0 | nsHtml5ElementName* elementName = |
138 | 0 | nsHtml5ElementName::ELEMENT_NAMES[index]; |
139 | 0 | nsAtom* name = elementName->name; |
140 | 0 | if (!nsHtml5Portability::localEqualsBuffer(name, buf, length)) { |
141 | 0 | return nullptr; |
142 | 0 | } |
143 | 0 | return elementName; |
144 | 0 | } |
145 | 0 | } |
146 | | |
147 | | private: |
148 | | inline static uint32_t bufToHash(char16_t* buf, int32_t length) |
149 | 0 | { |
150 | 0 | uint32_t len = length; |
151 | 0 | uint32_t first = buf[0]; |
152 | 0 | first <<= 19; |
153 | 0 | uint32_t second = 1 << 23; |
154 | 0 | uint32_t third = 0; |
155 | 0 | uint32_t fourth = 0; |
156 | 0 | uint32_t fifth = 0; |
157 | 0 | if (length >= 4) { |
158 | 0 | second = buf[length - 4]; |
159 | 0 | second <<= 4; |
160 | 0 | third = buf[length - 3]; |
161 | 0 | third <<= 9; |
162 | 0 | fourth = buf[length - 2]; |
163 | 0 | fourth <<= 14; |
164 | 0 | fifth = buf[length - 1]; |
165 | 0 | fifth <<= 24; |
166 | 0 | } else if (length == 3) { |
167 | 0 | second = buf[1]; |
168 | 0 | second <<= 4; |
169 | 0 | third = buf[2]; |
170 | 0 | third <<= 9; |
171 | 0 | } else if (length == 2) { |
172 | 0 | second = buf[1]; |
173 | 0 | second <<= 24; |
174 | 0 | } |
175 | 0 | return len + first + second + third + fourth + fifth; |
176 | 0 | } |
177 | | |
178 | | nsHtml5ElementName(nsAtom* name, |
179 | | nsAtom* camelCaseName, |
180 | | mozilla::dom::HTMLContentCreatorFunction htmlCreator, |
181 | | mozilla::dom::SVGContentCreatorFunction svgCreator, |
182 | | int32_t flags); |
183 | | |
184 | | public: |
185 | | nsHtml5ElementName(); |
186 | | ~nsHtml5ElementName(); |
187 | | inline void setNameForNonInterned(nsAtom* name, bool custom) |
188 | 0 | { |
189 | 0 | this->name = name; |
190 | 0 | this->camelCaseName = name; |
191 | 0 | if (custom) { |
192 | 0 | this->htmlCreator = NS_NewCustomElement; |
193 | 0 | } else { |
194 | 0 | this->htmlCreator = NS_NewHTMLUnknownElement; |
195 | 0 | } |
196 | 0 | MOZ_ASSERT(this->flags == nsHtml5ElementName::NOT_INTERNED); |
197 | 0 | } |
198 | | |
199 | 0 | inline bool isCustom() { return this->htmlCreator == NS_NewCustomElement; } |
200 | | |
201 | | static nsHtml5ElementName* ELT_ANNOTATION_XML; |
202 | | static nsHtml5ElementName* ELT_BIG; |
203 | | static nsHtml5ElementName* ELT_BDI; |
204 | | static nsHtml5ElementName* ELT_BDO; |
205 | | static nsHtml5ElementName* ELT_COL; |
206 | | static nsHtml5ElementName* ELT_DEL; |
207 | | static nsHtml5ElementName* ELT_DFN; |
208 | | static nsHtml5ElementName* ELT_DIR; |
209 | | static nsHtml5ElementName* ELT_DIV; |
210 | | static nsHtml5ElementName* ELT_IMG; |
211 | | static nsHtml5ElementName* ELT_INS; |
212 | | static nsHtml5ElementName* ELT_KBD; |
213 | | static nsHtml5ElementName* ELT_MAP; |
214 | | static nsHtml5ElementName* ELT_NAV; |
215 | | static nsHtml5ElementName* ELT_PRE; |
216 | | static nsHtml5ElementName* ELT_A; |
217 | | static nsHtml5ElementName* ELT_B; |
218 | | static nsHtml5ElementName* ELT_RTC; |
219 | | static nsHtml5ElementName* ELT_SUB; |
220 | | static nsHtml5ElementName* ELT_SVG; |
221 | | static nsHtml5ElementName* ELT_SUP; |
222 | | static nsHtml5ElementName* ELT_SET; |
223 | | static nsHtml5ElementName* ELT_USE; |
224 | | static nsHtml5ElementName* ELT_VAR; |
225 | | static nsHtml5ElementName* ELT_G; |
226 | | static nsHtml5ElementName* ELT_WBR; |
227 | | static nsHtml5ElementName* ELT_XMP; |
228 | | static nsHtml5ElementName* ELT_I; |
229 | | static nsHtml5ElementName* ELT_P; |
230 | | static nsHtml5ElementName* ELT_Q; |
231 | | static nsHtml5ElementName* ELT_S; |
232 | | static nsHtml5ElementName* ELT_U; |
233 | | static nsHtml5ElementName* ELT_H1; |
234 | | static nsHtml5ElementName* ELT_H2; |
235 | | static nsHtml5ElementName* ELT_H3; |
236 | | static nsHtml5ElementName* ELT_H4; |
237 | | static nsHtml5ElementName* ELT_H5; |
238 | | static nsHtml5ElementName* ELT_H6; |
239 | | static nsHtml5ElementName* ELT_AREA; |
240 | | static nsHtml5ElementName* ELT_DATA; |
241 | | static nsHtml5ElementName* ELT_FEFUNCA; |
242 | | static nsHtml5ElementName* ELT_METADATA; |
243 | | static nsHtml5ElementName* ELT_META; |
244 | | static nsHtml5ElementName* ELT_TEXTAREA; |
245 | | static nsHtml5ElementName* ELT_FEFUNCB; |
246 | | static nsHtml5ElementName* ELT_RB; |
247 | | static nsHtml5ElementName* ELT_DESC; |
248 | | static nsHtml5ElementName* ELT_DD; |
249 | | static nsHtml5ElementName* ELT_BGSOUND; |
250 | | static nsHtml5ElementName* ELT_EMBED; |
251 | | static nsHtml5ElementName* ELT_FEBLEND; |
252 | | static nsHtml5ElementName* ELT_FEFLOOD; |
253 | | static nsHtml5ElementName* ELT_HEAD; |
254 | | static nsHtml5ElementName* ELT_LEGEND; |
255 | | static nsHtml5ElementName* ELT_NOEMBED; |
256 | | static nsHtml5ElementName* ELT_TD; |
257 | | static nsHtml5ElementName* ELT_THEAD; |
258 | | static nsHtml5ElementName* ELT_ASIDE; |
259 | | static nsHtml5ElementName* ELT_ARTICLE; |
260 | | static nsHtml5ElementName* ELT_ANIMATE; |
261 | | static nsHtml5ElementName* ELT_BASE; |
262 | | static nsHtml5ElementName* ELT_BLOCKQUOTE; |
263 | | static nsHtml5ElementName* ELT_CODE; |
264 | | static nsHtml5ElementName* ELT_CIRCLE; |
265 | | static nsHtml5ElementName* ELT_CITE; |
266 | | static nsHtml5ElementName* ELT_ELLIPSE; |
267 | | static nsHtml5ElementName* ELT_FETURBULENCE; |
268 | | static nsHtml5ElementName* ELT_FEMERGENODE; |
269 | | static nsHtml5ElementName* ELT_FEIMAGE; |
270 | | static nsHtml5ElementName* ELT_FEMERGE; |
271 | | static nsHtml5ElementName* ELT_FETILE; |
272 | | static nsHtml5ElementName* ELT_FRAME; |
273 | | static nsHtml5ElementName* ELT_FIGURE; |
274 | | static nsHtml5ElementName* ELT_FECOMPOSITE; |
275 | | static nsHtml5ElementName* ELT_IMAGE; |
276 | | static nsHtml5ElementName* ELT_IFRAME; |
277 | | static nsHtml5ElementName* ELT_LINE; |
278 | | static nsHtml5ElementName* ELT_MARQUEE; |
279 | | static nsHtml5ElementName* ELT_POLYLINE; |
280 | | static nsHtml5ElementName* ELT_PICTURE; |
281 | | static nsHtml5ElementName* ELT_SOURCE; |
282 | | static nsHtml5ElementName* ELT_STRIKE; |
283 | | static nsHtml5ElementName* ELT_STYLE; |
284 | | static nsHtml5ElementName* ELT_TABLE; |
285 | | static nsHtml5ElementName* ELT_TITLE; |
286 | | static nsHtml5ElementName* ELT_TIME; |
287 | | static nsHtml5ElementName* ELT_TEMPLATE; |
288 | | static nsHtml5ElementName* ELT_ALTGLYPHDEF; |
289 | | static nsHtml5ElementName* ELT_GLYPHREF; |
290 | | static nsHtml5ElementName* ELT_DIALOG; |
291 | | static nsHtml5ElementName* ELT_FEFUNCG; |
292 | | static nsHtml5ElementName* ELT_FEDIFFUSELIGHTING; |
293 | | static nsHtml5ElementName* ELT_FESPECULARLIGHTING; |
294 | | static nsHtml5ElementName* ELT_LISTING; |
295 | | static nsHtml5ElementName* ELT_STRONG; |
296 | | static nsHtml5ElementName* ELT_ALTGLYPH; |
297 | | static nsHtml5ElementName* ELT_CLIPPATH; |
298 | | static nsHtml5ElementName* ELT_MGLYPH; |
299 | | static nsHtml5ElementName* ELT_MATH; |
300 | | static nsHtml5ElementName* ELT_MPATH; |
301 | | static nsHtml5ElementName* ELT_PATH; |
302 | | static nsHtml5ElementName* ELT_TH; |
303 | | static nsHtml5ElementName* ELT_SWITCH; |
304 | | static nsHtml5ElementName* ELT_TEXTPATH; |
305 | | static nsHtml5ElementName* ELT_LI; |
306 | | static nsHtml5ElementName* ELT_MI; |
307 | | static nsHtml5ElementName* ELT_LINK; |
308 | | static nsHtml5ElementName* ELT_MARK; |
309 | | static nsHtml5ElementName* ELT_MALIGNMARK; |
310 | | static nsHtml5ElementName* ELT_MASK; |
311 | | static nsHtml5ElementName* ELT_TRACK; |
312 | | static nsHtml5ElementName* ELT_DL; |
313 | | static nsHtml5ElementName* ELT_HTML; |
314 | | static nsHtml5ElementName* ELT_OL; |
315 | | static nsHtml5ElementName* ELT_LABEL; |
316 | | static nsHtml5ElementName* ELT_UL; |
317 | | static nsHtml5ElementName* ELT_SMALL; |
318 | | static nsHtml5ElementName* ELT_SYMBOL; |
319 | | static nsHtml5ElementName* ELT_ALTGLYPHITEM; |
320 | | static nsHtml5ElementName* ELT_ANIMATETRANSFORM; |
321 | | static nsHtml5ElementName* ELT_ACRONYM; |
322 | | static nsHtml5ElementName* ELT_EM; |
323 | | static nsHtml5ElementName* ELT_FORM; |
324 | | static nsHtml5ElementName* ELT_MENUITEM; |
325 | | static nsHtml5ElementName* ELT_PARAM; |
326 | | static nsHtml5ElementName* ELT_ANIMATEMOTION; |
327 | | static nsHtml5ElementName* ELT_BUTTON; |
328 | | static nsHtml5ElementName* ELT_CAPTION; |
329 | | static nsHtml5ElementName* ELT_FIGCAPTION; |
330 | | static nsHtml5ElementName* ELT_MN; |
331 | | static nsHtml5ElementName* ELT_KEYGEN; |
332 | | static nsHtml5ElementName* ELT_MAIN; |
333 | | static nsHtml5ElementName* ELT_OPTION; |
334 | | static nsHtml5ElementName* ELT_POLYGON; |
335 | | static nsHtml5ElementName* ELT_PATTERN; |
336 | | static nsHtml5ElementName* ELT_SPAN; |
337 | | static nsHtml5ElementName* ELT_SECTION; |
338 | | static nsHtml5ElementName* ELT_TSPAN; |
339 | | static nsHtml5ElementName* ELT_AUDIO; |
340 | | static nsHtml5ElementName* ELT_MO; |
341 | | static nsHtml5ElementName* ELT_VIDEO; |
342 | | static nsHtml5ElementName* ELT_COLGROUP; |
343 | | static nsHtml5ElementName* ELT_FEDISPLACEMENTMAP; |
344 | | static nsHtml5ElementName* ELT_HGROUP; |
345 | | static nsHtml5ElementName* ELT_RP; |
346 | | static nsHtml5ElementName* ELT_OPTGROUP; |
347 | | static nsHtml5ElementName* ELT_SAMP; |
348 | | static nsHtml5ElementName* ELT_STOP; |
349 | | static nsHtml5ElementName* ELT_BR; |
350 | | static nsHtml5ElementName* ELT_ABBR; |
351 | | static nsHtml5ElementName* ELT_ANIMATECOLOR; |
352 | | static nsHtml5ElementName* ELT_CENTER; |
353 | | static nsHtml5ElementName* ELT_HR; |
354 | | static nsHtml5ElementName* ELT_FEFUNCR; |
355 | | static nsHtml5ElementName* ELT_FECOMPONENTTRANSFER; |
356 | | static nsHtml5ElementName* ELT_FILTER; |
357 | | static nsHtml5ElementName* ELT_FOOTER; |
358 | | static nsHtml5ElementName* ELT_FEGAUSSIANBLUR; |
359 | | static nsHtml5ElementName* ELT_HEADER; |
360 | | static nsHtml5ElementName* ELT_MARKER; |
361 | | static nsHtml5ElementName* ELT_METER; |
362 | | static nsHtml5ElementName* ELT_NOBR; |
363 | | static nsHtml5ElementName* ELT_TR; |
364 | | static nsHtml5ElementName* ELT_ADDRESS; |
365 | | static nsHtml5ElementName* ELT_CANVAS; |
366 | | static nsHtml5ElementName* ELT_DEFS; |
367 | | static nsHtml5ElementName* ELT_DETAILS; |
368 | | static nsHtml5ElementName* ELT_MS; |
369 | | static nsHtml5ElementName* ELT_NOFRAMES; |
370 | | static nsHtml5ElementName* ELT_PROGRESS; |
371 | | static nsHtml5ElementName* ELT_DT; |
372 | | static nsHtml5ElementName* ELT_APPLET; |
373 | | static nsHtml5ElementName* ELT_BASEFONT; |
374 | | static nsHtml5ElementName* ELT_DATALIST; |
375 | | static nsHtml5ElementName* ELT_FOREIGNOBJECT; |
376 | | static nsHtml5ElementName* ELT_FIELDSET; |
377 | | static nsHtml5ElementName* ELT_FRAMESET; |
378 | | static nsHtml5ElementName* ELT_FEOFFSET; |
379 | | static nsHtml5ElementName* ELT_FESPOTLIGHT; |
380 | | static nsHtml5ElementName* ELT_FEPOINTLIGHT; |
381 | | static nsHtml5ElementName* ELT_FEDISTANTLIGHT; |
382 | | static nsHtml5ElementName* ELT_FONT; |
383 | | static nsHtml5ElementName* ELT_INPUT; |
384 | | static nsHtml5ElementName* ELT_LINEARGRADIENT; |
385 | | static nsHtml5ElementName* ELT_MTEXT; |
386 | | static nsHtml5ElementName* ELT_NOSCRIPT; |
387 | | static nsHtml5ElementName* ELT_RT; |
388 | | static nsHtml5ElementName* ELT_OBJECT; |
389 | | static nsHtml5ElementName* ELT_OUTPUT; |
390 | | static nsHtml5ElementName* ELT_PLAINTEXT; |
391 | | static nsHtml5ElementName* ELT_TT; |
392 | | static nsHtml5ElementName* ELT_RECT; |
393 | | static nsHtml5ElementName* ELT_RADIALGRADIENT; |
394 | | static nsHtml5ElementName* ELT_SELECT; |
395 | | static nsHtml5ElementName* ELT_SLOT; |
396 | | static nsHtml5ElementName* ELT_SCRIPT; |
397 | | static nsHtml5ElementName* ELT_TFOOT; |
398 | | static nsHtml5ElementName* ELT_TEXT; |
399 | | static nsHtml5ElementName* ELT_MENU; |
400 | | static nsHtml5ElementName* ELT_FEDROPSHADOW; |
401 | | static nsHtml5ElementName* ELT_VIEW; |
402 | | static nsHtml5ElementName* ELT_FECOLORMATRIX; |
403 | | static nsHtml5ElementName* ELT_FECONVOLVEMATRIX; |
404 | | static nsHtml5ElementName* ELT_BODY; |
405 | | static nsHtml5ElementName* ELT_FEMORPHOLOGY; |
406 | | static nsHtml5ElementName* ELT_RUBY; |
407 | | static nsHtml5ElementName* ELT_SUMMARY; |
408 | | static nsHtml5ElementName* ELT_TBODY; |
409 | | |
410 | | private: |
411 | | static nsHtml5ElementName** ELEMENT_NAMES; |
412 | | static staticJArray<int32_t, int32_t> ELEMENT_HASHES; |
413 | | |
414 | | public: |
415 | | static void initializeStatics(); |
416 | | static void releaseStatics(); |
417 | | }; |
418 | | |
419 | | #endif |