X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Element.php diff --git a/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Element.php b/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Element.php new file mode 100644 index 00000000..56d0ff5d --- /dev/null +++ b/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Element.php @@ -0,0 +1,180 @@ + element to be used as + * the top-level element in fragment parsing. + * @var bool + */ + public $isVirtual; + + /** + * Internal to CachingStack. A link in the scope list. + */ + public $nextScope; + + /** + * Internal to CachingStack and SimpleStack. The current stack index, or + * null if the element is not in the stack. + */ + public $stackIndex; + + /** + * Internal to ActiveFormattingElements. + */ + public $prevAFE, $nextAFE, $nextNoah; + + /** + * The cache for getNoahKey() + */ + private $noahKey; + + /** + * This member variable can be written to by the TreeHandler, to store any + * state associated with the element (such as a DOM node). It is not used + * by TreeBuilder. + */ + public $userData; + + /** + * The element types in the MathML namespace which are MathML text + * integration points. + * @var string[bool] + */ + private static $mathmlIntegration = [ + 'mi' => true, + 'mo' => true, + 'mn' => true, + 'ms' => true, + 'mtext' => true + ]; + + /** + * The element types in the SVG namespace which are SVG text integration + * points. + * @var string[bool] + */ + private static $svgHtmlIntegration = [ + 'foreignObject' => true, + 'desc' => true, + 'title' => true + ]; + + /** + * Constructor. + * + * @param string $namespace + * @param string $name + * @param Attributes $attrs + */ + public function __construct( $namespace, $name, Attributes $attrs ) { + $this->namespace = $namespace; + $this->name = $name; + if ( $namespace === HTMLData::NS_HTML ) { + $this->htmlName = $name; + } elseif ( $namespace === HTMLData::NS_MATHML ) { + $this->htmlName = "mathml $name"; + } elseif ( $namespace === HTMLData::NS_SVG ) { + $this->htmlName = "svg $name"; + } else { + $this->htmlName = "$namespace $name"; + } + $this->attrs = $attrs; + } + + public function __set( $name, $value ) { + PropGuard::set( $this, $name, $value ); + } + + /** + * Is the element a MathML text integration point? + * + * @return bool + */ + public function isMathmlTextIntegration() { + return $this->namespace === HTMLData::NS_MATHML + && isset( self::$mathmlIntegration[$this->name] ); + } + + /** + * Is the element an HTML integration point? + */ + public function isHtmlIntegration() { + if ( $this->namespace === HTMLData::NS_MATHML ) { + if ( isset( $this->attrs['encoding'] ) ) { + $encoding = strtolower( $this->attrs['encoding'] ); + return $encoding === 'text/html' || $encoding === 'application/xhtml+xml'; + } else { + return false; + } + } elseif ( $this->namespace === HTMLData::NS_SVG ) { + return isset( self::$svgHtmlIntegration[$this->name] ); + } else { + return false; + } + } + + /** + * Get a string key for the Noah's Ark algorithm + * + * @return string + */ + public function getNoahKey() { + if ( $this->noahKey === null ) { + $attrs = $this->attrs->getValues(); + ksort( $attrs ); + $this->noahKey = serialize( [ $this->htmlName, $attrs ] ); + } + return $this->noahKey; + } + + /** + * Get a string identifying the element, for use in debugging. + */ + public function getDebugTag() { + return $this->htmlName . '#' . substr( md5( spl_object_hash( $this ) ), 0, 8 ); + } +}