diff --git a/src/Builder/ClassTemplate.php b/src/Builder/ClassTemplate.php index 7190d48..f42ebf3 100644 --- a/src/Builder/ClassTemplate.php +++ b/src/Builder/ClassTemplate.php @@ -58,7 +58,12 @@ if (! class_exists("%NAMESPACE%\%CLASSNAME%", false) ) { $__event->eventExecute(\Picea\Event\Builder\ClassTemplateOutputDone::class, $variablesList); - %PARENT_OUTPUT% +# try{ + %PARENT_OUTPUT% +# } +# catch(\Exception $e) { +# dump($this->isTemplateError($e)); +# } $this->depth--; @@ -138,6 +143,13 @@ if (! class_exists("%NAMESPACE%\%CLASSNAME%", false) ) { $this->output($variablesList); return ob_get_clean(); } + + public static function isTemplateError(\Throwable $error) : bool + { + $class = substr(static::class, strripos(static::class, '\\') + 1) . ".php"; + + return substr($error->getFile(), -strlen($class)) === $class; + } } } diff --git a/src/Compiler.php b/src/Compiler.php index 37a4bbf..788873e 100644 --- a/src/Compiler.php +++ b/src/Compiler.php @@ -2,12 +2,17 @@ namespace Picea; +use Picea\Event\Compiler\CompileTokenExtension; +use Picea\Event\Compiler\CompileTokenExtensionEvent; +use Picea\Event\Compiler\CompileTokenTagEvent; use Picea\Exception\RegisterExtensionToken; use Picea\Extension\FunctionExtension; use Picea\Language\LanguageRegistration; class Compiler { + use EventTrait; + protected string $sourceCode = ""; protected array $syntaxObjectList = []; @@ -52,12 +57,15 @@ class Compiler $token = strtolower(trim($token)); $tokenName = $context->tokenName($token); $tokenOptions = $context->tokenOptions($token); - - # @TODO Refractor this parts to allows registration to the tag's name + if ( $this->tagList[$tokenName] ?? false ) { + $this->eventExecute(CompileTokenTagEvent::class, $context, $arguments, $tokenName, $tokenOptions); + return $this->tagList[$tokenName]->parse($context, $arguments, $tokenName, $tokenOptions); } elseif ( $this->extensionList[$tokenName] ?? false ) { + $this->eventExecute(CompileTokenExtensionEvent::class, $context, $arguments, $tokenName, $tokenOptions); + return $this->extensionList[$tokenName]->parse($context, $arguments, $tokenName, $tokenOptions); } else { @@ -135,7 +143,7 @@ class Compiler public function __toString() : string { - return "WHATAFAK"; + return "???"; } public function getExtensionFromToken(string $name) : Extension\Extension diff --git a/src/Event/Compiler/CompileTokenExtensionEvent.php b/src/Event/Compiler/CompileTokenExtensionEvent.php new file mode 100644 index 0000000..dc4bb9c --- /dev/null +++ b/src/Event/Compiler/CompileTokenExtensionEvent.php @@ -0,0 +1,10 @@ +_eventList, fn($ev) => $ev instanceof $type); } - + public function eventExecute(string $type, ...$arguments) : void { foreach($this->eventFromType($type) as $event) { diff --git a/src/Extension/UrlExtension.php b/src/Extension/UrlExtension.php index 9cbb1c9..4f66e53 100644 --- a/src/Extension/UrlExtension.php +++ b/src/Extension/UrlExtension.php @@ -3,10 +3,14 @@ namespace Picea\Extension; use Notes\Route\Attribute\Object\Route; +use Picea\EventTrait; use Picea\Compiler\Context; +use Picea\Event\Extension\{ UrlBuildAssetEvent, UrlBuildUrlEvent, UrlBuildRouteEvent, UrlRegisterRouteEvent }; class UrlExtension implements Extension, FunctionExtension { + use EventTrait; + public const URLIZE_PATTERN_URL = <<)(?=[^\w/._\-&])~s PATTERN; @@ -105,11 +109,15 @@ PATTERN; public function buildUrl(string $uri = "", array $parameters = [], bool $appendVersion = false) : string { + $this->eventExecute(UrlBuildUrlEvent::class, $uri, $parameters, $appendVersion); + return $this->setUrlParameters($this->url() . "/" . ltrim($uri, "/"), $appendVersion ? array_replace([ 'v' => $this->assetToken ], $parameters) : $parameters); } public function buildAssetUrl(string $uri, array $parameters = [], bool $appendVersion = true) : string { + $this->eventExecute(UrlBuildAssetEvent::class, $uri, $parameters, $appendVersion); + return $this->buildUrl($uri, $parameters, $appendVersion); } @@ -150,6 +158,8 @@ PATTERN; 'class' => $class, 'classMethod' => $method, ]; + + $this->eventExecute(UrlRegisterRouteEvent::class, $name, $this->routes[$name]); } /** @@ -195,7 +205,7 @@ PATTERN; protected function domain() : string { - if ( ! empty($_SERVER['HTTP_X_FORWARDED_PROTO']) || ! empty($_SERVER['HTTP_X_FORWARDED_SSL']) ) { + if ( ! empty($_SERVER['HTTP_X_FORWARDED_PROTO']) || ! empty($_SERVER['HTTP_X_FORWARDED_SSL']) ) { $port = ""; } else { @@ -274,7 +284,6 @@ PATTERN; } $search[$item[0]] = $value ?? ""; - } $route = str_replace(array_keys($search), array_values($search), $route);