1,
"abbr" => 1,
"address" => 1,
"area" => 1,
"article" => 1,
"aside" => 1,
"audio" => 1,
"b" => 1,
"base" => 1,
"bdi" => 1,
"bdo" => 1,
"blockquote" => 1,
"body" => 1,
"br" => 1,
"button" => 1,
"canvas" => 1,
"caption" => 1,
"cite" => 1,
"code" => 1,
"col" => 1,
"colgroup" => 1,
"command" => 1,
//"data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data
"datalist" => 1,
"dd" => 1,
"del" => 1,
"details" => 1,
"dfn" => 1,
"dialog" => 1,
"div" => 1,
"dl" => 1,
"dt" => 1,
"em" => 1,
"embed" => 1,
"fieldset" => 1,
"figcaption" => 1,
"figure" => 1,
"footer" => 1,
"form" => 1,
"h1" => 1,
"h2" => 1,
"h3" => 1,
"h4" => 1,
"h5" => 1,
"h6" => 1,
"head" => 1,
"header" => 1,
"hgroup" => 1,
"hr" => 1,
"html" => 1,
"i" => 1,
"iframe" => 1,
"img" => 1,
"input" => 1,
"kbd" => 1,
"ins" => 1,
"keygen" => 1,
"label" => 1,
"legend" => 1,
"li" => 1,
"link" => 1,
"map" => 1,
"mark" => 1,
"menu" => 1,
"meta" => 1,
"meter" => 1,
"nav" => 1,
"noscript" => 1,
"object" => 1,
"ol" => 1,
"optgroup" => 1,
"option" => 1,
"output" => 1,
"p" => 1,
"param" => 1,
"pre" => 1,
"progress" => 1,
"q" => 1,
"rp" => 1,
"rt" => 1,
"ruby" => 1,
"s" => 1,
"samp" => 1,
"script" => 1,
"section" => 1,
"select" => 1,
"small" => 1,
"source" => 1,
"span" => 1,
"strong" => 1,
"style" => 1,
"sub" => 1,
"summary" => 1,
"sup" => 1,
"table" => 1,
"tbody" => 1,
"td" => 1,
"textarea" => 1,
"tfoot" => 1,
"th" => 1,
"thead" => 1,
"time" => 1,
"title" => 1,
"tr" => 1,
"track" => 1,
"u" => 1,
"ul" => 1,
"var" => 1,
"video" => 1,
"wbr" => 1,
);
/**
* The MathML elements. See http://www.w3.org/wiki/MathML/Elements.
*
* In our case we are only concerned with presentation MathML and not content
* MathML. There is a nice list of this subset at https://developer.mozilla.org/en-US/docs/MathML/Element.
*
* @var array
*/
public static $mathml = array(
"maction" => 1,
"maligngroup" => 1,
"malignmark" => 1,
"math" => 1,
"menclose" => 1,
"merror" => 1,
"mfenced" => 1,
"mfrac" => 1,
"mglyph" => 1,
"mi" => 1,
"mlabeledtr" => 1,
"mlongdiv" => 1,
"mmultiscripts" => 1,
"mn" => 1,
"mo" => 1,
"mover" => 1,
"mpadded" => 1,
"mphantom" => 1,
"mroot" => 1,
"mrow" => 1,
"ms" => 1,
"mscarries" => 1,
"mscarry" => 1,
"msgroup" => 1,
"msline" => 1,
"mspace" => 1,
"msqrt" => 1,
"msrow" => 1,
"mstack" => 1,
"mstyle" => 1,
"msub" => 1,
"msup" => 1,
"msubsup" => 1,
"mtable" => 1,
"mtd" => 1,
"mtext" => 1,
"mtr" => 1,
"munder" => 1,
"munderover" => 1,
);
/**
* Test if an element is a valid html5 element.
*
* @param string $name
* The name of the element.
*
* @return bool
* True if a html5 element and false otherwise.
*/
public static function isHtml5Element($name) {
// html5 element names are case insensetitive. Forcing lowercase for the check.
// Do we need this check or will all data passed here already be lowercase?
return isset(self::$elements[strtolower($name)]);
}
/**
* Test if an element name is a valid MathML presentation element.
*
* @param string $name
* The name of the element.
*
* @return bool
* True if a MathML name and false otherwise.
*/
public static function isMathMLElement($name) {
// MathML is case-sensetitive unlike html5 elements.
return isset(self::$mathml[$name]);
}
/**
* Is an element name valid in an html5 document.
*
* This includes html5 elements along with other allowed embedded content
* such as svg and mathml.
*
* @param string $name
* The name of the element.
*
* @return bool
* True if valid and false otherwise.
*/
public function isElement($name) {
return self::isHtml5Element($name) || self::isMathMLElement($name);
}
}