GcinScripts01: scim2tab

File scim2tab, 6.5 kB (added by caleb, 4 years ago)
Line 
1 #!/bin/sh
2 #
3 # This script is public domain.
4 #
5 # scim2tab
6
7   VERSION=0.0.8
8
9   COMPAT_SCIM_TABLES=0.5.8
10
11   if [ "$1" = "" ]; then
12     echo ${0##*/}, version $VERSION, compatible with \
13          scim-tables-$COMPAT_SCIM_TABLES.
14     echo "Usage: ${0##*/} file"
15     exit 1
16   fi
17
18   if [ -f $1 ]; then
19     CINFILE=`basename $1 .txt.in | tr A-Z a-z`.cin
20   else
21     echo ${0##*/}: $1: No such file.
22     exit 2
23   fi
24
25   echo Generating $CINFILE.
26
27 # Remove null content lines. `cat -b' does not count null content lines.
28   grep -v '^$' $1 > scim2tab.tmp
29
30 # Split scim2tab.tmp into xx00 and xx01.
31 #                       Print line numbers.
32 #                       Find SCIM_Generic_Table_Phrase_Library_TEXT.
33 #                       Remove comments.
34 #                       Make sure there is only one line.
35 #                       Get the line number and pass to csplit.
36   csplit scim2tab.tmp ` cat -b scim2tab.tmp | \
37                         grep SCIM_Generic   | \
38                         grep -v \##         | \
39                         head -n 1           | \
40                         cut -f1             | \
41                         tr -d ' '               ` > /dev/null
42
43 # These are SCIM's original messages, copyrights, licenses, etc.
44   mv xx00 $CINFILE
45
46 # Append table author information.
47   grep AUTHOR xx01   | \
48   grep -v \##        | \
49   tail -n 1          | \
50   sed -e 's/=//g'      \
51       -e 's/^/### /'   \
52       -e "s/AUTHOR /This table\'s author is/" >> $CINFILE
53
54 # %gen_inp
55   echo %gen_inp >> $CINFILE
56
57 # %ename
58   grep 'NAME' xx01      | \
59   grep -v 'NAME\.'      | \
60   head -n 1             | \
61   sed -e 's/NAME//'       \
62       -e 's/ //g'         \
63       -e 's/=//g'         \
64       -e 's/^/%ename /' | \
65   tr A-Z a-z >> $CINFILE
66
67 # %cname
68   CNAME=` grep 'NAME\.' xx01      | \
69           grep zh_TW              | \
70           grep -v \##             | \
71           sed -e 's/#//g'           \
72               -e 's/ //g'           \
73               -e 's/=//g'           \
74               -e 's/NAME.zh_TW//'   \
75               -e 's/^/%cname /'       `
76
77   if [ "$CNAME" = "" ]; then
78     echo %cname $CINFILE >> $CINFILE
79   else
80     echo $CNAME >> $CINFILE
81   fi
82
83 # %selkey
84   SELECT_KEY_DEF=` grep SELECT_KEYS xx01    | \
85                    grep -v VoidSymbol       | \
86                    grep -v \##              | \
87                    head -n 1                | \
88                    sed -e 's/SELECT_KEYS//'   \
89                        -e 's/ //g'            \
90                        -e 's/=//g'            \
91                        -e 's/,//g'            \
92                        -e 's/^/%selkey /'       `
93
94   if [ "$SELECT_KEY_DEF" = "" ]; then
95     echo %selkey 123456789 >> $CINFILE
96   else
97     echo $SELECT_KEY_DEF >> $CINFILE
98   fi
99
100 # %endkey
101   grep KEY_END_CHARS xx01    | \
102   grep -v \##                | \
103   head -n 1                  | \
104   sed -e 's/KEY_END_CHARS//'   \
105       -e 's/ //g'              \
106       -e 's/=//g'              \
107       -e 's/^/%endkey /' >> $CINFILE
108
109 # %space_style
110   grep AUTO_COMMIT xx01    | \
111   grep -v \##              | \
112   grep TRUE                | \
113   sed -e 's/AUTO_COMMIT//'   \
114       -e 's/ //g'            \
115       -e 's/=//g'            \
116       -e 's/TRUE//'          \
117       -e 's/^/%space_style 1/' >> $CINFILE
118
119 # %keep_key_case
120   echo %keep_key_case >> $CINFILE
121
122 # %keyname begin
123 # .
124 # .
125 # %keyname end
126   echo %keyname begin >> $CINFILE
127
128   KEYNAME_BEGIN=`grep BEGIN_CHAR_PROMPTS_DEFINITION xx01 | grep -v \##`
129
130   if [ "$KEYNAME_BEGIN" = "" ]; then
131     grep VALID_INPUT_CHARS xx01 | \
132     grep -v \##                 | \
133     head -n 1                   | \
134     cut -d ' ' -f3              | \
135     fold -w 1 -                 | \
136     sed 's/\(^.$\)/\1 \1/'      | \
137     perl -nle '(print,$hash{$_}=1) unless defined $hash{$_}' >> $CINFILE
138   else
139     mv xx01 scim2tab.tmp
140     csplit scim2tab.tmp ` cat -b scim2tab.tmp                | \
141                           grep BEGIN_CHAR_PROMPTS_DEFINITION | \
142                           grep -v \##                        | \
143                           head -n 1                          | \
144                           cut -f1                            | \
145                           tr -d ' '                              ` > /dev/null
146     mv xx01 scim2tab.tmp
147
148     csplit scim2tab.tmp ` cat -b scim2tab.tmp              | \
149                           grep END_CHAR_PROMPTS_DEFINITION | \
150                           grep -v \##                      | \
151                           head -n 1                        | \
152                           cut -f1                          | \
153                           tr -d ' '                            ` > /dev/null
154     sort xx00                             | \
155     grep -v BEGIN_CHAR_PROMPTS_DEFINITION | \
156     perl -nle '(print,$hash{$_}=1) unless defined $hash{$_}' >> $CINFILE
157   fi
158
159   echo %keyname end >> $CINFILE
160
161 # %chardef begin
162   echo %chardef begin >> $CINFILE
163
164   mv xx01 scim2tab.tmp
165
166   csplit scim2tab.tmp ` cat -b scim2tab.tmp | \
167                         grep BEGIN_TABLE    | \
168                         grep -v \##         | \
169                         head -n 1           | \
170                         cut -f1             | \
171                         tr -d ' '               ` > /dev/null
172   echo \#! /bin/bash > scim2tab.tmp
173
174   sed 's/$/\t0/' xx01 | \
175   tr -s ' ' ' '       | \
176   sed -e 's/ /  /'      \
177       -e 's/ /  /' > xx00
178   sort -g -r -k 3 xx00                                     | \
179   cut -f3                                                  | \
180   perl -nle '(print,$hash{$_}=1) unless defined $hash{$_}' | \
181   grep -v '^$'                                             | \
182   sed -e 's/^/grep /'                                        \
183       -e 's/$/ xx00 \>\> xx01/' >> scim2tab.tmp
184   echo grep 0 xx00 \>\> xx01 >> scim2tab.tmp
185
186   rm xx01
187   bash scim2tab.tmp
188   grep -v _TABLE xx01 | \
189   grep -v \###        | \
190   sed 's/\t0$//'   | \
191   perl -nle '(print,$hash{$_}=1) unless defined $hash{$_}' >> $CINFILE
192
193 # Compatibility issue.
194 # This is a strange work around for Bopomofo inputmethod.
195 # Anyway, it works! :-)
196   grep KEY_END_CHARS $1      | \
197   grep -v \##                | \
198   head -n 1                  | \
199   sed -e 's/KEY_END_CHARS//'   \
200       -e 's/ //g'              \
201       -e 's/=//g'              \
202       -e 's/^/linux     linux/' >> $CINFILE
203
204   rm scim2tab.tmp xx00 xx01
205
206   echo
207
208   gcin2tab $CINFILE | grep -v 'gcin2tab encoding UTF-8' | \
209                       grep -v 'please use iconv'        | \
210                       grep -v 'skip gen_inp'
211
212   GTABFILE=`basename $1 .txt.in | tr A-Z a-z`.gtab
213
214   if [ -f $GTABFILE ]; then
215     echo
216     echo Generating $GTABFILE. Done.
217   else
218     echo
219     echo Failed to generate $GTABFILE.
220     exit 3
221   fi
222
223 exit 0