/** * 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); } } }
/** * @param string $file path * @return array of errors */ public function checkFile($file) { $content = file_get_contents($file); $tokens = $this->parser->parse($content); $errors = []; foreach ($this->rules as $rule) { foreach ($rule($tokens, $content) as $error) { list($code, $msg, $line) = $error; $es = ['code' => $code, 'message' => $msg, 'line' => $line, 'rule' => get_class($rule)]; $errors[] = $es; } } usort($errors, function ($a, $b) { return $a['line'] > $b['line']; }); return $errors; }