getDebugTag(); } else { return get_class( $element ) . '#' . substr( md5( spl_object_hash( $element ) ), 0, 8 ); } } /** * Get a short excerpt of some text * * @param string $text * @return string */ public static function excerpt( $text ) { if ( strlen( $text ) > 20 ) { $text = substr( $text, 0, 20 ) . '...'; } return str_replace( "\n", "\\n", $text ); } /** * Get a readable version of the TreeBuilder preposition constants * @param int $prep * @return string */ public static function getPrepositionName( $prep ) { $names = [ TreeBuilder::BEFORE => 'before', TreeBuilder::UNDER => 'under', TreeBuilder::ROOT => 'under root' ]; return $names[$prep] ?? '???'; } public static function startDocument( $fns, $fn ) { return "startDocument"; } public static function endDocument( $pos ) { return "endDocument pos=$pos"; } public static function characters( $preposition, $refNode, $text, $start, $length, $sourceStart, $sourceLength ) { $excerpt = self::excerpt( substr( $text, $start, $length ) ); $prepName = self::getPrepositionName( $preposition ); $refTag = self::getDebugTag( $refNode ); return "characters \"$excerpt\", $prepName $refTag, pos=$sourceStart"; } public static function insertElement( $preposition, $refNode, Element $element, $void, $sourceStart, $sourceLength ) { $prepName = self::getPrepositionName( $preposition ); $refTag = self::getDebugTag( $refNode ); $elementTag = self::getDebugTag( $element ); $voidMsg = $void ? 'void' : ''; return "insert $elementTag $voidMsg, $prepName $refTag, pos=$sourceStart"; } public static function endTag( Element $element, $sourceStart, $sourceLength ) { $elementTag = self::getDebugTag( $element ); return "end $elementTag, pos=$sourceStart"; } public static function doctype( $name, $public, $system, $quirks, $sourceStart, $sourceLength ) { $quirksTypes = [ TreeBuilder::QUIRKS => 'quirks', TreeBuilder::NO_QUIRKS => 'no-quirks', TreeBuilder::LIMITED_QUIRKS => 'limited-quirks' ]; $quirksMsg = $quirksTypes[$quirks]; return "doctype $name, public=\"$public\", system=\"$system\", " . "$quirksMsg, pos=$sourceStart"; } public static function comment( $preposition, $refNode, $text, $sourceStart, $sourceLength ) { $prepName = self::getPrepositionName( $preposition ); $refTag = self::getDebugTag( $refNode ); $excerpt = self::excerpt( $text ); return "comment \"$excerpt\", $prepName $refTag, pos=$sourceStart"; } public static function error( $text, $pos ) { return "error \"$text\", pos=$pos"; } public static function mergeAttributes( Element $element, Attributes $attrs, $sourceStart ) { $elementTag = self::getDebugTag( $element ); return "merge $elementTag, pos=$sourceStart"; } public static function removeNode( Element $element, $sourceStart ) { $elementTag = self::getDebugTag( $element ); return "remove $elementTag, pos=$sourceStart"; } public static function reparentChildren( Element $element, Element $newParent, $sourceStart ) { $elementTag = self::getDebugTag( $element ); $newParentTag = self::getDebugTag( $newParent ); return "reparent children of $elementTag under $newParentTag, pos=$sourceStart"; } }