This commit is contained in:
mcndave committed 2022-10-12 18:28:52 +00:00
commit 14cfb46c98
10 files changed
+159 -23

No files matched your search

+19 -3
View File
@@ -6,7 +6,7 @@ use Picea\Compiler\Context;
class JsonExtension implements Extension, FunctionExtension {
public array $token = [ "json", "json.pretty" ];
public array $token = [ "json", "json.pretty", "json.html" ];
public int $flags = JSON_HEX_TAG | \JSON_HEX_QUOT | \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_UNICODE;
@@ -23,16 +23,32 @@ class JsonExtension implements Extension, FunctionExtension {
return "<?php echo htmlentities(json_encode($arguments, {$this->flags}), ENT_QUOTES, 'UTF-8') ?>";
}
return "<?php echo json_encode($arguments, $flag) ?>";
$cls = static::class;
return "<?php echo json_encode(\\$cls::utf8($arguments), $flag) ?>";
}
public function exportFunctions(): array
{
return [
'json' => function($arguments, ? int $flags = null) {
return json_encode($arguments, \JSON_FORCE_OBJECT);
return json_encode($arguments, \JSON_FORCE_OBJECT);
},
];
}
public static function utf8($src) {
if (is_array($src)) {
foreach ($src as $key => $value) {
$src[$key] = static::utf8($value);
}
}
elseif (is_string($src)) {
return mb_convert_encoding($src, "UTF-8", "UTF-8");
}
return $src;
}
}
+7 -1
View File
@@ -6,7 +6,7 @@ use Picea\Compiler\Context;
class LanguageExtension implements Extension, FunctionExtension {
public array $tokens = [ "lang", "_", "language.set" ];
public array $tokens = [ "lang", "lang.raw", "_", "_.raw", "language.set" ];
public string $currentLanguage = "";
@@ -31,9 +31,15 @@ class LanguageExtension implements Extension, FunctionExtension {
return "<?php \$picea->compiler->getExtensionFromToken('$token')->currentLanguage = $arguments; ?>";
case "lang":
return "<?php echo htmlspecialchars(\$picea->compiler->getExtensionFromToken('$token')->absoluteLang($arguments), \ENT_QUOTES, ini_get('default_charset'), true) ?>";
case "lang.raw":
return "<?php echo \$picea->compiler->getExtensionFromToken('$token')->absoluteLang($arguments) ?>";
case "_":
return "<?php echo htmlspecialchars(\$picea->compiler->getExtensionFromToken('$token')->relativeLang($arguments), \ENT_QUOTES, ini_get('default_charset'), true) ?>";
case "_.raw":
return "<?php echo \$picea->compiler->getExtensionFromToken('$token')->relativeLang($arguments) ?>";
}
+41
View File
@@ -0,0 +1,41 @@
<?php
namespace Picea\Extension;
use Picea\Compiler\Context;
class MoneyExtension implements Extension {
public string $token = "money";
public string $title = "";
public string $locale;
public \NumberFormatter $formatter;
public function __construct(Context $context) {
$this->register($context);
$this->locale = explode('.', \Locale::getDefault())[0];
$this->formatter = new \NumberFormatter($this->locale, \NumberFormatter::CURRENCY);
}
public function register(Context $context) : void
{
$context->pushFunction("money", [ $this, 'money' ]);
}
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) {
return "<?php echo money($arguments) ?>";
}
public function money(float $money, ? string $currency = null) /* : string|false */
{
$this->formatter->setTextAttribute(\NumberFormatter::CURRENCY_CODE, 'CAD');
$this->formatter->setPattern( str_replace('¤#','¤ #', $this->formatter->getPattern() ) );
return $this->formatter->formatCurrency($money, $currency ?? $this->formatter->getTextAttribute(\NumberFormatter::CURRENCY_CODE));
}
}
+18 -9
View File
@@ -14,8 +14,8 @@ class UrlExtension implements Extension {
protected array $routesTarget;
public array $tokens = [ "url" , "route", "route.cacheless", "asset", "url.current", "url.parameters" ];
public array $tokens = [ "url" , "route", "route.cacheless", "asset", "url.current", "url.parameters", "slug" ];
public function __construct(Context $context, string $urlBase = "", string $assetToken = "") {
$this->urlBase = trim($urlBase, "/");
$this->assetToken = $assetToken;
@@ -39,6 +39,9 @@ class UrlExtension implements Extension {
case "url.parameters":
return "<?php echo \$picea->compiler->getExtensionFromToken('$token')->setUrlParameters($arguments) ?>";
case "slug":
return \Transliterator::createFromRules(':: Any-Latin;:: NFD;:: [:Nonspacing Mark:] Remove;:: NFC;:: [:Punctuation:] Remove;:: Lower();[:Separator:] > \'-\'')->transliterate( $arguments );
}
return null;
@@ -50,6 +53,7 @@ class UrlExtension implements Extension {
$context->pushFunction("current_url", [ $this, 'currentUrl' ]);
$context->pushFunction("asset", [ $this, 'buildAssetUrl' ]);
$context->pushFunction("route", [ $this, 'buildRouteUrl' ]);
$context->pushFunction("slug", [ $this, 'slug' ]);
}
public function getRouteList(bool $full = false) : array
@@ -96,6 +100,11 @@ class UrlExtension implements Extension {
return $this->scheme() . $this->domain() . $this->base();
}
public static function slug(string $text, string $separator = '-') : string
{
return str_replace('-', $separator, \Transliterator::createFromRules(':: Any-Latin;:: NFD;:: [:Nonspacing Mark:] Remove;:: NFC;:: [:Punctuation:] Remove;:: Lower();[:Separator:] > \'-\'')->transliterate(str_replace('-', ' ', $text)));
}
public function registerRoute(string $name, string $route, string $class, string $method, array $routeMethods) : void
{
$this->routes[$name] = [
@@ -159,18 +168,19 @@ class UrlExtension implements Extension {
protected function isHttps() : bool
{
$header = in_array('https', array_map("strtolower", [
$https = in_array('https', array_map("strtolower", [
$_SERVER['REQUEST_SCHEME'] ?? "",
$_SERVER['X-Url-Scheme'] ?? "",
$_SERVER['Front-End-Https'] ?? "",
$_SERVER['X-Forwarded-Ssl'] ?? "",
$_SERVER['X-Forwarded-Proto'] ?? "",
$_SERVER['X-Forwarded-Protocol'] ?? "",
]));
$_SERVER['HTTP_X_FORWARDED_PROTO'] ?? "",
$_SERVER['HTTP_X_FORWARDED_PROTOCOL'] ?? "",
])) || isset($_SERVER['HTTP_X_ARR_SSL']);
return $header
return $https
|| ( "443" === ( $_SERVER['SERVER_PORT'] ?? "" ) )
|| ( "https" === ( $_SERVER['REQUEST_SCHEME'] ?? "http") )
|| ( "off" !== ( strtolower($_SERVER['HTTPS'] ?? "off")) );
|| ( "off" !== ( strtolower($_SERVER['HTTPS'] ?? $_SERVER['HTTP_X_FORWARDED_SSL'] ?? $_SERVER['X-Forwarded-Ssl'] ?? "off")) );
}
protected function prepareRoute(string $route, array &$arguments)
@@ -205,6 +215,5 @@ class UrlExtension implements Extension {
}
return $route;
}
}