Add more unicode APIs

This commit is contained in:
2026-04-07 07:59:46 +10:00
parent 6d792ee4c0
commit cb3e856a6e
5 changed files with 195 additions and 1 deletions

View File

@@ -926,6 +926,74 @@ extern "C" ANSULT_API int ANSConvertUnicodeEscapesToUTF8(const char* escapedStr,
catch (...) { return -1; }
}
extern "C" ANSULT_API int ANSConvertUTF8ToUnicodeEscapes(const char* utf8Str, LStrHandle result) {
try {
if (!utf8Str || !result) return -1;
int len = (int)strlen(utf8Str);
if (len == 0) return 0;
std::string escaped = ANSCENTER::ANSUtilities::ConvertUTF8ToUnicodeEscapes(utf8Str);
if (escaped.empty()) return 0;
int size = static_cast<int>(escaped.size());
MgErr error = DSSetHandleSize(result, sizeof(int32) + size * sizeof(uChar));
if (error != noErr) return -2;
(*result)->cnt = size;
memcpy((*result)->str, escaped.data(), size);
return 1;
}
catch (...) { return -1; }
}
extern "C" ANSULT_API int ANSDoubleEscapeUnicode(const char* str, LStrHandle result) {
try {
if (!str || !result) return -1;
int len = (int)strlen(str);
if (len == 0) return 0;
std::string escaped = ANSCENTER::ANSUtilities::DoubleEscapeUnicode(str);
if (escaped.empty()) return 0;
int size = static_cast<int>(escaped.size());
MgErr error = DSSetHandleSize(result, sizeof(int32) + size * sizeof(uChar));
if (error != noErr) return -2;
(*result)->cnt = size;
memcpy((*result)->str, escaped.data(), size);
return 1;
}
catch (...) { return -1; }
}
extern "C" ANSULT_API int ANSConvertUTF8ToDoubleEscapedUnicode(const char* utf8Str, LStrHandle result) {
try {
if (!utf8Str || !result) return -1;
int len = (int)strlen(utf8Str);
if (len == 0) return 0;
std::string escaped = ANSCENTER::ANSUtilities::ConvertUTF8ToDoubleEscapedUnicode(utf8Str);
if (escaped.empty()) return 0;
int size = static_cast<int>(escaped.size());
MgErr error = DSSetHandleSize(result, sizeof(int32) + size * sizeof(uChar));
if (error != noErr) return -2;
(*result)->cnt = size;
memcpy((*result)->str, escaped.data(), size);
return 1;
}
catch (...) { return -1; }
}
extern "C" ANSULT_API int ANSUnescapeDoubleEscapedUnicode(const char* str, LStrHandle result) {
try {
if (!str || !result) return -1;
int len = (int)strlen(str);
if (len == 0) return 0;
std::string unescaped = ANSCENTER::ANSUtilities::UnescapeDoubleEscapedUnicode(str);
if (unescaped.empty()) return 0;
int size = static_cast<int>(unescaped.size());
MgErr error = DSSetHandleSize(result, sizeof(int32) + size * sizeof(uChar));
if (error != noErr) return -2;
(*result)->cnt = size;
memcpy((*result)->str, unescaped.data(), size);
return 1;
}
catch (...) { return -1; }
}
// AWSS3
extern "C" ANSULT_API int CreateANSAWSHandle(ANSCENTER::ANSAWSS3** Handle, const char* licenseKey) {
if (Handle == nullptr || licenseKey == nullptr) return 0;