diff --git a/src/Extension/UrlExtension.php b/src/Extension/UrlExtension.php index 0d3b07c..537ae0e 100644 --- a/src/Extension/UrlExtension.php +++ b/src/Extension/UrlExtension.php @@ -6,6 +6,14 @@ use Picea\Compiler\Context; class UrlExtension implements Extension { + public const URLIZE_PATTERN_URL = <<)(?=[^\w/._\-&])~s + PATTERN; + + public const URLIZE_PATTERN_EMAIL = <<pushFunction("asset", [ $this, 'buildAssetUrl' ]); $context->pushFunction("route", [ $this, 'buildRouteUrl' ]); $context->pushFunction("slug", [ $this, 'slug' ]); + $context->pushFunction("urlize", [ $this, 'urlize' ]); } public function getRouteList(bool $full = false) : array @@ -66,6 +75,17 @@ class UrlExtension implements Extension { return $url . ( $parameters ? "?" . http_build_query($parameters) : "" ); } + public function urlize(string $string) : string + { + # Normal URL patterns + $string = preg_replace(static::URLIZE_PATTERN_URL, '$0', $string); + + # Email patterns + $string = preg_replace(static::URLIZE_PATTERN_EMAIL, '$0', $string); + + return $string; + } + public function currentUrl(array $parameters = []) : string { return $this->buildUrl($this->uri(), $parameters);