diff options
Diffstat (limited to 'qt')
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 22 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp index 374027bd0..761ff78bb 100644 --- a/qt/ScintillaEditBase/ScintillaQt.cpp +++ b/qt/ScintillaEditBase/ScintillaQt.cpp @@ -250,6 +250,28 @@ bool ScintillaQt::ValidCodePage(int codePage) const || codePage == 1361; } +std::string ScintillaQt::UTF8FromEncoded(std::string_view encoded) const { + if (IsUnicodeMode()) { + return std::string(encoded); + } else { + QTextCodec *codec = QTextCodec::codecForName( + CharacterSetID(CharacterSetOfDocument())); + QString text = codec->toUnicode(encoded.data(), static_cast<int>(encoded.length())); + return text.toStdString(); + } +} + +std::string ScintillaQt::EncodedFromUTF8(std::string_view utf8) const { + if (IsUnicodeMode()) { + return std::string(utf8); + } else { + QString text = QString::fromUtf8(utf8.data(), static_cast<int>(utf8.length())); + QTextCodec *codec = QTextCodec::codecForName( + CharacterSetID(CharacterSetOfDocument())); + QByteArray ba = codec->fromUnicode(text); + return std::string(ba.data(), ba.length()); + } +} void ScintillaQt::ScrollText(Sci::Line linesToMove) { diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h index 5a6f9efa1..64268aa75 100644 --- a/qt/ScintillaEditBase/ScintillaQt.h +++ b/qt/ScintillaEditBase/ScintillaQt.h @@ -104,6 +104,8 @@ private: void Finalise() override; bool DragThreshold(Point ptStart, Point ptNow) override; bool ValidCodePage(int codePage) const override; + std::string UTF8FromEncoded(std::string_view encoded) const override; + std::string EncodedFromUTF8(std::string_view utf8) const override; private: void ScrollText(Sci::Line linesToMove) override; |