diff options
Diffstat (limited to 'src/core/function/CharsetOperator.cpp')
-rw-r--r-- | src/core/function/CharsetOperator.cpp | 102 |
1 files changed, 6 insertions, 96 deletions
diff --git a/src/core/function/CharsetOperator.cpp b/src/core/function/CharsetOperator.cpp index 40978701..023fcd10 100644 --- a/src/core/function/CharsetOperator.cpp +++ b/src/core/function/CharsetOperator.cpp @@ -28,109 +28,19 @@ #include "core/function/CharsetOperator.h" -#include <unicode/ucnv.h> -#include <unicode/ucsdet.h> -#include <unicode/ustring.h> -#include <unicode/utypes.h> - -#include <cstddef> - #include "core/utils/LogUtils.h" namespace GpgFrontend { -auto CharsetOperator::Detect(const std::string &buffer) +auto CharsetOperator::Detect(const QString &buffer) -> CharsetOperator::CharsetInfo { - const UCharsetMatch *ucm; - UErrorCode status = U_ZERO_ERROR; - UCharsetDetector *csd = ucsdet_open(&status); - - status = U_ZERO_ERROR; - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open charset detector: {}", - u_errorName(status)); - return {"unknown", "unknown", 0}; - } - - status = U_ZERO_ERROR; - ucsdet_setText(csd, buffer.data(), buffer.size(), &status); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to set text to charset detector: {}", - u_errorName(status)); - return {"unknown", "unknown", 0}; - } - - status = U_ZERO_ERROR; - ucm = ucsdet_detect(csd, &status); - - if (U_FAILURE(status) != 0) return {"unknown", "unknown", 0}; - - status = U_ZERO_ERROR; - const char *name = ucsdet_getName(ucm, &status); - if (U_FAILURE(status) != 0) return {"unknown", "unknown", 0}; - - status = U_ZERO_ERROR; - int confidence = ucsdet_getConfidence(ucm, &status); - if (U_FAILURE(status) != 0) return {name, "unknown", 0}; - - status = U_ZERO_ERROR; - const char *language = ucsdet_getLanguage(ucm, &status); - if (U_FAILURE(status) != 0) return {name, "unknown", confidence}; - - GF_CORE_LOG_DEBUG("detected charset: {} {} {}", name, language, confidence); - return {name, language, confidence}; + // TODO + return {"", "", 0}; } -auto CharsetOperator::Convert2Utf8(const std::string &buffer, - std::string &out_buffer, - std::string from_charset_name) -> bool { - UErrorCode status = U_ZERO_ERROR; - const auto from_encode = std::string("utf-8"); - const auto &to_encode = from_charset_name; - - GF_CORE_LOG_DEBUG("Converting buffer: {}", buffer.size()); - - // test if the charset is supported - UConverter *conv = ucnv_open(from_encode.c_str(), &status); - ucnv_close(conv); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open converter: {}, from encode: {}", - u_errorName(status), from_encode); - return false; - } - - // test if the charset is supported - conv = ucnv_open(to_encode.c_str(), &status); - ucnv_close(conv); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open converter: {}, to encode: {}", - u_errorName(status), to_encode); - return false; - } - - status = U_ZERO_ERROR; - int32_t target_limit = 0; - int32_t target_capacity = 0; - - target_capacity = - ucnv_convert(from_encode.c_str(), to_encode.c_str(), nullptr, - target_limit, buffer.data(), buffer.size(), &status); - - if (status == U_BUFFER_OVERFLOW_ERROR) { - status = U_ZERO_ERROR; - out_buffer.clear(); - out_buffer.resize(target_capacity); - ucnv_convert(from_encode.c_str(), to_encode.c_str(), out_buffer.data(), - out_buffer.size(), buffer.data(), buffer.size(), &status); - } - - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to convert to utf-8: {}", u_errorName(status)); - return false; - } - - GF_CORE_LOG_DEBUG("converted buffer: {} bytes", out_buffer.size()); - return true; +auto CharsetOperator::Convert2Utf8(const QString &buffer, QString &out_buffer, + QString from_charset_name) -> bool { + // TODO } } // namespace GpgFrontend
\ No newline at end of file |