- Work on extension integration.
- WIP of the inline view token - Began work on compiled-code caching
This commit is contained in:
		
							parent
							
								
									66c7b349d1
								
							
						
					
					
						commit
						f8e3dbd60f
					
				| @ -4,6 +4,8 @@ namespace Picea; | |||||||
| 
 | 
 | ||||||
| class Builder | class Builder | ||||||
| { | { | ||||||
|  |     const TEMPLATE_CLASSNAME_PREFIX = "PiceaTemplate_"; | ||||||
|  | 
 | ||||||
|     protected string $templatePath = ""; |     protected string $templatePath = ""; | ||||||
| 
 | 
 | ||||||
|     public function __construct(string $templatePath = "./Builder/ClassTemplate.php") |     public function __construct(string $templatePath = "./Builder/ClassTemplate.php") | ||||||
| @ -13,13 +15,13 @@ class Builder | |||||||
| 
 | 
 | ||||||
|     public function build(Compiler\Context &$context, string $compiledSource) : array |     public function build(Compiler\Context &$context, string $compiledSource) : array | ||||||
|     { |     { | ||||||
|         $className = "PiceaTemplate_" . $this->generateClassUID($compiledSource); |         $className = static::generateClassName($compiledSource); | ||||||
| 
 | 
 | ||||||
|         $replace = [ |         $replace = [ | ||||||
|             '%NAMESPACE%' => $context->namespace, |             '%NAMESPACE%' => $context->namespace, | ||||||
|             '%USE%' => $context->renderUses(), |             '%USE%' => $context->renderUses(), | ||||||
|             '%CLASSNAME%' => $className, |             '%CLASSNAME%' => $className, | ||||||
|             '%EXTENDS%' => '', |             '%EXTENDS%' => $context->extendFrom ? static::generateClassUID($context->extendFrom) : '', | ||||||
|             '%CONTENT%' => $compiledSource, |             '%CONTENT%' => $compiledSource, | ||||||
|         ]; |         ]; | ||||||
| 
 | 
 | ||||||
| @ -30,7 +32,12 @@ class Builder | |||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function generateClassUID(string $filePath) : string |     public static function generateClassName(string $filepath) : string | ||||||
|  |     { | ||||||
|  |         return static::TEMPLATE_CLASSNAME_PREFIX . static::generateClassUID($filepath); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function generateClassUID(string $filePath) : string | ||||||
|     { |     { | ||||||
|         return md5($filePath); |         return md5($filePath); | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								src/Caching/Memory.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/Caching/Memory.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Picea\Caching; | ||||||
|  | 
 | ||||||
|  | class Memory { | ||||||
|  | 
 | ||||||
|  |     protected string $cachePath = ""; | ||||||
|  | 
 | ||||||
|  |     public function __construct(string $cachePath) | ||||||
|  |     { | ||||||
|  |         $this->cachePath = $cachePath; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function loadFile(string $fileName) : bool | ||||||
|  |     { | ||||||
|  |         if ( file_exists($path = $this->filePath($fileName)) ) { | ||||||
|  |             require_once($path); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function saveFile(string $fileName) : bool | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function filePath(string $fileName) : string | ||||||
|  |     { | ||||||
|  |         return $this->cachePath . $fileName; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								src/Caching/Opcache.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/Caching/Opcache.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Picea\Caching; | ||||||
|  | 
 | ||||||
|  | class Opcache { | ||||||
|  | 
 | ||||||
|  |     protected string $cachePath = ""; | ||||||
|  | 
 | ||||||
|  |     public function __construct(string $cachePath) | ||||||
|  |     { | ||||||
|  |         $this->cachePath = $cachePath; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function loadFile(string $fileName) : bool | ||||||
|  |     { | ||||||
|  |         if ( file_exists($path = $this->filePath($fileName)) ) { | ||||||
|  |             require_once($path); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function saveFile(string $fileName, string $content) : bool | ||||||
|  |     { | ||||||
|  |         file_put_contents($this->filePath($fileName), $content); | ||||||
|  | 
 | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function filePath(string $fileName) : string | ||||||
|  |     { | ||||||
|  |         return $this->cachePath . $fileName; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -42,7 +42,7 @@ class Compiler | |||||||
|                 return $this->tagList[$token]->parse($context, $arguments); |                 return $this->tagList[$token]->parse($context, $arguments); | ||||||
|             } |             } | ||||||
|             elseif ( $this->extensionList[$token] ?? false ) { |             elseif ( $this->extensionList[$token] ?? false ) { | ||||||
|                 return $this->extensionList[$token]->parse($context, $arguments); |                 return $this->extensionList[$token]->parse($context, $arguments, $token); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 throw new \LogicException("Impossible to find token `$token` declared in `{$matches[2]}`. Perhapse you forgot to add a custom token to Picea's engine ?"); |                 throw new \LogicException("Impossible to find token `$token` declared in `{$matches[2]}`. Perhapse you forgot to add a custom token to Picea's engine ?"); | ||||||
| @ -52,7 +52,7 @@ class Compiler | |||||||
| 
 | 
 | ||||||
|         return $this->sourceCode; |         return $this->sourceCode; | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     public function loadSourceCode($html) : self |     public function loadSourceCode($html) : self | ||||||
|     { |     { | ||||||
|         $this->sourceCode = $html; |         $this->sourceCode = $html; | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								src/ControlStructure/ViewToken.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/ControlStructure/ViewToken.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Picea\ControlStructure; | ||||||
|  | 
 | ||||||
|  | class ViewToken implements ControlStructure { | ||||||
|  | 
 | ||||||
|  |     public string $token = "view"; | ||||||
|  | 
 | ||||||
|  |     public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments) { | ||||||
|  |         #$context->switchStack[] = true;
 | ||||||
|  |         #return "<?php switch($arguments):";
 | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -3,5 +3,5 @@ | |||||||
| namespace Picea\Extension; | namespace Picea\Extension; | ||||||
| 
 | 
 | ||||||
| interface Extension { | interface Extension { | ||||||
|     public function parse(\Picae\Compiler\Context &$context, string $sourceCode); |     public function parse(\Picae\Compiler\Context &$context, string $sourceCode, string $token); | ||||||
| } | } | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ class JsonExtension implements Extension { | |||||||
|     public string $token = "json"; |     public string $token = "json"; | ||||||
|     public int $flags =  JSON_HEX_TAG | \JSON_HEX_APOS | \JSON_HEX_QUOT | \JSON_THROW_ON_ERROR; |     public int $flags =  JSON_HEX_TAG | \JSON_HEX_APOS | \JSON_HEX_QUOT | \JSON_THROW_ON_ERROR; | ||||||
| 
 | 
 | ||||||
|     public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments) { |     public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) { | ||||||
|         return "<?php echo json_encode($arguments, {$this->flags}) ?>"; |         return "<?php echo json_encode($arguments, {$this->flags}) ?>"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -6,16 +6,21 @@ class Picea | |||||||
| { | { | ||||||
|     public Compiler\Context $context; |     public Compiler\Context $context; | ||||||
| 
 | 
 | ||||||
|     public function __construct(?Context $context = null) |     public Compiler $compiler; | ||||||
|  | 
 | ||||||
|  |     public function __construct(?Context $context = null, ?Compiler $compiler = null) | ||||||
|     { |     { | ||||||
|         $this->context = $context ?? new Compiler\BaseContext(); |         $this->context = $context ?? new Compiler\BaseContext(); | ||||||
|  |         $this->compiler = $compiler ?: $this->instanciateCompiler(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function compileSource(string $source) : array |     public function compileSource(string $source) : array | ||||||
|     { |     { | ||||||
|  |         $this->compiler->loadSourceCode($source); | ||||||
|  | 
 | ||||||
|         return [ |         return [ | ||||||
|             'context' => $context = clone $this->context, |             'context' => $context = clone $this->context, | ||||||
|             'source'  => $this->instanciateCompiler($source)->compile($context) |             'source'  => $this->compiler->compile($context), | ||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -29,9 +34,11 @@ class Picea | |||||||
|             throw new \ErrorException("Given file could not be opened `$filePath`. This could indicate a permission misconfiguration on your file or folder"); |             throw new \ErrorException("Given file could not be opened `$filePath`. This could indicate a permission misconfiguration on your file or folder"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         $this->compiler->loadSourceCode($fileContent); | ||||||
|  | 
 | ||||||
|         return [ |         return [ | ||||||
|             'context' => $context = clone $this->context, |             'context' => $context = clone $this->context, | ||||||
|             'source'  => $this->instanciateCompiler($fileContent)->compile($context) |             'source'  => $this->compiler->compile($context), | ||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -57,7 +64,7 @@ class Picea | |||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function instanciateCompiler(string $sourceCode) : Compiler |     public function instanciateCompiler(string $sourceCode = "") : Compiler | ||||||
|     { |     { | ||||||
|         $compiler = new Compiler(); |         $compiler = new Compiler(); | ||||||
|         $compiler->loadSourceCode($sourceCode); |         $compiler->loadSourceCode($sourceCode); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user