diff options
Diffstat (limited to 'langtool.php')
-rw-r--r-- | langtool.php | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/langtool.php b/langtool.php new file mode 100644 index 000000000..6ecb6a00e --- /dev/null +++ b/langtool.php @@ -0,0 +1,129 @@ +<?php + +$langs = array("en","cz"); + +function parselang($a) { + $out=array(); + foreach ($a as $line){ + if (!strpos($line,"MSG")) continue; + //echo $line; + preg_match('/\#define\s*(\S*)\s*(.*)/is',$line,$a); + //print_r($a);die(); + if (!$a[1]) continue; + $v = trim($a[2]); + + $v = str_replace('MACHINE_NAME "','"Prusa i3',$v); + $v = str_replace('" FIRMWARE_URL "','https://github.com/prusa3d/Prusa-i3-Plus/',$v); + $v = str_replace('" PROTOCOL_VERSION "','1.0',$v); + $v = str_replace('" STRINGIFY(EXTRUDERS) "','1',$v); + $v = str_replace('" MACHINE_UUID "','00000000-0000-0000-0000-000000000000',$v); + + $out[trim($a[1])]=$v; + } + return $out; +} + +foreach ($langs as $lang) { + $f = file("language_".$lang.".h"); + $$lang = parselang($f); +} +/* +$f = file("language_cz.h"); +$cz = parselang($f); + +$f = file("language_en.h"); +$en = parselang($f); +*/ +//print_r($cz); + +$out="#ifndef LANGUAGE_ALL_H\n#define LANGUAGE_ALL_H\n\nextern unsigned char lang_selected;\nextern const char** MSG_ALL[];\n"; + +$counter=0; +$langname = 0; +$langsel = 0; +foreach ($cz as $k=>$v) { + + $out .= "#define $k MSG_ALL[lang_selected][$counter]\n"; + if ($k=="MSG_LANGUAGE_NAME") $langname = $counter; + if ($k=="MSG_LANGUAGE_SELECT") $langsel = $counter; + //$out2 .= "\t".''.$v.','."\n"; + //$out3 .= "\t".''.$en[$k].','."\n"; + + $counter++; +} +$out.="#define LANGUAGE_NAME $langname \n"; +$out.="#define LANGUAGE_SELECT $langsel \n"; +$out.="#define LANG_NUM ".count($langs)." \n"; +$out.="char* CAT2(const char *s1,const char *s2);\n"; +$out.="char* CAT4(const char *s1,const char *s2,const char *s3,const char *s4);\n"; +$out.="\n\n\n#endif //LANGUAGE_ALL.H"; + +file_put_contents("language_all.h",$out); +echo ".h created\n"; + + +$out="#include <avr/pgmspace.h>\n#define LCD_WIDTH 20\nextern unsigned char lang_selected;\n"; +foreach ($langs as $lang) { + $outa[$lang]="const char* MSG".strtoupper($lang)."[] = {"; +} +//$out2="const char* MSGCZ[] = {"; +//$out3="const char* MSGEN[] = {"; +$counter=0; +foreach ($cz as $k=>$v) { + foreach ($langs as $lang) { + $out .= "const char MSG".strtoupper($lang)."${counter}[] PROGMEM = { ".${$lang}[$k]." }; //$k\n"; + $outa[$lang].="MSG".strtoupper($lang)."$counter, //$k\n"; + } + //$out .= "const char MSGCZ${counter}[] PROGMEM = { $v }; //$k\n"; + //$out .= "const char MSGEN${counter}[] PROGMEM = {".$en[$k]."}; //$k\n"; + + //$out2 .= "MSGCZ$counter, //$k\n"; + //$out3 .= "MSGEN$counter, //$k\n"; + $counter++; +} + +$langlist=array(); +foreach ($langs as $lang) { + $out.= $outa[$lang] . "};\n"; + $langlist[]="MSG".strtoupper($lang); +} +/* +$out2.="};\n"; +$out3.="};\n"; + +$out .= $out2; +$out .= $out3; +*/ + + +$out .= "\n\nconst char** MSG_ALL[] = {".join(",",$langlist)."};"; + +$tools = <<<EOF + +char langbuffer[LCD_WIDTH+1]; +char* CAT2(const char *s1,const char *s2) { + unsigned char len=0; + strncpy_P(langbuffer+len,s1,LCD_WIDTH-len); + len+=strlen_P(s1); + strncpy_P(langbuffer+len,s2,LCD_WIDTH-len); + return langbuffer; +} +char* CAT4(const char *s1,const char *s2,const char *s3,const char *s4) { + unsigned char len=0; + strncpy_P(langbuffer+len,s1,LCD_WIDTH-len); + len+=strlen_P(s1); + strncpy_P(langbuffer+len,s2,LCD_WIDTH-len); + len+=strlen_P(s2); + strncpy_P(langbuffer+len,s3,LCD_WIDTH-len); + len+=strlen_P(s3); + strncpy_P(langbuffer+len,s4,LCD_WIDTH-len); + return langbuffer; +} +EOF; + +$out.=$tools; + +file_put_contents("language_all.cpp",$out); +echo ".cpp created.\nDone!\n"; +//const char MSG1[] PROGMEM = MSG_SD_INSERTED; +//const char* MSGCZ[] PROGMEM = {MSG_SD_INSERTED,MSG_SD_REMOVED}; |