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