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");
17 ob_start(null, 0xffff);
20 if (!$c && $line !== "LC_CTYPE\n") {
24 if ($line === "END LC_CTYPE\n") {
37 foreach (explode(";", trim($line, "\n/ ;")) as $ranges) {
38 $range = explode("..", $ranges);
41 switch (count($range)) {
43 list($sstart, $sstep, $send) = $range;
44 sscanf($sstart, "<U%X>", $start);
45 sscanf($sstep, "(%d)", $step);
46 sscanf($send, "<U%X>", $end);
50 list($sstart, $send) = $range;
52 sscanf($sstart, "<U%X>", $start);
53 sscanf($send, "<U%X>", $end);
56 list($sstart) = $range;
57 sscanf($sstart, "<U%X>", $start);
62 die("UNEXPECTED step=$step\n");
64 $r[] = [$start, $end];
74 } elseif ($line === "alpha /\n") {
82 printf("static const utf8_range_t utf8_ranges[] = {\n\t{");
83 foreach ($r as $i => list($start, $end)) {
90 printf("0x%08X, 0x%08X}", $start, $end);
93 printf("static const unsigned utf8_chars[] = {\n\t");
94 foreach ($n as $i => $u) {
100 printf("0x%08X", $u);
104 file_put_contents("php_http_utf8.h",
105 preg_replace('/(\/\* BEGIN::UTF8TABLE \*\/\n).*(\n\s*\/\* END::UTF8TABLE \*\/)/s', '$1'. ob_get_contents() .'$2',
106 file_get_contents("php_http_utf8.h")));