From 69d678787645b2dd7d0cd40db4aa5c538ab13f9b Mon Sep 17 00:00:00 2001 From: Neil Date: Wed, 24 Jun 2020 15:00:50 +1000 Subject: Converting between UTF-8 and current encoding. Allows platform-independent code to be written just to handle Unicode. --- cocoa/ScintillaCocoa.h | 3 +++ cocoa/ScintillaCocoa.mm | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) (limited to 'cocoa') diff --git a/cocoa/ScintillaCocoa.h b/cocoa/ScintillaCocoa.h index b94a30aa2..e75efffef 100644 --- a/cocoa/ScintillaCocoa.h +++ b/cocoa/ScintillaCocoa.h @@ -182,6 +182,9 @@ public: NSPoint GetCaretPosition(); + std::string UTF8FromEncoded(std::string_view encoded) const override; + std::string EncodedFromUTF8(std::string_view utf8) const override; + static sptr_t DirectFunction(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam); NSTimer *timers[tickPlatform+1]; diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index 657651908..e1b11c16a 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -1195,6 +1195,38 @@ NSPoint ScintillaCocoa::GetCaretPosition() { // ------------------------------------------------------------------------------------------------- +std::string ScintillaCocoa::UTF8FromEncoded(std::string_view encoded) const { + if (IsUnicodeMode()) { + return std::string(encoded); + } else { + CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(), + vs.styles[STYLE_DEFAULT].characterSet); + CFStringRef cfsVal = CFStringFromString(encoded.data(), encoded.length(), encoding); + std::string utf = EncodedBytesString(cfsVal, kCFStringEncodingUTF8); + if (cfsVal) + CFRelease(cfsVal); + return utf; + } +} + +// ------------------------------------------------------------------------------------------------- + +std::string ScintillaCocoa::EncodedFromUTF8(std::string_view utf8) const { + if (IsUnicodeMode()) { + return std::string(utf8); + } else { + CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(), + vs.styles[STYLE_DEFAULT].characterSet); + CFStringRef cfsVal = CFStringFromString(utf8.data(), utf8.length(), kCFStringEncodingUTF8); + const std::string sEncoded = EncodedBytesString(cfsVal, encoding); + if (cfsVal) + CFRelease(cfsVal); + return sEncoded; + } +} + +// ------------------------------------------------------------------------------------------------- + #pragma mark Drag /** -- cgit v1.2.3