]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Console/PoToPhp.php
Update "mrpetovan" email address
[friendica.git] / src / Core / Console / PoToPhp.php
index 3a58d9fed4d86b09376f6b053c390429a701f3fe..b7c9bfaaec4c9326258a102a57b401deb4db5317 100644 (file)
-<?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 <hypolite@mrpetovan.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 .= '       $n = intval($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 - 10);
+                               $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]);
+       }
+}