/** * Template parser * * @param string $view raw template * @param mixed $path path for inheritance * * @return string */ public function parse($view, $path = null) { foreach (self::$rules as $rx => $call) { $view = preg_replace_callback($rx, $call, $view); } $inherit = new Inherit($this->ant); $view = $inherit->extend($view, $path); $view = preg_replace_callback('/@skip.+?@endskip/ms', '\\Ant\\Parser::skip', $view); $view = preg_replace_callback('/@php.+?@endphp/ms', '\\Ant\\Parser::skip', $view); $view = preg_replace_callback('/{{--.*?--}}/ms', '\\Ant\\Parser::comment', $view); $view = preg_replace_callback('/(\\x5c)?{{{.+?}}}/ms', '\\Ant\\Parser::variable', $view); $view = preg_replace_callback('/(\\x5c)?{{.+?}}/ms', '\\Ant\\Parser::escape', $view); $view = preg_replace_callback('/\\B@(import|widget).+/', '\\Ant\\Parser::import', $view); $view = preg_replace_callback('/\\B@(css|js).+/', '\\Ant\\Parser::shortcut', $view); $view = preg_replace_callback('/[\\s\\t]+@(case|default)/', '\\Ant\\Parser::caseSpace', $view); $view = preg_replace_callback('/\\B@(forelse|foreach|for|while|switch|case|default|if|elseif|else|unless|each)([ \\t]*)(\\( ( (?>[^()]+) | (?3) )* \\))?/x', '\\Ant\\Parser::control', $view); $view = preg_replace_callback('/\\B@(empty|break|continue|endforeach|endforelse|endfor|endwhile|endswitch|endif|endunless)/', '\\Ant\\Parser::endControl', $view); $view = preg_replace('/\\B::/', '$this->ant->', $view); if (self::$skips) { $view = str_replace(array_keys(self::$skips), array_values(self::$skips), $view); self::$skips = array(); } $view = str_replace(array('@php', '@endphp', '@skip', '@endskip'), array('<?php', '?>', '', ''), $view); return $view; }