// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** */ #include "unicode/utypes.h" #if !UCONFIG_NO_CONVERSION #include "unicode/ucsdet.h" #include "csdetect.h" #include "csmatch.h" #include "csrsbcs.h" #include "csrmbcs.h" #include "csrutf8.h" #include "csrucode.h" #include "csr2022.h" #include "cmemory.h" U_NAMESPACE_USE #define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) #define DELETE_ARRAY(array) uprv_free((void *) (array)) U_CDECL_BEGIN U_CAPI UCharsetDetector * U_EXPORT2 ucsdet_open(UErrorCode *status) { if(U_FAILURE(*status)) { return 0; } CharsetDetector* csd = new CharsetDetector(*status); if (U_FAILURE(*status)) { delete csd; csd = NULL; } return (UCharsetDetector *) csd; } U_CAPI void U_EXPORT2 ucsdet_close(UCharsetDetector *ucsd) { CharsetDetector *csd = (CharsetDetector *) ucsd; delete csd; } U_CAPI void U_EXPORT2 ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status) { if(U_FAILURE(*status)) { return; } ((CharsetDetector *) ucsd)->setText(textIn, len); } U_CAPI const char * U_EXPORT2 ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status) { if(U_FAILURE(*status)) { return NULL; } return ((CharsetMatch *) ucsm)->getName(); } U_CAPI int32_t U_EXPORT2 ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status) { if(U_FAILURE(*status)) { return 0; } return ((CharsetMatch *) ucsm)->getConfidence(); } U_CAPI const char * U_EXPORT2 ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status) { if(U_FAILURE(*status)) { return NULL; } return ((CharsetMatch *) ucsm)->getLanguage(); } U_CAPI const UCharsetMatch * U_EXPORT2 ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status) { if(U_FAILURE(*status)) { return NULL; } return (const UCharsetMatch *) ((CharsetDetector *) ucsd)->detect(*status); } U_CAPI void U_EXPORT2 ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status) { if(U_FAILURE(*status)) { return; } ((CharsetDetector *) ucsd)->setDeclaredEncoding(encoding,length); } U_CAPI const UCharsetMatch** ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *maxMatchesFound, UErrorCode *status) { if(U_FAILURE(*status)) { return NULL; } CharsetDetector *csd = (CharsetDetector *) ucsd; return (const UCharsetMatch**)csd->detectAll(*maxMatchesFound,*status); } // U_CAPI const char * U_EXPORT2 // ucsdet_getDetectableCharsetName(const UCharsetDetector *csd, int32_t index, UErrorCode *status) // { // if(U_FAILURE(*status)) { // return 0; // } // return csd->getCharsetName(index,*status); // } // U_CAPI int32_t U_EXPORT2 // ucsdet_getDetectableCharsetsCount(const UCharsetDetector *csd, UErrorCode *status) // { // if(U_FAILURE(*status)) { // return -1; // } // return UCharsetDetector::getDetectableCount(); // } U_CAPI UBool U_EXPORT2 ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd) { // todo: could use an error return... if (ucsd == NULL) { return FALSE; } return ((CharsetDetector *) ucsd)->getStripTagsFlag(); } U_CAPI UBool U_EXPORT2 ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter) { // todo: could use an error return... if (ucsd == NULL) { return FALSE; } CharsetDetector *csd = (CharsetDetector *) ucsd; UBool prev = csd->getStripTagsFlag(); csd->setStripTagsFlag(filter); return prev; } U_CAPI int32_t U_EXPORT2 ucsdet_getUChars(const UCharsetMatch *ucsm, UChar *buf, int32_t cap, UErrorCode *status) { if(U_FAILURE(*status)) { return 0; } return ((CharsetMatch *) ucsm)->getUChars(buf, cap, status); } U_CAPI void U_EXPORT2 ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool enabled, UErrorCode *status) { ((CharsetDetector *)ucsd)->setDetectableCharset(encoding, enabled, *status); } U_CAPI UEnumeration * U_EXPORT2 ucsdet_getAllDetectableCharsets(const UCharsetDetector * /*ucsd*/, UErrorCode *status) { return CharsetDetector::getAllDetectableCharsets(*status); } U_DRAFT UEnumeration * U_EXPORT2 ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status) { return ((CharsetDetector *)ucsd)->getDetectableCharsets(*status); } U_CDECL_END #endif