X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=scripts%2Fgen_switch_utf8.php;h=f1811d8bfdf27d58a32d6714ab9d1878f864bd76;hp=242450a2391e646dc68a17a3599f40aea9fad639;hb=f9174a9d53c215c201989aee1d57a5bc818d084f;hpb=7c241598f1c4ad4da6ff031f59aac109ede4f31e diff --git a/scripts/gen_switch_utf8.php b/scripts/gen_switch_utf8.php index 242450a..f1811d8 100755 --- a/scripts/gen_switch_utf8.php +++ b/scripts/gen_switch_utf8.php @@ -9,12 +9,19 @@ set_error_handler(function($c, $e, $f, $l) { $i18n = $argc >= 2 ? $argv[1] : "/usr/share/i18n/locales/i18n"; $b = 10; +$m = 0xfffff000 >> $b; +$b2 = 8; +$x = $m >> $b2; $f = fopen($i18n, "r"); $c = false; $a = false; ob_start(null, 0xfffff); + +printf("/* generated on %s with\n b = %d\n m = 0x%08x\n b2= %d\n*/", + strftime("%x %X"), $b, $m, $b2); + while (!feof($f)) { $line = fgets($f); if (!$c && $line !== "LC_CTYPE\n") { @@ -57,7 +64,7 @@ while (!feof($f)) { sscanf($sstart, "", $start); break; } - $r[$start >> $b][]=[$start,$end,$step]; + $r[$start >> $b][($start & $m) >> $b2][]=[$start,$end,$step]; } } break; @@ -73,9 +80,12 @@ while (!feof($f)) { function sp($sp, $ch = " ") { return str_repeat($ch, $sp); } printf("switch (ch >> %d) {\n", $b); -foreach ($r as $sw => $specs) { +foreach ($r as $sw => $sws) { printf("case 0x%08X:\n", $sw); - $sp = 1; + printf(" switch((ch & 0x%08X) >> %d) {\n", $m, $b2); + foreach ($sws as $sw2 => $specs) { + printf(" case 0x%08X:\n", $sw2); + $sp = 2; foreach ($specs as list($start, $end, $step)) { if ($end) { if ($step > 1) { @@ -90,7 +100,9 @@ foreach ($r as $sw => $specs) { printf("%sif (ch == 0x%08X) return 1;\n", sp($sp), $start); } } - printf(" %s\n break;\n", sp(--$sp, "}")); + printf(" %s\n break;\n", sp($sp-2, "}")); + } + printf(" }\n break;\n"); } printf("}\n");