1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4  **********************************************************************
5  *   Copyright (C) 2005-2015, International Business Machines
6  *   Corporation and others.  All Rights Reserved.
7  **********************************************************************
8  */
9 
10 #ifndef __CSRSBCS_H
11 #define __CSRSBCS_H
12 
13 #include "unicode/uobject.h"
14 
15 #if !UCONFIG_NO_CONVERSION
16 
17 #include "csrecog.h"
18 
19 U_NAMESPACE_BEGIN
20 
21 class NGramParser : public UMemory
22 {
23 private:
24     int32_t ngram;
25     const int32_t *ngramList;
26 
27     int32_t ngramCount;
28     int32_t hitCount;
29 
30 protected:
31 	int32_t byteIndex;
32     const uint8_t *charMap;
33 
34 	void addByte(int32_t b);
35 
36 public:
37     NGramParser(const int32_t *theNgramList, const uint8_t *theCharMap);
38     virtual ~NGramParser();
39 
40 private:
41     /*
42     * Binary search for value in table, which must have exactly 64 entries.
43     */
44     int32_t search(const int32_t *table, int32_t value);
45 
46     void lookup(int32_t thisNgram);
47 
48     virtual int32_t nextByte(InputText *det);
49 	virtual void parseCharacters(InputText *det);
50 
51 public:
52     int32_t parse(InputText *det);
53 
54 };
55 
56 #if !UCONFIG_ONLY_HTML_CONVERSION
57 class NGramParser_IBM420 : public NGramParser
58 {
59 public:
60     NGramParser_IBM420(const int32_t *theNgramList, const uint8_t *theCharMap);
61     ~NGramParser_IBM420();
62 
63 private:
64     int32_t alef;
65     int32_t isLamAlef(int32_t b);
66     int32_t nextByte(InputText *det);
67     void parseCharacters(InputText *det);
68 };
69 #endif
70 
71 
72 class CharsetRecog_sbcs : public CharsetRecognizer
73 {
74 public:
75     CharsetRecog_sbcs();
76     virtual ~CharsetRecog_sbcs();
77     virtual const char *getName() const = 0;
78     virtual UBool match(InputText *det, CharsetMatch *results) const = 0;
79     virtual int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const;
80 };
81 
82 class CharsetRecog_8859_1 : public CharsetRecog_sbcs
83 {
84 public:
85     virtual ~CharsetRecog_8859_1();
86     const char *getName() const;
87     virtual UBool match(InputText *det, CharsetMatch *results) const;
88 };
89 
90 class CharsetRecog_8859_2 : public CharsetRecog_sbcs
91 {
92 public:
93     virtual ~CharsetRecog_8859_2();
94     const char *getName() const;
95     virtual UBool match(InputText *det, CharsetMatch *results) const;
96 };
97 
98 class CharsetRecog_8859_5 : public CharsetRecog_sbcs
99 {
100 public:
101     virtual ~CharsetRecog_8859_5();
102     const char *getName() const;
103 };
104 
105 class CharsetRecog_8859_6 : public CharsetRecog_sbcs
106 {
107 public:
108     virtual ~CharsetRecog_8859_6();
109 
110     const char *getName() const;
111 };
112 
113 class CharsetRecog_8859_7 : public CharsetRecog_sbcs
114 {
115 public:
116     virtual ~CharsetRecog_8859_7();
117 
118     const char *getName() const;
119 };
120 
121 class CharsetRecog_8859_8 : public CharsetRecog_sbcs
122 {
123 public:
124     virtual ~CharsetRecog_8859_8();
125 
126     virtual const char *getName() const;
127 };
128 
129 class CharsetRecog_8859_9 : public CharsetRecog_sbcs
130 {
131 public:
132     virtual ~CharsetRecog_8859_9();
133 
134     const char *getName() const;
135 };
136 
137 
138 
139 class CharsetRecog_8859_5_ru : public CharsetRecog_8859_5
140 {
141 public:
142     virtual ~CharsetRecog_8859_5_ru();
143 
144     const char *getLanguage() const;
145 
146     virtual UBool match(InputText *det, CharsetMatch *results) const;
147 };
148 
149 class CharsetRecog_8859_6_ar : public CharsetRecog_8859_6
150 {
151 public:
152     virtual ~CharsetRecog_8859_6_ar();
153 
154     const char *getLanguage() const;
155 
156     virtual UBool match(InputText *det, CharsetMatch *results) const;
157 };
158 
159 class CharsetRecog_8859_7_el : public CharsetRecog_8859_7
160 {
161 public:
162     virtual ~CharsetRecog_8859_7_el();
163 
164     const char *getLanguage() const;
165 
166     virtual UBool match(InputText *det, CharsetMatch *results) const;
167 };
168 
169 class CharsetRecog_8859_8_I_he : public CharsetRecog_8859_8
170 {
171 public:
172     virtual ~CharsetRecog_8859_8_I_he();
173 
174     const char *getName() const;
175 
176     const char *getLanguage() const;
177 
178     virtual UBool match(InputText *det, CharsetMatch *results) const;
179 };
180 
181 class CharsetRecog_8859_8_he : public CharsetRecog_8859_8
182 {
183 public:
184     virtual ~CharsetRecog_8859_8_he ();
185 
186     const char *getLanguage() const;
187 
188     virtual UBool match(InputText *det, CharsetMatch *results) const;
189 };
190 
191 class CharsetRecog_8859_9_tr : public CharsetRecog_8859_9
192 {
193 public:
194     virtual ~CharsetRecog_8859_9_tr ();
195 
196     const char *getLanguage() const;
197 
198     virtual UBool match(InputText *det, CharsetMatch *results) const;
199 };
200 
201 class CharsetRecog_windows_1256 : public CharsetRecog_sbcs
202 {
203 public:
204     virtual ~CharsetRecog_windows_1256();
205 
206     const char *getName() const;
207 
208     const char *getLanguage() const;
209 
210     virtual UBool match(InputText *det, CharsetMatch *results) const;
211 };
212 
213 class CharsetRecog_windows_1251 : public CharsetRecog_sbcs
214 {
215 public:
216     virtual ~CharsetRecog_windows_1251();
217 
218     const char *getName() const;
219 
220     const char *getLanguage() const;
221 
222     virtual UBool match(InputText *det, CharsetMatch *results) const;
223 };
224 
225 
226 class CharsetRecog_KOI8_R : public CharsetRecog_sbcs
227 {
228 public:
229     virtual ~CharsetRecog_KOI8_R();
230 
231     const char *getName() const;
232 
233     const char *getLanguage() const;
234 
235     virtual UBool match(InputText *det, CharsetMatch *results) const;
236 };
237 
238 #if !UCONFIG_ONLY_HTML_CONVERSION
239 class CharsetRecog_IBM424_he : public CharsetRecog_sbcs
240 {
241 public:
242     virtual ~CharsetRecog_IBM424_he();
243 
244     const char *getLanguage() const;
245 };
246 
247 class CharsetRecog_IBM424_he_rtl : public CharsetRecog_IBM424_he {
248 public:
249     virtual ~CharsetRecog_IBM424_he_rtl();
250 
251     const char *getName() const;
252 
253     virtual UBool match(InputText *det, CharsetMatch *results) const;
254 };
255 
256 class CharsetRecog_IBM424_he_ltr : public CharsetRecog_IBM424_he {
257     virtual ~CharsetRecog_IBM424_he_ltr();
258 
259     const char *getName() const;
260 
261     virtual UBool match(InputText *det, CharsetMatch *results) const;
262 };
263 
264 class CharsetRecog_IBM420_ar : public CharsetRecog_sbcs
265 {
266 public:
267     virtual ~CharsetRecog_IBM420_ar();
268 
269     const char *getLanguage() const;
270 	int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const;
271 
272 };
273 
274 class CharsetRecog_IBM420_ar_rtl : public CharsetRecog_IBM420_ar {
275 public:
276     virtual ~CharsetRecog_IBM420_ar_rtl();
277 
278     const char *getName() const;
279 
280     virtual UBool match(InputText *det, CharsetMatch *results) const;
281 };
282 
283 class CharsetRecog_IBM420_ar_ltr : public CharsetRecog_IBM420_ar {
284     virtual ~CharsetRecog_IBM420_ar_ltr();
285 
286     const char *getName() const;
287 
288     virtual UBool match(InputText *det, CharsetMatch *results) const;
289 };
290 #endif
291 
292 U_NAMESPACE_END
293 
294 #endif /* !UCONFIG_NO_CONVERSION */
295 #endif /* __CSRSBCS_H */
296