-<?php\r
-\r
-namespace Friendica\Core\Console;\r
-\r
-/**\r
- * Read a messages.po file and create strings.php in the same directory\r
- *\r
- * @author Hypolite Petovan <mrpetovan@gmail.com>\r
- */\r
-class PoToPhp extends \Asika\SimpleConsole\Console\r
-{\r
- protected $helpOptions = ['h', 'help', '?'];\r
-\r
- const DQ_ESCAPE = "__DQ__";\r
-\r
- protected function getHelp()\r
- {\r
- $help = <<<HELP\r
-console php2po - Generate a strings.php file from a messages.po file\r
-Usage\r
- bin/console php2po <path/to/messages.po> [-h|--help|-?] [-v]\r
-\r
-Description\r
- Read a messages.po file and create the according strings.php in the same directory\r
-\r
-Options\r
- -h|--help|-? Show help information\r
- -v Show more debug information.\r
-HELP;\r
- return $help;\r
- }\r
-\r
- protected function doExecute()\r
- {\r
- if ($this->getOption('v')) {\r
- $this->out('Class: ' . __CLASS__);\r
- $this->out('Arguments: ' . var_export($this->args, true));\r
- $this->out('Options: ' . var_export($this->options, true));\r
- }\r
-\r
- if (count($this->args) == 0) {\r
- $this->out($this->getHelp());\r
- return 0;\r
- }\r
-\r
- if (count($this->args) > 1) {\r
- throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');\r
- }\r
-\r
- $a = get_app();\r
-\r
- $pofile = realpath($this->getArgument(0));\r
-\r
- if (!file_exists($pofile)) {\r
- throw new \RuntimeException('Supplied file path doesn\'t exist.');\r
- }\r
-\r
- if (!is_writable(dirname($pofile))) {\r
- throw new \RuntimeException('Supplied directory isn\'t writable.');\r
- }\r
-\r
- $outfile = dirname($pofile) . DIRECTORY_SEPARATOR . 'strings.php';\r
-\r
- if (strstr($outfile, 'util')) {\r
- $lang = 'en';\r
- } else {\r
- $lang = str_replace('-', '_', basename(dirname($pofile)));\r
- }\r
-\r
- $this->out('Out to ' . $outfile);\r
-\r
- $out = "<?php\n\n";\r
-\r
- $infile = file($pofile);\r
- $k = '';\r
- $v = '';\r
- $arr = false;\r
- $ink = false;\r
- $inv = false;\r
- $escape_s_exp = '|[^\\\\]\$[a-z]|';\r
-\r
- foreach ($infile as $l) {\r
- $l = str_replace('\"', self::DQ_ESCAPE, $l);\r
- $len = strlen($l);\r
- if ($l[0] == "#") {\r
- $l = "";\r
- }\r
-\r
- if (substr($l, 0, 15) == '"Plural-Forms: ') {\r
- $match = [];\r
- preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match);\r
- $cond = str_replace('n', '$n', $match[2]);\r
- // define plural select function if not already defined\r
- $fnname = 'string_plural_select_' . $lang;\r
- $out .= 'if(! function_exists("' . $fnname . '")) {' . "\n";\r
- $out .= 'function ' . $fnname . '($n){' . "\n";\r
- $out .= ' return ' . $cond . ';' . "\n";\r
- $out .= '}}' . "\n";\r
- }\r
-\r
- if ($k != "" && substr($l, 0, 7) == 'msgstr ') {\r
- if ($ink) {\r
- $ink = false;\r
- $out .= '$a->strings["' . $k . '"] = ';\r
- }\r
-\r
- if ($inv) {\r
- $inv = false;\r
- $out .= '"' . $v . '"';\r
- }\r
-\r
- $v = substr($l, 8, $len - 11);\r
- $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v);\r
-\r
- $inv = true;\r
- }\r
- if ($k != "" && substr($l, 0, 7) == 'msgstr[') {\r
- if ($ink) {\r
- $ink = false;\r
- $out .= '$a->strings["' . $k . '"] = ';\r
- }\r
- if ($inv) {\r
- $inv = false;\r
- $out .= '"' . $v . '"';\r
- }\r
-\r
- if (!$arr) {\r
- $arr = True;\r
- $out .= "[\n";\r
- }\r
- $match = [];\r
- preg_match("|\[([0-9]*)\] (.*)|", $l, $match);\r
- $out .= "\t"\r
- . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[1])\r
- . ' => '\r
- . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[2])\r
- . ",\n";\r
- }\r
-\r
- if (substr($l, 0, 6) == 'msgid_') {\r
- $ink = false;\r
- $out .= '$a->strings["' . $k . '"] = ';\r
- }\r
-\r
- if ($ink) {\r
- $k .= trim($l, "\"\r\n");\r
- $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k);\r
- }\r
-\r
- if (substr($l, 0, 6) == 'msgid ') {\r
- if ($inv) {\r
- $inv = false;\r
- $out .= '"' . $v . '"';\r
- }\r
- if ($k != "") {\r
- $out .= ($arr) ? "];\n" : ";\n";\r
- }\r
- $arr = false;\r
- $k = str_replace("msgid ", "", $l);\r
- if ($k != '""') {\r
- $k = trim($k, "\"\r\n");\r
- } else {\r
- $k = '';\r
- }\r
-\r
- $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k);\r
- $ink = true;\r
- }\r
-\r
- if ($inv && substr($l, 0, 6) != "msgstr") {\r
- $v .= trim($l, "\"\r\n");\r
- $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v);\r
- }\r
- }\r
-\r
- if ($inv) {\r
- $inv = false;\r
- $out .= '"' . $v . '"';\r
- }\r
-\r
- if ($k != '') {\r
- $out .= ($arr ? "];\n" : ";\n");\r
- }\r
-\r
- $out = str_replace(self::DQ_ESCAPE, '\"', $out);\r
- if (!file_put_contents($outfile, $out)) {\r
- throw new \RuntimeException('Unable to write to ' . $outfile);\r
- }\r
-\r
- return 0;\r
- }\r
-\r
- private function escapeDollar($match)\r
- {\r
- return str_replace('$', '\$', $match[0]);\r
- }\r
-}\r
+<?php
+
+namespace Friendica\Core\Console;
+
+/**
+ * Read a messages.po file and create strings.php in the same directory
+ *
+ * @author Hypolite Petovan <mrpetovan@gmail.com>
+ */
+class PoToPhp extends \Asika\SimpleConsole\Console
+{
+ protected $helpOptions = ['h', 'help', '?'];
+
+ const DQ_ESCAPE = "__DQ__";
+
+ protected function getHelp()
+ {
+ $help = <<<HELP
+console php2po - Generate a strings.php file from a messages.po file
+Usage
+ bin/console php2po <path/to/messages.po> [-h|--help|-?] [-v]
+
+Description
+ Read a messages.po file and create the according strings.php in the same directory
+
+Options
+ -h|--help|-? Show help information
+ -v Show more debug information.
+HELP;
+ return $help;
+ }
+
+ protected function doExecute()
+ {
+ if ($this->getOption('v')) {
+ $this->out('Class: ' . __CLASS__);
+ $this->out('Arguments: ' . var_export($this->args, true));
+ $this->out('Options: ' . var_export($this->options, true));
+ }
+
+ if (count($this->args) == 0) {
+ $this->out($this->getHelp());
+ return 0;
+ }
+
+ if (count($this->args) > 1) {
+ throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
+ }
+
+ $a = get_app();
+
+ $pofile = realpath($this->getArgument(0));
+
+ if (!file_exists($pofile)) {
+ throw new \RuntimeException('Supplied file path doesn\'t exist.');
+ }
+
+ if (!is_writable(dirname($pofile))) {
+ throw new \RuntimeException('Supplied directory isn\'t writable.');
+ }
+
+ $outfile = dirname($pofile) . DIRECTORY_SEPARATOR . 'strings.php';
+
+ if (strstr($outfile, 'util')) {
+ $lang = 'en';
+ } else {
+ $lang = str_replace('-', '_', basename(dirname($pofile)));
+ }
+
+ $this->out('Out to ' . $outfile);
+
+ $out = "<?php\n\n";
+
+ $infile = file($pofile);
+ $k = '';
+ $v = '';
+ $arr = false;
+ $ink = false;
+ $inv = false;
+ $escape_s_exp = '|[^\\\\]\$[a-z]|';
+
+ foreach ($infile as $l) {
+ $l = str_replace('\"', self::DQ_ESCAPE, $l);
+ $len = strlen($l);
+ if ($l[0] == "#") {
+ $l = "";
+ }
+
+ if (substr($l, 0, 15) == '"Plural-Forms: ') {
+ $match = [];
+ preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match);
+ $cond = str_replace('n', '$n', $match[2]);
+ // define plural select function if not already defined
+ $fnname = 'string_plural_select_' . $lang;
+ $out .= 'if(! function_exists("' . $fnname . '")) {' . "\n";
+ $out .= 'function ' . $fnname . '($n){' . "\n";
+ $out .= ' return ' . $cond . ';' . "\n";
+ $out .= '}}' . "\n";
+ }
+
+ if ($k != "" && substr($l, 0, 7) == 'msgstr ') {
+ if ($ink) {
+ $ink = false;
+ $out .= '$a->strings["' . $k . '"] = ';
+ }
+
+ if ($inv) {
+ $inv = false;
+ $out .= '"' . $v . '"';
+ }
+
+ $v = substr($l, 8, $len - 11);
+ $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v);
+
+ $inv = true;
+ }
+ if ($k != "" && substr($l, 0, 7) == 'msgstr[') {
+ if ($ink) {
+ $ink = false;
+ $out .= '$a->strings["' . $k . '"] = ';
+ }
+ if ($inv) {
+ $inv = false;
+ $out .= '"' . $v . '"';
+ }
+
+ if (!$arr) {
+ $arr = True;
+ $out .= "[\n";
+ }
+ $match = [];
+ preg_match("|\[([0-9]*)\] (.*)|", $l, $match);
+ $out .= "\t"
+ . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[1])
+ . ' => '
+ . preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $match[2])
+ . ",\n";
+ }
+
+ if (substr($l, 0, 6) == 'msgid_') {
+ $ink = false;
+ $out .= '$a->strings["' . $k . '"] = ';
+ }
+
+ if ($ink) {
+ $k .= trim($l, "\"\r\n");
+ $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k);
+ }
+
+ if (substr($l, 0, 6) == 'msgid ') {
+ if ($inv) {
+ $inv = false;
+ $out .= '"' . $v . '"';
+ }
+ if ($k != "") {
+ $out .= ($arr) ? "];\n" : ";\n";
+ }
+ $arr = false;
+ $k = str_replace("msgid ", "", $l);
+ if ($k != '""') {
+ $k = trim($k, "\"\r\n");
+ } else {
+ $k = '';
+ }
+
+ $k = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $k);
+ $ink = true;
+ }
+
+ if ($inv && substr($l, 0, 6) != "msgstr") {
+ $v .= trim($l, "\"\r\n");
+ $v = preg_replace_callback($escape_s_exp, [$this, 'escapeDollar'], $v);
+ }
+ }
+
+ if ($inv) {
+ $inv = false;
+ $out .= '"' . $v . '"';
+ }
+
+ if ($k != '') {
+ $out .= ($arr ? "];\n" : ";\n");
+ }
+
+ $out = str_replace(self::DQ_ESCAPE, '\"', $out);
+ if (!file_put_contents($outfile, $out)) {
+ throw new \RuntimeException('Unable to write to ' . $outfile);
+ }
+
+ return 0;
+ }
+
+ private function escapeDollar($match)
+ {
+ return str_replace('$', '\$', $match[0]);
+ }
+}