diff options
| author | Neil <nyamatongwe@gmail.com> | 2013-07-11 10:43:40 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2013-07-11 10:43:40 +1000 | 
| commit | dad0081820141b9823f8a4ad633b28515f055f1f (patch) | |
| tree | 823e4cc29a3fa9a524aa308bb824cf5406c7b47f /qt/ScintillaEditBase/ScintillaQt.cpp | |
| parent | 431004e5efda4bddbeb265db3d0e28fda828a808 (diff) | |
| download | scintilla-mirror-dad0081820141b9823f8a4ad633b28515f055f1f.tar.gz | |
Include case conversion data in Scintilla so that all platforms will perform
case conversion of Unicode text in accordance with Unicode.
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaQt.cpp')
| -rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 45 | 
1 files changed, 10 insertions, 35 deletions
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 {  | 
