0 && $json[$c-1] != '\\') { $in_string = !$in_string; } default: $new_json .= $char; break; } } return $new_json . ",\n"; } protected function descend($node, $object) { if (!is_array($object) && !is_object($object)) { return $object; } foreach ($object as $key => $value) { switch ($key{0}) { case '@': $node[substr($key, 1)] = $value; break; case '#': if ($key == '#mixins') { foreach ($value as $mixins) { $scope = $mixins['@scope']; foreach ($mixins['#mixin'] as $mixin) { $node['mixins'][$scope][] = $this->descend(array(), $mixin); } } } elseif (count($value) == 1 && !in_array($key, array('#property', '#method', '#resource', '#parameter', '#provide', '#return-type'))) { $node[substr($key, 1)] = $this->descend(array(), $value[0]); } else { foreach ($value as $child) { $node[] = $this->descend(array(), $child); } } break; default: if ($key === 'content') { if (count($object) == 1) { return $value; } $node['content'] = $value; } } } return $node; } public function convertToRaw($object) { return $this->descend(array(), $object); } } ?>