From 8a44ef9acfda0ec46a541f0be56333eb5cf6b0ff Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 8 Apr 2022 10:05:11 +1000 Subject: Feature [feature-requests:#1389] Initialize CaseFolderTable to ASCII so subclasses do not need to call StandardASCII. Avoid some lint warnings. --- src/CaseFolder.cxx | 34 ++++++++++++++++------------------ src/CaseFolder.h | 8 +++++++- src/Editor.cxx | 10 +--------- 3 files changed, 24 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/CaseFolder.cxx b/src/CaseFolder.cxx index b5acc5f96..d66df3f4f 100644 --- a/src/CaseFolder.cxx +++ b/src/CaseFolder.cxx @@ -9,53 +9,51 @@ #include #include +#include "CharacterType.h" #include "CaseFolder.h" #include "CaseConvert.h" using namespace Scintilla::Internal; -CaseFolder::~CaseFolder() { +namespace { + +constexpr unsigned char IndexFromChar(char ch) { + return static_cast(ch); +} + } CaseFolderTable::CaseFolderTable() noexcept : mapping{} { - for (size_t iChar=0; iChar(iChar); - } + StandardASCII(); } 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(mixed[i])]; - } - return lenMixed; } + for (size_t i=0; i(ch)] = chTranslation; + mapping[IndexFromChar(ch)] = chTranslation; } void CaseFolderTable::StandardASCII() noexcept { - for (size_t iChar=0; iChar= 'A' && iChar <= 'Z') { - mapping[iChar] = static_cast(iChar - 'A' + 'a'); - } else { - mapping[iChar] = static_cast(iChar); - } + for (size_t iChar=0; iChar(MakeLowerCase(iChar)); } } CaseFolderUnicode::CaseFolderUnicode() { - StandardASCII(); converter = ConverterFor(CaseConversion::fold); } 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(mixed[0])]; + folded[0] = mapping[IndexFromChar(mixed[0])]; return 1; } else { return converter->CaseConvertString(folded, sizeFolded, mixed, lenMixed); diff --git a/src/CaseFolder.h b/src/CaseFolder.h index 45abe4d8f..4f16ed69c 100644 --- a/src/CaseFolder.h +++ b/src/CaseFolder.h @@ -12,7 +12,13 @@ namespace Scintilla::Internal { class CaseFolder { public: - virtual ~CaseFolder(); + CaseFolder() = default; + // Deleted so CaseFolder objects can not be copied. + CaseFolder(const CaseFolder &source) = delete; + CaseFolder(CaseFolder &&) = delete; + CaseFolder &operator=(const CaseFolder &) = delete; + CaseFolder &operator=(CaseFolder &&) = delete; + virtual ~CaseFolder() = default; virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) = 0; }; diff --git a/src/Editor.cxx b/src/Editor.cxx index d5e6a92ff..6ff0f2d97 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -4084,17 +4084,9 @@ void Editor::Indent(bool forwards) { ContainerNeedsUpdate(Update::Selection); } -class CaseFolderASCII : public CaseFolderTable { -public: - CaseFolderASCII() noexcept { - StandardASCII(); - } -}; - - std::unique_ptr Editor::CaseFolderForEncoding() { // Simple default that only maps ASCII upper case to lower case. - return std::make_unique(); + return std::make_unique(); } /** -- cgit v1.2.3