diff options
Diffstat (limited to 'qt')
-rw-r--r-- | qt/ScintillaEdit/ScintillaDocument.cpp | 1 | ||||
-rw-r--r-- | qt/ScintillaEdit/ScintillaEdit.pro | 2 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.pro | 5 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 45 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.h | 2 |
5 files changed, 20 insertions, 35 deletions
diff --git a/qt/ScintillaEdit/ScintillaDocument.cpp b/qt/ScintillaEdit/ScintillaDocument.cpp index 801f6a385..6240a7699 100644 --- a/qt/ScintillaEdit/ScintillaDocument.cpp +++ b/qt/ScintillaEdit/ScintillaDocument.cpp @@ -25,6 +25,7 @@ #include "ViewStyle.h" #include "CharClassify.h" #include "Decoration.h" +#include "CaseFolder.h" #include "Document.h" class WatcherHelper : public DocWatcher { diff --git a/qt/ScintillaEdit/ScintillaEdit.pro b/qt/ScintillaEdit/ScintillaEdit.pro index 8c8dda39e..65aa9b2ae 100644 --- a/qt/ScintillaEdit/ScintillaEdit.pro +++ b/qt/ScintillaEdit/ScintillaEdit.pro @@ -40,6 +40,8 @@ SOURCES += \ ../../src/CharClassify.cxx \ ../../src/CellBuffer.cxx \ ../../src/Catalogue.cxx \ + ../../src/CaseFolder.cxx \ + ../../src/CaseConvert.cxx \ ../../src/CallTip.cxx \ ../../src/AutoComplete.cxx \ ../../lexlib/WordList.cxx \ diff --git a/qt/ScintillaEditBase/ScintillaEditBase.pro b/qt/ScintillaEditBase/ScintillaEditBase.pro index 9aa5cd41a..df5e4adbc 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.pro +++ b/qt/ScintillaEditBase/ScintillaEditBase.pro @@ -38,6 +38,8 @@ SOURCES += \ ../../src/CharClassify.cxx \ ../../src/CellBuffer.cxx \ ../../src/Catalogue.cxx \ + ../../src/CaseFolder.cxx \ + ../../src/CaseConvert.cxx \ ../../src/CallTip.cxx \ ../../src/AutoComplete.cxx \ ../../lexlib/WordList.cxx \ @@ -59,6 +61,7 @@ HEADERS += \ ../../src/XPM.h \ ../../src/ViewStyle.h \ ../../src/UniConversion.h \ + ../../src/UnicodeFromUTF8.h \ ../../src/Style.h \ ../../src/SplitVector.h \ ../../src/Selection.h \ @@ -80,6 +83,8 @@ HEADERS += \ ../../src/CharClassify.h \ ../../src/CellBuffer.h \ ../../src/Catalogue.h \ + ../../src/CaseFolder.h \ + ../../src/CaseConvert.h \ ../../src/CallTip.h \ ../../src/AutoComplete.h \ ../../include/Scintilla.h \ diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp index 4d0d62082..a956ff714 100644 --- a/qt/ScintillaEditBase/ScintillaQt.cpp +++ b/qt/ScintillaEditBase/ScintillaQt.cpp @@ -488,30 +488,6 @@ QByteArray ScintillaQt::BytesForDocument(const QString &text) const } -class CaseFolderUTF8 : public CaseFolderTable { -public: - CaseFolderUTF8() { - StandardASCII(); - } - virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) { - if ((lenMixed == 1) && (sizeFolded > 0)) { - folded[0] = mapping[static_cast<unsigned char>(mixed[0])]; - return 1; - } else { - QString su = QString::fromUtf8(mixed, lenMixed); - QString suFolded = su.toCaseFolded(); - QByteArray bytesFolded = suFolded.toUtf8(); - if (bytesFolded.length() < static_cast<int>(sizeFolded)) { - memcpy(folded, bytesFolded, bytesFolded.length()); - return bytesFolded.length(); - } else { - folded[0] = '\0'; - return 0; - } - } - } -}; - class CaseFolderDBCS : public CaseFolderTable { QTextCodec *codec; public: @@ -541,7 +517,7 @@ public: CaseFolder *ScintillaQt::CaseFolderForEncoding() { if (pdoc->dbcsCodePage == SC_CP_UTF8) { - return new CaseFolderUTF8(); + return new CaseFolderUnicode(); } else { const char *charSetBuffer = CharacterSetIDOfDocument(); if (charSetBuffer) { @@ -571,21 +547,20 @@ CaseFolder *ScintillaQt::CaseFolderForEncoding() std::string ScintillaQt::CaseMapString(const std::string &s, int caseMapping) { - if (s.size() == 0) - return std::string(); - - if (caseMapping == cmSame) + if ((s.size() == 0) || (caseMapping == cmSame)) return s; - QTextCodec *codec = 0; - QString text; if (IsUnicodeMode()) { - text = QString::fromUtf8(s.c_str(), s.length()); - } else { - codec = QTextCodec::codecForName(CharacterSetIDOfDocument()); - text = codec->toUnicode(s.c_str(), s.length()); + std::string retMapped(s.length() * maxExpansionCaseConversion, 0); + size_t lenMapped = CaseConvertString(&retMapped[0], retMapped.length(), s.c_str(), s.length(), + (caseMapping == cmUpper) ? CaseConversionUpper : CaseConversionLower); + retMapped.resize(lenMapped); + return retMapped; } + QTextCodec *codec = QTextCodec::codecForName(CharacterSetIDOfDocument()); + QString text = codec->toUnicode(s.c_str(), s.length()); + if (caseMapping == cmUpper) { text = text.toUpper(); } else { diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h index f7f7fe3ee..d3c5be594 100644 --- a/qt/ScintillaEditBase/ScintillaQt.h +++ b/qt/ScintillaEditBase/ScintillaQt.h @@ -39,11 +39,13 @@ #include "ViewStyle.h" #include "CharClassify.h" #include "Decoration.h" +#include "CaseFolder.h" #include "Document.h" #include "Selection.h" #include "PositionCache.h" #include "Editor.h" #include "ScintillaBase.h" +#include "CaseConvert.h" #ifdef SCI_LEXER #include "SciLexer.h" |