Exemple #1
0
 protected function traverseNode(Node $node)
 {
     foreach ($node->getSubNodeNames() as $name) {
         $subNode =& $node->{$name};
         if (is_array($subNode)) {
             $subNode = $this->traverseArray($subNode);
         } elseif ($subNode instanceof Node) {
             $traverseChildren = true;
             foreach ($this->visitors as $visitor) {
                 $return = $visitor->enterNode($subNode);
                 if (self::DONT_TRAVERSE_CHILDREN === $return) {
                     $traverseChildren = false;
                 } else {
                     if (null !== $return) {
                         $subNode = $return;
                     }
                 }
             }
             if ($traverseChildren) {
                 $subNode = $this->traverseNode($subNode);
             }
             foreach ($this->visitors as $visitor) {
                 if (null !== ($return = $visitor->leaveNode($subNode))) {
                     if (is_array($return)) {
                         throw new \LogicException('leaveNode() may only return an array ' . 'if the parent structure is an array');
                     }
                     $subNode = $return;
                 }
             }
         }
     }
     return $node;
 }
 /**
  * @dataProvider provideNodes
  */
 public function testConstruct(array $attributes, Node $node)
 {
     $this->assertSame('Dummy', $node->getType());
     $this->assertSame(array('subNode1', 'subNode2'), $node->getSubNodeNames());
     $this->assertSame(10, $node->getLine());
     $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
     $this->assertSame('value1', $node->subNode1);
     $this->assertSame('value2', $node->subNode2);
     $this->assertTrue(isset($node->subNode1));
     $this->assertTrue(isset($node->subNode2));
     $this->assertFalse(isset($node->subNode3));
     $this->assertSame($attributes, $node->getAttributes());
     return $node;
 }
 /**
  * Dumps a node or array.
  *
  * @param array|Node $node Node or array to dump
  *
  * @return string Dumped value
  */
 public function dump($node)
 {
     if ($node instanceof Node) {
         $r = $node->getType() . '(';
         foreach ($node->getSubNodeNames() as $key) {
             $r .= "\n    " . $key . ': ';
             $value = $node->{$key};
             if (null === $value) {
                 $r .= 'null';
             } elseif (false === $value) {
                 $r .= 'false';
             } elseif (true === $value) {
                 $r .= 'true';
             } elseif (is_scalar($value)) {
                 $r .= $value;
             } else {
                 $r .= str_replace("\n", "\n    ", $this->dump($value));
             }
         }
         if ($this->dumpComments && ($comments = $node->getAttribute('comments'))) {
             $r .= "\n    comments: " . str_replace("\n", "\n    ", $this->dump($comments));
         }
     } elseif (is_array($node)) {
         $r = 'array(';
         foreach ($node as $key => $value) {
             $r .= "\n    " . $key . ': ';
             if (null === $value) {
                 $r .= 'null';
             } elseif (false === $value) {
                 $r .= 'false';
             } elseif (true === $value) {
                 $r .= 'true';
             } elseif (is_scalar($value)) {
                 $r .= $value;
             } else {
                 $r .= str_replace("\n", "\n    ", $this->dump($value));
             }
         }
     } elseif ($node instanceof Comment) {
         return $node->getReformattedText();
     } else {
         throw new \InvalidArgumentException('Can only dump nodes and arrays.');
     }
     return $r . "\n)";
 }
 /**
  * Dumps a node or array.
  *
  * @param array|Node $node Node or array to dump
  *
  * @return string Dumped value
  */
 public function dump($node)
 {
     if ($node instanceof Node) {
         $r = "\n{\n \"title\"" . ":" . " \"" . $node->getType() . "\"," . "\n" . " \"value\": {\n";
         foreach ($node->getSubNodeNames() as $key) {
             $value = $node->{$key};
             if (null === $value) {
                 $r .= "    \"" . $key . "\"" . ":" . "null,";
             } elseif (false === $value) {
                 $r .= "    \"" . $key . "\"" . ":" . "false," . "";
             } elseif (true === $value) {
                 $r .= 'true';
             } elseif (is_scalar($value)) {
                 $r .= "    \"{$key}\"" . ":" . "\"{$value}\"" . ",";
             } else {
                 $r .= " \n\"{$key}\": " . str_replace("\n", "\n   ", $this->dump($value)) . ",";
             }
         }
         $r = rtrim($r, ",");
         $r .= "\n  }\n}";
     } elseif (is_array($node)) {
         $r = " [";
         foreach ($node as $key => $value) {
             if (null === $value) {
                 $r .= 'null';
             } elseif (false === $value) {
                 $r .= 'false';
             } elseif (true === $value) {
                 $r .= 'true';
             } elseif (is_scalar($value)) {
                 $r .= "\n\"" . $value . "\"\n";
             } else {
                 $r .= str_replace("\n", "\n   ", $this->dump($value)) . ",";
             }
         }
         $r = rtrim($r, ",");
         $r .= "\n ]";
     } else {
         throw new \InvalidArgumentException('Can only dump nodes and arrays.');
     }
     return $r . "\n";
 }