function init() { if ($this->embedded_server) { $this->add_pattern('STOP_SERVER', $this->server_tags); } if ($this->embedded_html) { $this->add_pattern('STOP_SCRIPT', '%</script>%'); } $op_pattern = '[=!+*%\\-&^|~:?\\;,.>'; if (!($this->embedded_server || $this->embedded_html)) { $op_pattern .= '<]+'; } else { // build an alternation with a < followed by a lookahead $op_pattern .= ']|<(?!['; // XXX this covers <? and <% but not very well if ($this->embedded_server) { $op_pattern .= '?%'; } if ($this->embedded_html) { $op_pattern .= '/'; } $op_pattern .= '])'; // closes lookahead $op_pattern = "(?:{$op_pattern})+"; } $op_pattern = "@{$op_pattern}@"; $this->add_pattern('IDENT', '/[a-zA-Z_$][_$\\w]*/'); // NOTE: slash is a special case, and </ may be a script close $this->add_pattern('OPERATOR', $op_pattern); // we care about openers for figuring out where regular expressions are $this->add_pattern('OPENER', '/[\\[\\{\\(]+/'); $this->add_pattern('CLOSER', '/[\\]\\}\\)]+/'); $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX); $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL); $this->add_pattern('SSTRING', LuminousTokenPresets::$SINGLE_STR_SL); $this->add_pattern('DSTRING', LuminousTokenPresets::$DOUBLE_STR_SL); $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); $this->add_pattern('COMMENT_SL', LuminousTokenPresets::$C_COMMENT_SL); // special case $this->add_pattern('SLASH', '%/%'); $stop_patterns = array(); $xml_scanner = new LuminousHTMLScanner($this->string()); $xml_scanner->xml_literal = true; $xml_scanner->scripts = false; $xml_scanner->embedded_server = $this->embedded_server; if ($this->embedded_server) { $xml_scanner->server_tags = $this->server_tags; } $xml_scanner->init(); $xml_scanner->pos($this->pos()); $this->add_child_scanner('xml', $xml_scanner); }
public static function guess_language($src, $info) { if (($html = LuminousHTMLScanner::guess_language($src, $info)) >= 0.2) { if (strpos($src, '{{') !== false || strpos($src, '{%') !== false) { return $html + 0.01; } } return 0.0; }