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-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 ********************************************************************************
8 */
9
10#include "unicode/utypes.h"
11
12#if !UCONFIG_NO_CONVERSION
13#include "unicode/ucsdet.h"
14#include "csdetect.h"
15#include "csmatch.h"
16#include "csrsbcs.h"
17#include "csrmbcs.h"
18#include "csrutf8.h"
19#include "csrucode.h"
20#include "csr2022.h"
21
22#include "cmemory.h"
23
24U_NAMESPACE_USE
25
26#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type))
27#define DELETE_ARRAY(array) uprv_free((void *) (array))
28
29U_CDECL_BEGIN
30
31U_CAPI UCharsetDetector * U_EXPORT2
32ucsdet_open(UErrorCode *status)
33{
34 if(U_FAILURE(*status)) {
35 return 0;
36 }
37
38 CharsetDetector* csd = new CharsetDetector(*status);
39
40 if (U_FAILURE(*status)) {
41 delete csd;
42 csd = NULL;
43 }
44
45 return (UCharsetDetector *) csd;
46}
47
48U_CAPI void U_EXPORT2
49ucsdet_close(UCharsetDetector *ucsd)
50{
51 CharsetDetector *csd = (CharsetDetector *) ucsd;
52 delete csd;
53}
54
55U_CAPI void U_EXPORT2
56ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status)
57{
58 if(U_FAILURE(*status)) {
59 return;
60 }
61
62 ((CharsetDetector *) ucsd)->setText(textIn, len);
63}
64
65U_CAPI const char * U_EXPORT2
66ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status)
67{
68 if(U_FAILURE(*status)) {
69 return NULL;
70 }
71
72 return ((CharsetMatch *) ucsm)->getName();
73}
74
75U_CAPI int32_t U_EXPORT2
76ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status)
77{
78 if(U_FAILURE(*status)) {
79 return 0;
80 }
81
82 return ((CharsetMatch *) ucsm)->getConfidence();
83}
84
85U_CAPI const char * U_EXPORT2
86ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status)
87{
88 if(U_FAILURE(*status)) {
89 return NULL;
90 }
91
92 return ((CharsetMatch *) ucsm)->getLanguage();
93}
94
95U_CAPI const UCharsetMatch * U_EXPORT2
96ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status)
97{
98 if(U_FAILURE(*status)) {
99 return NULL;
100 }
101
102 return (const UCharsetMatch *) ((CharsetDetector *) ucsd)->detect(*status);
103}
104
105U_CAPI void U_EXPORT2
106ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status)
107{
108 if(U_FAILURE(*status)) {
109 return;
110 }
111
112 ((CharsetDetector *) ucsd)->setDeclaredEncoding(encoding,length);
113}
114
115U_CAPI const UCharsetMatch**
116ucsdet_detectAll(UCharsetDetector *ucsd,
117 int32_t *maxMatchesFound, UErrorCode *status)
118{
119 if(U_FAILURE(*status)) {
120 return NULL;
121 }
122
123 CharsetDetector *csd = (CharsetDetector *) ucsd;
124
125 return (const UCharsetMatch**)csd->detectAll(*maxMatchesFound,*status);
126}
127
128// U_CAPI const char * U_EXPORT2
129// ucsdet_getDetectableCharsetName(const UCharsetDetector *csd, int32_t index, UErrorCode *status)
130// {
131// if(U_FAILURE(*status)) {
132// return 0;
133// }
134// return csd->getCharsetName(index,*status);
135// }
136
137// U_CAPI int32_t U_EXPORT2
138// ucsdet_getDetectableCharsetsCount(const UCharsetDetector *csd, UErrorCode *status)
139// {
140// if(U_FAILURE(*status)) {
141// return -1;
142// }
143// return UCharsetDetector::getDetectableCount();
144// }
145
146U_CAPI UBool U_EXPORT2
147ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd)
148{
149 // todo: could use an error return...
150 if (ucsd == NULL) {
151 return FALSE;
152 }
153
154 return ((CharsetDetector *) ucsd)->getStripTagsFlag();
155}
156
157U_CAPI UBool U_EXPORT2
158ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter)
159{
160 // todo: could use an error return...
161 if (ucsd == NULL) {
162 return FALSE;
163 }
164
165 CharsetDetector *csd = (CharsetDetector *) ucsd;
166 UBool prev = csd->getStripTagsFlag();
167
168 csd->setStripTagsFlag(filter);
169
170 return prev;
171}
172
173U_CAPI int32_t U_EXPORT2
174ucsdet_getUChars(const UCharsetMatch *ucsm,
175 UChar *buf, int32_t cap, UErrorCode *status)
176{
177 if(U_FAILURE(*status)) {
178 return 0;
179 }
180
181 return ((CharsetMatch *) ucsm)->getUChars(buf, cap, status);
182}
183
184U_CAPI void U_EXPORT2
185ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool enabled, UErrorCode *status)
186{
187 ((CharsetDetector *)ucsd)->setDetectableCharset(encoding, enabled, *status);
188}
189
190U_CAPI UEnumeration * U_EXPORT2
191ucsdet_getAllDetectableCharsets(const UCharsetDetector * /*ucsd*/, UErrorCode *status)
192{
193 return CharsetDetector::getAllDetectableCharsets(*status);
194}
195
196U_DRAFT UEnumeration * U_EXPORT2
197ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status)
198{
199 return ((CharsetDetector *)ucsd)->getDetectableCharsets(*status);
200}
201
202U_CDECL_END
203
204
205#endif
206