Added simple WCSA
[SXSI/TextCollection.git] / swcsa / utils / valstring.c
1 #include "valstring.h"
2 #include <stdio.h>
3
4 unsigned char  _Valid[256];
5 unsigned char  _Invalid[256];
6
7 unsigned char _toLow[256];
8
9
10 #ifndef ValidCh
11
12  #define ValidCh(ch)  (isalnum(ch)) /* Teste de validacao         */   
13  #define InvalidCh(ch) (!ValidCh(ch))
14
15 #endif
16
17
18
19
20 void StartValid() {
21
22   unsigned x;
23
24   for(x=0;x<128;x++) {
25     if(ValidCh(x)) {
26       _Valid[x]=1;
27       _Invalid[x]=0;
28     }
29     else {
30       _Valid[x]=0;
31       _Invalid[x]=1;
32     }
33   }
34   for(x=128;x<256;x++) {
35     _Valid[x]=0;
36     _Invalid[x]=1;
37   }
38   
39   _Valid[0]=_Invalid[0]=0;
40
41   // Caracteres especiales (acentuados, dieresis...)
42   // Caracter 'ñ'
43   _Valid[241]=1;
44   _Invalid[241]=0;
45   // Caracter 'Ñ'
46   _Valid[209]=1;
47   _Invalid[209]=0;
48   // Caracter 'á'
49   _Valid[225]=1;
50   _Invalid[225]=0;
51   // Caracter 'é'
52   _Valid[233]=1;
53   _Invalid[233]=0;
54   // Caracter 'í'
55   _Valid[237]=1;
56   _Invalid[237]=0;
57   // Caracter 'ó'
58   _Valid[243]=1;
59   _Invalid[243]=0;
60   // Caracter 'ú'
61   _Valid[250]=1;
62   _Invalid[250]=0;
63   // Caracter 'Á'
64   _Valid[193]=1;
65   _Invalid[193]=0;
66   // Caracter 'É'
67   _Valid[201]=1;
68   _Invalid[201]=0;
69   // Caracter 'Í'
70   _Valid[205]=1;
71   _Invalid[205]=0;
72   // Caracter 'Ó'
73   _Valid[211]=1;
74   _Invalid[211]=0;
75   // Caracter 'Ú'
76   _Valid[218]=1;
77   _Invalid[218]=0;
78   // Caracter 'ü'
79   _Valid[252]=1;
80   _Invalid[252]=0;
81   // Caracter 'Ü'
82   _Valid[220]=1;
83   _Invalid[220]=0;
84       
85 }
86
87
88
89
90 void StartToLow() {
91         int i;
92         unsigned char c;
93         for (i=0;i<256;i++) {
94                 c=i;
95                 if( (c >= 'A') && (c <= 'Z') ){
96                         _toLow[i]= c+ 'a'-'A';
97                 }
98                 else if (!_Valid[c]) {
99                         _toLow[i]=c;    
100                 }               
101                 else {
102                         switch(c) {                     
103                                 case 192: case 193: case 194: case 195: case 196: case 197: case 224: case 225: 
104                                 case 226: case 227: case 228: case 229: 
105                                         c = 97; break;
106                         
107                                 case 201: case 202: case 203: case 232: case 233: case 234: case 235: 
108                                         c = 101; break;
109                                 
110                                 case 204: case 205: case 206: case 207: case 236: case 237: case 238: case 239: 
111                                         c = 105; break;
112                                 
113                                 case 210: case 211: case 212: case 213: case 214: case 242: case 243: case 244: 
114                                           case 245: case 246: 
115                                         c = 111; break;
116                                 
117                                 case 217: case 218: case 219: case 220: case 249: case 250: case 251: case 252: 
118                                         c = 117; break;
119                                 
120                                 case 209: c = 241; break;
121                                 
122                                 case 138: case 154: c = 115; break;
123                                 
124                                 case 159: case 221: case 253: case 255: 
125                                         c = 121; break;                         
126                         }
127                         _toLow[i]=c;
128                 }
129         }       
130 }