X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=gen_utf8.php;fp=gen_utf8.php;h=2675f156207cfda64d73e06a6fe015b33e9a04e9;hb=62e9d3e1f5ec8896131313c70574ce7f7cbcfc99;hp=0000000000000000000000000000000000000000;hpb=fbd9ab2bcfe653d1189a025cc75c38ba3f89f19d;p=m6w6%2Fext-http diff --git a/gen_utf8.php b/gen_utf8.php new file mode 100755 index 0000000..2675f15 --- /dev/null +++ b/gen_utf8.php @@ -0,0 +1,93 @@ +#!/usr/bin/env php += 2 ? $argv[1] : "/usr/share/i18n/locales/i18n"; + +$f = fopen($i18n, "r"); +$c = false; +$a = false; + +ob_start(null, 0xffff); +while (!feof($f)) { + $line = fgets($f); + if (!$c && $line !== "LC_CTYPE\n") { + continue; + } + $c = true; + if ($line === "END LC_CTYPE\n") { + break; + } + switch($line{0}) { + case "%": + if ($a) { + printf("/* %s */\n", trim($line, "%\n/ ")); + } + break; + case "\n": + if ($a) { + break 2; + } + break; + case " ": + if ($a) { + foreach (explode(";", trim($line, "\n/ ;")) as $ranges) { + $range = explode("..", $ranges); + $step = 0; + $end = 0; + switch (count($range)) { + case 3: + list($sstart, $sstep, $send) = $range; + sscanf($sstart, "", $start); + sscanf($sstep, "(%d)", $step); + sscanf($send, "", $end); + + break; + case 2: + list($sstart, $send) = $range; + $step = 1; + sscanf($sstart, "", $start); + sscanf($send, "", $end); + break; + case 1: + list($sstart) = $range; + sscanf($sstart, "", $start); + break; + } + print "\t{"; + if ($start >= 0xffff) { + printf("0x%08X, ", $start); + if ($end) { + printf("0x%08X, ", $end); + } else { + print(" 0, "); + } + } else { + printf(" 0x%04X, ", $start); + if ($end) { + printf(" 0x%04X, ", $end); + } else { + print(" 0, "); + } + } + printf("%d},\n", $step); + } + } + break; + default: + if ($a) { + break 2; + } elseif ($line === "alpha /\n") { + $a = true; + } + break; + } +} + +file_put_contents("php_http_utf8.h", + preg_replace('/(\/\* BEGIN::UTF8TABLE \*\/\n).*(\n\s*\/\* END::UTF8TABLE \*\/)/s', '$1'. ob_get_contents() .'$2', + file_get_contents("php_http_utf8.h")));