Re-indent.
[emacs.git] / admin / charsets / gb180304.awk
bloba323f2c9143760655308d38dc35bc3f97c67ba3b
1 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
2 # National Institute of Advanced Industrial Science and Technology (AIST)
3 # Registration Number H13PRO009
5 # This file is part of GNU Emacs.
7 # GNU Emacs is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3, or (at your option)
10 # any later version.
12 # GNU Emacs is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Emacs; see the file COPYING. If not, write to the
19 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 # Boston, MA 02110-1301, USA.
22 BEGIN {
23 tohex["A"] = 10;
24 tohex["B"] = 11;
25 tohex["C"] = 12;
26 tohex["D"] = 13;
27 tohex["E"] = 14;
28 tohex["F"] = 15;
29 tohex["a"] = 10;
30 tohex["b"] = 11;
31 tohex["c"] = 12;
32 tohex["d"] = 13;
33 tohex["e"] = 14;
34 tohex["f"] = 15;
37 function decode_hex(str) {
38 n = 0;
39 len = length(str);
40 for (i = 1; i <= len; i++)
42 c = substr (str, i, 1);
43 if (c >= "0" && c <= "9")
44 n = n * 16 + (c - "0");
45 else
46 n = n * 16 + tohex[c];
48 return n;
51 function gb_to_index(gb) {
52 b0 = int(gb / 256);
53 b1 = gb % 256;
54 idx = (((b0 - 129)) * 191 + b1 - 64);
55 # if (b1 >= 127)
56 # idx--;
57 return idx
60 function index_to_gb(idx) {
61 b3 = (idx % 10) + 48;
62 idx = int(idx / 10);
63 b2 = (idx % 126) + 129;
64 idx = int(idx / 126);
65 b1 = (idx % 10) + 48;
66 b0 = int(idx / 10) + 129;
67 return sprintf("%02X%02X%02X%02X", b0, b1, b2, b3);
70 /^\#/ {
71 print;
72 next;
75 /0x....-0x..../ {
76 gb_from = gb_to_index(decode_hex(substr($1, 3, 4)));
77 gb_to = gb_to_index(decode_hex(substr($1, 10, 4)));
78 unicode = decode_hex(substr($2, 3, 4));
79 while (gb_from <= gb_to)
81 table[unicode++] = 1;
82 gb_from++;
84 next;
88 gb = decode_hex(substr($1, 3, 4));
89 unicode = decode_hex(substr($2, 3, 4));
90 table[unicode] = 1;
93 END {
94 from_gb = -1;
95 to_gb = 0;
96 from_i = 0;
97 table[65536] = 1;
98 for (i = 128; i <= 65536; i++)
100 if (table[i] == 0)
102 if (i < 55296 || i >= 57344)
104 if (from_gb < 0)
106 from_gb = to_gb;
107 from_i = i;
109 to_gb++;
112 else if (from_gb >= 0)
114 if (from_gb + 1 == to_gb)
115 printf "0x%s\t\t0x%04X\n",
116 index_to_gb(from_gb), from_i;
117 else
118 printf "0x%s-0x%s\t0x%04X\n",
119 index_to_gb(from_gb), index_to_gb(to_gb - 1), from_i;
120 from_gb = -1;
125 # arch-tag: 8e5a22ae-610e-411f-ae17-d6e528b30d71