aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt
diff options
context:
space:
mode:
Diffstat (limited to 'qt')
-rw-r--r--qt/ScintillaEdit/ScintillaDocument.cpp1
-rw-r--r--qt/ScintillaEdit/ScintillaEdit.pro2
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.pro5
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp45
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.h2
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"