langtool.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. $langs = array("en","cz");
  3. function parselang($a) {
  4. $out=array();
  5. foreach ($a as $line){
  6. if (!strpos($line,"MSG")) continue;
  7. //echo $line;
  8. preg_match('/\#define\s*(\S*)\s*(.*)/is',$line,$a);
  9. //print_r($a);die();
  10. if (!$a[1]) continue;
  11. $v = trim($a[2]);
  12. $v = str_replace('MACHINE_NAME "','"Prusa i3',$v);
  13. $v = str_replace('" FIRMWARE_URL "','https://github.com/prusa3d/Prusa-i3-Plus/',$v);
  14. $v = str_replace('" PROTOCOL_VERSION "','1.0',$v);
  15. $v = str_replace('" STRINGIFY(EXTRUDERS) "','1',$v);
  16. $v = str_replace('" MACHINE_UUID "','00000000-0000-0000-0000-000000000000',$v);
  17. $out[trim($a[1])]=$v;
  18. }
  19. return $out;
  20. }
  21. foreach ($langs as $lang) {
  22. $f = file("language_".$lang.".h");
  23. $$lang = parselang($f);
  24. }
  25. /*
  26. $f = file("language_cz.h");
  27. $cz = parselang($f);
  28. $f = file("language_en.h");
  29. $en = parselang($f);
  30. */
  31. //print_r($cz);
  32. $out="#ifndef LANGUAGE_ALL_H\n#define LANGUAGE_ALL_H\n\nextern unsigned char lang_selected;\nextern const char** MSG_ALL[];\n";
  33. $counter=0;
  34. $langname = 0;
  35. $langsel = 0;
  36. foreach ($cz as $k=>$v) {
  37. $out .= "#define $k MSG_ALL[lang_selected][$counter]\n";
  38. if ($k=="MSG_LANGUAGE_NAME") $langname = $counter;
  39. if ($k=="MSG_LANGUAGE_SELECT") $langsel = $counter;
  40. //$out2 .= "\t".''.$v.','."\n";
  41. //$out3 .= "\t".''.$en[$k].','."\n";
  42. $counter++;
  43. }
  44. $out.="#define LANGUAGE_NAME $langname \n";
  45. $out.="#define LANGUAGE_SELECT $langsel \n";
  46. $out.="#define LANG_NUM ".count($langs)." \n";
  47. $out.="char* CAT2(const char *s1,const char *s2);\n";
  48. $out.="char* CAT4(const char *s1,const char *s2,const char *s3,const char *s4);\n";
  49. $out.="\n\n\n#endif //LANGUAGE_ALL.H";
  50. file_put_contents("language_all.h",$out);
  51. echo ".h created\n";
  52. $out="#include <avr/pgmspace.h>\n#define LCD_WIDTH 20\nextern unsigned char lang_selected;\n";
  53. foreach ($langs as $lang) {
  54. $outa[$lang]="const char* MSG".strtoupper($lang)."[] = {";
  55. }
  56. //$out2="const char* MSGCZ[] = {";
  57. //$out3="const char* MSGEN[] = {";
  58. $counter=0;
  59. foreach ($cz as $k=>$v) {
  60. foreach ($langs as $lang) {
  61. $out .= "const char MSG".strtoupper($lang)."${counter}[] PROGMEM = { ".${$lang}[$k]." }; //$k\n";
  62. $outa[$lang].="MSG".strtoupper($lang)."$counter, //$k\n";
  63. }
  64. //$out .= "const char MSGCZ${counter}[] PROGMEM = { $v }; //$k\n";
  65. //$out .= "const char MSGEN${counter}[] PROGMEM = {".$en[$k]."}; //$k\n";
  66. //$out2 .= "MSGCZ$counter, //$k\n";
  67. //$out3 .= "MSGEN$counter, //$k\n";
  68. $counter++;
  69. }
  70. $langlist=array();
  71. foreach ($langs as $lang) {
  72. $out.= $outa[$lang] . "};\n";
  73. $langlist[]="MSG".strtoupper($lang);
  74. }
  75. /*
  76. $out2.="};\n";
  77. $out3.="};\n";
  78. $out .= $out2;
  79. $out .= $out3;
  80. */
  81. $out .= "\n\nconst char** MSG_ALL[] = {".join(",",$langlist)."};";
  82. $tools = <<<EOF
  83. char langbuffer[LCD_WIDTH+1];
  84. char* CAT2(const char *s1,const char *s2) {
  85. unsigned char len=0;
  86. strncpy_P(langbuffer+len,s1,LCD_WIDTH-len);
  87. len+=strlen_P(s1);
  88. strncpy_P(langbuffer+len,s2,LCD_WIDTH-len);
  89. return langbuffer;
  90. }
  91. char* CAT4(const char *s1,const char *s2,const char *s3,const char *s4) {
  92. unsigned char len=0;
  93. strncpy_P(langbuffer+len,s1,LCD_WIDTH-len);
  94. len+=strlen_P(s1);
  95. strncpy_P(langbuffer+len,s2,LCD_WIDTH-len);
  96. len+=strlen_P(s2);
  97. strncpy_P(langbuffer+len,s3,LCD_WIDTH-len);
  98. len+=strlen_P(s3);
  99. strncpy_P(langbuffer+len,s4,LCD_WIDTH-len);
  100. return langbuffer;
  101. }
  102. EOF;
  103. $out.=$tools;
  104. file_put_contents("language_all.cpp",$out);
  105. echo ".cpp created.\nDone!\n";
  106. //const char MSG1[] PROGMEM = MSG_SD_INSERTED;
  107. //const char* MSGCZ[] PROGMEM = {MSG_SD_INSERTED,MSG_SD_REMOVED};