Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\VarDumper\Caster;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\VarDumper\Cloner\Stub;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Casts DOM related classes to array representation.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @author Nicolas Grekas <p@tchwork.com>
|
Chris@0
|
20 */
|
Chris@0
|
21 class DOMCaster
|
Chris@0
|
22 {
|
Chris@17
|
23 private static $errorCodes = [
|
Chris@0
|
24 DOM_PHP_ERR => 'DOM_PHP_ERR',
|
Chris@0
|
25 DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
|
Chris@0
|
26 DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
|
Chris@0
|
27 DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
|
Chris@0
|
28 DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
|
Chris@0
|
29 DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
|
Chris@0
|
30 DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
|
Chris@0
|
31 DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
|
Chris@0
|
32 DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
|
Chris@0
|
33 DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
|
Chris@0
|
34 DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
|
Chris@0
|
35 DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
|
Chris@0
|
36 DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
|
Chris@0
|
37 DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
|
Chris@0
|
38 DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
|
Chris@0
|
39 DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
|
Chris@0
|
40 DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
|
Chris@17
|
41 ];
|
Chris@0
|
42
|
Chris@17
|
43 private static $nodeTypes = [
|
Chris@0
|
44 XML_ELEMENT_NODE => 'XML_ELEMENT_NODE',
|
Chris@0
|
45 XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE',
|
Chris@0
|
46 XML_TEXT_NODE => 'XML_TEXT_NODE',
|
Chris@0
|
47 XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE',
|
Chris@0
|
48 XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE',
|
Chris@0
|
49 XML_ENTITY_NODE => 'XML_ENTITY_NODE',
|
Chris@0
|
50 XML_PI_NODE => 'XML_PI_NODE',
|
Chris@0
|
51 XML_COMMENT_NODE => 'XML_COMMENT_NODE',
|
Chris@0
|
52 XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE',
|
Chris@0
|
53 XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE',
|
Chris@0
|
54 XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE',
|
Chris@0
|
55 XML_NOTATION_NODE => 'XML_NOTATION_NODE',
|
Chris@0
|
56 XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE',
|
Chris@0
|
57 XML_DTD_NODE => 'XML_DTD_NODE',
|
Chris@0
|
58 XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE',
|
Chris@0
|
59 XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE',
|
Chris@0
|
60 XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE',
|
Chris@0
|
61 XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
|
Chris@17
|
62 ];
|
Chris@0
|
63
|
Chris@0
|
64 public static function castException(\DOMException $e, array $a, Stub $stub, $isNested)
|
Chris@0
|
65 {
|
Chris@0
|
66 $k = Caster::PREFIX_PROTECTED.'code';
|
Chris@0
|
67 if (isset($a[$k], self::$errorCodes[$a[$k]])) {
|
Chris@0
|
68 $a[$k] = new ConstStub(self::$errorCodes[$a[$k]], $a[$k]);
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 return $a;
|
Chris@0
|
72 }
|
Chris@0
|
73
|
Chris@0
|
74 public static function castLength($dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
75 {
|
Chris@17
|
76 $a += [
|
Chris@0
|
77 'length' => $dom->length,
|
Chris@17
|
78 ];
|
Chris@0
|
79
|
Chris@0
|
80 return $a;
|
Chris@0
|
81 }
|
Chris@0
|
82
|
Chris@0
|
83 public static function castImplementation($dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
84 {
|
Chris@17
|
85 $a += [
|
Chris@0
|
86 Caster::PREFIX_VIRTUAL.'Core' => '1.0',
|
Chris@0
|
87 Caster::PREFIX_VIRTUAL.'XML' => '2.0',
|
Chris@17
|
88 ];
|
Chris@0
|
89
|
Chris@0
|
90 return $a;
|
Chris@0
|
91 }
|
Chris@0
|
92
|
Chris@0
|
93 public static function castNode(\DOMNode $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
94 {
|
Chris@17
|
95 $a += [
|
Chris@0
|
96 'nodeName' => $dom->nodeName,
|
Chris@0
|
97 'nodeValue' => new CutStub($dom->nodeValue),
|
Chris@0
|
98 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType),
|
Chris@0
|
99 'parentNode' => new CutStub($dom->parentNode),
|
Chris@0
|
100 'childNodes' => $dom->childNodes,
|
Chris@0
|
101 'firstChild' => new CutStub($dom->firstChild),
|
Chris@0
|
102 'lastChild' => new CutStub($dom->lastChild),
|
Chris@0
|
103 'previousSibling' => new CutStub($dom->previousSibling),
|
Chris@0
|
104 'nextSibling' => new CutStub($dom->nextSibling),
|
Chris@0
|
105 'attributes' => $dom->attributes,
|
Chris@0
|
106 'ownerDocument' => new CutStub($dom->ownerDocument),
|
Chris@0
|
107 'namespaceURI' => $dom->namespaceURI,
|
Chris@0
|
108 'prefix' => $dom->prefix,
|
Chris@0
|
109 'localName' => $dom->localName,
|
Chris@0
|
110 'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI,
|
Chris@0
|
111 'textContent' => new CutStub($dom->textContent),
|
Chris@17
|
112 ];
|
Chris@0
|
113
|
Chris@0
|
114 return $a;
|
Chris@0
|
115 }
|
Chris@0
|
116
|
Chris@0
|
117 public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
118 {
|
Chris@17
|
119 $a += [
|
Chris@0
|
120 'nodeName' => $dom->nodeName,
|
Chris@0
|
121 'nodeValue' => new CutStub($dom->nodeValue),
|
Chris@0
|
122 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType),
|
Chris@0
|
123 'prefix' => $dom->prefix,
|
Chris@0
|
124 'localName' => $dom->localName,
|
Chris@0
|
125 'namespaceURI' => $dom->namespaceURI,
|
Chris@0
|
126 'ownerDocument' => new CutStub($dom->ownerDocument),
|
Chris@0
|
127 'parentNode' => new CutStub($dom->parentNode),
|
Chris@17
|
128 ];
|
Chris@0
|
129
|
Chris@0
|
130 return $a;
|
Chris@0
|
131 }
|
Chris@0
|
132
|
Chris@0
|
133 public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, $isNested, $filter = 0)
|
Chris@0
|
134 {
|
Chris@17
|
135 $a += [
|
Chris@0
|
136 'doctype' => $dom->doctype,
|
Chris@0
|
137 'implementation' => $dom->implementation,
|
Chris@0
|
138 'documentElement' => new CutStub($dom->documentElement),
|
Chris@0
|
139 'actualEncoding' => $dom->actualEncoding,
|
Chris@0
|
140 'encoding' => $dom->encoding,
|
Chris@0
|
141 'xmlEncoding' => $dom->xmlEncoding,
|
Chris@0
|
142 'standalone' => $dom->standalone,
|
Chris@0
|
143 'xmlStandalone' => $dom->xmlStandalone,
|
Chris@0
|
144 'version' => $dom->version,
|
Chris@0
|
145 'xmlVersion' => $dom->xmlVersion,
|
Chris@0
|
146 'strictErrorChecking' => $dom->strictErrorChecking,
|
Chris@0
|
147 'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI,
|
Chris@0
|
148 'config' => $dom->config,
|
Chris@0
|
149 'formatOutput' => $dom->formatOutput,
|
Chris@0
|
150 'validateOnParse' => $dom->validateOnParse,
|
Chris@0
|
151 'resolveExternals' => $dom->resolveExternals,
|
Chris@0
|
152 'preserveWhiteSpace' => $dom->preserveWhiteSpace,
|
Chris@0
|
153 'recover' => $dom->recover,
|
Chris@0
|
154 'substituteEntities' => $dom->substituteEntities,
|
Chris@17
|
155 ];
|
Chris@0
|
156
|
Chris@0
|
157 if (!($filter & Caster::EXCLUDE_VERBOSE)) {
|
Chris@0
|
158 $formatOutput = $dom->formatOutput;
|
Chris@0
|
159 $dom->formatOutput = true;
|
Chris@17
|
160 $a += [Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()];
|
Chris@0
|
161 $dom->formatOutput = $formatOutput;
|
Chris@0
|
162 }
|
Chris@0
|
163
|
Chris@0
|
164 return $a;
|
Chris@0
|
165 }
|
Chris@0
|
166
|
Chris@0
|
167 public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
168 {
|
Chris@17
|
169 $a += [
|
Chris@0
|
170 'data' => $dom->data,
|
Chris@0
|
171 'length' => $dom->length,
|
Chris@17
|
172 ];
|
Chris@0
|
173
|
Chris@0
|
174 return $a;
|
Chris@0
|
175 }
|
Chris@0
|
176
|
Chris@0
|
177 public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
178 {
|
Chris@17
|
179 $a += [
|
Chris@0
|
180 'name' => $dom->name,
|
Chris@0
|
181 'specified' => $dom->specified,
|
Chris@0
|
182 'value' => $dom->value,
|
Chris@0
|
183 'ownerElement' => $dom->ownerElement,
|
Chris@0
|
184 'schemaTypeInfo' => $dom->schemaTypeInfo,
|
Chris@17
|
185 ];
|
Chris@0
|
186
|
Chris@0
|
187 return $a;
|
Chris@0
|
188 }
|
Chris@0
|
189
|
Chris@0
|
190 public static function castElement(\DOMElement $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
191 {
|
Chris@17
|
192 $a += [
|
Chris@0
|
193 'tagName' => $dom->tagName,
|
Chris@0
|
194 'schemaTypeInfo' => $dom->schemaTypeInfo,
|
Chris@17
|
195 ];
|
Chris@0
|
196
|
Chris@0
|
197 return $a;
|
Chris@0
|
198 }
|
Chris@0
|
199
|
Chris@0
|
200 public static function castText(\DOMText $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
201 {
|
Chris@17
|
202 $a += [
|
Chris@0
|
203 'wholeText' => $dom->wholeText,
|
Chris@17
|
204 ];
|
Chris@0
|
205
|
Chris@0
|
206 return $a;
|
Chris@0
|
207 }
|
Chris@0
|
208
|
Chris@0
|
209 public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
210 {
|
Chris@17
|
211 $a += [
|
Chris@0
|
212 'typeName' => $dom->typeName,
|
Chris@0
|
213 'typeNamespace' => $dom->typeNamespace,
|
Chris@17
|
214 ];
|
Chris@0
|
215
|
Chris@0
|
216 return $a;
|
Chris@0
|
217 }
|
Chris@0
|
218
|
Chris@0
|
219 public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
220 {
|
Chris@17
|
221 $a += [
|
Chris@0
|
222 'severity' => $dom->severity,
|
Chris@0
|
223 'message' => $dom->message,
|
Chris@0
|
224 'type' => $dom->type,
|
Chris@0
|
225 'relatedException' => $dom->relatedException,
|
Chris@0
|
226 'related_data' => $dom->related_data,
|
Chris@0
|
227 'location' => $dom->location,
|
Chris@17
|
228 ];
|
Chris@0
|
229
|
Chris@0
|
230 return $a;
|
Chris@0
|
231 }
|
Chris@0
|
232
|
Chris@0
|
233 public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
234 {
|
Chris@17
|
235 $a += [
|
Chris@0
|
236 'lineNumber' => $dom->lineNumber,
|
Chris@0
|
237 'columnNumber' => $dom->columnNumber,
|
Chris@0
|
238 'offset' => $dom->offset,
|
Chris@0
|
239 'relatedNode' => $dom->relatedNode,
|
Chris@0
|
240 'uri' => $dom->uri ? new LinkStub($dom->uri, $dom->lineNumber) : $dom->uri,
|
Chris@17
|
241 ];
|
Chris@0
|
242
|
Chris@0
|
243 return $a;
|
Chris@0
|
244 }
|
Chris@0
|
245
|
Chris@0
|
246 public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
247 {
|
Chris@17
|
248 $a += [
|
Chris@0
|
249 'name' => $dom->name,
|
Chris@0
|
250 'entities' => $dom->entities,
|
Chris@0
|
251 'notations' => $dom->notations,
|
Chris@0
|
252 'publicId' => $dom->publicId,
|
Chris@0
|
253 'systemId' => $dom->systemId,
|
Chris@0
|
254 'internalSubset' => $dom->internalSubset,
|
Chris@17
|
255 ];
|
Chris@0
|
256
|
Chris@0
|
257 return $a;
|
Chris@0
|
258 }
|
Chris@0
|
259
|
Chris@0
|
260 public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
261 {
|
Chris@17
|
262 $a += [
|
Chris@0
|
263 'publicId' => $dom->publicId,
|
Chris@0
|
264 'systemId' => $dom->systemId,
|
Chris@17
|
265 ];
|
Chris@0
|
266
|
Chris@0
|
267 return $a;
|
Chris@0
|
268 }
|
Chris@0
|
269
|
Chris@0
|
270 public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
271 {
|
Chris@17
|
272 $a += [
|
Chris@0
|
273 'publicId' => $dom->publicId,
|
Chris@0
|
274 'systemId' => $dom->systemId,
|
Chris@0
|
275 'notationName' => $dom->notationName,
|
Chris@0
|
276 'actualEncoding' => $dom->actualEncoding,
|
Chris@0
|
277 'encoding' => $dom->encoding,
|
Chris@0
|
278 'version' => $dom->version,
|
Chris@17
|
279 ];
|
Chris@0
|
280
|
Chris@0
|
281 return $a;
|
Chris@0
|
282 }
|
Chris@0
|
283
|
Chris@0
|
284 public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
285 {
|
Chris@17
|
286 $a += [
|
Chris@0
|
287 'target' => $dom->target,
|
Chris@0
|
288 'data' => $dom->data,
|
Chris@17
|
289 ];
|
Chris@0
|
290
|
Chris@0
|
291 return $a;
|
Chris@0
|
292 }
|
Chris@0
|
293
|
Chris@0
|
294 public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, $isNested)
|
Chris@0
|
295 {
|
Chris@17
|
296 $a += [
|
Chris@0
|
297 'document' => $dom->document,
|
Chris@17
|
298 ];
|
Chris@0
|
299
|
Chris@0
|
300 return $a;
|
Chris@0
|
301 }
|
Chris@0
|
302 }
|