(%.tab): Fix previous change.
[m17n/m17n-db.git] / CASED.awk
1 # CASED.awk -- awk script to generate CASED.tab
2 # Copyright (C) 2005
3 #   National Institute of Advanced Industrial Science and Technology (AIST)
4 #   Registration Number H15PRO112
5
6 # This file is part of the m17n database; a sub-part of the m17n
7 # library.
8
9 # The m17n library is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU Lesser General Public License
11 # as published by the Free Software Foundation; either version 2.1 of
12 # the License, or (at your option) any later version.
13
14 # The m17n library is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 # Lesser General Public License for more details.
18
19 # You should have received a copy of the GNU Lesser General Public
20 # License along with the m17n library; if not, write to the Free
21 # Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 # Boston, MA 02110-1301, USA.
23
24 BEGIN {
25   tohex["0"] = 1;
26   tohex["1"] = 2;
27   tohex["2"] = 3;
28   tohex["3"] = 4;
29   tohex["4"] = 5;
30   tohex["5"] = 6;
31   tohex["6"] = 7;
32   tohex["7"] = 8;
33   tohex["8"] = 9;
34   tohex["9"] = 10;
35   tohex["A"] = 11;
36   tohex["B"] = 12;
37   tohex["C"] = 13;
38   tohex["D"] = 14;
39   tohex["E"] = 15;
40   tohex["F"] = 16;
41   tohex["a"] = 11;
42   tohex["b"] = 12;
43   tohex["c"] = 13;
44   tohex["d"] = 14;
45   tohex["e"] = 15;
46   tohex["f"] = 16;
47
48   FS = "[ \t]*[;#][ \t]*";
49 }
50
51 function decode_hex(str, idx) {
52   n = 0;
53   len = length(str);
54   for (i = idx; i <= len; i++)
55     {
56       c = tohex[substr(str, i, 1)];
57       if (c == 0)
58         break;
59       n = n * 16 + c - 1;
60     }
61   return n;
62 }
63
64 function single(str, bit) {
65   i = decode_hex(str, 1);
66   if (cased[i] != bit)
67     cased[i] += bit;
68 }
69
70 function range(str, bit) {
71   end = decode_hex(str, index(str, "..") + 2);
72   for (i = decode_hex(str, 1); i <= end; i++)
73     if (cased[i] != bit)
74       cased[i] += bit;
75 }
76
77 /^[^\#]/ {
78   if (FILENAME == "UNIDATA/UnicodeData.txt") {
79     if ($3 ~ /L[ltu]/)
80       single($1, 1);
81     else if ($3 ~ /Mn|Me|Cf|Lm|Sk/)
82       single($1, 2);
83   }
84
85   else if (FILENAME == "UNIDATA/PropList.txt") {
86     if ($2 ~ /Other_(Upp|Low)ercase/) {
87       if (index($1, "."))
88         range($1, 1);
89       else
90         single($1, 1);
91     }
92   }
93
94   else {                        # FILE == "WordBreakProperty.txt"
95     if ($2 == "MidLetter") {
96       if (index($1, "."))
97         range($1, 2);
98       else
99         single($1, 2);
100     }
101   }
102 }
103
104 END {
105   for (i in cased)
106     printf ("0x%X %d\n", i, cased[i]);
107 }