55 lines
1.4 KiB
PHP
55 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Picea\Extension;
|
|
|
|
use Picea\Compiler\Context;
|
|
|
|
class JsonExtension implements Extension, FunctionExtension {
|
|
|
|
public array $token = [ "json", "json.pretty", "json.html" ];
|
|
|
|
public int $flags = JSON_HEX_TAG | \JSON_HEX_QUOT | \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_UNICODE;
|
|
|
|
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token)
|
|
{
|
|
$flag = $this->flags;
|
|
|
|
switch ($token) {
|
|
case "json.pretty":
|
|
$flag |= \JSON_PRETTY_PRINT;
|
|
break;
|
|
|
|
case "json.html":
|
|
return "<?php echo htmlentities(json_encode($arguments, {$this->flags}), ENT_QUOTES, 'UTF-8') ?>";
|
|
}
|
|
|
|
$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);
|
|
},
|
|
];
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
}
|