c670096c4f66598d78c5304275d24e90142810fa
3 error_reporting(E_ALL
);
4 set_error_handler(function($c, $e, $f, $l) {
5 throw new Exception("$e in $f on line $l");
8 $i18n = $argc >= 2 ?
$argv[1] : "/usr/share/i18n/locales/i18n";
10 $f = fopen($i18n, "r");
16 typedef struct utf8_range {
22 static const utf8_range_t utf8_ranges[] = {
27 if (!$c && $line !== "LC_CTYPE\n") {
31 if ($line === "END LC_CTYPE\n") {
37 printf("/* %s */\n", trim($line, "%\n/ "));
47 foreach (explode(";", trim($line, "\n/ ;")) as $ranges) {
48 $range = explode("..", $ranges);
51 switch (count($range)) {
53 list($sstart, $sstep, $send) = $range;
54 sscanf($sstart, "<U%X>", $start);
55 sscanf($sstep, "(%d)", $step);
56 sscanf($send, "<U%X>", $end);
60 list($sstart, $send) = $range;
62 sscanf($sstart, "<U%X>", $start);
63 sscanf($send, "<U%X>", $end);
66 list($sstart) = $range;
67 sscanf($sstart, "<U%X>", $start);
71 if ($start >= 0xffff) {
72 printf("0x%08X, ", $start);
74 printf("0x%08X, ", $end);
79 printf(" 0x%04X, ", $start);
81 printf(" 0x%04X, ", $end);
86 printf("%d},\n", $step);
93 } elseif ($line === "alpha /\n") {