diff --git a/util/extract.php b/util/extract.php old mode 100644 new mode 100755 index 13151bc96f..18fbb9df00 --- a/util/extract.php +++ b/util/extract.php @@ -1,63 +1,100 @@ +#!/usr/bin/env php strings[' . $a[0] . "] = array(\n"; - $s .= "\t0 => ". $a[0]. ",\n"; - $s .= "\t1 => ". $a[1]. ",\n"; - $s .= ");\n"; - } else { - if(substr($a,0,1) == '$') - continue; - $s .= '$a->strings[' . $a . '] = '. $a . ';' . "\n"; +$arr = []; + +$files = ['index.php', 'boot.php']; +$files = array_merge( + $files, + glob('mod/*'), + glob('include/*'), + glob('addon/*/*'), + glob_recursive('src') +); + +foreach ($files as $file) { + $str = file_get_contents($file); + + $pat = '|L10n::t\(([^\)]*+)[\)]|'; + $patt = '|L10n::tt\(([^\)]*+)[\)]|'; + + preg_match_all($pat, $str, $matches); + preg_match_all($patt, $str, $matchestt); + + if (count($matches) || count($matchestt)) { + $s .= '// ' . $file . PHP_EOL; + } + + if (count($matches)) { + foreach ($matches[1] as $long_match) { + $match_arr = preg_split('/(?<=[\'"])\s*,/', $long_match); + $match = $match_arr[0]; + if (!in_array($match, $arr)) { + if (substr($match, 0, 1) == '$') { + continue; + } + + $arr[] = $match; + + $s .= '$a->strings[' . $match . '] = ' . $match . ';' . "\n"; + } + } + } + if (count($matchestt)) { + foreach ($matchestt[1] as $match) { + $matchtkns = preg_split("|[ \t\r\n]*,[ \t\r\n]*|", $match); + if (count($matchtkns) == 3 && !in_array($matchtkns[0], $arr)) { + if (substr($matchtkns[1], 0, 1) == '$') { + continue; + } + + $arr[] = $matchtkns[0]; + + $s .= '$a->strings[' . $matchtkns[0] . "] = array(\n"; + $s .= "\t0 => " . $matchtkns[0] . ",\n"; + $s .= "\t1 => " . $matchtkns[1] . ",\n"; + $s .= ");\n"; + } + } + } +} + +$s .= '// Timezones' . PHP_EOL; + +$zones = timezone_identifiers_list(); +foreach ($zones as $zone) { + $s .= '$a->strings[\'' . $zone . '\'] = \'' . $zone . '\';' . "\n"; +} + +echo $s; + +function glob_recursive($path) { + $dir_iterator = new RecursiveDirectoryIterator($path); + $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST); + + $return = []; + foreach ($iterator as $file) { + if ($file->getBasename() != '.' && $file->getBasename() != '..') { + $return[] = $file->getPathname(); } } - $zones = timezone_identifiers_list(); - foreach($zones as $zone) - $s .= '$a->strings[\'' . $zone . '\'] = \'' . $zone . '\';' . "\n"; - - echo $s; \ No newline at end of file + return $return; +}