PageRenderTime 60ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/web/js/xinha/contrib/lc_parse_strings.php

#
PHP | 264 lines | 202 code | 40 blank | 22 comment | 44 complexity | 02dcaf2343b0d1be1176542ed22828f8 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0
  1. <?php
  2. //die("this script is disabled for security");
  3. /**
  4. * LC-Parse-Strings-Script
  5. *
  6. * This script parses all xinhas source-files and creates base lang-files
  7. * in the lang-folders (one for base and one every plugin)
  8. *
  9. * How To use it: - remove the die() in line 2 (security)
  10. * - make sure all lang-folders are writeable for your webserver
  11. * - open the contrib/lc_parse_strings.php in your browser
  12. * - lang/base.js will be written
  13. * - open base.js, translate all strings into your language and save it
  14. * as yourlangauge.js
  15. * - send the translated file to the xinha-team
  16. **/
  17. error_reporting(E_ALL);
  18. $ret = array();
  19. $files = getFiles("../", "js$");
  20. foreach($files as $file)
  21. {
  22. $fp = fopen($file, "r");
  23. $data = "";
  24. while(!feof($fp)) {
  25. $data .= fread($fp, 1024);
  26. }
  27. preg_match_all('#_lc\("([^"]+)"\)|_lc\(\'([^\']+)\'\)#', $data, $m);
  28. foreach($m[1] as $i) {
  29. if(trim($i)=="") continue;
  30. $ret[] = $i;
  31. }
  32. foreach($m[2] as $i) {
  33. if(trim($i)=="") continue;
  34. $ret[] = $i;
  35. }
  36. if(eregi('htmlarea\\.js$', $file)) {
  37. //toolbar-buttons
  38. //bold: [ "Bold"
  39. preg_match_all('#[a-z]+: *\[ * "([^"]+)"#', $data, $m);
  40. foreach($m[1] as $i) {
  41. if(trim($i)=="") continue;
  42. $ret[] = $i;
  43. }
  44. //HTMLArea._lc({key: 'button_bold', string
  45. preg_match_all('#HTMLArea\\._lc\\({key: \'([^\']*)\'#', $data, $m);
  46. foreach($m[1] as $i) {
  47. if(trim($i)=="") continue;
  48. $ret[] = $i;
  49. }
  50. //config.fontname, fontsize and formatblock
  51. $data = substr($data, strpos($data, "this.fontname = {"), strpos($data, "this.customSelects = {};")-strpos($data, "this.fontname = {"));
  52. preg_match_all('#"([^"]+)"[ \t]*:[ \t]*["\'][^"\']*["\'],?#', $data, $m);
  53. foreach($m[1] as $i) {
  54. if(trim($i)=="") continue;
  55. $ret[] = $i;
  56. }
  57. }
  58. }
  59. $files = getFiles("../popups/", "html$");
  60. foreach($files as $file)
  61. {
  62. if(preg_match("#custom2.html$#", $file)) continue;
  63. if(preg_match('#old_#', $file)) continue;
  64. $ret = array_merge($ret, parseHtmlFile($file));
  65. }
  66. $ret = array_unique($ret);
  67. $langData['HTMLArea'] = $ret;
  68. $plugins = getFiles("../plugins/");
  69. foreach($plugins as $pluginDir)
  70. {
  71. $plugin = substr($pluginDir, 12);
  72. if($plugin=="ibrowser") continue;
  73. $ret = array();
  74. $files = getFiles("$pluginDir/", "js$");
  75. $files = array_merge($files, getFiles("$pluginDir/popups/", "html$"));
  76. $files = array_merge($files, getFiles("$pluginDir/", "php$"));
  77. foreach($files as $file)
  78. {
  79. $fp = fopen($file, "r");
  80. $data = "";
  81. if($fp) {
  82. echo "$file open...<br>";
  83. while(!feof($fp)) {
  84. $data .= fread($fp, 1024);
  85. }
  86. preg_match_all('#_lc\("([^"]+)"|_lc\(\'([^\']+)\'#', $data, $m);
  87. foreach($m[1] as $i) {
  88. if(trim(strip_tags($i))=="") continue;
  89. $ret[] = $i;
  90. }
  91. foreach($m[2] as $i) {
  92. if(trim(strip_tags($i))=="") continue;
  93. $ret[] = $i;
  94. }
  95. }
  96. }
  97. if($plugin=="TableOperations")
  98. {
  99. preg_match_all('#options = \\[([^\\]]+)\\];#', $data, $m);
  100. foreach($m[1] as $i) {
  101. preg_match_all('#"([^"]+)"#', $i, $m1);
  102. foreach($m1[1] as $i) {
  103. $ret[] = $i;
  104. }
  105. }
  106. //["cell-delete", "td", "Delete cell"],
  107. preg_match_all('#\\["[^"]+",[ \t]*"[^"]+",[ \t]*"([^"]+)"\\]#', $data, $m);
  108. foreach($m[1] as $i) {
  109. $ret[] = $i;
  110. }
  111. }
  112. $files = getFiles("$pluginDir/", "html$");
  113. $files = array_merge($files, getFiles("$pluginDir/", "php$"));
  114. foreach($files as $file)
  115. {
  116. $ret = array_merge($ret, parseHtmlFile($file, $plugin));
  117. }
  118. $files = getFiles("$pluginDir/popups/", "html$");
  119. foreach($files as $file)
  120. {
  121. $ret = array_merge($ret, parseHtmlFile($file, $plugin));
  122. }
  123. $ret = array_unique($ret);
  124. $langData[$plugin] = $ret;
  125. }
  126. foreach($langData as $plugin=>$strings)
  127. {
  128. if(sizeof($strings)==0) continue;
  129. $data = "// I18N constants\n";
  130. $data .= "//\n";
  131. $data .= "//LANG: \"base\", ENCODING: UTF-8\n";
  132. $data .= "//Author: Translator-Name, <email@example.com>\n";
  133. $data .= "// FOR TRANSLATORS:\n";
  134. $data .= "//\n";
  135. $data .= "// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE\n";
  136. $data .= "// (at least a valid email address)\n";
  137. $data .= "//\n";
  138. $data .= "// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;\n";
  139. $data .= "// (if this is not possible, please include a comment\n";
  140. $data .= "// that states what encoding is necessary.)\n";
  141. $data .= "\n";
  142. $data .= "{\n";
  143. sort($strings);
  144. foreach($strings as $string) {
  145. $string = str_replace(array('\\', '"'), array('\\\\', '\\"'), $string);
  146. $data .= " \"".$string."\": \"\",\n";
  147. }
  148. $data = substr($data, 0, -2);
  149. $data .= "\n";
  150. $data .= "}\n";
  151. if($plugin=="HTMLArea")
  152. $file = "../lang/base.js";
  153. else
  154. $file = "../plugins/$plugin/lang/base.js";
  155. $fp = fopen($file, "w");
  156. if(!$fp) continue;
  157. fwrite($fp, $data);
  158. fclose($fp);
  159. echo "$file written...<br>";
  160. }
  161. function parseHtmlFile($file, $plugin="")
  162. {
  163. $ret = array();
  164. $fp = fopen($file, "r");
  165. if(!$fp) {
  166. die("invalid fp");
  167. }
  168. $data = "";
  169. while(!feof($fp)) {
  170. $data .= fread($fp, 1024);
  171. }
  172. if($plugin=="FormOperations" || $plugin=="SuperClean" || $plugin=="Linker") {
  173. //<l10n>-tags for inline-dialog or panel-dialog based dialogs
  174. $elems = array("l10n");
  175. } else {
  176. $elems = array("title", "input", "select", "legend", "span", "option", "td", "button", "div", "label");
  177. }
  178. foreach($elems as $elem) {
  179. preg_match_all("#<{$elem}[^>]*>([^<^\"]+)</$elem>#i", $data, $m);
  180. foreach($m[1] as $i) {
  181. if(trim(strip_tags($i))=="") continue;
  182. if($i=="/") continue;
  183. if($plugin=="ImageManager" && preg_match('#^--+$#', $i)) continue; //skip those ------
  184. if($plugin=="CharacterMap" && preg_match('#&[a-z0-9]+;#i', trim($i)) || $i=="@") continue;
  185. if($plugin=="SpellChecker" && preg_match('#^\'\\.\\$[a-z]+\\.\'$#', $i)) continue;
  186. $ret[] = trim($i);
  187. }
  188. }
  189. if($plugin=="FormOperations" || $plugin=="SuperClean" || $plugin=="Linker")
  190. {
  191. //_( for inline-dialog or panel-dialog based dialogs
  192. preg_match_all('#"_\(([^"]+)\)"#i', $data, $m);
  193. foreach($m[1] as $i) {
  194. if(trim($i)=="") continue;
  195. $ret[] = $i;
  196. }
  197. }
  198. else
  199. {
  200. preg_match_all('#title="([^"]+)"#i', $data, $m);
  201. foreach($m[1] as $i) {
  202. if(trim(strip_tags($i))=="") continue;
  203. if(strip_tags($i)==" - ") continue; //skip those - (ImageManager)
  204. $ret[] = $i;
  205. }
  206. }
  207. return($ret);
  208. }
  209. function getFiles($rootdirpath, $eregi_match='') {
  210. $array = array();
  211. if ($dir = @opendir($rootdirpath)) {
  212. $array = array();
  213. while (($file = readdir($dir)) !== false) {
  214. if($file=="." || $file==".." || $file==".svn") continue;
  215. if($eregi_match=="")
  216. $array[] = $rootdirpath."/".$file;
  217. else if(eregi($eregi_match,$file))
  218. $array[] = $rootdirpath."/".$file;
  219. }
  220. closedir($dir);
  221. }
  222. return $array;
  223. }
  224. ?>