mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-10-31 16:28:05 +02:00 
			
		
		
		
	 a117230132
			
		
	
	
		a117230132
		
	
	
	
	
		
			
			Implemented the new <search> HTML element. All WPT tests for it now pass (except one for iso-8859-8, not done generally). A11y role uses just landmark as recommended instead of a new search role (for now). Co-authored-by: Henri Sivonen <hsivonen@mozilla.com> Differential Revision: https://phabricator.services.mozilla.com/D176967
		
			
				
	
	
		
			206 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #include "nsElementTable.h"
 | |
| 
 | |
| struct HTMLElement {
 | |
| #ifdef DEBUG
 | |
|   nsHTMLTag mTagID;
 | |
| #endif
 | |
|   bool mIsBlock;
 | |
|   bool mIsContainer;
 | |
| };
 | |
| 
 | |
| #ifdef DEBUG
 | |
| #  define ELEM(tag, block, container) {eHTMLTag_##tag, block, container},
 | |
| #else
 | |
| #  define ELEM(tag, block, container) {block, container},
 | |
| #endif
 | |
| 
 | |
| #define ____ false  // This makes the table easier to read.
 | |
| 
 | |
| // Note that the mIsBlock field disagrees with
 | |
| // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements for
 | |
| // the following elements: center, details, dialog, dir, dt, figcaption,
 | |
| // listing, menu, multicol, noscript, output, summary, tfoot, video.
 | |
| //
 | |
| // mrbkap thinks that the field values were pulled from the old HTML4 DTD and
 | |
| // then got modified in mostly random ways to make the old parser's behavior
 | |
| // compatible with the web. So it might make sense to change the mIsBlock
 | |
| // values for the abovementioned tags at some point.
 | |
| //
 | |
| static const HTMLElement gHTMLElements[] = {
 | |
|     // clang-format off
 | |
|   ELEM(unknown,     ____, ____)
 | |
|   ELEM(a,           ____, true)
 | |
|   ELEM(abbr,        ____, true)
 | |
|   ELEM(acronym,     ____, true)
 | |
|   ELEM(address,     true, true)
 | |
|   ELEM(applet,      ____, true)
 | |
|   ELEM(area,        ____, ____)
 | |
|   ELEM(article,     true, true)
 | |
|   ELEM(aside,       true, true)
 | |
|   ELEM(audio,       ____, true)
 | |
|   ELEM(b,           ____, true)
 | |
|   ELEM(base,        ____, ____)
 | |
|   ELEM(basefont,    ____, ____)
 | |
|   ELEM(bdi,         ____, true)
 | |
|   ELEM(bdo,         ____, true)
 | |
|   ELEM(bgsound,     ____, ____)
 | |
|   ELEM(big,         ____, true)
 | |
|   ELEM(blockquote,  true, true)
 | |
|   ELEM(body,        ____, true)
 | |
|   ELEM(br,          ____, ____)
 | |
|   ELEM(button,      ____, true)
 | |
|   ELEM(canvas,      ____, true)
 | |
|   ELEM(caption,     ____, true)
 | |
|   ELEM(center,      true, true)
 | |
|   ELEM(cite,        ____, true)
 | |
|   ELEM(code,        ____, true)
 | |
|   ELEM(col,         ____, ____)
 | |
|   ELEM(colgroup,    ____, true)
 | |
|   ELEM(data,        ____, true)
 | |
|   ELEM(datalist,    ____, true)
 | |
|   ELEM(dd,          ____, true)
 | |
|   ELEM(del,         ____, true)
 | |
|   ELEM(details,     true, true)
 | |
|   ELEM(dfn,         ____, true)
 | |
|   ELEM(dialog,      true, true)
 | |
|   ELEM(dir,         true, true)
 | |
|   ELEM(div,         true, true)
 | |
|   ELEM(dl,          true, true)
 | |
|   ELEM(dt,          ____, true)
 | |
|   ELEM(em,          ____, true)
 | |
|   ELEM(embed,       ____, ____)
 | |
|   ELEM(fieldset,    true, true)
 | |
|   ELEM(figcaption,  ____, true)
 | |
|   ELEM(figure,      true, true)
 | |
|   ELEM(font,        ____, true)
 | |
|   ELEM(footer,      true, true)
 | |
|   ELEM(form,        true, true)
 | |
|   ELEM(frame,       ____, ____)
 | |
|   ELEM(frameset,    ____, true)
 | |
|   ELEM(h1,          true, true)
 | |
|   ELEM(h2,          true, true)
 | |
|   ELEM(h3,          true, true)
 | |
|   ELEM(h4,          true, true)
 | |
|   ELEM(h5,          true, true)
 | |
|   ELEM(h6,          true, true)
 | |
|   ELEM(head,        ____, true)
 | |
|   ELEM(header,      true, true)
 | |
|   ELEM(hgroup,      true, true)
 | |
|   ELEM(hr,          true, ____)
 | |
|   ELEM(html,        ____, true)
 | |
|   ELEM(i,           ____, true)
 | |
|   ELEM(iframe,      ____, true)
 | |
|   ELEM(image,       ____, ____)
 | |
|   ELEM(img,         ____, ____)
 | |
|   ELEM(input,       ____, ____)
 | |
|   ELEM(ins,         ____, true)
 | |
|   ELEM(kbd,         ____, true)
 | |
|   ELEM(keygen,      ____, ____)
 | |
|   ELEM(label,       ____, true)
 | |
|   ELEM(legend,      ____, true)
 | |
|   ELEM(li,          true, true)
 | |
|   ELEM(link,        ____, ____)
 | |
|   ELEM(listing,     true, true)
 | |
|   ELEM(main,        true, true)
 | |
|   ELEM(map,         ____, true)
 | |
|   ELEM(mark,        ____, true)
 | |
|   ELEM(marquee,     ____, true)
 | |
|   ELEM(menu,        true, true)
 | |
|   ELEM(meta,        ____, ____)
 | |
|   ELEM(meter,       ____, true)
 | |
|   ELEM(multicol,    true, true)
 | |
|   ELEM(nav,         true, true)
 | |
|   ELEM(nobr,        ____, true)
 | |
|   ELEM(noembed,     ____, true)
 | |
|   ELEM(noframes,    ____, true)
 | |
|   ELEM(noscript,    ____, true)
 | |
|   ELEM(object,      ____, true)
 | |
|   ELEM(ol,          true, true)
 | |
|   ELEM(optgroup,    ____, true)
 | |
|   ELEM(option,      ____, true)
 | |
|   ELEM(output,      ____, true)
 | |
|   ELEM(p,           true, true)
 | |
|   ELEM(param,       ____, ____)
 | |
|   ELEM(picture,     ____, true)
 | |
|   ELEM(plaintext,   ____, true)
 | |
|   ELEM(pre,         true, true)
 | |
|   ELEM(progress,    ____, true)
 | |
|   ELEM(q,           ____, true)
 | |
|   ELEM(rb,          ____, true)
 | |
|   ELEM(rp,          ____, true)
 | |
|   ELEM(rt,          ____, true)
 | |
|   ELEM(rtc,         ____, true)
 | |
|   ELEM(ruby,        ____, true)
 | |
|   ELEM(s,           ____, true)
 | |
|   ELEM(samp,        ____, true)
 | |
|   ELEM(script,      ____, true)
 | |
|   ELEM(search,      true, true)
 | |
|   ELEM(section,     true, true)
 | |
|   ELEM(select,      ____, true)
 | |
|   ELEM(small,       ____, true)
 | |
|   ELEM(slot,        ____, true)
 | |
|   ELEM(source,      ____, ____)
 | |
|   ELEM(span,        ____, true)
 | |
|   ELEM(strike,      ____, true)
 | |
|   ELEM(strong,      ____, true)
 | |
|   ELEM(style,       ____, true)
 | |
|   ELEM(sub,         ____, true)
 | |
|   ELEM(summary,     true, true)
 | |
|   ELEM(sup,         ____, true)
 | |
|   ELEM(table,       true, true)
 | |
|   ELEM(tbody,       ____, true)
 | |
|   ELEM(td,          ____, true)
 | |
|   ELEM(textarea,    ____, true)
 | |
|   ELEM(tfoot,       ____, true)
 | |
|   ELEM(th,          ____, true)
 | |
|   ELEM(thead,       ____, true)
 | |
|   ELEM(template,    ____, true)
 | |
|   ELEM(time,        ____, true)
 | |
|   ELEM(title,       ____, true)
 | |
|   ELEM(tr,          ____, true)
 | |
|   ELEM(track,       ____, ____)
 | |
|   ELEM(tt,          ____, true)
 | |
|   ELEM(u,           ____, true)
 | |
|   ELEM(ul,          true, true)
 | |
|   ELEM(var,         ____, true)
 | |
|   ELEM(video,       ____, true)
 | |
|   ELEM(wbr,         ____, ____)
 | |
|   ELEM(xmp,         ____, true)
 | |
|   ELEM(text,        ____, ____)
 | |
|   ELEM(whitespace,  ____, ____)
 | |
|   ELEM(newline,     ____, ____)
 | |
|   ELEM(comment,     ____, true)
 | |
|   ELEM(entity,      ____, true)
 | |
|   ELEM(doctypeDecl, ____, true)
 | |
|   ELEM(markupDecl,  ____, true)
 | |
|   ELEM(instruction, ____, true)
 | |
|   ELEM(userdefined, ____, true)
 | |
|     // clang-format on
 | |
| };
 | |
| 
 | |
| #undef ELEM
 | |
| #undef ____
 | |
| 
 | |
| bool nsHTMLElement::IsContainer(nsHTMLTag aId) {
 | |
|   return gHTMLElements[aId].mIsContainer;
 | |
| }
 | |
| 
 | |
| bool nsHTMLElement::IsBlock(nsHTMLTag aId) {
 | |
|   return gHTMLElements[aId].mIsBlock;
 | |
| }
 | |
| 
 | |
| #ifdef DEBUG
 | |
| void CheckElementTable() {
 | |
|   for (nsHTMLTag t = eHTMLTag_unknown; t <= eHTMLTag_userdefined;
 | |
|        t = nsHTMLTag(t + 1)) {
 | |
|     MOZ_ASSERT(gHTMLElements[t].mTagID == t,
 | |
|                "gHTMLElements entries does match tag list.");
 | |
|   }
 | |
| }
 | |
| #endif
 |