vendor/symfony/src/Symfony/Component/DependencyInjection/SimpleXMLElement.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/symfony/src/Symfony/Component/DependencyInjection/SimpleXMLElement.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,122 @@
+<?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\DependencyInjection;
+
+/**
+ * SimpleXMLElement class.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class SimpleXMLElement extends \SimpleXMLElement
+{
+    /**
+     * Converts an attribute as a php type.
+     *
+     * @param string $name
+     * @return mixed
+     */
+    public function getAttributeAsPhp($name)
+    {
+        return self::phpize($this[$name]);
+    }
+
+    /**
+     * Returns arguments as valid php types.
+     *
+     * @param string  $name
+     * @param Boolean $lowercase
+     *
+     * @return mixed
+     */
+    public function getArgumentsAsPhp($name, $lowercase = true)
+    {
+        $arguments = array();
+        foreach ($this->$name as $arg) {
+            if (isset($arg['name'])) {
+                $arg['key'] = (string) $arg['name'];
+            }
+            $key = isset($arg['key']) ? (string) $arg['key'] : (!$arguments ? 0 : max(array_keys($arguments)) + 1);
+
+            // parameter keys are case insensitive
+            if ('parameter' == $name && $lowercase) {
+                $key = strtolower($key);
+            }
+
+            // this is used by DefinitionDecorator to overwrite a specific
+            // argument of the parent definition
+            if (isset($arg['index'])) {
+                $key = 'index_'.$arg['index'];
+            }
+
+            switch ($arg['type']) {
+                case 'service':
+                    $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE;
+                    if (isset($arg['on-invalid']) && 'ignore' == $arg['on-invalid']) {
+                        $invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE;
+                    } elseif (isset($arg['on-invalid']) && 'null' == $arg['on-invalid']) {
+                        $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE;
+                    }
+
+                    if (isset($arg['strict'])) {
+                        $strict = self::phpize($arg['strict']);
+                    } else {
+                        $strict = true;
+                    }
+
+                    $arguments[$key] = new Reference((string) $arg['id'], $invalidBehavior, $strict);
+                    break;
+                case 'collection':
+                    $arguments[$key] = $arg->getArgumentsAsPhp($name, false);
+                    break;
+                case 'string':
+                    $arguments[$key] = (string) $arg;
+                    break;
+                case 'constant':
+                    $arguments[$key] = constant((string) $arg);
+                    break;
+                default:
+                    $arguments[$key] = self::phpize($arg);
+            }
+        }
+
+        return $arguments;
+    }
+
+    /**
+     * Converts an xml value to a php type.
+     *
+     * @param mixed $value
+     * @return mixed
+     */
+    static public function phpize($value)
+    {
+        $value = (string) $value;
+        $lowercaseValue = strtolower($value);
+
+        switch (true) {
+            case 'null' === $lowercaseValue:
+                return null;
+            case ctype_digit($value):
+                return '0' == $value[0] ? octdec($value) : intval($value);
+            case 'true' === $lowercaseValue:
+                return true;
+            case 'false' === $lowercaseValue:
+                return false;
+            case is_numeric($value):
+                return '0x' == $value[0].$value[1] ? hexdec($value) : floatval($value);
+            case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $value):
+                return floatval(str_replace(',', '', $value));
+            default:
+                return $value;
+        }
+    }
+}