Fix typos
[TortoiseGit.git] / ext / scintilla / src / CaseFolder.cxx
blob7c762e794be8066697f7ee76df9f5f14487c2759
1 // Scintilla source code edit control
2 /** @file CaseFolder.cxx
3 ** Classes for case folding.
4 **/
5 // Copyright 1998-2013 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
8 #include <stdexcept>
9 #include <vector>
10 #include <algorithm>
12 #include "CharacterType.h"
13 #include "CaseFolder.h"
14 #include "CaseConvert.h"
16 using namespace Scintilla::Internal;
18 namespace {
20 constexpr unsigned char IndexFromChar(char ch) {
21 return static_cast<unsigned char>(ch);
26 CaseFolderTable::CaseFolderTable() noexcept : mapping{} {
27 StandardASCII();
30 size_t CaseFolderTable::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
31 if (lenMixed > sizeFolded) {
32 return 0;
34 for (size_t i=0; i<lenMixed; i++) {
35 folded[i] = mapping[IndexFromChar(mixed[i])];
37 return lenMixed;
40 void CaseFolderTable::SetTranslation(char ch, char chTranslation) noexcept {
41 mapping[IndexFromChar(ch)] = chTranslation;
44 void CaseFolderTable::StandardASCII() noexcept {
45 for (size_t iChar=0; iChar<std::size(mapping); iChar++) {
46 mapping[iChar] = static_cast<char>(MakeLowerCase(iChar));
50 CaseFolderUnicode::CaseFolderUnicode() {
51 converter = ConverterFor(CaseConversion::fold);
54 size_t CaseFolderUnicode::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
55 if ((lenMixed == 1) && (sizeFolded > 0)) {
56 folded[0] = mapping[IndexFromChar(mixed[0])];
57 return 1;
58 } else {
59 return converter->CaseConvertString(folded, sizeFolded, mixed, lenMixed);