annotate vendor/nikic/php-parser/lib/PhpParser/Serializer/XML.php @ 2:92f882872392

Trusted hosts, + remove migration modules
author Chris Cannam
date Tue, 05 Dec 2017 09:26:43 +0000
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace PhpParser\Serializer;
Chris@0 4
Chris@0 5 use PhpParser\Comment;
Chris@0 6 use PhpParser\Node;
Chris@0 7 use PhpParser\Serializer;
Chris@0 8 use XMLWriter;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * @deprecated
Chris@0 12 */
Chris@0 13 class XML implements Serializer
Chris@0 14 {
Chris@0 15 protected $writer;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * Constructs a XML serializer.
Chris@0 19 */
Chris@0 20 public function __construct() {
Chris@0 21 $this->writer = new XMLWriter;
Chris@0 22 $this->writer->openMemory();
Chris@0 23 $this->writer->setIndent(true);
Chris@0 24 }
Chris@0 25
Chris@0 26 public function serialize(array $nodes) {
Chris@0 27 $this->writer->flush();
Chris@0 28 $this->writer->startDocument('1.0', 'UTF-8');
Chris@0 29
Chris@0 30 $this->writer->startElement('AST');
Chris@0 31 $this->writer->writeAttribute('xmlns:node', 'http://nikic.github.com/PHPParser/XML/node');
Chris@0 32 $this->writer->writeAttribute('xmlns:subNode', 'http://nikic.github.com/PHPParser/XML/subNode');
Chris@0 33 $this->writer->writeAttribute('xmlns:attribute', 'http://nikic.github.com/PHPParser/XML/attribute');
Chris@0 34 $this->writer->writeAttribute('xmlns:scalar', 'http://nikic.github.com/PHPParser/XML/scalar');
Chris@0 35
Chris@0 36 $this->_serialize($nodes);
Chris@0 37
Chris@0 38 $this->writer->endElement();
Chris@0 39
Chris@0 40 return $this->writer->outputMemory();
Chris@0 41 }
Chris@0 42
Chris@0 43 protected function _serialize($node) {
Chris@0 44 if ($node instanceof Node) {
Chris@0 45 $this->writer->startElement('node:' . $node->getType());
Chris@0 46
Chris@0 47 foreach ($node->getAttributes() as $name => $value) {
Chris@0 48 $this->writer->startElement('attribute:' . $name);
Chris@0 49 $this->_serialize($value);
Chris@0 50 $this->writer->endElement();
Chris@0 51 }
Chris@0 52
Chris@0 53 foreach ($node as $name => $subNode) {
Chris@0 54 $this->writer->startElement('subNode:' . $name);
Chris@0 55 $this->_serialize($subNode);
Chris@0 56 $this->writer->endElement();
Chris@0 57 }
Chris@0 58
Chris@0 59 $this->writer->endElement();
Chris@0 60 } elseif ($node instanceof Comment) {
Chris@0 61 $this->writer->startElement('comment');
Chris@0 62 $this->writer->writeAttribute('isDocComment', $node instanceof Comment\Doc ? 'true' : 'false');
Chris@0 63 $this->writer->writeAttribute('line', (string) $node->getLine());
Chris@0 64 $this->writer->text($node->getText());
Chris@0 65 $this->writer->endElement();
Chris@0 66 } elseif (is_array($node)) {
Chris@0 67 $this->writer->startElement('scalar:array');
Chris@0 68 foreach ($node as $subNode) {
Chris@0 69 $this->_serialize($subNode);
Chris@0 70 }
Chris@0 71 $this->writer->endElement();
Chris@0 72 } elseif (is_string($node)) {
Chris@0 73 $this->writer->writeElement('scalar:string', $node);
Chris@0 74 } elseif (is_int($node)) {
Chris@0 75 $this->writer->writeElement('scalar:int', (string) $node);
Chris@0 76 } elseif (is_float($node)) {
Chris@0 77 // TODO Higher precision conversion?
Chris@0 78 $this->writer->writeElement('scalar:float', (string) $node);
Chris@0 79 } elseif (true === $node) {
Chris@0 80 $this->writer->writeElement('scalar:true');
Chris@0 81 } elseif (false === $node) {
Chris@0 82 $this->writer->writeElement('scalar:false');
Chris@0 83 } elseif (null === $node) {
Chris@0 84 $this->writer->writeElement('scalar:null');
Chris@0 85 } else {
Chris@0 86 throw new \InvalidArgumentException('Unexpected node type');
Chris@0 87 }
Chris@0 88 }
Chris@0 89 }