Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\VarDumper\Caster; Chris@0: Chris@0: use Symfony\Component\VarDumper\Cloner\Stub; Chris@0: Chris@0: /** Chris@0: * Casts DOM related classes to array representation. Chris@0: * Chris@0: * @author Nicolas Grekas
Chris@0: */ Chris@0: class DOMCaster Chris@0: { Chris@17: private static $errorCodes = [ Chris@0: DOM_PHP_ERR => 'DOM_PHP_ERR', Chris@0: DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', Chris@0: DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', Chris@0: DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', Chris@0: DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', Chris@0: DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', Chris@0: DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', Chris@0: DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', Chris@0: DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', Chris@0: DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', Chris@0: DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', Chris@0: DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', Chris@0: DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', Chris@0: DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', Chris@0: DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', Chris@0: DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', Chris@0: DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', Chris@17: ]; Chris@0: Chris@17: private static $nodeTypes = [ Chris@0: XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', Chris@0: XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', Chris@0: XML_TEXT_NODE => 'XML_TEXT_NODE', Chris@0: XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', Chris@0: XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', Chris@0: XML_ENTITY_NODE => 'XML_ENTITY_NODE', Chris@0: XML_PI_NODE => 'XML_PI_NODE', Chris@0: XML_COMMENT_NODE => 'XML_COMMENT_NODE', Chris@0: XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', Chris@0: XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', Chris@0: XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', Chris@0: XML_NOTATION_NODE => 'XML_NOTATION_NODE', Chris@0: XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', Chris@0: XML_DTD_NODE => 'XML_DTD_NODE', Chris@0: XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', Chris@0: XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', Chris@0: XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', Chris@0: XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', Chris@17: ]; Chris@0: Chris@0: public static function castException(\DOMException $e, array $a, Stub $stub, $isNested) Chris@0: { Chris@0: $k = Caster::PREFIX_PROTECTED.'code'; Chris@0: if (isset($a[$k], self::$errorCodes[$a[$k]])) { Chris@0: $a[$k] = new ConstStub(self::$errorCodes[$a[$k]], $a[$k]); Chris@0: } Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castLength($dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'length' => $dom->length, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castImplementation($dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: Caster::PREFIX_VIRTUAL.'Core' => '1.0', Chris@0: Caster::PREFIX_VIRTUAL.'XML' => '2.0', Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castNode(\DOMNode $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'nodeName' => $dom->nodeName, Chris@0: 'nodeValue' => new CutStub($dom->nodeValue), Chris@0: 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), Chris@0: 'parentNode' => new CutStub($dom->parentNode), Chris@0: 'childNodes' => $dom->childNodes, Chris@0: 'firstChild' => new CutStub($dom->firstChild), Chris@0: 'lastChild' => new CutStub($dom->lastChild), Chris@0: 'previousSibling' => new CutStub($dom->previousSibling), Chris@0: 'nextSibling' => new CutStub($dom->nextSibling), Chris@0: 'attributes' => $dom->attributes, Chris@0: 'ownerDocument' => new CutStub($dom->ownerDocument), Chris@0: 'namespaceURI' => $dom->namespaceURI, Chris@0: 'prefix' => $dom->prefix, Chris@0: 'localName' => $dom->localName, Chris@0: 'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI, Chris@0: 'textContent' => new CutStub($dom->textContent), Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'nodeName' => $dom->nodeName, Chris@0: 'nodeValue' => new CutStub($dom->nodeValue), Chris@0: 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), Chris@0: 'prefix' => $dom->prefix, Chris@0: 'localName' => $dom->localName, Chris@0: 'namespaceURI' => $dom->namespaceURI, Chris@0: 'ownerDocument' => new CutStub($dom->ownerDocument), Chris@0: 'parentNode' => new CutStub($dom->parentNode), Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, $isNested, $filter = 0) Chris@0: { Chris@17: $a += [ Chris@0: 'doctype' => $dom->doctype, Chris@0: 'implementation' => $dom->implementation, Chris@0: 'documentElement' => new CutStub($dom->documentElement), Chris@0: 'actualEncoding' => $dom->actualEncoding, Chris@0: 'encoding' => $dom->encoding, Chris@0: 'xmlEncoding' => $dom->xmlEncoding, Chris@0: 'standalone' => $dom->standalone, Chris@0: 'xmlStandalone' => $dom->xmlStandalone, Chris@0: 'version' => $dom->version, Chris@0: 'xmlVersion' => $dom->xmlVersion, Chris@0: 'strictErrorChecking' => $dom->strictErrorChecking, Chris@0: 'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI, Chris@0: 'config' => $dom->config, Chris@0: 'formatOutput' => $dom->formatOutput, Chris@0: 'validateOnParse' => $dom->validateOnParse, Chris@0: 'resolveExternals' => $dom->resolveExternals, Chris@0: 'preserveWhiteSpace' => $dom->preserveWhiteSpace, Chris@0: 'recover' => $dom->recover, Chris@0: 'substituteEntities' => $dom->substituteEntities, Chris@17: ]; Chris@0: Chris@0: if (!($filter & Caster::EXCLUDE_VERBOSE)) { Chris@0: $formatOutput = $dom->formatOutput; Chris@0: $dom->formatOutput = true; Chris@17: $a += [Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()]; Chris@0: $dom->formatOutput = $formatOutput; Chris@0: } Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'data' => $dom->data, Chris@0: 'length' => $dom->length, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'name' => $dom->name, Chris@0: 'specified' => $dom->specified, Chris@0: 'value' => $dom->value, Chris@0: 'ownerElement' => $dom->ownerElement, Chris@0: 'schemaTypeInfo' => $dom->schemaTypeInfo, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castElement(\DOMElement $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'tagName' => $dom->tagName, Chris@0: 'schemaTypeInfo' => $dom->schemaTypeInfo, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castText(\DOMText $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'wholeText' => $dom->wholeText, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'typeName' => $dom->typeName, Chris@0: 'typeNamespace' => $dom->typeNamespace, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'severity' => $dom->severity, Chris@0: 'message' => $dom->message, Chris@0: 'type' => $dom->type, Chris@0: 'relatedException' => $dom->relatedException, Chris@0: 'related_data' => $dom->related_data, Chris@0: 'location' => $dom->location, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'lineNumber' => $dom->lineNumber, Chris@0: 'columnNumber' => $dom->columnNumber, Chris@0: 'offset' => $dom->offset, Chris@0: 'relatedNode' => $dom->relatedNode, Chris@0: 'uri' => $dom->uri ? new LinkStub($dom->uri, $dom->lineNumber) : $dom->uri, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'name' => $dom->name, Chris@0: 'entities' => $dom->entities, Chris@0: 'notations' => $dom->notations, Chris@0: 'publicId' => $dom->publicId, Chris@0: 'systemId' => $dom->systemId, Chris@0: 'internalSubset' => $dom->internalSubset, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'publicId' => $dom->publicId, Chris@0: 'systemId' => $dom->systemId, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'publicId' => $dom->publicId, Chris@0: 'systemId' => $dom->systemId, Chris@0: 'notationName' => $dom->notationName, Chris@0: 'actualEncoding' => $dom->actualEncoding, Chris@0: 'encoding' => $dom->encoding, Chris@0: 'version' => $dom->version, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'target' => $dom->target, Chris@0: 'data' => $dom->data, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: Chris@0: public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, $isNested) Chris@0: { Chris@17: $a += [ Chris@0: 'document' => $dom->document, Chris@17: ]; Chris@0: Chris@0: return $a; Chris@0: } Chris@0: }