- Token name and options are now passed through parse() method
This commit is contained in:
1 parent
e9b2f0ece3
commit
b3a8e3aca2
29 files changed
+70
-59
No files matched your search
@@ -4,7 +4,8 @@ namespace Picea\ControlStructure;
|
||||
|
||||
abstract class AbstractLoop implements ControlStructure {
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string
|
||||
{
|
||||
switch($token) {
|
||||
case "while":
|
||||
case "foreach":
|
||||
|
||||
@@ -6,7 +6,8 @@ class BlockToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "arguments", "block", "endblock", "define", "slot", "endslot", "using" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string
|
||||
{
|
||||
static $slotDefinitions = [];
|
||||
|
||||
switch($token) {
|
||||
|
||||
@@ -6,7 +6,8 @@ class BreakToken implements ControlStructure {
|
||||
|
||||
public string $token = "break";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string
|
||||
{
|
||||
return "<?php break; ?>";
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@ class CaseToken implements ControlStructure {
|
||||
|
||||
public string $token = "case";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string
|
||||
{
|
||||
$output = "";
|
||||
|
||||
if ( $context->switchStack ) {
|
||||
|
||||
@@ -6,7 +6,7 @@ class ContinueToken implements ControlStructure {
|
||||
|
||||
public string $token = "continue";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
return "<?php continue; ?>";
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ class DefaultToken implements ControlStructure {
|
||||
|
||||
public string $token = "default";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
$output = "";
|
||||
|
||||
if ( $context->switchStack ) {
|
||||
|
||||
@@ -6,7 +6,7 @@ class EchoToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "echo", "echo.raw" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "echo":
|
||||
return "<?php \\Picea\\ControlStructure\\EchoToken::echoSafe($arguments) ?>";
|
||||
|
||||
@@ -6,7 +6,7 @@ class ForToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "for", "endfor" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "for":
|
||||
$uid = "$".uniqid("for_");
|
||||
|
||||
@@ -6,7 +6,7 @@ class FunctionToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "function", "endfunction", "return" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "function":
|
||||
$context->functions++;
|
||||
|
||||
@@ -6,7 +6,7 @@ class IfToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "if", "else", "elseif", "endif" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "if":
|
||||
return "<?php if ($arguments): ?>";
|
||||
|
||||
@@ -6,7 +6,7 @@ class NamespaceToken implements ControlStructure {
|
||||
|
||||
public string $token = "namespace";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
$context->namespace = $arguments;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class OrToken implements ControlStructure {
|
||||
|
||||
public string $token = "or";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
if ( empty($context->iterationStack) ) {
|
||||
throw new \LogicException("Token `or` was used outside of iterator. Make sure your `for`, `foreach`, `while`, `do/until` declaration are properly made.");
|
||||
}
|
||||
|
||||
@@ -2,19 +2,26 @@
|
||||
|
||||
namespace Picea\ControlStructure;
|
||||
|
||||
enum PrintActionEnum : string {
|
||||
case prepend = "prepend";
|
||||
case default = "default";
|
||||
case append = "append";
|
||||
# case both = "both";
|
||||
}
|
||||
|
||||
class SectionToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "section", "endsection" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token)
|
||||
{
|
||||
$opt = $context->tokenOptions($token);
|
||||
protected PrintActionEnum $action = PrintActionEnum::default;
|
||||
|
||||
if (in_array('prepend', $opt)) {
|
||||
$context->sectionAction = "prepend";
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string
|
||||
{
|
||||
if (in_array('prepend', $options)) {
|
||||
$this->action = PrintActionEnum::prepend;
|
||||
}
|
||||
elseif (in_array('append', $opt)) {
|
||||
$context->sectionAction = "append";
|
||||
elseif (in_array('append', $options)) {
|
||||
$this->action = PrintActionEnum::append;
|
||||
}
|
||||
|
||||
switch($token) {
|
||||
@@ -30,7 +37,7 @@ class SectionToken implements ControlStructure {
|
||||
}
|
||||
}
|
||||
|
||||
protected function printSection($context, ?string $arguments) : string
|
||||
protected function printSection($context, ? string $arguments) : string
|
||||
{
|
||||
list($name, $options) = array_pad(explode(',', $arguments, 2), 2, null);
|
||||
|
||||
@@ -47,9 +54,7 @@ class SectionToken implements ControlStructure {
|
||||
'options' => $options,
|
||||
];
|
||||
|
||||
$action = $options['action'] ?? $context->sectionAction ?? "default";
|
||||
|
||||
unset($context->sectionAction);
|
||||
$action = $options['action'] ?? $this->action->value;
|
||||
|
||||
if (! in_array($action, ['prepend', 'append', 'default'])) {
|
||||
throw new \RuntimeException("An unsupported action `$action` was given as an option of a {% section %} tag");
|
||||
|
||||
@@ -6,7 +6,7 @@ class SwitchToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "switch", "case", "endswitch" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "switch":
|
||||
$context->switchStack[] = true;
|
||||
|
||||
@@ -6,7 +6,7 @@ class UseToken implements ControlStructure {
|
||||
|
||||
public string $token = "use";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
$context->useStack[] = $arguments;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class ViewToken implements ControlStructure {
|
||||
|
||||
public string $token = "view";
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
# The way this is ordered, if you provide a second arguments, being an array of variables, get_defined_vars() will not be pushed inside the view
|
||||
return "<?php echo \$___class__template->picea->inlineHtml(\$this, $arguments, get_defined_vars()); ?>";
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace Picea\ControlStructure;
|
||||
class WhileToken extends AbstractLoop {
|
||||
public array $token = [ "do", "while", "endwhile", ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string {
|
||||
switch($token) {
|
||||
case "do":
|
||||
$context->iterationStack[] = [
|
||||
|
||||
Reference in new issue
Block a user