[VarDumper] casters for DOM objects

This commit is contained in:
Nicolas Grekas 2014-08-24 11:28:24 +02:00
parent c426d8bc09
commit 0266072bb3
2 changed files with 302 additions and 0 deletions

View File

@ -0,0 +1,279 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\VarDumper\Caster;
/**
* Casts DOM related classes to array representation.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
class DOMCaster
{
private static $errorCodes = array(
DOM_PHP_ERR => 'DOM_PHP_ERR',
DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
);
public static function castException(\DOMException $e, array $a, $isNested, &$cut)
{
if (isset($a["\0*\0code"], self::$errorCodes[$a["\0*\0code"]])) {
$a["\0*\0code"] .= ' ('.self::$errorCodes[$a["\0*\0code"]].')';
}
return $a;
}
public static function castLength($dom, array $a, $isNested, &$cut)
{
$a += array(
'length' => $dom->length,
);
return $a;
}
public static function castImplementation($dom, array $a, $isNested, &$cut)
{
$a += array(
"\0~\0Core" => '1.0',
"\0~\0XML" => '2.0',
);
return $a;
}
public static function castNode(\DOMNode $dom, array $a, $isNested, &$cut)
{
$a += array(
'nodeName' => $dom->nodeName,
//'nodeValue' => $dom->nodeValue,
'nodeType' => $dom->nodeType,
//'parentNode' => $dom->parentNode,
'childNodes' => $dom->childNodes,
//'firstChild' => $dom->firstChild,
//'lastChild' => $dom->lastChild,
//'previousSibling' => $dom->previousSibling,
//'nextSibling' => $dom->nextSibling,
'attributes' => $dom->attributes,
//'ownerDocument' => $dom->ownerDocument,
'namespaceURI' => $dom->namespaceURI,
'prefix' => $dom->prefix,
'localName' => $dom->localName,
'baseURI' => $dom->baseURI,
//'textContent' => $dom->textContent,
);
$cut += 8;
return $a;
}
public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, $isNested, &$cut)
{
$a += array(
'nodeName' => $dom->nodeName,
//'nodeValue' => $dom->nodeValue,
'nodeType' => $dom->nodeType,
'prefix' => $dom->prefix,
'localName' => $dom->localName,
'namespaceURI' => $dom->namespaceURI,
//'ownerDocument' => $dom->ownerDocument,
//'parentNode' => $dom->parentNode,
);
$cut += 3;
return $a;
}
public static function castDocument(\DOMDocument $dom, array $a, $isNested, &$cut)
{
$formatOutput = $dom->formatOutput;
$dom->formatOutput = true;
$a += array(
'doctype' => $dom->doctype,
'implementation' => $dom->implementation,
'documentElement' => $dom->documentElement,
'actualEncoding' => $dom->actualEncoding,
'encoding' => $dom->encoding,
'xmlEncoding' => $dom->xmlEncoding,
'standalone' => $dom->standalone,
'xmlStandalone' => $dom->xmlStandalone,
'version' => $dom->version,
'xmlVersion' => $dom->xmlVersion,
'strictErrorChecking' => $dom->strictErrorChecking,
'documentURI' => $dom->documentURI,
'config' => $dom->config,
'formatOutput' => $formatOutput,
'validateOnParse' => $dom->validateOnParse,
'resolveExternals' => $dom->resolveExternals,
'preserveWhiteSpace' => $dom->preserveWhiteSpace,
'recover' => $dom->recover,
'substituteEntities' => $dom->substituteEntities,
"\0~\0xml" => $dom->saveXML(),
);
$dom->formatOutput = $formatOutput;
return $a;
}
public static function castCharacterData(\DOMCharacterData $dom, array $a, $isNested, &$cut)
{
$a += array(
'data' => $dom->data,
'length' => $dom->length,
);
return $a;
}
public static function castAttr(\DOMAttr $dom, array $a, $isNested, &$cut)
{
$a += array(
'name' => $dom->name,
'specified' => $dom->specified,
'value' => $dom->value,
'ownerElement' => $dom->ownerElement,
'schemaTypeInfo' => $dom->schemaTypeInfo,
);
return $a;
}
public static function castElement(\DOMElement $dom, array $a, $isNested, &$cut)
{
$a += array(
'tagName' => $dom->tagName,
'schemaTypeInfo' => $dom->schemaTypeInfo,
);
return $a;
}
public static function castText(\DOMText $dom, array $a, $isNested, &$cut)
{
$a += array(
'wholeText' => $dom->wholeText,
);
return $a;
}
public static function castTypeinfo(\DOMTypeinfo $dom, array $a, $isNested, &$cut)
{
$a += array(
'typeName' => $dom->typeName,
'typeNamespace' => $dom->typeNamespace,
);
return $a;
}
public static function castDomError(\DOMDomError $dom, array $a, $isNested, &$cut)
{
$a += array(
'severity' => $dom->severity,
'message' => $dom->message,
'type' => $dom->type,
'relatedException' => $dom->relatedException,
'related_data' => $dom->related_data,
'location' => $dom->location,
);
return $a;
}
public static function castLocator(\DOMLocator $dom, array $a, $isNested, &$cut)
{
$a += array(
'lineNumber' => $dom->lineNumber,
'columnNumber' => $dom->columnNumber,
'offset' => $dom->offset,
'relatedNode' => $dom->relatedNode,
'uri' => $dom->uri,
);
return $a;
}
public static function castDocumentType(\DOMDocumentType $dom, array $a, $isNested, &$cut)
{
$a += array(
'name' => $dom->name,
'entities' => $dom->entities,
'notations' => $dom->notations,
'publicId' => $dom->publicId,
'systemId' => $dom->systemId,
'internalSubset' => $dom->internalSubset,
);
return $a;
}
public static function castNotation(\DOMNotation $dom, array $a, $isNested, &$cut)
{
$a += array(
'publicId' => $dom->publicId,
'systemId' => $dom->systemId,
);
return $a;
}
public static function castEntity(\DOMEntity $dom, array $a, $isNested, &$cut)
{
$a += array(
'publicId' => $dom->publicId,
'systemId' => $dom->systemId,
'notationName' => $dom->notationName,
'actualEncoding' => $dom->actualEncoding,
'encoding' => $dom->encoding,
'version' => $dom->version,
);
return $a;
}
public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, $isNested, &$cut)
{
$a += array(
'target' => $dom->target,
'data' => $dom->data,
);
return $a;
}
public static function castXPath(\DOMXPath $dom, array $a, $isNested, &$cut)
{
$a += array(
'document' => $dom->document,
);
return $a;
}
}

View File

@ -29,6 +29,29 @@ abstract class AbstractCloner implements ClonerInterface
'o:Doctrine\ORM\Proxy\Proxy' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castOrmProxy',
'o:Doctrine\ORM\PersistentCollection' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castPersistentCollection',
'o:DOMException' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castException',
'o:DOMStringList' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLength',
'o:DOMNameList' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLength',
'o:DOMImplementation' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castImplementation',
'o:DOMImplementationList' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLength',
'o:DOMNode' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castNode',
'o:DOMNameSpaceNode' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castNameSpaceNode',
'o:DOMDocument' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castDocument',
'o:DOMNodeList' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLength',
'o:DOMNamedNodeMap' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLength',
'o:DOMCharacterData' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castCharacterData',
'o:DOMAttr' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castAttr',
'o:DOMElement' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castElement',
'o:DOMText' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castText',
'o:DOMTypeinfo' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castTypeinfo',
'o:DOMDomError' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castDomError',
'o:DOMLocator' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castLocator',
'o:DOMDocumentType' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castDocumentType',
'o:DOMNotation' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castNotation',
'o:DOMEntity' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castEntity',
'o:DOMProcessingInstruction' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castProcessingInstruction',
'o:DOMXPath' => 'Symfony\Component\VarDumper\Caster\DOMCaster::castXPath',
'o:ErrorException' => 'Symfony\Component\VarDumper\Caster\ExceptionCaster::castErrorException',
'o:Exception' => 'Symfony\Component\VarDumper\Caster\ExceptionCaster::castException',
'o:Symfony\Component\VarDumper\Exception\ThrowingCasterException'