123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
-
- namespace Illuminate\View\Compilers\Concerns;
-
- trait CompilesLoops
- {
- /**
- * Counter to keep track of nested forelse statements.
- *
- * @var int
- */
- protected $forElseCounter = 0;
-
- /**
- * Compile the for-else statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileForelse($expression)
- {
- $empty = '$__empty_'.++$this->forElseCounter;
-
- preg_match('/\( *(.*) +as *(.*)\)$/is', $expression, $matches);
-
- $iteratee = trim($matches[1]);
-
- $iteration = trim($matches[2]);
-
- $initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
-
- $iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
-
- return "<?php {$empty} = true; {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} {$empty} = false; ?>";
- }
-
- /**
- * Compile the for-else-empty and empty statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileEmpty($expression)
- {
- if ($expression) {
- return "<?php if(empty{$expression}): ?>";
- }
-
- $empty = '$__empty_'.$this->forElseCounter--;
-
- return "<?php endforeach; \$__env->popLoop(); \$loop = \$__env->getLastLoop(); if ({$empty}): ?>";
- }
-
- /**
- * Compile the end-for-else statements into valid PHP.
- *
- * @return string
- */
- protected function compileEndforelse()
- {
- return '<?php endif; ?>';
- }
-
- /**
- * Compile the end-empty statements into valid PHP.
- *
- * @return string
- */
- protected function compileEndEmpty()
- {
- return '<?php endif; ?>';
- }
-
- /**
- * Compile the for statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileFor($expression)
- {
- return "<?php for{$expression}: ?>";
- }
-
- /**
- * Compile the for-each statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileForeach($expression)
- {
- preg_match('/\( *(.*) +as *(.*)\)$/is', $expression, $matches);
-
- $iteratee = trim($matches[1]);
-
- $iteration = trim($matches[2]);
-
- $initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
-
- $iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
-
- return "<?php {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} ?>";
- }
-
- /**
- * Compile the break statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileBreak($expression)
- {
- if ($expression) {
- preg_match('/\(\s*(-?\d+)\s*\)$/', $expression, $matches);
-
- return $matches ? '<?php break '.max(1, $matches[1]).'; ?>' : "<?php if{$expression} break; ?>";
- }
-
- return '<?php break; ?>';
- }
-
- /**
- * Compile the continue statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileContinue($expression)
- {
- if ($expression) {
- preg_match('/\(\s*(-?\d+)\s*\)$/', $expression, $matches);
-
- return $matches ? '<?php continue '.max(1, $matches[1]).'; ?>' : "<?php if{$expression} continue; ?>";
- }
-
- return '<?php continue; ?>';
- }
-
- /**
- * Compile the end-for statements into valid PHP.
- *
- * @return string
- */
- protected function compileEndfor()
- {
- return '<?php endfor; ?>';
- }
-
- /**
- * Compile the end-for-each statements into valid PHP.
- *
- * @return string
- */
- protected function compileEndforeach()
- {
- return '<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>';
- }
-
- /**
- * Compile the while statements into valid PHP.
- *
- * @param string $expression
- * @return string
- */
- protected function compileWhile($expression)
- {
- return "<?php while{$expression}: ?>";
- }
-
- /**
- * Compile the end-while statements into valid PHP.
- *
- * @return string
- */
- protected function compileEndwhile()
- {
- return '<?php endwhile; ?>';
- }
- }
|