diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CaseFolder.cxx | 34 | ||||
| -rw-r--r-- | src/CaseFolder.h | 8 | ||||
| -rw-r--r-- | src/Editor.cxx | 10 | 
3 files changed, 24 insertions, 28 deletions
| 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 <vector>  #include <algorithm> +#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<unsigned char>(ch); +} +  }  CaseFolderTable::CaseFolderTable() noexcept : mapping{}  { -	for (size_t iChar=0; iChar<sizeof(mapping); iChar++) { -		mapping[iChar] = static_cast<char>(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<lenMixed; i++) { -			folded[i] = mapping[static_cast<unsigned char>(mixed[i])]; -		} -		return lenMixed;  	} +	for (size_t i=0; i<lenMixed; i++) { +		folded[i] = mapping[IndexFromChar(mixed[i])]; +	} +	return lenMixed;  }  void CaseFolderTable::SetTranslation(char ch, char chTranslation) noexcept { -	mapping[static_cast<unsigned char>(ch)] = chTranslation; +	mapping[IndexFromChar(ch)] = chTranslation;  }  void CaseFolderTable::StandardASCII() noexcept { -	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); -		} +	for (size_t iChar=0; iChar<std::size(mapping); iChar++) { +		mapping[iChar] = static_cast<char>(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<unsigned char>(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<CaseFolder> Editor::CaseFolderForEncoding() {  	// Simple default that only maps ASCII upper case to lower case. -	return std::make_unique<CaseFolderASCII>(); +	return std::make_unique<CaseFolderTable>();  }  /** | 
