Add copyright and license notice.
[bpt/emacs.git] / admin / charsets / gb180304.awk
1 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
2 # National Institute of Advanced Industrial Science and Technology (AIST)
3 # Registration Number H13PRO009
4 #
5 # This file is part of GNU Emacs.
6 #
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.
11 #
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.
16 #
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.
21
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;
35 }
36
37 function decode_hex(str) {
38 n = 0;
39 len = length(str);
40 for (i = 1; i <= len; i++)
41 {
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];
47 }
48 return n;
49 }
50
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
58 }
59
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);
68 }
69
70 /^\#/ {
71 print;
72 next;
73 }
74
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)
80 {
81 table[unicode++] = 1;
82 gb_from++;
83 }
84 next;
85 }
86
87 {
88 gb = decode_hex(substr($1, 3, 4));
89 unicode = decode_hex(substr($2, 3, 4));
90 table[unicode] = 1;
91 }
92
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++)
99 {
100 if (table[i] == 0)
101 {
102 if (i < 55296 || i >= 57344)
103 {
104 if (from_gb < 0)
105 {
106 from_gb = to_gb;
107 from_i = i;
108 }
109 to_gb++;
110 }
111 }
112 else if (from_gb >= 0)
113 {
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;
121 }
122 }
123 }
124
125 # arch-tag: 8e5a22ae-610e-411f-ae17-d6e528b30d71