4 error_reporting(E_ALL
);
5 set_error_handler(function($c, $e, $f, $l) {
6 throw new Exception("$e in $f on line $l");
9 $i18n = $argc >= 2 ?
$argv[1] : "/usr/share/i18n/locales/i18n";
11 $f = fopen($i18n, "r");
15 ob_start(null, 0xfffff);
19 if (!$c && $line !== "LC_CTYPE\n") {
23 if ($line === "END LC_CTYPE\n") {
36 foreach (explode(";", trim($line, "\n/ ;")) as $ranges) {
37 $range = explode("..", $ranges);
40 switch (count($range)) {
42 list($sstart, $sstep, $send) = $range;
43 sscanf($sstart, "<U%X>", $start);
44 sscanf($sstep, "(%d)", $step);
45 sscanf($send, "<U%X>", $end);
49 list($sstart, $send) = $range;
51 sscanf($sstart, "<U%X>", $start);
52 sscanf($send, "<U%X>", $end);
55 list($sstart) = $range;
56 sscanf($sstart, "<U%X>", $start);
59 $r[]=[$start,$end,$step];
66 } elseif ($line === "alpha /\n") {
72 function sp($sp, $ch = " ") { return str_repeat($ch, $sp); }
74 foreach ($r as list($start, $end, $step)) {
77 die("\nUNEXPECTED: step>1\n");
78 printf("\tfor (i=0x%08X; i <= 0x%08X; i+= %d) { if (i == ch) return 1; }\n", $start, $end, $step);
80 //printf(" if (ch >= 0x%08X && ch <= 0x%08X) return 1;\n", $start, $end);
81 printf("%sif (ch >= 0x%08X) {\n", sp($sp), $start);
82 printf("%sif (ch <= 0x%08X) return 1;\n", sp(++
$sp), $end);
85 printf("%sif (ch == 0x%08X) return 1;\n", sp($sp), $start);
88 printf(" %s\n", sp($sp-1, "}"));
90 file_put_contents("php_http_utf8.h",
91 preg_replace('/(\/\* BEGIN::UTF8SWITCH \*\/\n).*(\n\s*\/\* END::UTF8SWITCH \*\/)/s', '$1'. ob_get_contents() .'$2',
92 file_get_contents("php_http_utf8.h")));