Version 1
[yaffs-website] / vendor / webmozart / path-util / src / Url.php
diff --git a/vendor/webmozart/path-util/src/Url.php b/vendor/webmozart/path-util/src/Url.php
new file mode 100644 (file)
index 0000000..834e721
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ * This file is part of the webmozart/path-util package.
+ *
+ * (c) Bernhard Schussek <bschussek@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Webmozart\PathUtil;
+
+use InvalidArgumentException;
+use Webmozart\Assert\Assert;
+
+/**
+ * Contains utility methods for handling URL strings.
+ *
+ * The methods in this class are able to deal with URLs.
+ *
+ * @since  2.3
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Claudio Zizza <claudio@budgegeria.de>
+ */
+final class Url
+{
+    /**
+     * Turns a URL into a relative path.
+     *
+     * The result is a canonical path. This class is using functionality of Path class.
+     *
+     * @see Path
+     *
+     * @param string $url     A URL to make relative.
+     * @param string $baseUrl A base URL.
+     *
+     * @return string
+     *
+     * @throws InvalidArgumentException If the URL and base URL does
+     *                                  not match.
+     */
+    public static function makeRelative($url, $baseUrl)
+    {
+        Assert::string($url, 'The URL must be a string. Got: %s');
+        Assert::string($baseUrl, 'The base URL must be a string. Got: %s');
+        Assert::contains($baseUrl, '://', '%s is not an absolute Url.');
+
+        list($baseHost, $basePath) = self::split($baseUrl);
+
+        if (false === strpos($url, '://')) {
+            if (0 === strpos($url, '/')) {
+                $host = $baseHost;
+            } else {
+                $host = '';
+            }
+            $path = $url;
+        } else {
+            list($host, $path) = self::split($url);
+        }
+
+        if ('' !== $host && $host !== $baseHost) {
+            throw new InvalidArgumentException(sprintf(
+                'The URL "%s" cannot be made relative to "%s" since their host names are different.',
+                $host,
+                $baseHost
+            ));
+        }
+
+        return Path::makeRelative($path, $basePath);
+    }
+
+    /**
+     * Splits a URL into its host and the path.
+     *
+     * ```php
+     * list ($root, $path) = Path::split("http://example.com/webmozart")
+     * // => array("http://example.com", "/webmozart")
+     *
+     * list ($root, $path) = Path::split("http://example.com")
+     * // => array("http://example.com", "")
+     * ```
+     *
+     * @param string $url The URL to split.
+     *
+     * @return string[] An array with the host and the path of the URL.
+     *
+     * @throws InvalidArgumentException If $url is not a URL.
+     */
+    private static function split($url)
+    {
+        $pos = strpos($url, '://');
+        $scheme = substr($url, 0, $pos + 3);
+        $url = substr($url, $pos + 3);
+
+        if (false !== ($pos = strpos($url, '/'))) {
+            $host = substr($url, 0, $pos);
+            $url = substr($url, $pos);
+        } else {
+            // No path, only host
+            $host = $url;
+            $url = '/';
+        }
+
+        // At this point, we have $scheme, $host and $path
+        $root = $scheme.$host;
+
+        return array($root, $url);
+    }
+}