aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt/ScintillaEditBase
diff options
context:
space:
mode:
Diffstat (limited to 'qt/ScintillaEditBase')
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp22
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.h2
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;