7 typedef struct Tmap Tmap;
16 {0x0b85/*அ*/, 0xe201/**/},
17 {0x0b86/*ஆ*/, 0xe202/**/},
18 {0x0b87/*இ*/, 0xe203/**/},
19 {0x0b88/*ஈ*/, 0xe204/**/},
20 {0x0b89/*உ*/, 0xe205/**/},
21 {0x0b8a/*ஊ*/, 0xe206/**/},
22 {0x0b8e/*எ*/, 0xe207/**/},
23 {0x0b8f/*ஏ*/, 0xe208/**/},
24 {0x0b90/*ஐ*/, 0xe209/**/},
25 {0x0b92/*ஒ*/, 0xe20a/**/},
26 {0x0b93/*ஓ*/, 0xe20b/**/},
27 {0x0b94/*ஔ*/, 0xe20c/**/},
28 {0x0b83/*ஃ*/, 0xe20d/**/}
34 0x0bcd/*்*/, // filler
50 {0x0b95/*க*/, 0xe211/**/},
51 {0x0b99/*ங*/, 0xe221/**/},
52 {0x0b9a/*ச*/, 0xe231/**/},
53 {0x0b9c/*ஜ*/, 0xe331/**/},
54 {0x0b9e/*ஞ*/, 0xe241/**/},
55 {0x0b9f/*ட*/, 0xe251/**/},
56 {0x0ba3/*ண*/, 0xe261/**/},
57 {0x0ba4/*த*/, 0xe271/**/},
58 {0x0ba8/*ந*/, 0xe281/**/},
59 {0x0ba9/*ன*/, 0xe321/**/},
60 {0x0baa/*ப*/, 0xe291/**/},
61 {0x0bae/*ம*/, 0xe2a1/**/},
62 {0x0baf/*ய*/, 0xe2b1/**/},
63 {0x0bb0/*ர*/, 0xe2c1/**/},
64 {0x0bb1/*ற*/, 0xe311/**/},
65 {0x0bb2/*ல*/, 0xe2d1/**/},
66 {0x0bb3/*ள*/, 0xe301/**/},
67 {0x0bb4/*ழ*/, 0xe2f1/**/},
68 {0x0bb5/*வ*/, 0xe2e1/**/},
69 {0x0bb6/*ஶ*/, 0xe341/**/},
70 {0x0bb7/*ஷ*/, 0xe351/**/},
71 {0x0bb8/*ஸ*/, 0xe361/**/},
72 {0x0bb9/*ஹ*/, 0xe371/**/}
76 findbytune(Tmap *tab, int size, Rune t)
80 for(i = 0; i < size; i++)
87 findbyuni(Tmap *tab, int size, Rune u)
91 for(i = 0; i < size; i++)
98 findindex(Rune *rstr, int size, Rune r)
102 for(i = 0; i < size; i++)
109 tune_in(int fd, long *, struct convert *out)
117 Binit(&b, fd, OREAD);
118 while((c = Bgetrune(&b)) != Beof){
119 ninput += b.runesize;
121 OUT(out, runes, r-runes);
124 if(c>=0xe210/**/ && c <= 0xe38c/**/ && (i = c%16) < nelem(t2)){
125 if(c >= 0xe380/**/){
130 *r++ = findbytune(t3, nelem(t3), c-i+1);
133 }else if((tr = findbytune(t1, nelem(t1), c)) != Runeerror)
137 *r++ = 0x0ba3/*ண*/; *r++ = 0x0bbe/*ா*/;
140 *r++ = 0x0bb1/*ற*/; *r++ = 0x0bbe/*ா*/;
143 *r++ = 0x0ba9/*ன*/; *r++ = 0x0bbe/*ா*/;
146 *r++ = 0x0ba3/*ண*/; *r++ = 0x0bc8/*ை*/;
149 *r++ = 0x0bb2/*ல*/; *r++ = 0x0bc8/*ை*/;
152 *r++ = 0x0bb3/*ள*/; *r++ = 0x0bc8/*ை*/;
155 *r++ = 0x0ba9/*ன*/; *r++ = 0x0bc8/*ை*/;
158 *r++ = 0x0bb6/*ஶ*/; *r++ = 0x0bcd/*்*/; *r++ = 0x0bb0/*ர*/; *r++ = 0x0bc0/*ீ*/;
161 if(c >= 0xe200 && c <= 0xe3ff){
163 warn("rune 0x%x not in output cs", c);
174 OUT(out, runes, r-runes);
179 tune_out(Rune *r, int n, long *)
181 static int state = 0;
189 for(p = obuf; r < er; r++){
193 if((tr = findbyuni(t3, nelem(t3), *r)) != Runeerror){
196 }else if(*r == 0x0b92/*ஒ*/){
199 }else if((tr = findbyuni(t1, nelem(t1), *r)) != Runeerror)
200 p += runetochar(p, &tr);
202 p += runetochar(p, r);
206 if((i = findindex(t2, nelem(t2), *r)) != -1){
207 if(lastr && lastr != Runeerror)
211 else if(*r ==0x0bc7/*ே*/)
213 else if(lastr == 0xe210/**/)
215 else if(lastr == 0xe340/**/)
219 p += runetochar(p, &lastr);
222 }else if(lastr && lastr != Runeerror && (*r == 0x00b2/*²*/ || *r == 0x00b3/*³*/ || *r == 0x2074/*⁴*/)){
224 warn("character <U+%.4X, U+%.4X> not in output cs", lastr, *r);
225 lastr = clean ? 0 : Runeerror;
229 p += runetochar(p, &lastr);
235 if(*r == 0x0bb7/*ஷ*/){
240 p += runetochar(p, &lastr);
245 if(*r == 0x0bd7/*ௗ*/){
247 p += runetochar(p, &rr);
250 p += runetochar(p, &lastr);
254 if(*r == 0x0bbe/*ா*/){
256 if(lastr != Runeerror)
258 p += runetochar(p, &lastr);
263 p += runetochar(p, &lastr);
267 if(*r == 0x0bbe/*ா*/ || *r == 0x0bd7/*ௗ*/){
269 if(lastr != Runeerror)
270 lastr += *r == 0x0bbe/*ா*/ ? 3 : 5;
271 p += runetochar(p, &lastr);
276 p += runetochar(p, &lastr);
279 if(*r == 0x0bb0/*ர*/){
283 p += runetochar(p, &lastr);
287 if(*r == 0x0bc0/*ீ*/){
289 p += runetochar(p, &rr);
293 p += runetochar(p, &lastr);
299 if(n == 0 && state != 0){
301 p += runetochar(p, &lastr);
306 write(1, obuf, p-obuf);