aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-04-08 10:05:11 +1000
committerNeil <nyamatongwe@gmail.com>2022-04-08 10:05:11 +1000
commit8a44ef9acfda0ec46a541f0be56333eb5cf6b0ff (patch)
tree5a916f02eeb2d7ae00412175458291c9934d585d
parenta1961d248ac5521cea7bd22e4d7e2e203bf2d361 (diff)
downloadscintilla-mirror-8a44ef9acfda0ec46a541f0be56333eb5cf6b0ff.tar.gz
Feature [feature-requests:#1389] Initialize CaseFolderTable to ASCII so
subclasses do not need to call StandardASCII. Avoid some lint warnings.
-rw-r--r--cocoa/ScintillaCocoa.mm2
-rwxr-xr-xgtk/ScintillaGTK.cxx2
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp2
-rw-r--r--src/CaseFolder.cxx34
-rw-r--r--src/CaseFolder.h8
-rw-r--r--src/Editor.cxx10
-rw-r--r--test/unit/testDocument.cxx2
-rw-r--r--win32/ScintillaWin.cxx2
8 files changed, 24 insertions, 38 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index e8723f318..f24157daf 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -567,7 +567,6 @@ class CaseFolderDBCS : public CaseFolderTable {
CFStringEncoding encoding;
public:
explicit CaseFolderDBCS(CFStringEncoding encoding_) : encoding(encoding_) {
- StandardASCII();
}
size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) override {
if ((lenMixed == 1) && (sizeFolded > 0)) {
@@ -606,7 +605,6 @@ std::unique_ptr<CaseFolder> ScintillaCocoa::CaseFolderForEncoding() {
vs.styles[StyleDefault].characterSet);
if (pdoc->dbcsCodePage == 0) {
std::unique_ptr<CaseFolderTable> pcf = std::make_unique<CaseFolderTable>();
- pcf->StandardASCII();
// Only for single byte encodings
for (int i=0x80; i<0x100; i++) {
char sCharacter[2] = "A";
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 877b4763a..6bdc09a7d 100755
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -1220,7 +1220,6 @@ class CaseFolderDBCS : public CaseFolderTable {
const char *charSet;
public:
explicit CaseFolderDBCS(const char *charSet_) noexcept : charSet(charSet_) {
- StandardASCII();
}
size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) override {
if ((lenMixed == 1) && (sizeFolded > 0)) {
@@ -1257,7 +1256,6 @@ std::unique_ptr<CaseFolder> ScintillaGTK::CaseFolderForEncoding() {
if (charSetBuffer) {
if (pdoc->dbcsCodePage == 0) {
std::unique_ptr<CaseFolderTable> pcf = std::make_unique<CaseFolderTable>();
- pcf->StandardASCII();
// Only for single byte encodings
for (int i=0x80; i<0x100; i++) {
char sCharacter[2] = "A";
diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp
index c1276adc1..24c97013e 100644
--- a/qt/ScintillaEditBase/ScintillaQt.cpp
+++ b/qt/ScintillaEditBase/ScintillaQt.cpp
@@ -557,7 +557,6 @@ class CaseFolderDBCS : public CaseFolderTable {
QTextCodec *codec;
public:
explicit CaseFolderDBCS(QTextCodec *codec_) : codec(codec_) {
- StandardASCII();
}
size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) override {
if ((lenMixed == 1) && (sizeFolded > 0)) {
@@ -590,7 +589,6 @@ std::unique_ptr<CaseFolder> ScintillaQt::CaseFolderForEncoding()
if (charSetBuffer) {
if (pdoc->dbcsCodePage == 0) {
std::unique_ptr<CaseFolderTable> pcf = std::make_unique<CaseFolderTable>();
- pcf->StandardASCII();
QTextCodec *codec = QTextCodec::codecForName(charSetBuffer);
// Only for single byte encodings
for (int i=0x80; i<0x100; i++) {
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>();
}
/**
diff --git a/test/unit/testDocument.cxx b/test/unit/testDocument.cxx
index 4a7e20095..7f3d9c6bb 100644
--- a/test/unit/testDocument.cxx
+++ b/test/unit/testDocument.cxx
@@ -95,14 +95,12 @@ struct DocPlus {
// This case folder will not handle many DBCS cases. Scintilla uses platform-specific code for DBCS
// case folding which can not easily be inserted in platform-independent tests.
std::unique_ptr<CaseFolderTable> pcft = std::make_unique<CaseFolderTable>();
- pcft->StandardASCII();
document.SetCaseFolder(std::move(pcft));
}
}
void SetSBCSFoldings(const Folding *foldings, size_t length) {
std::unique_ptr<CaseFolderTable> pcft = std::make_unique<CaseFolderTable>();
- pcft->StandardASCII();
for (size_t block = 0; block < length; block++) {
for (int fold = 0; fold < foldings[block].length; fold++) {
pcft->SetTranslation(foldings[block].from + fold, foldings[block].to + fold);
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 876fa5746..ce9eca9f6 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -2431,7 +2431,6 @@ class CaseFolderDBCS : public CaseFolderTable {
UINT cp;
public:
explicit CaseFolderDBCS(UINT cp_) : cp(cp_) {
- StandardASCII();
}
size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) override {
if ((lenMixed == 1) && (sizeFolded > 0)) {
@@ -2491,7 +2490,6 @@ std::unique_ptr<CaseFolder> ScintillaWin::CaseFolderForEncoding() {
} else {
if (pdoc->dbcsCodePage == 0) {
std::unique_ptr<CaseFolderTable> pcf = std::make_unique<CaseFolderTable>();
- pcf->StandardASCII();
// Only for single byte encodings
for (int i=0x80; i<0x100; i++) {
char sCharacter[2] = "A";