diff --git a/laravel/blade.php b/laravel/blade.php index 7e4e2fdb..f224614a 100644 --- a/laravel/blade.php +++ b/laravel/blade.php @@ -260,9 +260,42 @@ protected static function compile_endforelse($value) */ protected static function compile_structure_openings($value) { - $pattern = '/@(if|elseif|foreach|for|while)\s*?(\(.+?\))/'; - - return preg_replace($pattern, '', $value); + preg_replace_callback( + '/@(if|elseif|foreach|for|while)(\s*?)(\([^\n\r\t]+\))/', + function($matches) use (&$value) + { + if(count( $matches ) === 4) + { + $open = 0; + $close = 0; + $cut = 0; + $len = strlen($matches[3]); + for($i = 0; $i < $len; $i++) + { + if($matches[3][$i] === '(' ) + { + $open++; + } + if($matches[3][$i] === ')' ) + { + $close++; + } + if($open !== 0 && ($open === $close)) + { + break; + } + } + $condition = substr($matches[3], 0, ($i + 1)); + $value = str_replace( + '@'.$matches[1].$matches[2].$condition, + '', + $value + ); + } + }, + $value + ); + return $value; } /**