public function tokenize($source, $additional = [], $offset = 0, $embedded = false) { $split = preg_split('/\\R\\R/', $source, 2); $http = $split[0]; if (isset($split[1]) && ($payload = $split[1])) { if (preg_match('/Content-Type: ([^;]*)/', $http, $matches)) { $mime = $matches[1]; } else { $mime = 'text/plain'; } $injected = self::byMime($mime); $language = $this->_embeddedFactory->create('language.' . $injected->getIdentifier(), ['pos' => strlen($http) + 4 + $offset, 'length' => strlen($payload), 'inject' => $injected, 'rule' => new Rule(null, ['language' => $this, 'priority' => 900])]); $language->setValid(true); $additional = array_merge($additional, $injected->tokenize($payload, [], $language->pos, Language::EMBEDDED_BY_PARENT)->getArrayCopy(), [$language, $language->getEnd()]); } return parent::tokenize($source, $additional, $offset, $embedded); }
/** {@inheritdoc} */ public function getEnds($embedded = false) { return $embedded ? [new OpenRule(new RegexMatcher('/(<\\?php|<\\?=)/si'), ['factory' => new TokenFactory(LanguageToken::class), 'priority' => 1000, 'context' => ['*'], 'inject' => $this, 'language' => null]), new CloseRule(new RegexMatcher('/(\\?>|$)/'), ['context' => ['!string', '!comment'], 'priority' => 1000, 'factory' => new TokenFactory(LanguageToken::class), 'language' => $this])] : parent::getEnds(false); }
public function getEnds($embedded = false) { return [parent::getEnds($embedded), new CloseRule(new SubStringMatcher('__END__'), ['factory' => new TokenFactory(LanguageToken::class), 'language' => $this])]; }