diff --git a/src/ControlStructure/ForeachToken.php b/src/ControlStructure/ForeachToken.php index 454a21a..7326a5d 100644 --- a/src/ControlStructure/ForeachToken.php +++ b/src/ControlStructure/ForeachToken.php @@ -10,11 +10,15 @@ class ForeachToken implements ControlStructure { switch($token) { case "foreach": $name = "$".uniqid("foreach_"); - - $count = count($context->iterationStack ?? []); + + $stack = array_filter($context->iterationStack ?? [], function($item) { + return ! $item['or']; + }); + + $count = count($stack); if ( $count > 0 ) { - $name .= "[" . $context->iterationStack[$count - 1]['uid'] . "]"; + $name .= "[" . end($stack)['uid'] . "]"; } $context->iterationStack[] = [ diff --git a/src/ControlStructure/OrToken.php b/src/ControlStructure/OrToken.php index f562a41..beecda0 100644 --- a/src/ControlStructure/OrToken.php +++ b/src/ControlStructure/OrToken.php @@ -12,13 +12,11 @@ class OrToken implements ControlStructure { } $key = count( $context->iterationStack ) - 1; + $context->iterationStack[$key]['or'] = true; $name = $context->iterationStack[$key]['uid']; - #if ($key !== 0) { - #} - return "iterationStack[$key]['token']}; if( false === ($name ?? false) ): ?>"; } diff --git a/src/Syntax/EchoRawToken.php b/src/Syntax/EchoRawToken.php index 68c4b41..0a92328 100644 --- a/src/Syntax/EchoRawToken.php +++ b/src/Syntax/EchoRawToken.php @@ -11,7 +11,9 @@ class EchoRawToken implements Syntax { public function parse(/*\Picae\Compiler\Context*/ &$content, string &$sourceCode) { $sourceCode = preg_replace_callback("#({$this->tokenOpen})(.*?)({$this->tokenClose})#s", function ($matches) { - return ""; + $line = trim($matches[2], " \t\n\r\0\x0B;"); + + return ""; }, $sourceCode); } diff --git a/src/Syntax/EchoSafeToken.php b/src/Syntax/EchoSafeToken.php index 13c8936..1b832b4 100644 --- a/src/Syntax/EchoSafeToken.php +++ b/src/Syntax/EchoSafeToken.php @@ -21,7 +21,9 @@ class EchoSafeToken implements Syntax { public function parse(/*\Picae\Compiler\Context*/ &$context, string &$sourceCode) { $sourceCode = preg_replace_callback("#({$this->tokenOpen})(.*?)({$this->tokenClose})#s", function ($matches) { - return "flag}, '{$this->encoding}', " . ($this->doubleEncode ? "true" : "false") . ") ?>"; + $line = trim($matches[2], " \t\n\r\0\x0B;"); + + return "flag}, '{$this->encoding}', " . ($this->doubleEncode ? "true" : "false") . ") ?>"; }, $sourceCode); }