Bug 820508 part 1 - Parser support for <main>. r=smaug.
authorHenri Sivonen <hsivonen@iki.fi>
Tue, 29 Jan 2013 14:31:45 +0200
changeset 130073 2d7c81a2d08e344f4f4a358361d83d64a9489cf2
parent 130072 b25e9408b850af0d7c4757e4e14ac54468ab013f
child 130074 f3dffbc276187d722ee4887ecc98f22fd54aeb78
push id2323
push userbbajaj@mozilla.com
push dateMon, 01 Apr 2013 19:47:02 +0000
treeherdermozilla-beta@7712be144d91 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssmaug
bugs820508
milestone21.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 820508 part 1 - Parser support for <main>. r=smaug.
parser/html/javasrc/ElementName.java
parser/html/javasrc/TreeBuilder.java
parser/html/nsHtml5AtomList.h
parser/html/nsHtml5ElementName.cpp
parser/html/nsHtml5ElementName.h
parser/html/nsHtml5TreeBuilder.cpp
parser/html/nsHtml5TreeBuilder.h
parser/htmlparser/tests/mochitest/html5lib_tree_construction/Makefile.in
parser/htmlparser/tests/mochitest/html5lib_tree_construction/main-element.dat
parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html
--- a/parser/html/javasrc/ElementName.java
+++ b/parser/html/javasrc/ElementName.java
@@ -343,17 +343,17 @@ public final class ElementName
 //            case TreeBuilder.EMBED_OR_IMG:
 //                return "EMBED_OR_IMG";
 //            case TreeBuilder.AREA_OR_WBR:
 //                return "AREA_OR_WBR";
 //            case TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
 //                return "DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU";
 //            case TreeBuilder.FIELDSET:
 //                return "FIELDSET";
-//            case TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY:
+//            case TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY:
 //                return "ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY";
 //            case TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR:
 //                return "RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR";
 //            case TreeBuilder.RT_OR_RP:
 //                return "RT_OR_RP";
 //            case TreeBuilder.COMMAND:
 //                return "COMMAND";
 //            case TreeBuilder.PARAM_OR_SOURCE_OR_TRACK:
@@ -456,17 +456,17 @@ public final class ElementName
     public static final ElementName BIG = new ElementName("big", "big", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
     public static final ElementName BDO = new ElementName("bdo", "bdo", TreeBuilder.OTHER);
     public static final ElementName CSC = new ElementName("csc", "csc", TreeBuilder.OTHER);
     public static final ElementName COL = new ElementName("col", "col", TreeBuilder.COL | SPECIAL);
     public static final ElementName COS = new ElementName("cos", "cos", TreeBuilder.OTHER);
     public static final ElementName COT = new ElementName("cot", "cot", TreeBuilder.OTHER);
     public static final ElementName DEL = new ElementName("del", "del", TreeBuilder.OTHER);
     public static final ElementName DFN = new ElementName("dfn", "dfn", TreeBuilder.OTHER);
-    public static final ElementName DIR = new ElementName("dir", "dir", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName DIR = new ElementName("dir", "dir", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName DIV = new ElementName("div", "div", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
     public static final ElementName EXP = new ElementName("exp", "exp", TreeBuilder.OTHER);
     public static final ElementName GCD = new ElementName("gcd", "gcd", TreeBuilder.OTHER);
     public static final ElementName GEQ = new ElementName("geq", "geq", TreeBuilder.OTHER);
     public static final ElementName IMG = new ElementName("img", "img", TreeBuilder.EMBED_OR_IMG | SPECIAL);
     public static final ElementName INS = new ElementName("ins", "ins", TreeBuilder.OTHER);
     public static final ElementName INT = new ElementName("int", "int", TreeBuilder.OTHER);
     public static final ElementName KBD = new ElementName("kbd", "kbd", TreeBuilder.OTHER);
@@ -475,17 +475,17 @@ public final class ElementName
     public static final ElementName LEQ = new ElementName("leq", "leq", TreeBuilder.OTHER);
     public static final ElementName MTD = new ElementName("mtd", "mtd", TreeBuilder.OTHER);
     public static final ElementName MIN = new ElementName("min", "min", TreeBuilder.OTHER);
     public static final ElementName MAP = new ElementName("map", "map", TreeBuilder.OTHER);
     public static final ElementName MTR = new ElementName("mtr", "mtr", TreeBuilder.OTHER);
     public static final ElementName MAX = new ElementName("max", "max", TreeBuilder.OTHER);
     public static final ElementName NEQ = new ElementName("neq", "neq", TreeBuilder.OTHER);
     public static final ElementName NOT = new ElementName("not", "not", TreeBuilder.OTHER);
-    public static final ElementName NAV = new ElementName("nav", "nav", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName NAV = new ElementName("nav", "nav", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName PRE = new ElementName("pre", "pre", TreeBuilder.PRE_OR_LISTING | SPECIAL);
     public static final ElementName REM = new ElementName("rem", "rem", TreeBuilder.OTHER);
     public static final ElementName SUB = new ElementName("sub", "sub", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
     public static final ElementName SEC = new ElementName("sec", "sec", TreeBuilder.OTHER);
     public static final ElementName SVG = new ElementName("svg", "svg", TreeBuilder.SVG);
     public static final ElementName SUM = new ElementName("sum", "sum", TreeBuilder.OTHER);
     public static final ElementName SIN = new ElementName("sin", "sin", TreeBuilder.OTHER);
     public static final ElementName SEP = new ElementName("sep", "sep", TreeBuilder.OTHER);
@@ -522,16 +522,17 @@ public final class ElementName
     public static final ElementName LIST = new ElementName("list", "list", TreeBuilder.OTHER);
     public static final ElementName META = new ElementName("meta", "meta", TreeBuilder.META | SPECIAL);
     public static final ElementName MSUB = new ElementName("msub", "msub", TreeBuilder.OTHER);
     public static final ElementName MODE = new ElementName("mode", "mode", TreeBuilder.OTHER);
     public static final ElementName MATH = new ElementName("math", "math", TreeBuilder.MATH);
     public static final ElementName MARK = new ElementName("mark", "mark", TreeBuilder.OTHER);
     public static final ElementName MASK = new ElementName("mask", "mask", TreeBuilder.OTHER);
     public static final ElementName MEAN = new ElementName("mean", "mean", TreeBuilder.OTHER);
+    public static final ElementName MAIN = new ElementName("main", "main", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName MSUP = new ElementName("msup", "msup", TreeBuilder.OTHER);
     public static final ElementName MENU = new ElementName("menu", "menu", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
     public static final ElementName MROW = new ElementName("mrow", "mrow", TreeBuilder.OTHER);
     public static final ElementName NONE = new ElementName("none", "none", TreeBuilder.OTHER);
     public static final ElementName NOBR = new ElementName("nobr", "nobr", TreeBuilder.NOBR);
     public static final ElementName NEST = new ElementName("nest", "nest", TreeBuilder.OTHER);
     public static final ElementName PATH = new ElementName("path", "path", TreeBuilder.OTHER);
     public static final ElementName PLUS = new ElementName("plus", "plus", TreeBuilder.OTHER);
@@ -548,17 +549,17 @@ public final class ElementName
     public static final ElementName STOP = new ElementName("stop", "stop", TreeBuilder.OTHER);
     public static final ElementName SDEV = new ElementName("sdev", "sdev", TreeBuilder.OTHER);
     public static final ElementName TIME = new ElementName("time", "time", TreeBuilder.OTHER);
     public static final ElementName TRUE = new ElementName("true", "true", TreeBuilder.OTHER);
     public static final ElementName TREF = new ElementName("tref", "tref", TreeBuilder.OTHER);
     public static final ElementName TANH = new ElementName("tanh", "tanh", TreeBuilder.OTHER);
     public static final ElementName TEXT = new ElementName("text", "text", TreeBuilder.OTHER);
     public static final ElementName VIEW = new ElementName("view", "view", TreeBuilder.OTHER);
-    public static final ElementName ASIDE = new ElementName("aside", "aside", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName ASIDE = new ElementName("aside", "aside", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName AUDIO = new ElementName("audio", "audio", TreeBuilder.OTHER);
     public static final ElementName APPLY = new ElementName("apply", "apply", TreeBuilder.OTHER);
     public static final ElementName EMBED = new ElementName("embed", "embed", TreeBuilder.EMBED_OR_IMG | SPECIAL);
     public static final ElementName FRAME = new ElementName("frame", "frame", TreeBuilder.FRAME | SPECIAL);
     public static final ElementName FALSE = new ElementName("false", "false", TreeBuilder.OTHER);
     public static final ElementName FLOOR = new ElementName("floor", "floor", TreeBuilder.OTHER);
     public static final ElementName GLYPH = new ElementName("glyph", "glyph", TreeBuilder.OTHER);
     public static final ElementName HKERN = new ElementName("hkern", "hkern", TreeBuilder.OTHER);
@@ -606,22 +607,22 @@ public final class ElementName
     public static final ElementName CENTER = new ElementName("center", "center", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
     public static final ElementName CURSOR = new ElementName("cursor", "cursor", TreeBuilder.OTHER);
     public static final ElementName CANVAS = new ElementName("canvas", "canvas", TreeBuilder.OTHER);
     public static final ElementName DIVIDE = new ElementName("divide", "divide", TreeBuilder.OTHER);
     public static final ElementName DEGREE = new ElementName("degree", "degree", TreeBuilder.OTHER);
     public static final ElementName DOMAIN = new ElementName("domain", "domain", TreeBuilder.OTHER);
     public static final ElementName EXISTS = new ElementName("exists", "exists", TreeBuilder.OTHER);
     public static final ElementName FETILE = new ElementName("fetile", "feTile", TreeBuilder.OTHER);
-    public static final ElementName FIGURE = new ElementName("figure", "figure", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName FIGURE = new ElementName("figure", "figure", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName FORALL = new ElementName("forall", "forall", TreeBuilder.OTHER);
     public static final ElementName FILTER = new ElementName("filter", "filter", TreeBuilder.OTHER);
-    public static final ElementName FOOTER = new ElementName("footer", "footer", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
-    public static final ElementName HGROUP = new ElementName("hgroup", "hgroup", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
-    public static final ElementName HEADER = new ElementName("header", "header", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName FOOTER = new ElementName("footer", "footer", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName HGROUP = new ElementName("hgroup", "hgroup", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName HEADER = new ElementName("header", "header", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName IFRAME = new ElementName("iframe", "iframe", TreeBuilder.IFRAME | SPECIAL);
     public static final ElementName KEYGEN = new ElementName("keygen", "keygen", TreeBuilder.KEYGEN);
     public static final ElementName LAMBDA = new ElementName("lambda", "lambda", TreeBuilder.OTHER);
     public static final ElementName LEGEND = new ElementName("legend", "legend", TreeBuilder.OTHER);
     public static final ElementName MSPACE = new ElementName("mspace", "mspace", TreeBuilder.OTHER);
     public static final ElementName MTABLE = new ElementName("mtable", "mtable", TreeBuilder.OTHER);
     public static final ElementName MSTYLE = new ElementName("mstyle", "mstyle", TreeBuilder.OTHER);
     public static final ElementName MGLYPH = new ElementName("mglyph", "mglyph", TreeBuilder.MGLYPH_OR_MALIGNMARK);
@@ -640,35 +641,35 @@ public final class ElementName
     public static final ElementName STRONG = new ElementName("strong", "strong", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
     public static final ElementName SWITCH = new ElementName("switch", "switch", TreeBuilder.OTHER);
     public static final ElementName SYMBOL = new ElementName("symbol", "symbol", TreeBuilder.OTHER);
     public static final ElementName SELECT = new ElementName("select", "select", TreeBuilder.SELECT | SPECIAL);
     public static final ElementName SUBSET = new ElementName("subset", "subset", TreeBuilder.OTHER);
     public static final ElementName SCRIPT = new ElementName("script", "script", TreeBuilder.SCRIPT | SPECIAL);
     public static final ElementName TBREAK = new ElementName("tbreak", "tbreak", TreeBuilder.OTHER);
     public static final ElementName VECTOR = new ElementName("vector", "vector", TreeBuilder.OTHER);
-    public static final ElementName ARTICLE = new ElementName("article", "article", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName ARTICLE = new ElementName("article", "article", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName ANIMATE = new ElementName("animate", "animate", TreeBuilder.OTHER);
     public static final ElementName ARCSECH = new ElementName("arcsech", "arcsech", TreeBuilder.OTHER);
     public static final ElementName ARCCSCH = new ElementName("arccsch", "arccsch", TreeBuilder.OTHER);
     public static final ElementName ARCTANH = new ElementName("arctanh", "arctanh", TreeBuilder.OTHER);
     public static final ElementName ARCSINH = new ElementName("arcsinh", "arcsinh", TreeBuilder.OTHER);
     public static final ElementName ARCCOSH = new ElementName("arccosh", "arccosh", TreeBuilder.OTHER);
     public static final ElementName ARCCOTH = new ElementName("arccoth", "arccoth", TreeBuilder.OTHER);
     public static final ElementName ACRONYM = new ElementName("acronym", "acronym", TreeBuilder.OTHER);
-    public static final ElementName ADDRESS = new ElementName("address", "address", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName ADDRESS = new ElementName("address", "address", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName BGSOUND = new ElementName("bgsound", "bgsound", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
     public static final ElementName COMMAND = new ElementName("command", "command", TreeBuilder.COMMAND | SPECIAL);
     public static final ElementName COMPOSE = new ElementName("compose", "compose", TreeBuilder.OTHER);
     public static final ElementName CEILING = new ElementName("ceiling", "ceiling", TreeBuilder.OTHER);
     public static final ElementName CSYMBOL = new ElementName("csymbol", "csymbol", TreeBuilder.OTHER);
     public static final ElementName CAPTION = new ElementName("caption", "caption", TreeBuilder.CAPTION | SPECIAL | SCOPING);
     public static final ElementName DISCARD = new ElementName("discard", "discard", TreeBuilder.OTHER);
     public static final ElementName DECLARE = new ElementName("declare", "declare", TreeBuilder.OTHER);
-    public static final ElementName DETAILS = new ElementName("details", "details", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName DETAILS = new ElementName("details", "details", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName ELLIPSE = new ElementName("ellipse", "ellipse", TreeBuilder.OTHER);
     public static final ElementName FEFUNCA = new ElementName("fefunca", "feFuncA", TreeBuilder.OTHER);
     public static final ElementName FEFUNCB = new ElementName("fefuncb", "feFuncB", TreeBuilder.OTHER);
     public static final ElementName FEBLEND = new ElementName("feblend", "feBlend", TreeBuilder.OTHER);
     public static final ElementName FEFLOOD = new ElementName("feflood", "feFlood", TreeBuilder.OTHER);
     public static final ElementName FEIMAGE = new ElementName("feimage", "feImage", TreeBuilder.OTHER);
     public static final ElementName FEMERGE = new ElementName("femerge", "feMerge", TreeBuilder.OTHER);
     public static final ElementName FEFUNCG = new ElementName("fefuncg", "feFuncG", TreeBuilder.OTHER);
@@ -684,18 +685,18 @@ public final class ElementName
     public static final ElementName MARQUEE = new ElementName("marquee", "marquee", TreeBuilder.MARQUEE_OR_APPLET | SPECIAL | SCOPING);
     public static final ElementName MACTION = new ElementName("maction", "maction", TreeBuilder.OTHER);
     public static final ElementName MSUBSUP = new ElementName("msubsup", "msubsup", TreeBuilder.OTHER);
     public static final ElementName NOEMBED = new ElementName("noembed", "noembed", TreeBuilder.NOEMBED | SPECIAL);
     public static final ElementName POLYGON = new ElementName("polygon", "polygon", TreeBuilder.OTHER);
     public static final ElementName PATTERN = new ElementName("pattern", "pattern", TreeBuilder.OTHER);
     public static final ElementName PRODUCT = new ElementName("product", "product", TreeBuilder.OTHER);
     public static final ElementName SETDIFF = new ElementName("setdiff", "setdiff", TreeBuilder.OTHER);
-    public static final ElementName SECTION = new ElementName("section", "section", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
-    public static final ElementName SUMMARY = new ElementName("summary", "summary", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName SECTION = new ElementName("section", "section", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName SUMMARY = new ElementName("summary", "summary", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName TENDSTO = new ElementName("tendsto", "tendsto", TreeBuilder.OTHER);
     public static final ElementName UPLIMIT = new ElementName("uplimit", "uplimit", TreeBuilder.OTHER);
     public static final ElementName ALTGLYPH = new ElementName("altglyph", "altGlyph", TreeBuilder.OTHER);
     public static final ElementName BASEFONT = new ElementName("basefont", "basefont", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
     public static final ElementName CLIPPATH = new ElementName("clippath", "clipPath", TreeBuilder.OTHER);
     public static final ElementName CODOMAIN = new ElementName("codomain", "codomain", TreeBuilder.OTHER);
     public static final ElementName COLGROUP = new ElementName("colgroup", "colgroup", TreeBuilder.COLGROUP | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName EMPTYSET = new ElementName("emptyset", "emptyset", TreeBuilder.OTHER);
@@ -742,17 +743,17 @@ public final class ElementName
     public static final ElementName RATIONALS = new ElementName("rationals", "rationals", TreeBuilder.OTHER);
     public static final ElementName SEMANTICS = new ElementName("semantics", "semantics", TreeBuilder.OTHER);
     public static final ElementName TRANSPOSE = new ElementName("transpose", "transpose", TreeBuilder.OTHER);
     public static final ElementName ANNOTATION = new ElementName("annotation", "annotation", TreeBuilder.OTHER);
     public static final ElementName BLOCKQUOTE = new ElementName("blockquote", "blockquote", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
     public static final ElementName DIVERGENCE = new ElementName("divergence", "divergence", TreeBuilder.OTHER);
     public static final ElementName EULERGAMMA = new ElementName("eulergamma", "eulergamma", TreeBuilder.OTHER);
     public static final ElementName EQUIVALENT = new ElementName("equivalent", "equivalent", TreeBuilder.OTHER);
-    public static final ElementName FIGCAPTION = new ElementName("figcaption", "figcaption", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
+    public static final ElementName FIGCAPTION = new ElementName("figcaption", "figcaption", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
     public static final ElementName IMAGINARYI = new ElementName("imaginaryi", "imaginaryi", TreeBuilder.OTHER);
     public static final ElementName MALIGNMARK = new ElementName("malignmark", "malignmark", TreeBuilder.MGLYPH_OR_MALIGNMARK);
     public static final ElementName MUNDEROVER = new ElementName("munderover", "munderover", TreeBuilder.OTHER);
     public static final ElementName MLABELEDTR = new ElementName("mlabeledtr", "mlabeledtr", TreeBuilder.OTHER);
     public static final ElementName NOTANUMBER = new ElementName("notanumber", "notanumber", TreeBuilder.OTHER);
     public static final ElementName SOLIDCOLOR = new ElementName("solidcolor", "solidcolor", TreeBuilder.OTHER);
     public static final ElementName ALTGLYPHDEF = new ElementName("altglyphdef", "altGlyphDef", TreeBuilder.OTHER);
     public static final ElementName DETERMINANT = new ElementName("determinant", "determinant", TreeBuilder.OTHER);
@@ -915,16 +916,17 @@ public final class ElementName
     LIST,
     META,
     MSUB,
     MODE,
     MATH,
     MARK,
     MASK,
     MEAN,
+    MAIN,
     MSUP,
     MENU,
     MROW,
     NONE,
     NOBR,
     NEST,
     PATH,
     PLUS,
@@ -1309,16 +1311,17 @@ public final class ElementName
     147475756,
     147902637,
     147936877,
     148017645,
     148131885,
     148228141,
     148229165,
     148309165,
+    148317229,
     148395629,
     148551853,
     148618829,
     149076462,
     149490158,
     149572782,
     151277616,
     151639440,
--- a/parser/html/javasrc/TreeBuilder.java
+++ b/parser/html/javasrc/TreeBuilder.java
@@ -164,17 +164,17 @@ public abstract class TreeBuilder<T> imp
     final static int IFRAME = 47;
 
     final static int EMBED_OR_IMG = 48;
 
     final static int AREA_OR_WBR = 49;
 
     final static int DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU = 50;
 
-    final static int ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY = 51;
+    final static int ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY = 51;
 
     final static int RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR = 52;
 
     final static int RT_OR_RP = 53;
 
     final static int COMMAND = 54;
 
     final static int PARAM_OR_SOURCE_OR_TRACK = 55;
@@ -1923,17 +1923,17 @@ public abstract class TreeBuilder<T> imp
                                 }
                                 if (addAttributesToBody(attributes)) {
                                     attributes = null; // CPP
                                 }
                                 break starttagloop;
                             case P:
                             case DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
                             case UL_OR_OL_OR_DL:
-                            case ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY:
+                            case ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY:
                                 implicitlyCloseP();
                                 appendToCurrentNodeAndPushElementMayFoster(
                                         elementName,
                                         attributes);
                                 attributes = null; // CPP
                                 break starttagloop;
                             case H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6:
                                 implicitlyCloseP();
@@ -3418,17 +3418,17 @@ public abstract class TreeBuilder<T> imp
                             }
                             mode = AFTER_BODY;
                             continue;
                         case DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
                         case UL_OR_OL_OR_DL:
                         case PRE_OR_LISTING:
                         case FIELDSET:
                         case BUTTON:
-                        case ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY:
+                        case ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY:
                             eltPos = findLastInScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 errStrayEndTag(name);
                             } else {
                                 generateImpliedEndTags();
                                 if (errorHandler != null && !isCurrent(name)) {
                                     errUnclosedElements(eltPos, name);
                                 }
--- a/parser/html/nsHtml5AtomList.h
+++ b/parser/html/nsHtml5AtomList.h
@@ -793,16 +793,17 @@ HTML5_ATOM(defs, "defs")
 HTML5_ATOM(font, "font")
 HTML5_ATOM(grad, "grad")
 HTML5_ATOM(line, "line")
 HTML5_ATOM(meta, "meta")
 HTML5_ATOM(msub, "msub")
 HTML5_ATOM(math, "math")
 HTML5_ATOM(mark, "mark")
 HTML5_ATOM(mean, "mean")
+HTML5_ATOM(main, "main")
 HTML5_ATOM(msup, "msup")
 HTML5_ATOM(menu, "menu")
 HTML5_ATOM(mrow, "mrow")
 HTML5_ATOM(none, "none")
 HTML5_ATOM(nest, "nest")
 HTML5_ATOM(plus, "plus")
 HTML5_ATOM(rule, "rule")
 HTML5_ATOM(real, "real")
--- a/parser/html/nsHtml5ElementName.cpp
+++ b/parser/html/nsHtml5ElementName.cpp
@@ -249,16 +249,17 @@ nsHtml5ElementName* nsHtml5ElementName::
 nsHtml5ElementName* nsHtml5ElementName::ELT_LIST = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_META = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MSUB = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MODE = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MATH = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MARK = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MASK = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MEAN = nullptr;
+nsHtml5ElementName* nsHtml5ElementName::ELT_MAIN = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MSUP = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MENU = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_MROW = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_NONE = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_NOBR = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_NEST = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_PATH = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_PLUS = nullptr;
@@ -522,17 +523,17 @@ nsHtml5ElementName* nsHtml5ElementName::
 nsHtml5ElementName* nsHtml5ElementName::ELT_FONT_FACE_FORMAT = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_FECONVOLVEMATRIX = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_FEDIFFUSELIGHTING = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_FEDISPLACEMENTMAP = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_FESPECULARLIGHTING = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_DOMAINOFAPPLICATION = nullptr;
 nsHtml5ElementName* nsHtml5ElementName::ELT_FECOMPONENTTRANSFER = nullptr;
 nsHtml5ElementName** nsHtml5ElementName::ELEMENT_NAMES = 0;
-static int32_t const ELEMENT_HASHES_DATA[] = { 1057, 1090, 1255, 1321, 1552, 1585, 1651, 1717, 68162, 68899, 69059, 69764, 70020, 70276, 71077, 71205, 72134, 72232, 72264, 72296, 72328, 72360, 72392, 73351, 74312, 75209, 78124, 78284, 78476, 79149, 79309, 79341, 79469, 81295, 81487, 82224, 84498, 84626, 86164, 86292, 86612, 86676, 87445, 3183041, 3186241, 3198017, 3218722, 3226754, 3247715, 3256803, 3263971, 3264995, 3289252, 3291332, 3295524, 3299620, 3326725, 3379303, 3392679, 3448233, 3460553, 3461577, 3510347, 3546604, 3552364, 3556524, 3576461, 3586349, 3588141, 3590797, 3596333, 3622062, 3625454, 3627054, 3675728, 3749042, 3771059, 3771571, 3776211, 3782323, 3782963, 3784883, 3785395, 3788979, 3815476, 3839605, 3885110, 3917911, 3948984, 3951096, 135304769, 135858241, 136498210, 136906434, 137138658, 137512995, 137531875, 137548067, 137629283, 137645539, 137646563, 137775779, 138529956, 138615076, 139040932, 140954086, 141179366, 141690439, 142738600, 143013512, 146979116, 147175724, 147475756, 147902637, 147936877, 148017645, 148131885, 148228141, 148229165, 148309165, 148395629, 148551853, 148618829, 149076462, 149490158, 149572782, 151277616, 151639440, 153268914, 153486514, 153563314, 153750706, 153763314, 153914034, 154406067, 154417459, 154600979, 154678323, 154680979, 154866835, 155366708, 155375188, 155391572, 155465780, 155869364, 158045494, 168988979, 169321621, 169652752, 173151309, 174240818, 174247297, 174669292, 175391532, 176638123, 177380397, 177879204, 177886734, 180753473, 181020073, 181503558, 181686320, 181999237, 181999311, 182048201, 182074866, 182078003, 182083764, 182920847, 184716457, 184976961, 185145071, 187281445, 187872052, 188100653, 188875944, 188919873, 188920457, 189107250, 189203987, 189371817, 189414886, 189567458, 190266670, 191318187, 191337609, 202479203, 202493027, 202835587, 202843747, 203013219, 203036048, 203045987, 203177552, 203898516, 204648562, 205067918, 205078130, 205096654, 205689142, 205690439, 205988909, 207213161, 207794484, 207800999, 208023602, 208213644, 208213647, 210261490, 210310273, 210940978, 213325049, 213946445, 214055079, 215125040, 215134273, 215135028, 215237420, 215418148, 215553166, 215553394, 215563858, 215627949, 215754324, 217529652, 217713834, 217732628, 218731945, 221417045, 221424946, 221493746, 221515401, 221658189, 221908140, 221910626, 221921586, 222659762, 225001091, 236105833, 236113965, 236194995, 236195427, 236206132, 236206387, 236211683, 236212707, 236381647, 236571826, 237124271, 238172205, 238210544, 238270764, 238435405, 238501172, 239224867, 239257644, 239710497, 240307721, 241208789, 241241557, 241318060, 241319404, 241343533, 241344069, 241405397, 241765845, 243864964, 244502085, 244946220, 245109902, 247647266, 247707956, 248648814, 248648836, 248682161, 248986932, 249058914, 249697357, 252132601, 252135604, 252317348, 255007012, 255278388, 255641645, 256365156, 257566121, 269763372, 271202790, 271863856, 272049197, 272127474, 274339449, 274939471, 275388004, 275388005, 275388006, 275977800, 278267602, 278513831, 278712622, 281613765, 281683369, 282120228, 282250732, 282498697, 282508942, 283743649, 283787570, 284710386, 285391148, 285478533, 285854898, 285873762, 286931113, 288964227, 289445441, 289689648, 291671489, 303512884, 305319975, 305610036, 305764101, 308448294, 308675890, 312085683, 312264750, 315032867, 316391000, 317331042, 317902135, 318950711, 319447220, 321499182, 322538804, 323145200, 337067316, 337826293, 339905989, 340833697, 341457068, 342310196, 345302593, 349554733, 349771471, 349786245, 350819405, 356072847, 370349192, 373962798, 375558638, 375574835, 376053993, 383276530, 383373833, 383407586, 384439906, 386079012, 404133513, 404307343, 407031852, 408072233, 409112005, 409608425, 409771500, 419040932, 437730612, 439529766, 442616365, 442813037, 443157674, 443295316, 450118444, 450482697, 456789668, 459935396, 471217869, 474073645, 476230702, 476665218, 476717289, 483014825, 485083298, 489306281, 538364390, 540675748, 543819186, 543958612, 576960820, 577242548, 610515252, 642202932, 644420819 };
+static int32_t const ELEMENT_HASHES_DATA[] = { 1057, 1090, 1255, 1321, 1552, 1585, 1651, 1717, 68162, 68899, 69059, 69764, 70020, 70276, 71077, 71205, 72134, 72232, 72264, 72296, 72328, 72360, 72392, 73351, 74312, 75209, 78124, 78284, 78476, 79149, 79309, 79341, 79469, 81295, 81487, 82224, 84498, 84626, 86164, 86292, 86612, 86676, 87445, 3183041, 3186241, 3198017, 3218722, 3226754, 3247715, 3256803, 3263971, 3264995, 3289252, 3291332, 3295524, 3299620, 3326725, 3379303, 3392679, 3448233, 3460553, 3461577, 3510347, 3546604, 3552364, 3556524, 3576461, 3586349, 3588141, 3590797, 3596333, 3622062, 3625454, 3627054, 3675728, 3749042, 3771059, 3771571, 3776211, 3782323, 3782963, 3784883, 3785395, 3788979, 3815476, 3839605, 3885110, 3917911, 3948984, 3951096, 135304769, 135858241, 136498210, 136906434, 137138658, 137512995, 137531875, 137548067, 137629283, 137645539, 137646563, 137775779, 138529956, 138615076, 139040932, 140954086, 141179366, 141690439, 142738600, 143013512, 146979116, 147175724, 147475756, 147902637, 147936877, 148017645, 148131885, 148228141, 148229165, 148309165, 148317229, 148395629, 148551853, 148618829, 149076462, 149490158, 149572782, 151277616, 151639440, 153268914, 153486514, 153563314, 153750706, 153763314, 153914034, 154406067, 154417459, 154600979, 154678323, 154680979, 154866835, 155366708, 155375188, 155391572, 155465780, 155869364, 158045494, 168988979, 169321621, 169652752, 173151309, 174240818, 174247297, 174669292, 175391532, 176638123, 177380397, 177879204, 177886734, 180753473, 181020073, 181503558, 181686320, 181999237, 181999311, 182048201, 182074866, 182078003, 182083764, 182920847, 184716457, 184976961, 185145071, 187281445, 187872052, 188100653, 188875944, 188919873, 188920457, 189107250, 189203987, 189371817, 189414886, 189567458, 190266670, 191318187, 191337609, 202479203, 202493027, 202835587, 202843747, 203013219, 203036048, 203045987, 203177552, 203898516, 204648562, 205067918, 205078130, 205096654, 205689142, 205690439, 205988909, 207213161, 207794484, 207800999, 208023602, 208213644, 208213647, 210261490, 210310273, 210940978, 213325049, 213946445, 214055079, 215125040, 215134273, 215135028, 215237420, 215418148, 215553166, 215553394, 215563858, 215627949, 215754324, 217529652, 217713834, 217732628, 218731945, 221417045, 221424946, 221493746, 221515401, 221658189, 221908140, 221910626, 221921586, 222659762, 225001091, 236105833, 236113965, 236194995, 236195427, 236206132, 236206387, 236211683, 236212707, 236381647, 236571826, 237124271, 238172205, 238210544, 238270764, 238435405, 238501172, 239224867, 239257644, 239710497, 240307721, 241208789, 241241557, 241318060, 241319404, 241343533, 241344069, 241405397, 241765845, 243864964, 244502085, 244946220, 245109902, 247647266, 247707956, 248648814, 248648836, 248682161, 248986932, 249058914, 249697357, 252132601, 252135604, 252317348, 255007012, 255278388, 255641645, 256365156, 257566121, 269763372, 271202790, 271863856, 272049197, 272127474, 274339449, 274939471, 275388004, 275388005, 275388006, 275977800, 278267602, 278513831, 278712622, 281613765, 281683369, 282120228, 282250732, 282498697, 282508942, 283743649, 283787570, 284710386, 285391148, 285478533, 285854898, 285873762, 286931113, 288964227, 289445441, 289689648, 291671489, 303512884, 305319975, 305610036, 305764101, 308448294, 308675890, 312085683, 312264750, 315032867, 316391000, 317331042, 317902135, 318950711, 319447220, 321499182, 322538804, 323145200, 337067316, 337826293, 339905989, 340833697, 341457068, 342310196, 345302593, 349554733, 349771471, 349786245, 350819405, 356072847, 370349192, 373962798, 375558638, 375574835, 376053993, 383276530, 383373833, 383407586, 384439906, 386079012, 404133513, 404307343, 407031852, 408072233, 409112005, 409608425, 409771500, 419040932, 437730612, 439529766, 442616365, 442813037, 443157674, 443295316, 450118444, 450482697, 456789668, 459935396, 471217869, 474073645, 476230702, 476665218, 476717289, 483014825, 485083298, 489306281, 538364390, 540675748, 543819186, 543958612, 576960820, 577242548, 610515252, 642202932, 644420819 };
 staticJArray<int32_t,int32_t> nsHtml5ElementName::ELEMENT_HASHES = { ELEMENT_HASHES_DATA, NS_ARRAY_LENGTH(ELEMENT_HASHES_DATA) };
 void
 nsHtml5ElementName::initializeStatics()
 {
   ELT_NULL_ELEMENT_NAME = new nsHtml5ElementName(nullptr);
   ELT_A = new nsHtml5ElementName(nsHtml5Atoms::a, nsHtml5Atoms::a, NS_HTML5TREE_BUILDER_A);
   ELT_B = new nsHtml5ElementName(nsHtml5Atoms::b, nsHtml5Atoms::b, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_G = new nsHtml5ElementName(nsHtml5Atoms::g, nsHtml5Atoms::g, NS_HTML5TREE_BUILDER_OTHER);
@@ -582,17 +583,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_BIG = new nsHtml5ElementName(nsHtml5Atoms::big, nsHtml5Atoms::big, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_BDO = new nsHtml5ElementName(nsHtml5Atoms::bdo, nsHtml5Atoms::bdo, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CSC = new nsHtml5ElementName(nsHtml5Atoms::csc, nsHtml5Atoms::csc, NS_HTML5TREE_BUILDER_OTHER);
   ELT_COL = new nsHtml5ElementName(nsHtml5Atoms::col, nsHtml5Atoms::col, NS_HTML5TREE_BUILDER_COL | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_COS = new nsHtml5ElementName(nsHtml5Atoms::cos, nsHtml5Atoms::cos, NS_HTML5TREE_BUILDER_OTHER);
   ELT_COT = new nsHtml5ElementName(nsHtml5Atoms::cot, nsHtml5Atoms::cot, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DEL = new nsHtml5ElementName(nsHtml5Atoms::del, nsHtml5Atoms::del, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DFN = new nsHtml5ElementName(nsHtml5Atoms::dfn, nsHtml5Atoms::dfn, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_DIR = new nsHtml5ElementName(nsHtml5Atoms::dir, nsHtml5Atoms::dir, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_DIR = new nsHtml5ElementName(nsHtml5Atoms::dir, nsHtml5Atoms::dir, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_DIV = new nsHtml5ElementName(nsHtml5Atoms::div, nsHtml5Atoms::div, NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_EXP = new nsHtml5ElementName(nsHtml5Atoms::exp, nsHtml5Atoms::exp, NS_HTML5TREE_BUILDER_OTHER);
   ELT_GCD = new nsHtml5ElementName(nsHtml5Atoms::gcd, nsHtml5Atoms::gcd, NS_HTML5TREE_BUILDER_OTHER);
   ELT_GEQ = new nsHtml5ElementName(nsHtml5Atoms::geq, nsHtml5Atoms::geq, NS_HTML5TREE_BUILDER_OTHER);
   ELT_IMG = new nsHtml5ElementName(nsHtml5Atoms::img, nsHtml5Atoms::img, NS_HTML5TREE_BUILDER_EMBED_OR_IMG | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_INS = new nsHtml5ElementName(nsHtml5Atoms::ins, nsHtml5Atoms::ins, NS_HTML5TREE_BUILDER_OTHER);
   ELT_INT = new nsHtml5ElementName(nsHtml5Atoms::int_, nsHtml5Atoms::int_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_KBD = new nsHtml5ElementName(nsHtml5Atoms::kbd, nsHtml5Atoms::kbd, NS_HTML5TREE_BUILDER_OTHER);
@@ -601,17 +602,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_LEQ = new nsHtml5ElementName(nsHtml5Atoms::leq, nsHtml5Atoms::leq, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MTD = new nsHtml5ElementName(nsHtml5Atoms::mtd, nsHtml5Atoms::mtd, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MIN = new nsHtml5ElementName(nsHtml5Atoms::min, nsHtml5Atoms::min, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MAP = new nsHtml5ElementName(nsHtml5Atoms::map, nsHtml5Atoms::map, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MTR = new nsHtml5ElementName(nsHtml5Atoms::mtr, nsHtml5Atoms::mtr, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MAX = new nsHtml5ElementName(nsHtml5Atoms::max, nsHtml5Atoms::max, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NEQ = new nsHtml5ElementName(nsHtml5Atoms::neq, nsHtml5Atoms::neq, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NOT = new nsHtml5ElementName(nsHtml5Atoms::not_, nsHtml5Atoms::not_, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_NAV = new nsHtml5ElementName(nsHtml5Atoms::nav, nsHtml5Atoms::nav, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_NAV = new nsHtml5ElementName(nsHtml5Atoms::nav, nsHtml5Atoms::nav, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_PRE = new nsHtml5ElementName(nsHtml5Atoms::pre, nsHtml5Atoms::pre, NS_HTML5TREE_BUILDER_PRE_OR_LISTING | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_REM = new nsHtml5ElementName(nsHtml5Atoms::rem, nsHtml5Atoms::rem, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SUB = new nsHtml5ElementName(nsHtml5Atoms::sub, nsHtml5Atoms::sub, NS_HTML5TREE_BUILDER_RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
   ELT_SEC = new nsHtml5ElementName(nsHtml5Atoms::sec, nsHtml5Atoms::sec, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SVG = new nsHtml5ElementName(nsHtml5Atoms::svg, nsHtml5Atoms::svg, NS_HTML5TREE_BUILDER_SVG);
   ELT_SUM = new nsHtml5ElementName(nsHtml5Atoms::sum, nsHtml5Atoms::sum, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SIN = new nsHtml5ElementName(nsHtml5Atoms::sin, nsHtml5Atoms::sin, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SEP = new nsHtml5ElementName(nsHtml5Atoms::sep, nsHtml5Atoms::sep, NS_HTML5TREE_BUILDER_OTHER);
@@ -648,16 +649,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_LIST = new nsHtml5ElementName(nsHtml5Atoms::list, nsHtml5Atoms::list, NS_HTML5TREE_BUILDER_OTHER);
   ELT_META = new nsHtml5ElementName(nsHtml5Atoms::meta, nsHtml5Atoms::meta, NS_HTML5TREE_BUILDER_META | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_MSUB = new nsHtml5ElementName(nsHtml5Atoms::msub, nsHtml5Atoms::msub, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MODE = new nsHtml5ElementName(nsHtml5Atoms::mode, nsHtml5Atoms::mode, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MATH = new nsHtml5ElementName(nsHtml5Atoms::math, nsHtml5Atoms::math, NS_HTML5TREE_BUILDER_MATH);
   ELT_MARK = new nsHtml5ElementName(nsHtml5Atoms::mark, nsHtml5Atoms::mark, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MASK = new nsHtml5ElementName(nsHtml5Atoms::mask, nsHtml5Atoms::mask, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MEAN = new nsHtml5ElementName(nsHtml5Atoms::mean, nsHtml5Atoms::mean, NS_HTML5TREE_BUILDER_OTHER);
+  ELT_MAIN = new nsHtml5ElementName(nsHtml5Atoms::main, nsHtml5Atoms::main, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_MSUP = new nsHtml5ElementName(nsHtml5Atoms::msup, nsHtml5Atoms::msup, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MENU = new nsHtml5ElementName(nsHtml5Atoms::menu, nsHtml5Atoms::menu, NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_MROW = new nsHtml5ElementName(nsHtml5Atoms::mrow, nsHtml5Atoms::mrow, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NONE = new nsHtml5ElementName(nsHtml5Atoms::none, nsHtml5Atoms::none, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NOBR = new nsHtml5ElementName(nsHtml5Atoms::nobr, nsHtml5Atoms::nobr, NS_HTML5TREE_BUILDER_NOBR);
   ELT_NEST = new nsHtml5ElementName(nsHtml5Atoms::nest, nsHtml5Atoms::nest, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PATH = new nsHtml5ElementName(nsHtml5Atoms::path, nsHtml5Atoms::path, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PLUS = new nsHtml5ElementName(nsHtml5Atoms::plus, nsHtml5Atoms::plus, NS_HTML5TREE_BUILDER_OTHER);
@@ -674,17 +676,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_STOP = new nsHtml5ElementName(nsHtml5Atoms::stop, nsHtml5Atoms::stop, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SDEV = new nsHtml5ElementName(nsHtml5Atoms::sdev, nsHtml5Atoms::sdev, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TIME = new nsHtml5ElementName(nsHtml5Atoms::time, nsHtml5Atoms::time, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TRUE = new nsHtml5ElementName(nsHtml5Atoms::true_, nsHtml5Atoms::true_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TREF = new nsHtml5ElementName(nsHtml5Atoms::tref, nsHtml5Atoms::tref, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TANH = new nsHtml5ElementName(nsHtml5Atoms::tanh, nsHtml5Atoms::tanh, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TEXT = new nsHtml5ElementName(nsHtml5Atoms::text, nsHtml5Atoms::text, NS_HTML5TREE_BUILDER_OTHER);
   ELT_VIEW = new nsHtml5ElementName(nsHtml5Atoms::view, nsHtml5Atoms::view, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_ASIDE = new nsHtml5ElementName(nsHtml5Atoms::aside, nsHtml5Atoms::aside, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_ASIDE = new nsHtml5ElementName(nsHtml5Atoms::aside, nsHtml5Atoms::aside, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_AUDIO = new nsHtml5ElementName(nsHtml5Atoms::audio, nsHtml5Atoms::audio, NS_HTML5TREE_BUILDER_OTHER);
   ELT_APPLY = new nsHtml5ElementName(nsHtml5Atoms::apply, nsHtml5Atoms::apply, NS_HTML5TREE_BUILDER_OTHER);
   ELT_EMBED = new nsHtml5ElementName(nsHtml5Atoms::embed, nsHtml5Atoms::embed, NS_HTML5TREE_BUILDER_EMBED_OR_IMG | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FRAME = new nsHtml5ElementName(nsHtml5Atoms::frame, nsHtml5Atoms::frame, NS_HTML5TREE_BUILDER_FRAME | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FALSE = new nsHtml5ElementName(nsHtml5Atoms::false_, nsHtml5Atoms::false_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FLOOR = new nsHtml5ElementName(nsHtml5Atoms::floor, nsHtml5Atoms::floor, NS_HTML5TREE_BUILDER_OTHER);
   ELT_GLYPH = new nsHtml5ElementName(nsHtml5Atoms::glyph, nsHtml5Atoms::glyph, NS_HTML5TREE_BUILDER_OTHER);
   ELT_HKERN = new nsHtml5ElementName(nsHtml5Atoms::hkern, nsHtml5Atoms::hkern, NS_HTML5TREE_BUILDER_OTHER);
@@ -732,22 +734,22 @@ nsHtml5ElementName::initializeStatics()
   ELT_CENTER = new nsHtml5ElementName(nsHtml5Atoms::center, nsHtml5Atoms::center, NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_CURSOR = new nsHtml5ElementName(nsHtml5Atoms::cursor, nsHtml5Atoms::cursor, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CANVAS = new nsHtml5ElementName(nsHtml5Atoms::canvas, nsHtml5Atoms::canvas, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DIVIDE = new nsHtml5ElementName(nsHtml5Atoms::divide, nsHtml5Atoms::divide, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DEGREE = new nsHtml5ElementName(nsHtml5Atoms::degree, nsHtml5Atoms::degree, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DOMAIN = new nsHtml5ElementName(nsHtml5Atoms::domain, nsHtml5Atoms::domain, NS_HTML5TREE_BUILDER_OTHER);
   ELT_EXISTS = new nsHtml5ElementName(nsHtml5Atoms::exists, nsHtml5Atoms::exists, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FETILE = new nsHtml5ElementName(nsHtml5Atoms::fetile, nsHtml5Atoms::feTile, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_FIGURE = new nsHtml5ElementName(nsHtml5Atoms::figure, nsHtml5Atoms::figure, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_FIGURE = new nsHtml5ElementName(nsHtml5Atoms::figure, nsHtml5Atoms::figure, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FORALL = new nsHtml5ElementName(nsHtml5Atoms::forall, nsHtml5Atoms::forall, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FILTER = new nsHtml5ElementName(nsHtml5Atoms::filter, nsHtml5Atoms::filter, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_FOOTER = new nsHtml5ElementName(nsHtml5Atoms::footer, nsHtml5Atoms::footer, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_HGROUP = new nsHtml5ElementName(nsHtml5Atoms::hgroup, nsHtml5Atoms::hgroup, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_HEADER = new nsHtml5ElementName(nsHtml5Atoms::header, nsHtml5Atoms::header, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_FOOTER = new nsHtml5ElementName(nsHtml5Atoms::footer, nsHtml5Atoms::footer, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_HGROUP = new nsHtml5ElementName(nsHtml5Atoms::hgroup, nsHtml5Atoms::hgroup, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_HEADER = new nsHtml5ElementName(nsHtml5Atoms::header, nsHtml5Atoms::header, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_IFRAME = new nsHtml5ElementName(nsHtml5Atoms::iframe, nsHtml5Atoms::iframe, NS_HTML5TREE_BUILDER_IFRAME | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_KEYGEN = new nsHtml5ElementName(nsHtml5Atoms::keygen, nsHtml5Atoms::keygen, NS_HTML5TREE_BUILDER_KEYGEN);
   ELT_LAMBDA = new nsHtml5ElementName(nsHtml5Atoms::lambda, nsHtml5Atoms::lambda, NS_HTML5TREE_BUILDER_OTHER);
   ELT_LEGEND = new nsHtml5ElementName(nsHtml5Atoms::legend, nsHtml5Atoms::legend, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MSPACE = new nsHtml5ElementName(nsHtml5Atoms::mspace, nsHtml5Atoms::mspace, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MTABLE = new nsHtml5ElementName(nsHtml5Atoms::mtable, nsHtml5Atoms::mtable, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MSTYLE = new nsHtml5ElementName(nsHtml5Atoms::mstyle, nsHtml5Atoms::mstyle, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MGLYPH = new nsHtml5ElementName(nsHtml5Atoms::mglyph, nsHtml5Atoms::mglyph, NS_HTML5TREE_BUILDER_MGLYPH_OR_MALIGNMARK);
@@ -766,35 +768,35 @@ nsHtml5ElementName::initializeStatics()
   ELT_STRONG = new nsHtml5ElementName(nsHtml5Atoms::strong, nsHtml5Atoms::strong, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_SWITCH = new nsHtml5ElementName(nsHtml5Atoms::switch_, nsHtml5Atoms::switch_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SYMBOL = new nsHtml5ElementName(nsHtml5Atoms::symbol, nsHtml5Atoms::symbol, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SELECT = new nsHtml5ElementName(nsHtml5Atoms::select, nsHtml5Atoms::select, NS_HTML5TREE_BUILDER_SELECT | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_SUBSET = new nsHtml5ElementName(nsHtml5Atoms::subset, nsHtml5Atoms::subset, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SCRIPT = new nsHtml5ElementName(nsHtml5Atoms::script, nsHtml5Atoms::script, NS_HTML5TREE_BUILDER_SCRIPT | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_TBREAK = new nsHtml5ElementName(nsHtml5Atoms::tbreak, nsHtml5Atoms::tbreak, NS_HTML5TREE_BUILDER_OTHER);
   ELT_VECTOR = new nsHtml5ElementName(nsHtml5Atoms::vector, nsHtml5Atoms::vector, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_ARTICLE = new nsHtml5ElementName(nsHtml5Atoms::article, nsHtml5Atoms::article, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_ARTICLE = new nsHtml5ElementName(nsHtml5Atoms::article, nsHtml5Atoms::article, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_ANIMATE = new nsHtml5ElementName(nsHtml5Atoms::animate, nsHtml5Atoms::animate, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCSECH = new nsHtml5ElementName(nsHtml5Atoms::arcsech, nsHtml5Atoms::arcsech, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCCSCH = new nsHtml5ElementName(nsHtml5Atoms::arccsch, nsHtml5Atoms::arccsch, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCTANH = new nsHtml5ElementName(nsHtml5Atoms::arctanh, nsHtml5Atoms::arctanh, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCSINH = new nsHtml5ElementName(nsHtml5Atoms::arcsinh, nsHtml5Atoms::arcsinh, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCCOSH = new nsHtml5ElementName(nsHtml5Atoms::arccosh, nsHtml5Atoms::arccosh, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCCOTH = new nsHtml5ElementName(nsHtml5Atoms::arccoth, nsHtml5Atoms::arccoth, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ACRONYM = new nsHtml5ElementName(nsHtml5Atoms::acronym, nsHtml5Atoms::acronym, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_ADDRESS = new nsHtml5ElementName(nsHtml5Atoms::address, nsHtml5Atoms::address, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_ADDRESS = new nsHtml5ElementName(nsHtml5Atoms::address, nsHtml5Atoms::address, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_BGSOUND = new nsHtml5ElementName(nsHtml5Atoms::bgsound, nsHtml5Atoms::bgsound, NS_HTML5TREE_BUILDER_LINK_OR_BASEFONT_OR_BGSOUND | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_COMMAND = new nsHtml5ElementName(nsHtml5Atoms::command, nsHtml5Atoms::command, NS_HTML5TREE_BUILDER_COMMAND | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_COMPOSE = new nsHtml5ElementName(nsHtml5Atoms::compose, nsHtml5Atoms::compose, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CEILING = new nsHtml5ElementName(nsHtml5Atoms::ceiling, nsHtml5Atoms::ceiling, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CSYMBOL = new nsHtml5ElementName(nsHtml5Atoms::csymbol, nsHtml5Atoms::csymbol, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CAPTION = new nsHtml5ElementName(nsHtml5Atoms::caption, nsHtml5Atoms::caption, NS_HTML5TREE_BUILDER_CAPTION | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
   ELT_DISCARD = new nsHtml5ElementName(nsHtml5Atoms::discard, nsHtml5Atoms::discard, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DECLARE = new nsHtml5ElementName(nsHtml5Atoms::declare, nsHtml5Atoms::declare, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_DETAILS = new nsHtml5ElementName(nsHtml5Atoms::details, nsHtml5Atoms::details, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_DETAILS = new nsHtml5ElementName(nsHtml5Atoms::details, nsHtml5Atoms::details, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_ELLIPSE = new nsHtml5ElementName(nsHtml5Atoms::ellipse, nsHtml5Atoms::ellipse, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEFUNCA = new nsHtml5ElementName(nsHtml5Atoms::fefunca, nsHtml5Atoms::feFuncA, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEFUNCB = new nsHtml5ElementName(nsHtml5Atoms::fefuncb, nsHtml5Atoms::feFuncB, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEBLEND = new nsHtml5ElementName(nsHtml5Atoms::feblend, nsHtml5Atoms::feBlend, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEFLOOD = new nsHtml5ElementName(nsHtml5Atoms::feflood, nsHtml5Atoms::feFlood, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEIMAGE = new nsHtml5ElementName(nsHtml5Atoms::feimage, nsHtml5Atoms::feImage, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEMERGE = new nsHtml5ElementName(nsHtml5Atoms::femerge, nsHtml5Atoms::feMerge, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEFUNCG = new nsHtml5ElementName(nsHtml5Atoms::fefuncg, nsHtml5Atoms::feFuncG, NS_HTML5TREE_BUILDER_OTHER);
@@ -810,18 +812,18 @@ nsHtml5ElementName::initializeStatics()
   ELT_MARQUEE = new nsHtml5ElementName(nsHtml5Atoms::marquee, nsHtml5Atoms::marquee, NS_HTML5TREE_BUILDER_MARQUEE_OR_APPLET | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
   ELT_MACTION = new nsHtml5ElementName(nsHtml5Atoms::maction, nsHtml5Atoms::maction, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MSUBSUP = new nsHtml5ElementName(nsHtml5Atoms::msubsup, nsHtml5Atoms::msubsup, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NOEMBED = new nsHtml5ElementName(nsHtml5Atoms::noembed, nsHtml5Atoms::noembed, NS_HTML5TREE_BUILDER_NOEMBED | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_POLYGON = new nsHtml5ElementName(nsHtml5Atoms::polygon, nsHtml5Atoms::polygon, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PATTERN = new nsHtml5ElementName(nsHtml5Atoms::pattern, nsHtml5Atoms::pattern, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PRODUCT = new nsHtml5ElementName(nsHtml5Atoms::product, nsHtml5Atoms::product, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SETDIFF = new nsHtml5ElementName(nsHtml5Atoms::setdiff, nsHtml5Atoms::setdiff, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_SECTION = new nsHtml5ElementName(nsHtml5Atoms::section, nsHtml5Atoms::section, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_SUMMARY = new nsHtml5ElementName(nsHtml5Atoms::summary, nsHtml5Atoms::summary, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_SECTION = new nsHtml5ElementName(nsHtml5Atoms::section, nsHtml5Atoms::section, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_SUMMARY = new nsHtml5ElementName(nsHtml5Atoms::summary, nsHtml5Atoms::summary, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_TENDSTO = new nsHtml5ElementName(nsHtml5Atoms::tendsto, nsHtml5Atoms::tendsto, NS_HTML5TREE_BUILDER_OTHER);
   ELT_UPLIMIT = new nsHtml5ElementName(nsHtml5Atoms::uplimit, nsHtml5Atoms::uplimit, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ALTGLYPH = new nsHtml5ElementName(nsHtml5Atoms::altglyph, nsHtml5Atoms::altGlyph, NS_HTML5TREE_BUILDER_OTHER);
   ELT_BASEFONT = new nsHtml5ElementName(nsHtml5Atoms::basefont, nsHtml5Atoms::basefont, NS_HTML5TREE_BUILDER_LINK_OR_BASEFONT_OR_BGSOUND | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_CLIPPATH = new nsHtml5ElementName(nsHtml5Atoms::clippath, nsHtml5Atoms::clipPath, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CODOMAIN = new nsHtml5ElementName(nsHtml5Atoms::codomain, nsHtml5Atoms::codomain, NS_HTML5TREE_BUILDER_OTHER);
   ELT_COLGROUP = new nsHtml5ElementName(nsHtml5Atoms::colgroup, nsHtml5Atoms::colgroup, NS_HTML5TREE_BUILDER_COLGROUP | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_EMPTYSET = new nsHtml5ElementName(nsHtml5Atoms::emptyset, nsHtml5Atoms::emptyset, NS_HTML5TREE_BUILDER_OTHER);
@@ -868,17 +870,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_RATIONALS = new nsHtml5ElementName(nsHtml5Atoms::rationals, nsHtml5Atoms::rationals, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SEMANTICS = new nsHtml5ElementName(nsHtml5Atoms::semantics, nsHtml5Atoms::semantics, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TRANSPOSE = new nsHtml5ElementName(nsHtml5Atoms::transpose, nsHtml5Atoms::transpose, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ANNOTATION = new nsHtml5ElementName(nsHtml5Atoms::annotation, nsHtml5Atoms::annotation, NS_HTML5TREE_BUILDER_OTHER);
   ELT_BLOCKQUOTE = new nsHtml5ElementName(nsHtml5Atoms::blockquote, nsHtml5Atoms::blockquote, NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_DIVERGENCE = new nsHtml5ElementName(nsHtml5Atoms::divergence, nsHtml5Atoms::divergence, NS_HTML5TREE_BUILDER_OTHER);
   ELT_EULERGAMMA = new nsHtml5ElementName(nsHtml5Atoms::eulergamma, nsHtml5Atoms::eulergamma, NS_HTML5TREE_BUILDER_OTHER);
   ELT_EQUIVALENT = new nsHtml5ElementName(nsHtml5Atoms::equivalent, nsHtml5Atoms::equivalent, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_FIGCAPTION = new nsHtml5ElementName(nsHtml5Atoms::figcaption, nsHtml5Atoms::figcaption, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_FIGCAPTION = new nsHtml5ElementName(nsHtml5Atoms::figcaption, nsHtml5Atoms::figcaption, NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_IMAGINARYI = new nsHtml5ElementName(nsHtml5Atoms::imaginaryi, nsHtml5Atoms::imaginaryi, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MALIGNMARK = new nsHtml5ElementName(nsHtml5Atoms::malignmark, nsHtml5Atoms::malignmark, NS_HTML5TREE_BUILDER_MGLYPH_OR_MALIGNMARK);
   ELT_MUNDEROVER = new nsHtml5ElementName(nsHtml5Atoms::munderover, nsHtml5Atoms::munderover, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MLABELEDTR = new nsHtml5ElementName(nsHtml5Atoms::mlabeledtr, nsHtml5Atoms::mlabeledtr, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NOTANUMBER = new nsHtml5ElementName(nsHtml5Atoms::notanumber, nsHtml5Atoms::notanumber, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SOLIDCOLOR = new nsHtml5ElementName(nsHtml5Atoms::solidcolor, nsHtml5Atoms::solidcolor, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ALTGLYPHDEF = new nsHtml5ElementName(nsHtml5Atoms::altglyphdef, nsHtml5Atoms::altGlyphDef, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DETERMINANT = new nsHtml5ElementName(nsHtml5Atoms::determinant, nsHtml5Atoms::determinant, NS_HTML5TREE_BUILDER_OTHER);
@@ -920,17 +922,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_CARTESIANPRODUCT = new nsHtml5ElementName(nsHtml5Atoms::cartesianproduct, nsHtml5Atoms::cartesianproduct, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FONT_FACE_FORMAT = new nsHtml5ElementName(nsHtml5Atoms::font_face_format, nsHtml5Atoms::font_face_format, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FECONVOLVEMATRIX = new nsHtml5ElementName(nsHtml5Atoms::feconvolvematrix, nsHtml5Atoms::feConvolveMatrix, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEDIFFUSELIGHTING = new nsHtml5ElementName(nsHtml5Atoms::fediffuselighting, nsHtml5Atoms::feDiffuseLighting, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FEDISPLACEMENTMAP = new nsHtml5ElementName(nsHtml5Atoms::fedisplacementmap, nsHtml5Atoms::feDisplacementMap, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FESPECULARLIGHTING = new nsHtml5ElementName(nsHtml5Atoms::fespecularlighting, nsHtml5Atoms::feSpecularLighting, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DOMAINOFAPPLICATION = new nsHtml5ElementName(nsHtml5Atoms::domainofapplication, nsHtml5Atoms::domainofapplication, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FECOMPONENTTRANSFER = new nsHtml5ElementName(nsHtml5Atoms::fecomponenttransfer, nsHtml5Atoms::feComponentTransfer, NS_HTML5TREE_BUILDER_OTHER);
-  ELEMENT_NAMES = new nsHtml5ElementName*[392];
+  ELEMENT_NAMES = new nsHtml5ElementName*[393];
   ELEMENT_NAMES[0] = ELT_A;
   ELEMENT_NAMES[1] = ELT_B;
   ELEMENT_NAMES[2] = ELT_G;
   ELEMENT_NAMES[3] = ELT_I;
   ELEMENT_NAMES[4] = ELT_P;
   ELEMENT_NAMES[5] = ELT_Q;
   ELEMENT_NAMES[6] = ELT_S;
   ELEMENT_NAMES[7] = ELT_U;
@@ -1041,288 +1043,289 @@ nsHtml5ElementName::initializeStatics()
   ELEMENT_NAMES[112] = ELT_LIST;
   ELEMENT_NAMES[113] = ELT_META;
   ELEMENT_NAMES[114] = ELT_MSUB;
   ELEMENT_NAMES[115] = ELT_MODE;
   ELEMENT_NAMES[116] = ELT_MATH;
   ELEMENT_NAMES[117] = ELT_MARK;
   ELEMENT_NAMES[118] = ELT_MASK;
   ELEMENT_NAMES[119] = ELT_MEAN;
-  ELEMENT_NAMES[120] = ELT_MSUP;
-  ELEMENT_NAMES[121] = ELT_MENU;
-  ELEMENT_NAMES[122] = ELT_MROW;
-  ELEMENT_NAMES[123] = ELT_NONE;
-  ELEMENT_NAMES[124] = ELT_NOBR;
-  ELEMENT_NAMES[125] = ELT_NEST;
-  ELEMENT_NAMES[126] = ELT_PATH;
-  ELEMENT_NAMES[127] = ELT_PLUS;
-  ELEMENT_NAMES[128] = ELT_RULE;
-  ELEMENT_NAMES[129] = ELT_REAL;
-  ELEMENT_NAMES[130] = ELT_RELN;
-  ELEMENT_NAMES[131] = ELT_RECT;
-  ELEMENT_NAMES[132] = ELT_ROOT;
-  ELEMENT_NAMES[133] = ELT_RUBY;
-  ELEMENT_NAMES[134] = ELT_SECH;
-  ELEMENT_NAMES[135] = ELT_SINH;
-  ELEMENT_NAMES[136] = ELT_SPAN;
-  ELEMENT_NAMES[137] = ELT_SAMP;
-  ELEMENT_NAMES[138] = ELT_STOP;
-  ELEMENT_NAMES[139] = ELT_SDEV;
-  ELEMENT_NAMES[140] = ELT_TIME;
-  ELEMENT_NAMES[141] = ELT_TRUE;
-  ELEMENT_NAMES[142] = ELT_TREF;
-  ELEMENT_NAMES[143] = ELT_TANH;
-  ELEMENT_NAMES[144] = ELT_TEXT;
-  ELEMENT_NAMES[145] = ELT_VIEW;
-  ELEMENT_NAMES[146] = ELT_ASIDE;
-  ELEMENT_NAMES[147] = ELT_AUDIO;
-  ELEMENT_NAMES[148] = ELT_APPLY;
-  ELEMENT_NAMES[149] = ELT_EMBED;
-  ELEMENT_NAMES[150] = ELT_FRAME;
-  ELEMENT_NAMES[151] = ELT_FALSE;
-  ELEMENT_NAMES[152] = ELT_FLOOR;
-  ELEMENT_NAMES[153] = ELT_GLYPH;
-  ELEMENT_NAMES[154] = ELT_HKERN;
-  ELEMENT_NAMES[155] = ELT_IMAGE;
-  ELEMENT_NAMES[156] = ELT_IDENT;
-  ELEMENT_NAMES[157] = ELT_INPUT;
-  ELEMENT_NAMES[158] = ELT_LABEL;
-  ELEMENT_NAMES[159] = ELT_LIMIT;
-  ELEMENT_NAMES[160] = ELT_MFRAC;
-  ELEMENT_NAMES[161] = ELT_MPATH;
-  ELEMENT_NAMES[162] = ELT_METER;
-  ELEMENT_NAMES[163] = ELT_MOVER;
-  ELEMENT_NAMES[164] = ELT_MINUS;
-  ELEMENT_NAMES[165] = ELT_MROOT;
-  ELEMENT_NAMES[166] = ELT_MSQRT;
-  ELEMENT_NAMES[167] = ELT_MTEXT;
-  ELEMENT_NAMES[168] = ELT_NOTIN;
-  ELEMENT_NAMES[169] = ELT_PIECE;
-  ELEMENT_NAMES[170] = ELT_PARAM;
-  ELEMENT_NAMES[171] = ELT_POWER;
-  ELEMENT_NAMES[172] = ELT_REALS;
-  ELEMENT_NAMES[173] = ELT_STYLE;
-  ELEMENT_NAMES[174] = ELT_SMALL;
-  ELEMENT_NAMES[175] = ELT_THEAD;
-  ELEMENT_NAMES[176] = ELT_TABLE;
-  ELEMENT_NAMES[177] = ELT_TITLE;
-  ELEMENT_NAMES[178] = ELT_TRACK;
-  ELEMENT_NAMES[179] = ELT_TSPAN;
-  ELEMENT_NAMES[180] = ELT_TIMES;
-  ELEMENT_NAMES[181] = ELT_TFOOT;
-  ELEMENT_NAMES[182] = ELT_TBODY;
-  ELEMENT_NAMES[183] = ELT_UNION;
-  ELEMENT_NAMES[184] = ELT_VKERN;
-  ELEMENT_NAMES[185] = ELT_VIDEO;
-  ELEMENT_NAMES[186] = ELT_ARCSEC;
-  ELEMENT_NAMES[187] = ELT_ARCCSC;
-  ELEMENT_NAMES[188] = ELT_ARCTAN;
-  ELEMENT_NAMES[189] = ELT_ARCSIN;
-  ELEMENT_NAMES[190] = ELT_ARCCOS;
-  ELEMENT_NAMES[191] = ELT_APPLET;
-  ELEMENT_NAMES[192] = ELT_ARCCOT;
-  ELEMENT_NAMES[193] = ELT_APPROX;
-  ELEMENT_NAMES[194] = ELT_BUTTON;
-  ELEMENT_NAMES[195] = ELT_CIRCLE;
-  ELEMENT_NAMES[196] = ELT_CENTER;
-  ELEMENT_NAMES[197] = ELT_CURSOR;
-  ELEMENT_NAMES[198] = ELT_CANVAS;
-  ELEMENT_NAMES[199] = ELT_DIVIDE;
-  ELEMENT_NAMES[200] = ELT_DEGREE;
-  ELEMENT_NAMES[201] = ELT_DOMAIN;
-  ELEMENT_NAMES[202] = ELT_EXISTS;
-  ELEMENT_NAMES[203] = ELT_FETILE;
-  ELEMENT_NAMES[204] = ELT_FIGURE;
-  ELEMENT_NAMES[205] = ELT_FORALL;
-  ELEMENT_NAMES[206] = ELT_FILTER;
-  ELEMENT_NAMES[207] = ELT_FOOTER;
-  ELEMENT_NAMES[208] = ELT_HGROUP;
-  ELEMENT_NAMES[209] = ELT_HEADER;
-  ELEMENT_NAMES[210] = ELT_IFRAME;
-  ELEMENT_NAMES[211] = ELT_KEYGEN;
-  ELEMENT_NAMES[212] = ELT_LAMBDA;
-  ELEMENT_NAMES[213] = ELT_LEGEND;
-  ELEMENT_NAMES[214] = ELT_MSPACE;
-  ELEMENT_NAMES[215] = ELT_MTABLE;
-  ELEMENT_NAMES[216] = ELT_MSTYLE;
-  ELEMENT_NAMES[217] = ELT_MGLYPH;
-  ELEMENT_NAMES[218] = ELT_MEDIAN;
-  ELEMENT_NAMES[219] = ELT_MUNDER;
-  ELEMENT_NAMES[220] = ELT_MARKER;
-  ELEMENT_NAMES[221] = ELT_MERROR;
-  ELEMENT_NAMES[222] = ELT_MOMENT;
-  ELEMENT_NAMES[223] = ELT_MATRIX;
-  ELEMENT_NAMES[224] = ELT_OPTION;
-  ELEMENT_NAMES[225] = ELT_OBJECT;
-  ELEMENT_NAMES[226] = ELT_OUTPUT;
-  ELEMENT_NAMES[227] = ELT_PRIMES;
-  ELEMENT_NAMES[228] = ELT_SOURCE;
-  ELEMENT_NAMES[229] = ELT_STRIKE;
-  ELEMENT_NAMES[230] = ELT_STRONG;
-  ELEMENT_NAMES[231] = ELT_SWITCH;
-  ELEMENT_NAMES[232] = ELT_SYMBOL;
-  ELEMENT_NAMES[233] = ELT_SELECT;
-  ELEMENT_NAMES[234] = ELT_SUBSET;
-  ELEMENT_NAMES[235] = ELT_SCRIPT;
-  ELEMENT_NAMES[236] = ELT_TBREAK;
-  ELEMENT_NAMES[237] = ELT_VECTOR;
-  ELEMENT_NAMES[238] = ELT_ARTICLE;
-  ELEMENT_NAMES[239] = ELT_ANIMATE;
-  ELEMENT_NAMES[240] = ELT_ARCSECH;
-  ELEMENT_NAMES[241] = ELT_ARCCSCH;
-  ELEMENT_NAMES[242] = ELT_ARCTANH;
-  ELEMENT_NAMES[243] = ELT_ARCSINH;
-  ELEMENT_NAMES[244] = ELT_ARCCOSH;
-  ELEMENT_NAMES[245] = ELT_ARCCOTH;
-  ELEMENT_NAMES[246] = ELT_ACRONYM;
-  ELEMENT_NAMES[247] = ELT_ADDRESS;
-  ELEMENT_NAMES[248] = ELT_BGSOUND;
-  ELEMENT_NAMES[249] = ELT_COMMAND;
-  ELEMENT_NAMES[250] = ELT_COMPOSE;
-  ELEMENT_NAMES[251] = ELT_CEILING;
-  ELEMENT_NAMES[252] = ELT_CSYMBOL;
-  ELEMENT_NAMES[253] = ELT_CAPTION;
-  ELEMENT_NAMES[254] = ELT_DISCARD;
-  ELEMENT_NAMES[255] = ELT_DECLARE;
-  ELEMENT_NAMES[256] = ELT_DETAILS;
-  ELEMENT_NAMES[257] = ELT_ELLIPSE;
-  ELEMENT_NAMES[258] = ELT_FEFUNCA;
-  ELEMENT_NAMES[259] = ELT_FEFUNCB;
-  ELEMENT_NAMES[260] = ELT_FEBLEND;
-  ELEMENT_NAMES[261] = ELT_FEFLOOD;
-  ELEMENT_NAMES[262] = ELT_FEIMAGE;
-  ELEMENT_NAMES[263] = ELT_FEMERGE;
-  ELEMENT_NAMES[264] = ELT_FEFUNCG;
-  ELEMENT_NAMES[265] = ELT_FEFUNCR;
-  ELEMENT_NAMES[266] = ELT_HANDLER;
-  ELEMENT_NAMES[267] = ELT_INVERSE;
-  ELEMENT_NAMES[268] = ELT_IMPLIES;
-  ELEMENT_NAMES[269] = ELT_ISINDEX;
-  ELEMENT_NAMES[270] = ELT_LOGBASE;
-  ELEMENT_NAMES[271] = ELT_LISTING;
-  ELEMENT_NAMES[272] = ELT_MFENCED;
-  ELEMENT_NAMES[273] = ELT_MPADDED;
-  ELEMENT_NAMES[274] = ELT_MARQUEE;
-  ELEMENT_NAMES[275] = ELT_MACTION;
-  ELEMENT_NAMES[276] = ELT_MSUBSUP;
-  ELEMENT_NAMES[277] = ELT_NOEMBED;
-  ELEMENT_NAMES[278] = ELT_POLYGON;
-  ELEMENT_NAMES[279] = ELT_PATTERN;
-  ELEMENT_NAMES[280] = ELT_PRODUCT;
-  ELEMENT_NAMES[281] = ELT_SETDIFF;
-  ELEMENT_NAMES[282] = ELT_SECTION;
-  ELEMENT_NAMES[283] = ELT_SUMMARY;
-  ELEMENT_NAMES[284] = ELT_TENDSTO;
-  ELEMENT_NAMES[285] = ELT_UPLIMIT;
-  ELEMENT_NAMES[286] = ELT_ALTGLYPH;
-  ELEMENT_NAMES[287] = ELT_BASEFONT;
-  ELEMENT_NAMES[288] = ELT_CLIPPATH;
-  ELEMENT_NAMES[289] = ELT_CODOMAIN;
-  ELEMENT_NAMES[290] = ELT_COLGROUP;
-  ELEMENT_NAMES[291] = ELT_EMPTYSET;
-  ELEMENT_NAMES[292] = ELT_FACTOROF;
-  ELEMENT_NAMES[293] = ELT_FIELDSET;
-  ELEMENT_NAMES[294] = ELT_FRAMESET;
-  ELEMENT_NAMES[295] = ELT_FEOFFSET;
-  ELEMENT_NAMES[296] = ELT_GLYPHREF;
-  ELEMENT_NAMES[297] = ELT_INTERVAL;
-  ELEMENT_NAMES[298] = ELT_INTEGERS;
-  ELEMENT_NAMES[299] = ELT_INFINITY;
-  ELEMENT_NAMES[300] = ELT_LISTENER;
-  ELEMENT_NAMES[301] = ELT_LOWLIMIT;
-  ELEMENT_NAMES[302] = ELT_METADATA;
-  ELEMENT_NAMES[303] = ELT_MENCLOSE;
-  ELEMENT_NAMES[304] = ELT_MENUITEM;
-  ELEMENT_NAMES[305] = ELT_MPHANTOM;
-  ELEMENT_NAMES[306] = ELT_NOFRAMES;
-  ELEMENT_NAMES[307] = ELT_NOSCRIPT;
-  ELEMENT_NAMES[308] = ELT_OPTGROUP;
-  ELEMENT_NAMES[309] = ELT_POLYLINE;
-  ELEMENT_NAMES[310] = ELT_PREFETCH;
-  ELEMENT_NAMES[311] = ELT_PROGRESS;
-  ELEMENT_NAMES[312] = ELT_PRSUBSET;
-  ELEMENT_NAMES[313] = ELT_QUOTIENT;
-  ELEMENT_NAMES[314] = ELT_SELECTOR;
-  ELEMENT_NAMES[315] = ELT_TEXTAREA;
-  ELEMENT_NAMES[316] = ELT_TEXTPATH;
-  ELEMENT_NAMES[317] = ELT_VARIANCE;
-  ELEMENT_NAMES[318] = ELT_ANIMATION;
-  ELEMENT_NAMES[319] = ELT_CONJUGATE;
-  ELEMENT_NAMES[320] = ELT_CONDITION;
-  ELEMENT_NAMES[321] = ELT_COMPLEXES;
-  ELEMENT_NAMES[322] = ELT_FONT_FACE;
-  ELEMENT_NAMES[323] = ELT_FACTORIAL;
-  ELEMENT_NAMES[324] = ELT_INTERSECT;
-  ELEMENT_NAMES[325] = ELT_IMAGINARY;
-  ELEMENT_NAMES[326] = ELT_LAPLACIAN;
-  ELEMENT_NAMES[327] = ELT_MATRIXROW;
-  ELEMENT_NAMES[328] = ELT_NOTSUBSET;
-  ELEMENT_NAMES[329] = ELT_OTHERWISE;
-  ELEMENT_NAMES[330] = ELT_PIECEWISE;
-  ELEMENT_NAMES[331] = ELT_PLAINTEXT;
-  ELEMENT_NAMES[332] = ELT_RATIONALS;
-  ELEMENT_NAMES[333] = ELT_SEMANTICS;
-  ELEMENT_NAMES[334] = ELT_TRANSPOSE;
-  ELEMENT_NAMES[335] = ELT_ANNOTATION;
-  ELEMENT_NAMES[336] = ELT_BLOCKQUOTE;
-  ELEMENT_NAMES[337] = ELT_DIVERGENCE;
-  ELEMENT_NAMES[338] = ELT_EULERGAMMA;
-  ELEMENT_NAMES[339] = ELT_EQUIVALENT;
-  ELEMENT_NAMES[340] = ELT_FIGCAPTION;
-  ELEMENT_NAMES[341] = ELT_IMAGINARYI;
-  ELEMENT_NAMES[342] = ELT_MALIGNMARK;
-  ELEMENT_NAMES[343] = ELT_MUNDEROVER;
-  ELEMENT_NAMES[344] = ELT_MLABELEDTR;
-  ELEMENT_NAMES[345] = ELT_NOTANUMBER;
-  ELEMENT_NAMES[346] = ELT_SOLIDCOLOR;
-  ELEMENT_NAMES[347] = ELT_ALTGLYPHDEF;
-  ELEMENT_NAMES[348] = ELT_DETERMINANT;
-  ELEMENT_NAMES[349] = ELT_FEMERGENODE;
-  ELEMENT_NAMES[350] = ELT_FECOMPOSITE;
-  ELEMENT_NAMES[351] = ELT_FESPOTLIGHT;
-  ELEMENT_NAMES[352] = ELT_MALIGNGROUP;
-  ELEMENT_NAMES[353] = ELT_MPRESCRIPTS;
-  ELEMENT_NAMES[354] = ELT_MOMENTABOUT;
-  ELEMENT_NAMES[355] = ELT_NOTPRSUBSET;
-  ELEMENT_NAMES[356] = ELT_PARTIALDIFF;
-  ELEMENT_NAMES[357] = ELT_ALTGLYPHITEM;
-  ELEMENT_NAMES[358] = ELT_ANIMATECOLOR;
-  ELEMENT_NAMES[359] = ELT_DATATEMPLATE;
-  ELEMENT_NAMES[360] = ELT_EXPONENTIALE;
-  ELEMENT_NAMES[361] = ELT_FETURBULENCE;
-  ELEMENT_NAMES[362] = ELT_FEPOINTLIGHT;
-  ELEMENT_NAMES[363] = ELT_FEMORPHOLOGY;
-  ELEMENT_NAMES[364] = ELT_OUTERPRODUCT;
-  ELEMENT_NAMES[365] = ELT_ANIMATEMOTION;
-  ELEMENT_NAMES[366] = ELT_COLOR_PROFILE;
-  ELEMENT_NAMES[367] = ELT_FONT_FACE_SRC;
-  ELEMENT_NAMES[368] = ELT_FONT_FACE_URI;
-  ELEMENT_NAMES[369] = ELT_FOREIGNOBJECT;
-  ELEMENT_NAMES[370] = ELT_FECOLORMATRIX;
-  ELEMENT_NAMES[371] = ELT_MISSING_GLYPH;
-  ELEMENT_NAMES[372] = ELT_MMULTISCRIPTS;
-  ELEMENT_NAMES[373] = ELT_SCALARPRODUCT;
-  ELEMENT_NAMES[374] = ELT_VECTORPRODUCT;
-  ELEMENT_NAMES[375] = ELT_ANNOTATION_XML;
-  ELEMENT_NAMES[376] = ELT_DEFINITION_SRC;
-  ELEMENT_NAMES[377] = ELT_FONT_FACE_NAME;
-  ELEMENT_NAMES[378] = ELT_FEGAUSSIANBLUR;
-  ELEMENT_NAMES[379] = ELT_FEDISTANTLIGHT;
-  ELEMENT_NAMES[380] = ELT_LINEARGRADIENT;
-  ELEMENT_NAMES[381] = ELT_NATURALNUMBERS;
-  ELEMENT_NAMES[382] = ELT_RADIALGRADIENT;
-  ELEMENT_NAMES[383] = ELT_ANIMATETRANSFORM;
-  ELEMENT_NAMES[384] = ELT_CARTESIANPRODUCT;
-  ELEMENT_NAMES[385] = ELT_FONT_FACE_FORMAT;
-  ELEMENT_NAMES[386] = ELT_FECONVOLVEMATRIX;
-  ELEMENT_NAMES[387] = ELT_FEDIFFUSELIGHTING;
-  ELEMENT_NAMES[388] = ELT_FEDISPLACEMENTMAP;
-  ELEMENT_NAMES[389] = ELT_FESPECULARLIGHTING;
-  ELEMENT_NAMES[390] = ELT_DOMAINOFAPPLICATION;
-  ELEMENT_NAMES[391] = ELT_FECOMPONENTTRANSFER;
+  ELEMENT_NAMES[120] = ELT_MAIN;
+  ELEMENT_NAMES[121] = ELT_MSUP;
+  ELEMENT_NAMES[122] = ELT_MENU;
+  ELEMENT_NAMES[123] = ELT_MROW;
+  ELEMENT_NAMES[124] = ELT_NONE;
+  ELEMENT_NAMES[125] = ELT_NOBR;
+  ELEMENT_NAMES[126] = ELT_NEST;
+  ELEMENT_NAMES[127] = ELT_PATH;
+  ELEMENT_NAMES[128] = ELT_PLUS;
+  ELEMENT_NAMES[129] = ELT_RULE;
+  ELEMENT_NAMES[130] = ELT_REAL;
+  ELEMENT_NAMES[131] = ELT_RELN;
+  ELEMENT_NAMES[132] = ELT_RECT;
+  ELEMENT_NAMES[133] = ELT_ROOT;
+  ELEMENT_NAMES[134] = ELT_RUBY;
+  ELEMENT_NAMES[135] = ELT_SECH;
+  ELEMENT_NAMES[136] = ELT_SINH;
+  ELEMENT_NAMES[137] = ELT_SPAN;
+  ELEMENT_NAMES[138] = ELT_SAMP;
+  ELEMENT_NAMES[139] = ELT_STOP;
+  ELEMENT_NAMES[140] = ELT_SDEV;
+  ELEMENT_NAMES[141] = ELT_TIME;
+  ELEMENT_NAMES[142] = ELT_TRUE;
+  ELEMENT_NAMES[143] = ELT_TREF;
+  ELEMENT_NAMES[144] = ELT_TANH;
+  ELEMENT_NAMES[145] = ELT_TEXT;
+  ELEMENT_NAMES[146] = ELT_VIEW;
+  ELEMENT_NAMES[147] = ELT_ASIDE;
+  ELEMENT_NAMES[148] = ELT_AUDIO;
+  ELEMENT_NAMES[149] = ELT_APPLY;
+  ELEMENT_NAMES[150] = ELT_EMBED;
+  ELEMENT_NAMES[151] = ELT_FRAME;
+  ELEMENT_NAMES[152] = ELT_FALSE;
+  ELEMENT_NAMES[153] = ELT_FLOOR;
+  ELEMENT_NAMES[154] = ELT_GLYPH;
+  ELEMENT_NAMES[155] = ELT_HKERN;
+  ELEMENT_NAMES[156] = ELT_IMAGE;
+  ELEMENT_NAMES[157] = ELT_IDENT;
+  ELEMENT_NAMES[158] = ELT_INPUT;
+  ELEMENT_NAMES[159] = ELT_LABEL;
+  ELEMENT_NAMES[160] = ELT_LIMIT;
+  ELEMENT_NAMES[161] = ELT_MFRAC;
+  ELEMENT_NAMES[162] = ELT_MPATH;
+  ELEMENT_NAMES[163] = ELT_METER;
+  ELEMENT_NAMES[164] = ELT_MOVER;
+  ELEMENT_NAMES[165] = ELT_MINUS;
+  ELEMENT_NAMES[166] = ELT_MROOT;
+  ELEMENT_NAMES[167] = ELT_MSQRT;
+  ELEMENT_NAMES[168] = ELT_MTEXT;
+  ELEMENT_NAMES[169] = ELT_NOTIN;
+  ELEMENT_NAMES[170] = ELT_PIECE;
+  ELEMENT_NAMES[171] = ELT_PARAM;
+  ELEMENT_NAMES[172] = ELT_POWER;
+  ELEMENT_NAMES[173] = ELT_REALS;
+  ELEMENT_NAMES[174] = ELT_STYLE;
+  ELEMENT_NAMES[175] = ELT_SMALL;
+  ELEMENT_NAMES[176] = ELT_THEAD;
+  ELEMENT_NAMES[177] = ELT_TABLE;
+  ELEMENT_NAMES[178] = ELT_TITLE;
+  ELEMENT_NAMES[179] = ELT_TRACK;
+  ELEMENT_NAMES[180] = ELT_TSPAN;
+  ELEMENT_NAMES[181] = ELT_TIMES;
+  ELEMENT_NAMES[182] = ELT_TFOOT;
+  ELEMENT_NAMES[183] = ELT_TBODY;
+  ELEMENT_NAMES[184] = ELT_UNION;
+  ELEMENT_NAMES[185] = ELT_VKERN;
+  ELEMENT_NAMES[186] = ELT_VIDEO;
+  ELEMENT_NAMES[187] = ELT_ARCSEC;
+  ELEMENT_NAMES[188] = ELT_ARCCSC;
+  ELEMENT_NAMES[189] = ELT_ARCTAN;
+  ELEMENT_NAMES[190] = ELT_ARCSIN;
+  ELEMENT_NAMES[191] = ELT_ARCCOS;
+  ELEMENT_NAMES[192] = ELT_APPLET;
+  ELEMENT_NAMES[193] = ELT_ARCCOT;
+  ELEMENT_NAMES[194] = ELT_APPROX;
+  ELEMENT_NAMES[195] = ELT_BUTTON;
+  ELEMENT_NAMES[196] = ELT_CIRCLE;
+  ELEMENT_NAMES[197] = ELT_CENTER;
+  ELEMENT_NAMES[198] = ELT_CURSOR;
+  ELEMENT_NAMES[199] = ELT_CANVAS;
+  ELEMENT_NAMES[200] = ELT_DIVIDE;
+  ELEMENT_NAMES[201] = ELT_DEGREE;
+  ELEMENT_NAMES[202] = ELT_DOMAIN;
+  ELEMENT_NAMES[203] = ELT_EXISTS;
+  ELEMENT_NAMES[204] = ELT_FETILE;
+  ELEMENT_NAMES[205] = ELT_FIGURE;
+  ELEMENT_NAMES[206] = ELT_FORALL;
+  ELEMENT_NAMES[207] = ELT_FILTER;
+  ELEMENT_NAMES[208] = ELT_FOOTER;
+  ELEMENT_NAMES[209] = ELT_HGROUP;
+  ELEMENT_NAMES[210] = ELT_HEADER;
+  ELEMENT_NAMES[211] = ELT_IFRAME;
+  ELEMENT_NAMES[212] = ELT_KEYGEN;
+  ELEMENT_NAMES[213] = ELT_LAMBDA;
+  ELEMENT_NAMES[214] = ELT_LEGEND;
+  ELEMENT_NAMES[215] = ELT_MSPACE;
+  ELEMENT_NAMES[216] = ELT_MTABLE;
+  ELEMENT_NAMES[217] = ELT_MSTYLE;
+  ELEMENT_NAMES[218] = ELT_MGLYPH;
+  ELEMENT_NAMES[219] = ELT_MEDIAN;
+  ELEMENT_NAMES[220] = ELT_MUNDER;
+  ELEMENT_NAMES[221] = ELT_MARKER;
+  ELEMENT_NAMES[222] = ELT_MERROR;
+  ELEMENT_NAMES[223] = ELT_MOMENT;
+  ELEMENT_NAMES[224] = ELT_MATRIX;
+  ELEMENT_NAMES[225] = ELT_OPTION;
+  ELEMENT_NAMES[226] = ELT_OBJECT;
+  ELEMENT_NAMES[227] = ELT_OUTPUT;
+  ELEMENT_NAMES[228] = ELT_PRIMES;
+  ELEMENT_NAMES[229] = ELT_SOURCE;
+  ELEMENT_NAMES[230] = ELT_STRIKE;
+  ELEMENT_NAMES[231] = ELT_STRONG;
+  ELEMENT_NAMES[232] = ELT_SWITCH;
+  ELEMENT_NAMES[233] = ELT_SYMBOL;
+  ELEMENT_NAMES[234] = ELT_SELECT;
+  ELEMENT_NAMES[235] = ELT_SUBSET;
+  ELEMENT_NAMES[236] = ELT_SCRIPT;
+  ELEMENT_NAMES[237] = ELT_TBREAK;
+  ELEMENT_NAMES[238] = ELT_VECTOR;
+  ELEMENT_NAMES[239] = ELT_ARTICLE;
+  ELEMENT_NAMES[240] = ELT_ANIMATE;
+  ELEMENT_NAMES[241] = ELT_ARCSECH;
+  ELEMENT_NAMES[242] = ELT_ARCCSCH;
+  ELEMENT_NAMES[243] = ELT_ARCTANH;
+  ELEMENT_NAMES[244] = ELT_ARCSINH;
+  ELEMENT_NAMES[245] = ELT_ARCCOSH;
+  ELEMENT_NAMES[246] = ELT_ARCCOTH;
+  ELEMENT_NAMES[247] = ELT_ACRONYM;
+  ELEMENT_NAMES[248] = ELT_ADDRESS;
+  ELEMENT_NAMES[249] = ELT_BGSOUND;
+  ELEMENT_NAMES[250] = ELT_COMMAND;
+  ELEMENT_NAMES[251] = ELT_COMPOSE;
+  ELEMENT_NAMES[252] = ELT_CEILING;
+  ELEMENT_NAMES[253] = ELT_CSYMBOL;
+  ELEMENT_NAMES[254] = ELT_CAPTION;
+  ELEMENT_NAMES[255] = ELT_DISCARD;
+  ELEMENT_NAMES[256] = ELT_DECLARE;
+  ELEMENT_NAMES[257] = ELT_DETAILS;
+  ELEMENT_NAMES[258] = ELT_ELLIPSE;
+  ELEMENT_NAMES[259] = ELT_FEFUNCA;
+  ELEMENT_NAMES[260] = ELT_FEFUNCB;
+  ELEMENT_NAMES[261] = ELT_FEBLEND;
+  ELEMENT_NAMES[262] = ELT_FEFLOOD;
+  ELEMENT_NAMES[263] = ELT_FEIMAGE;
+  ELEMENT_NAMES[264] = ELT_FEMERGE;
+  ELEMENT_NAMES[265] = ELT_FEFUNCG;
+  ELEMENT_NAMES[266] = ELT_FEFUNCR;
+  ELEMENT_NAMES[267] = ELT_HANDLER;
+  ELEMENT_NAMES[268] = ELT_INVERSE;
+  ELEMENT_NAMES[269] = ELT_IMPLIES;
+  ELEMENT_NAMES[270] = ELT_ISINDEX;
+  ELEMENT_NAMES[271] = ELT_LOGBASE;
+  ELEMENT_NAMES[272] = ELT_LISTING;
+  ELEMENT_NAMES[273] = ELT_MFENCED;
+  ELEMENT_NAMES[274] = ELT_MPADDED;
+  ELEMENT_NAMES[275] = ELT_MARQUEE;
+  ELEMENT_NAMES[276] = ELT_MACTION;
+  ELEMENT_NAMES[277] = ELT_MSUBSUP;
+  ELEMENT_NAMES[278] = ELT_NOEMBED;
+  ELEMENT_NAMES[279] = ELT_POLYGON;
+  ELEMENT_NAMES[280] = ELT_PATTERN;
+  ELEMENT_NAMES[281] = ELT_PRODUCT;
+  ELEMENT_NAMES[282] = ELT_SETDIFF;
+  ELEMENT_NAMES[283] = ELT_SECTION;
+  ELEMENT_NAMES[284] = ELT_SUMMARY;
+  ELEMENT_NAMES[285] = ELT_TENDSTO;
+  ELEMENT_NAMES[286] = ELT_UPLIMIT;
+  ELEMENT_NAMES[287] = ELT_ALTGLYPH;
+  ELEMENT_NAMES[288] = ELT_BASEFONT;
+  ELEMENT_NAMES[289] = ELT_CLIPPATH;
+  ELEMENT_NAMES[290] = ELT_CODOMAIN;
+  ELEMENT_NAMES[291] = ELT_COLGROUP;
+  ELEMENT_NAMES[292] = ELT_EMPTYSET;
+  ELEMENT_NAMES[293] = ELT_FACTOROF;
+  ELEMENT_NAMES[294] = ELT_FIELDSET;
+  ELEMENT_NAMES[295] = ELT_FRAMESET;
+  ELEMENT_NAMES[296] = ELT_FEOFFSET;
+  ELEMENT_NAMES[297] = ELT_GLYPHREF;
+  ELEMENT_NAMES[298] = ELT_INTERVAL;
+  ELEMENT_NAMES[299] = ELT_INTEGERS;
+  ELEMENT_NAMES[300] = ELT_INFINITY;
+  ELEMENT_NAMES[301] = ELT_LISTENER;
+  ELEMENT_NAMES[302] = ELT_LOWLIMIT;
+  ELEMENT_NAMES[303] = ELT_METADATA;
+  ELEMENT_NAMES[304] = ELT_MENCLOSE;
+  ELEMENT_NAMES[305] = ELT_MENUITEM;
+  ELEMENT_NAMES[306] = ELT_MPHANTOM;
+  ELEMENT_NAMES[307] = ELT_NOFRAMES;
+  ELEMENT_NAMES[308] = ELT_NOSCRIPT;
+  ELEMENT_NAMES[309] = ELT_OPTGROUP;
+  ELEMENT_NAMES[310] = ELT_POLYLINE;
+  ELEMENT_NAMES[311] = ELT_PREFETCH;
+  ELEMENT_NAMES[312] = ELT_PROGRESS;
+  ELEMENT_NAMES[313] = ELT_PRSUBSET;
+  ELEMENT_NAMES[314] = ELT_QUOTIENT;
+  ELEMENT_NAMES[315] = ELT_SELECTOR;
+  ELEMENT_NAMES[316] = ELT_TEXTAREA;
+  ELEMENT_NAMES[317] = ELT_TEXTPATH;
+  ELEMENT_NAMES[318] = ELT_VARIANCE;
+  ELEMENT_NAMES[319] = ELT_ANIMATION;
+  ELEMENT_NAMES[320] = ELT_CONJUGATE;
+  ELEMENT_NAMES[321] = ELT_CONDITION;
+  ELEMENT_NAMES[322] = ELT_COMPLEXES;
+  ELEMENT_NAMES[323] = ELT_FONT_FACE;
+  ELEMENT_NAMES[324] = ELT_FACTORIAL;
+  ELEMENT_NAMES[325] = ELT_INTERSECT;
+  ELEMENT_NAMES[326] = ELT_IMAGINARY;
+  ELEMENT_NAMES[327] = ELT_LAPLACIAN;
+  ELEMENT_NAMES[328] = ELT_MATRIXROW;
+  ELEMENT_NAMES[329] = ELT_NOTSUBSET;
+  ELEMENT_NAMES[330] = ELT_OTHERWISE;
+  ELEMENT_NAMES[331] = ELT_PIECEWISE;
+  ELEMENT_NAMES[332] = ELT_PLAINTEXT;
+  ELEMENT_NAMES[333] = ELT_RATIONALS;
+  ELEMENT_NAMES[334] = ELT_SEMANTICS;
+  ELEMENT_NAMES[335] = ELT_TRANSPOSE;
+  ELEMENT_NAMES[336] = ELT_ANNOTATION;
+  ELEMENT_NAMES[337] = ELT_BLOCKQUOTE;
+  ELEMENT_NAMES[338] = ELT_DIVERGENCE;
+  ELEMENT_NAMES[339] = ELT_EULERGAMMA;
+  ELEMENT_NAMES[340] = ELT_EQUIVALENT;
+  ELEMENT_NAMES[341] = ELT_FIGCAPTION;
+  ELEMENT_NAMES[342] = ELT_IMAGINARYI;
+  ELEMENT_NAMES[343] = ELT_MALIGNMARK;
+  ELEMENT_NAMES[344] = ELT_MUNDEROVER;
+  ELEMENT_NAMES[345] = ELT_MLABELEDTR;
+  ELEMENT_NAMES[346] = ELT_NOTANUMBER;
+  ELEMENT_NAMES[347] = ELT_SOLIDCOLOR;
+  ELEMENT_NAMES[348] = ELT_ALTGLYPHDEF;
+  ELEMENT_NAMES[349] = ELT_DETERMINANT;
+  ELEMENT_NAMES[350] = ELT_FEMERGENODE;
+  ELEMENT_NAMES[351] = ELT_FECOMPOSITE;
+  ELEMENT_NAMES[352] = ELT_FESPOTLIGHT;
+  ELEMENT_NAMES[353] = ELT_MALIGNGROUP;
+  ELEMENT_NAMES[354] = ELT_MPRESCRIPTS;
+  ELEMENT_NAMES[355] = ELT_MOMENTABOUT;
+  ELEMENT_NAMES[356] = ELT_NOTPRSUBSET;
+  ELEMENT_NAMES[357] = ELT_PARTIALDIFF;
+  ELEMENT_NAMES[358] = ELT_ALTGLYPHITEM;
+  ELEMENT_NAMES[359] = ELT_ANIMATECOLOR;
+  ELEMENT_NAMES[360] = ELT_DATATEMPLATE;
+  ELEMENT_NAMES[361] = ELT_EXPONENTIALE;
+  ELEMENT_NAMES[362] = ELT_FETURBULENCE;
+  ELEMENT_NAMES[363] = ELT_FEPOINTLIGHT;
+  ELEMENT_NAMES[364] = ELT_FEMORPHOLOGY;
+  ELEMENT_NAMES[365] = ELT_OUTERPRODUCT;
+  ELEMENT_NAMES[366] = ELT_ANIMATEMOTION;
+  ELEMENT_NAMES[367] = ELT_COLOR_PROFILE;
+  ELEMENT_NAMES[368] = ELT_FONT_FACE_SRC;
+  ELEMENT_NAMES[369] = ELT_FONT_FACE_URI;
+  ELEMENT_NAMES[370] = ELT_FOREIGNOBJECT;
+  ELEMENT_NAMES[371] = ELT_FECOLORMATRIX;
+  ELEMENT_NAMES[372] = ELT_MISSING_GLYPH;
+  ELEMENT_NAMES[373] = ELT_MMULTISCRIPTS;
+  ELEMENT_NAMES[374] = ELT_SCALARPRODUCT;
+  ELEMENT_NAMES[375] = ELT_VECTORPRODUCT;
+  ELEMENT_NAMES[376] = ELT_ANNOTATION_XML;
+  ELEMENT_NAMES[377] = ELT_DEFINITION_SRC;
+  ELEMENT_NAMES[378] = ELT_FONT_FACE_NAME;
+  ELEMENT_NAMES[379] = ELT_FEGAUSSIANBLUR;
+  ELEMENT_NAMES[380] = ELT_FEDISTANTLIGHT;
+  ELEMENT_NAMES[381] = ELT_LINEARGRADIENT;
+  ELEMENT_NAMES[382] = ELT_NATURALNUMBERS;
+  ELEMENT_NAMES[383] = ELT_RADIALGRADIENT;
+  ELEMENT_NAMES[384] = ELT_ANIMATETRANSFORM;
+  ELEMENT_NAMES[385] = ELT_CARTESIANPRODUCT;
+  ELEMENT_NAMES[386] = ELT_FONT_FACE_FORMAT;
+  ELEMENT_NAMES[387] = ELT_FECONVOLVEMATRIX;
+  ELEMENT_NAMES[388] = ELT_FEDIFFUSELIGHTING;
+  ELEMENT_NAMES[389] = ELT_FEDISPLACEMENTMAP;
+  ELEMENT_NAMES[390] = ELT_FESPECULARLIGHTING;
+  ELEMENT_NAMES[391] = ELT_DOMAINOFAPPLICATION;
+  ELEMENT_NAMES[392] = ELT_FECOMPONENTTRANSFER;
 }
 
 void
 nsHtml5ElementName::releaseStatics()
 {
   delete ELT_NULL_ELEMENT_NAME;
   delete ELT_A;
   delete ELT_B;
@@ -1439,16 +1442,17 @@ nsHtml5ElementName::releaseStatics()
   delete ELT_LIST;
   delete ELT_META;
   delete ELT_MSUB;
   delete ELT_MODE;
   delete ELT_MATH;
   delete ELT_MARK;
   delete ELT_MASK;
   delete ELT_MEAN;
+  delete ELT_MAIN;
   delete ELT_MSUP;
   delete ELT_MENU;
   delete ELT_MROW;
   delete ELT_NONE;
   delete ELT_NOBR;
   delete ELT_NEST;
   delete ELT_PATH;
   delete ELT_PLUS;
--- a/parser/html/nsHtml5ElementName.h
+++ b/parser/html/nsHtml5ElementName.h
@@ -193,16 +193,17 @@ class nsHtml5ElementName
     static nsHtml5ElementName* ELT_LIST;
     static nsHtml5ElementName* ELT_META;
     static nsHtml5ElementName* ELT_MSUB;
     static nsHtml5ElementName* ELT_MODE;
     static nsHtml5ElementName* ELT_MATH;
     static nsHtml5ElementName* ELT_MARK;
     static nsHtml5ElementName* ELT_MASK;
     static nsHtml5ElementName* ELT_MEAN;
+    static nsHtml5ElementName* ELT_MAIN;
     static nsHtml5ElementName* ELT_MSUP;
     static nsHtml5ElementName* ELT_MENU;
     static nsHtml5ElementName* ELT_MROW;
     static nsHtml5ElementName* ELT_NONE;
     static nsHtml5ElementName* ELT_NOBR;
     static nsHtml5ElementName* ELT_NEST;
     static nsHtml5ElementName* ELT_PATH;
     static nsHtml5ElementName* ELT_PLUS;
--- a/parser/html/nsHtml5TreeBuilder.cpp
+++ b/parser/html/nsHtml5TreeBuilder.cpp
@@ -926,17 +926,17 @@ nsHtml5TreeBuilder::startTag(nsHtml5Elem
               if (addAttributesToBody(attributes)) {
                 attributes = nullptr;
               }
               NS_HTML5_BREAK(starttagloop);
             }
             case NS_HTML5TREE_BUILDER_P:
             case NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
             case NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL:
-            case NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY: {
+            case NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY: {
               implicitlyCloseP();
               appendToCurrentNodeAndPushElementMayFoster(elementName, attributes);
               attributes = nullptr;
               NS_HTML5_BREAK(starttagloop);
             }
             case NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6: {
               implicitlyCloseP();
               if (stack[currentPtr]->getGroup() == NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6) {
@@ -2330,17 +2330,17 @@ nsHtml5TreeBuilder::endTag(nsHtml5Elemen
             mode = NS_HTML5TREE_BUILDER_AFTER_BODY;
             continue;
           }
           case NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
           case NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL:
           case NS_HTML5TREE_BUILDER_PRE_OR_LISTING:
           case NS_HTML5TREE_BUILDER_FIELDSET:
           case NS_HTML5TREE_BUILDER_BUTTON:
-          case NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY: {
+          case NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY: {
             eltPos = findLastInScope(name);
             if (eltPos == NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK) {
               errStrayEndTag(name);
             } else {
               generateImpliedEndTags();
               if (!!MOZ_UNLIKELY(mViewSource) && !isCurrent(name)) {
                 errUnclosedElements(eltPos, name);
               }
--- a/parser/html/nsHtml5TreeBuilder.h
+++ b/parser/html/nsHtml5TreeBuilder.h
@@ -298,17 +298,17 @@ class nsHtml5TreeBuilder : public nsAHtm
 #define NS_HTML5TREE_BUILDER_MARQUEE_OR_APPLET 43
 #define NS_HTML5TREE_BUILDER_PRE_OR_LISTING 44
 #define NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U 45
 #define NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL 46
 #define NS_HTML5TREE_BUILDER_IFRAME 47
 #define NS_HTML5TREE_BUILDER_EMBED_OR_IMG 48
 #define NS_HTML5TREE_BUILDER_AREA_OR_WBR 49
 #define NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU 50
-#define NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY 51
+#define NS_HTML5TREE_BUILDER_ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY 51
 #define NS_HTML5TREE_BUILDER_RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR 52
 #define NS_HTML5TREE_BUILDER_RT_OR_RP 53
 #define NS_HTML5TREE_BUILDER_COMMAND 54
 #define NS_HTML5TREE_BUILDER_PARAM_OR_SOURCE_OR_TRACK 55
 #define NS_HTML5TREE_BUILDER_MGLYPH_OR_MALIGNMARK 56
 #define NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT 57
 #define NS_HTML5TREE_BUILDER_ANNOTATION_XML 58
 #define NS_HTML5TREE_BUILDER_FOREIGNOBJECT_OR_DESC 59
--- a/parser/htmlparser/tests/mochitest/html5lib_tree_construction/Makefile.in
+++ b/parser/htmlparser/tests/mochitest/html5lib_tree_construction/Makefile.in
@@ -54,11 +54,12 @@ MOCHITEST_FILES =	adoption01.dat \
 		tests6.dat \
 		tests7.dat \
 		tests8.dat \
 		tests9.dat \
 		tests_innerHTML_1.dat \
 		tricky01.dat \
 		webkit01.dat \
 		webkit02.dat \
+		main-element.dat \
 		$(NULL)
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/parser/htmlparser/tests/mochitest/html5lib_tree_construction/main-element.dat
@@ -0,0 +1,29 @@
+#data
+<!doctype html><p>foo<main>bar<p>baz
+#errors
+36: End of file seen and there were open elements.
+27: Unclosed element “main”.
+#document
+| <!DOCTYPE html>
+| <html>
+|   <head>
+|   <body>
+|     <p>
+|       "foo"
+|     <main>
+|       "bar"
+|       <p>
+|         "baz"
+
+#data
+<!doctype html><main><p>foo</main>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+|   <head>
+|   <body>
+|     <main>
+|       <p>
+|         "foo"
+|     "bar"
--- a/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html
+++ b/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html
@@ -30,17 +30,18 @@ https://bugzilla.mozilla.org/show_bug.cg
                          "tests4.dat",
                          "tests5.dat",
                          "tests6.dat",
                          "tests8.dat",
                          "tests9.dat",
                          "tests_innerHTML_1.dat",
                          "tricky01.dat",
                          "webkit01.dat",
-                         "webkit02.dat"];
+                         "webkit02.dat",
+                         "main-element.dat"];
     const isOSXLion = navigator.userAgent.indexOf("Mac OS X 10.7") != -1;
     const isOSXMtnLion = navigator.userAgent.indexOf("Mac OS X 10.8") != -1;
     if (!isOSXLion && !isOSXMtnLion) {
       parserDatFiles.push("tests19.dat");
       parserDatFiles.push("tests7.dat");
     }
 
   </script>