/**
* Extracts translation messages from a file to the catalogue.
*
* @param string $file The path to look into
* @param MessageCatalogue $catalogue The catalogue
*/
public function extractFile($file, MessageCatalogue $catalogue)
{
$buffer = NULL;
$parser = new Parser();
$parser->shortNoEscape = TRUE;
foreach ($tokens = $parser->parse(file_get_contents($file)) as $token) {
if ($token->type !== $token::MACRO_TAG || !in_array($token->name, array('_', '/_'), TRUE)) {
if ($buffer !== NULL) {
$buffer .= $token->text;
}
continue;
}
if ($token->name === '/_') {
$catalogue->set(($this->prefix ? $this->prefix . '.' : '') . $buffer, $buffer);
$buffer = NULL;
} elseif ($token->name === '_' && empty($token->value)) {
$buffer = '';
} else {
$args = new MacroTokens($token->value);
$writer = new PhpWriter($args, $token->modifiers);
$message = $writer->write('%node.word');
if (in_array(substr(trim($message), 0, 1), array('"', '\''), TRUE)) {
$message = substr(trim($message), 1, -1);
}
$catalogue->set(($this->prefix ? $this->prefix . '.' : '') . $message, $message);
}
}
}