From 7e80d4be6d1eb6ff4cdfb2102868add5580ad903 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Thu, 24 Nov 2022 20:00:43 +0000 Subject: [PATCH] - Added an 'urlize' method to the UrlExtension class --- src/Extension/UrlExtension.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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);