diff options
author | XhmikosR <xhmikosr@users.sourceforge.net> | 2013-07-15 18:57:42 +0300 |
---|---|---|
committer | XhmikosR <xhmikosr@users.sourceforge.net> | 2013-07-18 05:20:16 +0300 |
commit | 4064119f44e17baf01cc4a00a5062d173965e86c (patch) | |
tree | a6fab3caacb3d26c53bd472a1add87cf7895e58c /scintilla/src/CaseFolder.cxx | |
parent | 12e4cc85f793ec12c58074359bc53724dbf43ff3 (diff) | |
download | notepad2-mod-4064119f44e17baf01cc4a00a5062d173965e86c.zip notepad2-mod-4064119f44e17baf01cc4a00a5062d173965e86c.tar.gz notepad2-mod-4064119f44e17baf01cc4a00a5062d173965e86c.tar.bz2 |
update Scintilla to v3.3.4 [e074c3]
Diffstat (limited to 'scintilla/src/CaseFolder.cxx')
-rw-r--r-- | scintilla/src/CaseFolder.cxx | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/scintilla/src/CaseFolder.cxx b/scintilla/src/CaseFolder.cxx new file mode 100644 index 0000000..44a94da --- /dev/null +++ b/scintilla/src/CaseFolder.cxx @@ -0,0 +1,68 @@ +// Scintilla source code edit control +/** @file CaseFolder.cxx + ** Classes for case folding. + **/ +// Copyright 1998-2013 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#include <vector> +#include <algorithm> + +#include "CaseConvert.h" +#include "UniConversion.h" +#include "CaseFolder.h" + +#ifdef SCI_NAMESPACE +using namespace Scintilla; +#endif + +CaseFolder::~CaseFolder() { +} + +CaseFolderTable::CaseFolderTable() { + for (size_t iChar=0; iChar<sizeof(mapping); iChar++) { + mapping[iChar] = static_cast<char>(iChar); + } +} + +CaseFolderTable::~CaseFolderTable() { +} + +size_t CaseFolderTable::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) { + if (lenMixed > sizeFolded) { + return 0; + } else { + for (size_t i=0; i<lenMixed; i++) { + folded[i] = mapping[static_cast<unsigned char>(mixed[i])]; + } + return lenMixed; + } +} + +void CaseFolderTable::SetTranslation(char ch, char chTranslation) { + mapping[static_cast<unsigned char>(ch)] = chTranslation; +} + +void CaseFolderTable::StandardASCII() { + for (size_t iChar=0; iChar<sizeof(mapping); iChar++) { + if (iChar >= 'A' && iChar <= 'Z') { + mapping[iChar] = static_cast<char>(iChar - 'A' + 'a'); + } else { + mapping[iChar] = static_cast<char>(iChar); + } + } +} + +CaseFolderUnicode::CaseFolderUnicode() { + StandardASCII(); + converter = ConverterFor(CaseConversionFold); +} + +size_t CaseFolderUnicode::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 { + return converter->CaseConvertString(folded, sizeFolded, mixed, lenMixed); + } +} |