aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx309
1 files changed, 158 insertions, 151 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index c8f474eaa..70a711028 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -26,11 +26,11 @@
#include <regex>
#endif
-#include "Debugging.h"
-
+#include "ScintillaTypes.h"
#include "ILoader.h"
#include "ILexer.h"
-#include "Scintilla.h"
+
+#include "Debugging.h"
#include "CharacterType.h"
#include "CharacterCategoryMap.h"
@@ -49,6 +49,7 @@
#include "ElapsedPeriod.h"
using namespace Scintilla;
+using namespace Scintilla::Internal;
void LexInterface::Colourise(Sci::Position start, Sci::Position end) {
if (pdoc && instance && !performingStyle) {
@@ -78,11 +79,11 @@ void LexInterface::Colourise(Sci::Position start, Sci::Position end) {
}
}
-int LexInterface::LineEndTypesSupported() {
+LineEndType LexInterface::LineEndTypesSupported() {
if (instance) {
- return instance->LineEndTypesSupported();
+ return static_cast<LineEndType>(instance->LineEndTypesSupported());
}
- return 0;
+ return LineEndType::Default;
}
ActionDuration::ActionDuration(double duration_, double minDuration_, double maxDuration_) noexcept :
@@ -111,17 +112,17 @@ size_t ActionDuration::ActionsInAllowedTime(double secondsAllowed) const noexcep
return std::lround(secondsAllowed / Duration());
}
-Document::Document(int options) :
- cb((options & SC_DOCUMENTOPTION_STYLES_NONE) == 0, (options & SC_DOCUMENTOPTION_TEXT_LARGE) != 0),
+Document::Document(DocumentOption options) :
+ cb((FlagSet(options, DocumentOption::StylesNone)) == 0, (FlagSet(options, DocumentOption::TextLarge)) != 0),
durationStyleOneByte(0.000001, 0.0000001, 0.00001) {
refCount = 0;
#ifdef _WIN32
- eolMode = SC_EOL_CRLF;
+ eolMode = EndOfLine::CrLf;
#else
- eolMode = SC_EOL_LF;
+ eolMode = EndOfLine::Lf;
#endif
- dbcsCodePage = SC_CP_UTF8;
- lineEndBitSet = SC_LINE_END_TYPE_DEFAULT;
+ dbcsCodePage = CpUtf8;
+ lineEndBitSet = LineEndType::Default;
endStyled = 0;
styleClock = 0;
enteredModification = 0;
@@ -147,7 +148,7 @@ Document::Document(int options) :
decorations = DecorationListCreate(IsLarge());
cb.SetPerLine(this);
- cb.SetUTF8Substance(SC_CP_UTF8 == dbcsCodePage);
+ cb.SetUTF8Substance(CpUtf8 == dbcsCodePage);
}
Document::~Document() {
@@ -222,11 +223,11 @@ LineAnnotation *Document::EOLAnnotations() const noexcept {
return dynamic_cast<LineAnnotation *>(perLineData[ldEOLAnnotation].get());
}
-int Document::LineEndTypesSupported() const {
- if ((SC_CP_UTF8 == dbcsCodePage) && pli)
+LineEndType Document::LineEndTypesSupported() const {
+ if ((CpUtf8 == dbcsCodePage) && pli)
return pli->LineEndTypesSupported();
else
- return 0;
+ return LineEndType::Default;
}
bool Document::SetDBCSCodePage(int dbcsCodePage_) {
@@ -234,7 +235,7 @@ bool Document::SetDBCSCodePage(int dbcsCodePage_) {
dbcsCodePage = dbcsCodePage_;
SetCaseFolder(nullptr);
cb.SetLineEndTypes(lineEndBitSet & LineEndTypesSupported());
- cb.SetUTF8Substance(SC_CP_UTF8 == dbcsCodePage);
+ cb.SetUTF8Substance(CpUtf8 == dbcsCodePage);
ModifiedAt(0); // Need to restyle whole document
return true;
} else {
@@ -242,10 +243,10 @@ bool Document::SetDBCSCodePage(int dbcsCodePage_) {
}
}
-bool Document::SetLineEndTypesAllowed(int lineEndBitSet_) {
+bool Document::SetLineEndTypesAllowed(LineEndType lineEndBitSet_) {
if (lineEndBitSet != lineEndBitSet_) {
lineEndBitSet = lineEndBitSet_;
- const int lineEndBitSetActive = lineEndBitSet & LineEndTypesSupported();
+ const LineEndType lineEndBitSetActive = lineEndBitSet & LineEndTypesSupported();
if (lineEndBitSetActive != cb.GetLineEndTypes()) {
ModifiedAt(0);
cb.SetLineEndTypes(lineEndBitSetActive);
@@ -279,36 +280,36 @@ void Document::TentativeUndo() {
const Action &action = cb.GetUndoStep();
if (action.at == ActionType::remove) {
NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action));
+ ModificationFlags::BeforeInsert | ModificationFlags::Undo, action));
} else if (action.at == ActionType::container) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO);
+ DocModification dm(ModificationFlags::Container | ModificationFlags::Undo);
dm.token = action.position;
NotifyModified(dm);
} else {
NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action));
+ ModificationFlags::BeforeDelete | ModificationFlags::Undo, action));
}
cb.PerformUndoStep();
if (action.at != ActionType::container) {
ModifiedAt(action.position);
}
- int modFlags = SC_PERFORMED_UNDO;
+ ModificationFlags modFlags = ModificationFlags::Undo;
// With undo, an insertion action becomes a deletion notification
if (action.at == ActionType::remove) {
- modFlags |= SC_MOD_INSERTTEXT;
+ modFlags |= ModificationFlags::InsertText;
} else if (action.at == ActionType::insert) {
- modFlags |= SC_MOD_DELETETEXT;
+ modFlags |= ModificationFlags::DeleteText;
}
if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
+ modFlags |= ModificationFlags::MultiStepUndoRedo;
const Sci::Line linesAdded = LinesTotal() - prevLinesTotal;
if (linesAdded != 0)
multiLine = true;
if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
+ modFlags |= ModificationFlags::LastStepInUndoRedo;
if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
+ modFlags |= ModificationFlags::MultilineUndoRedo;
}
NotifyModified(DocModification(modFlags, action.position, action.lenData,
linesAdded, action.data.get()));
@@ -335,7 +336,7 @@ Sci::Line Document::MarkerNext(Sci::Line lineStart, int mask) const noexcept {
int Document::AddMark(Sci::Line line, int markerNum) {
if (line >= 0 && line <= LinesTotal()) {
const int prev = Markers()->AddMark(line, markerNum, LinesTotal());
- const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line);
+ const DocModification mh(ModificationFlags::ChangeMarker, LineStart(line), 0, 0, nullptr, line);
NotifyModified(mh);
return prev;
} else {
@@ -352,19 +353,19 @@ void Document::AddMarkSet(Sci::Line line, int valueSet) {
if (m & 1)
Markers()->AddMark(line, i, LinesTotal());
}
- const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line);
+ const DocModification mh(ModificationFlags::ChangeMarker, LineStart(line), 0, 0, nullptr, line);
NotifyModified(mh);
}
void Document::DeleteMark(Sci::Line line, int markerNum) {
Markers()->DeleteMark(line, markerNum, false);
- const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line);
+ const DocModification mh(ModificationFlags::ChangeMarker, LineStart(line), 0, 0, nullptr, line);
NotifyModified(mh);
}
void Document::DeleteMarkFromHandle(int markerHandle) {
Markers()->DeleteMarkFromHandle(markerHandle);
- DocModification mh(SC_MOD_CHANGEMARKER);
+ DocModification mh(ModificationFlags::ChangeMarker);
mh.line = -1;
NotifyModified(mh);
}
@@ -376,7 +377,7 @@ void Document::DeleteAllMarks(int markerNum) {
someChanges = true;
}
if (someChanges) {
- DocModification mh(SC_MOD_CHANGEMARKER);
+ DocModification mh(ModificationFlags::ChangeMarker);
mh.line = -1;
NotifyModified(mh);
}
@@ -407,7 +408,7 @@ Sci_Position SCI_METHOD Document::LineEnd(Sci_Position line) const {
return LineStart(line + 1);
} else {
Sci::Position position = LineStart(line + 1);
- if (SC_LINE_END_TYPE_UNICODE == cb.GetLineEndTypes()) {
+ if (LineEndType::Unicode == cb.GetLineEndTypes()) {
const unsigned char bytes[] = {
cb.UCharAt(position-3),
cb.UCharAt(position-2),
@@ -432,7 +433,7 @@ Sci_Position SCI_METHOD Document::LineEnd(Sci_Position line) const {
void SCI_METHOD Document::SetErrorStatus(int status) {
// Tell the watchers an error has occurred.
for (const WatcherWithUserData &watcher : watchers) {
- watcher.watcher->NotifyErrorOccurred(this, watcher.userData, status);
+ watcher.watcher->NotifyErrorOccurred(this, watcher.userData, static_cast<Status>(status));
}
}
@@ -470,11 +471,11 @@ Sci::Position Document::VCHomePosition(Sci::Position position) const {
return startText;
}
-Sci::Position Document::IndexLineStart(Sci::Line line, int lineCharacterIndex) const noexcept {
+Sci::Position Document::IndexLineStart(Sci::Line line, LineCharacterIndexType lineCharacterIndex) const noexcept {
return cb.IndexLineStart(line, lineCharacterIndex);
}
-Sci::Line Document::LineFromPositionIndex(Sci::Position pos, int lineCharacterIndex) const noexcept {
+Sci::Line Document::LineFromPositionIndex(Sci::Position pos, LineCharacterIndexType lineCharacterIndex) const noexcept {
return cb.LineFromPositionIndex(pos, lineCharacterIndex);
}
@@ -495,10 +496,10 @@ Sci::Line Document::LineFromPositionAfter(Sci::Line line, Sci::Position length)
int SCI_METHOD Document::SetLevel(Sci_Position line, int level) {
const int prev = Levels()->SetLevel(line, level, LinesTotal());
if (prev != level) {
- DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER,
+ DocModification mh(ModificationFlags::ChangeFold | ModificationFlags::ChangeMarker,
LineStart(line), 0, 0, nullptr, line);
- mh.foldLevelNow = level;
- mh.foldLevelPrev = prev;
+ mh.foldLevelNow = static_cast<FoldLevel>(level);
+ mh.foldLevelPrev = static_cast<FoldLevel>(prev);
NotifyModified(mh);
}
return prev;
@@ -508,35 +509,39 @@ int SCI_METHOD Document::GetLevel(Sci_Position line) const {
return Levels()->GetLevel(line);
}
+FoldLevel Document::GetFoldLevel(Sci_Position line) const {
+ return static_cast<FoldLevel>(Levels()->GetLevel(line));
+}
+
void Document::ClearLevels() {
Levels()->ClearLevels();
}
-static bool IsSubordinate(int levelStart, int levelTry) noexcept {
+static bool IsSubordinate(FoldLevel levelStart, FoldLevel levelTry) noexcept {
if (LevelIsWhitespace(levelTry))
return true;
else
return LevelNumber(levelStart) < LevelNumber(levelTry);
}
-Sci::Line Document::GetLastChild(Sci::Line lineParent, int level, Sci::Line lastLine) {
- if (level == -1)
- level = LevelNumber(GetLevel(lineParent));
+Sci::Line Document::GetLastChild(Sci::Line lineParent, std::optional<FoldLevel> level, Sci::Line lastLine) {
+ if (!level)
+ level = LevelNumberPart(GetFoldLevel(lineParent));
const Sci::Line maxLine = LinesTotal();
const Sci::Line lookLastLine = (lastLine != -1) ? std::min(LinesTotal() - 1, lastLine) : -1;
Sci::Line lineMaxSubord = lineParent;
while (lineMaxSubord < maxLine - 1) {
EnsureStyledTo(LineStart(lineMaxSubord + 2));
- if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1)))
+ if (!IsSubordinate(*level, GetFoldLevel(lineMaxSubord + 1)))
break;
- if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !LevelIsWhitespace(GetLevel(lineMaxSubord)))
+ if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !LevelIsWhitespace(GetFoldLevel(lineMaxSubord)))
break;
lineMaxSubord++;
}
if (lineMaxSubord > lineParent) {
- if (level > LevelNumber(GetLevel(lineMaxSubord + 1))) {
+ if (level > LevelNumberPart(GetFoldLevel(lineMaxSubord + 1))) {
// Have chewed up some whitespace that belongs to a parent so seek back
- if (LevelIsWhitespace(GetLevel(lineMaxSubord))) {
+ if (LevelIsWhitespace(GetFoldLevel(lineMaxSubord))) {
lineMaxSubord--;
}
}
@@ -545,16 +550,16 @@ Sci::Line Document::GetLastChild(Sci::Line lineParent, int level, Sci::Line last
}
Sci::Line Document::GetFoldParent(Sci::Line line) const {
- const int level = LevelNumber(GetLevel(line));
+ const FoldLevel level = LevelNumberPart(GetFoldLevel(line));
Sci::Line lineLook = line - 1;
while ((lineLook > 0) && (
- (!LevelIsHeader(GetLevel(lineLook))) ||
- (LevelNumber(GetLevel(lineLook)) >= level))
+ (!LevelIsHeader(GetFoldLevel(lineLook))) ||
+ (LevelNumberPart(GetFoldLevel(lineLook)) >= level))
) {
lineLook--;
}
- if (LevelIsHeader(GetLevel(lineLook)) &&
- (LevelNumber(GetLevel(lineLook)) < level)) {
+ if (LevelIsHeader(GetFoldLevel(lineLook)) &&
+ (LevelNumberPart(GetFoldLevel(lineLook)) < level)) {
return lineLook;
} else {
return -1;
@@ -562,16 +567,16 @@ Sci::Line Document::GetFoldParent(Sci::Line line) const {
}
void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sci::Line line, Sci::Line lastLine) {
- const int level = GetLevel(line);
+ const FoldLevel level = GetFoldLevel(line);
const Sci::Line lookLastLine = std::max(line, lastLine) + 1;
Sci::Line lookLine = line;
- int lookLineLevel = level;
- int lookLineLevelNum = LevelNumber(lookLineLevel);
+ FoldLevel lookLineLevel = level;
+ FoldLevel lookLineLevelNum = LevelNumberPart(lookLineLevel);
while ((lookLine > 0) && (LevelIsWhitespace(lookLineLevel) ||
- (LevelIsHeader(lookLineLevel) && (lookLineLevelNum >= LevelNumber(GetLevel(lookLine + 1)))))) {
- lookLineLevel = GetLevel(--lookLine);
- lookLineLevelNum = LevelNumber(lookLineLevel);
+ (LevelIsHeader(lookLineLevel) && (lookLineLevelNum >= LevelNumberPart(GetFoldLevel(lookLine + 1)))))) {
+ lookLineLevel = GetFoldLevel(--lookLine);
+ lookLineLevelNum = LevelNumberPart(lookLineLevel);
}
Sci::Line beginFoldBlock = LevelIsHeader(lookLineLevel) ? lookLine : GetFoldParent(lookLine);
@@ -580,31 +585,31 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
return;
}
- Sci::Line endFoldBlock = GetLastChild(beginFoldBlock, -1, lookLastLine);
+ Sci::Line endFoldBlock = GetLastChild(beginFoldBlock, {}, lookLastLine);
Sci::Line firstChangeableLineBefore = -1;
if (endFoldBlock < line) {
lookLine = beginFoldBlock - 1;
- lookLineLevel = GetLevel(lookLine);
- lookLineLevelNum = LevelNumber(lookLineLevel);
- while ((lookLine >= 0) && (lookLineLevelNum >= SC_FOLDLEVELBASE)) {
+ lookLineLevel = GetFoldLevel(lookLine);
+ lookLineLevelNum = LevelNumberPart(lookLineLevel);
+ while ((lookLine >= 0) && (lookLineLevelNum >= FoldLevel::Base)) {
if (LevelIsHeader(lookLineLevel)) {
- if (GetLastChild(lookLine, -1, lookLastLine) == line) {
+ if (GetLastChild(lookLine, {}, lookLastLine) == line) {
beginFoldBlock = lookLine;
endFoldBlock = line;
firstChangeableLineBefore = line - 1;
}
}
- if ((lookLine > 0) && (lookLineLevelNum == SC_FOLDLEVELBASE) && (LevelNumber(GetLevel(lookLine - 1)) > lookLineLevelNum))
+ if ((lookLine > 0) && (lookLineLevelNum == FoldLevel::Base) && (LevelNumberPart(GetFoldLevel(lookLine - 1)) > lookLineLevelNum))
break;
- lookLineLevel = GetLevel(--lookLine);
- lookLineLevelNum = LevelNumber(lookLineLevel);
+ lookLineLevel = GetFoldLevel(--lookLine);
+ lookLineLevelNum = LevelNumberPart(lookLineLevel);
}
}
if (firstChangeableLineBefore == -1) {
- for (lookLine = line - 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = LevelNumber(lookLineLevel);
+ for (lookLine = line - 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
lookLine >= beginFoldBlock;
- lookLineLevel = GetLevel(--lookLine), lookLineLevelNum = LevelNumber(lookLineLevel)) {
- if (LevelIsWhitespace(lookLineLevel) || (lookLineLevelNum > LevelNumber(level))) {
+ lookLineLevel = GetFoldLevel(--lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel)) {
+ if (LevelIsWhitespace(lookLineLevel) || (lookLineLevelNum > LevelNumberPart(level))) {
firstChangeableLineBefore = lookLine;
break;
}
@@ -614,10 +619,10 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
firstChangeableLineBefore = beginFoldBlock - 1;
Sci::Line firstChangeableLineAfter = -1;
- for (lookLine = line + 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = LevelNumber(lookLineLevel);
+ for (lookLine = line + 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
lookLine <= endFoldBlock;
- lookLineLevel = GetLevel(++lookLine), lookLineLevelNum = LevelNumber(lookLineLevel)) {
- if (LevelIsHeader(lookLineLevel) && (lookLineLevelNum < LevelNumber(GetLevel(lookLine + 1)))) {
+ lookLineLevel = GetFoldLevel(++lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel)) {
+ if (LevelIsHeader(lookLineLevel) && (lookLineLevelNum < LevelNumberPart(GetFoldLevel(lookLine + 1)))) {
firstChangeableLineAfter = lookLine;
break;
}
@@ -656,7 +661,7 @@ int Document::LenChar(Sci::Position pos) const noexcept {
// Common case: ASCII character
return 1;
}
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
const int widthCharBytes = UTF8BytesOfLead[leadByte];
unsigned char charBytes[UTF8MaxBytes] = { leadByte, 0, 0, 0 };
for (int b = 1; b < widthCharBytes; b++) {
@@ -727,7 +732,7 @@ Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position
}
if (dbcsCodePage) {
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
const unsigned char ch = cb.UCharAt(pos);
// If ch is not a trail byte then pos is valid intercharacter position
if (UTF8IsTrailByte(ch)) {
@@ -786,7 +791,7 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const noexc
return cb.Length();
if (dbcsCodePage) {
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
if (increment == 1) {
// Simple forward movement case so can avoid some checks
const unsigned char leadByte = cb.UCharAt(pos);
@@ -875,7 +880,7 @@ Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) co
// Common case: ASCII character
return CharacterExtracted(leadByte, 1);
}
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
const int widthCharBytes = UTF8BytesOfLead[leadByte];
unsigned char charBytes[UTF8MaxBytes] = { leadByte, 0, 0, 0 };
for (int b = 1; b<widthCharBytes; b++)
@@ -904,7 +909,7 @@ Document::CharacterExtracted Document::CharacterBefore(Sci::Position position) c
if (0 == dbcsCodePage) {
return CharacterExtracted(previousByte, 1);
}
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
if (UTF8IsAscii(previousByte)) {
return CharacterExtracted(previousByte, 1);
}
@@ -983,7 +988,7 @@ int SCI_METHOD Document::GetCharacterAndWidth(Sci_Position position, Sci_Positio
int bytesInCharacter = 1;
const unsigned char leadByte = cb.UCharAt(position);
if (dbcsCodePage) {
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
if (UTF8IsAscii(leadByte)) {
// Single byte character or invalid
character = leadByte;
@@ -1176,7 +1181,7 @@ int Document::SafeSegment(const char *text, int length, int lengthSegment) const
}
lastEncodingAllowedBreak = j;
- if (dbcsCodePage == SC_CP_UTF8) {
+ if (dbcsCodePage == CpUtf8) {
j += UTF8BytesOfLead[ch];
} else if (dbcsCodePage) {
j += IsDBCSLeadByteNoExcept(ch) ? 2 : 1;
@@ -1193,7 +1198,7 @@ int Document::SafeSegment(const char *text, int length, int lengthSegment) const
}
EncodingFamily Document::CodePageFamily() const noexcept {
- if (SC_CP_UTF8 == dbcsCodePage)
+ if (CpUtf8 == dbcsCodePage)
return EncodingFamily::unicode;
else if (dbcsCodePage)
return EncodingFamily::dbcs;
@@ -1232,7 +1237,7 @@ bool Document::DeleteChars(Sci::Position pos, Sci::Position len) {
if (!cb.IsReadOnly()) {
NotifyModified(
DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_USER,
+ ModificationFlags::BeforeDelete | ModificationFlags::User,
pos, len,
0, 0));
const Sci::Line prevLinesTotal = LinesTotal();
@@ -1247,7 +1252,8 @@ bool Document::DeleteChars(Sci::Position pos, Sci::Position len) {
ModifiedAt(pos-1);
NotifyModified(
DocModification(
- SC_MOD_DELETETEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0),
+ ModificationFlags::DeleteText | ModificationFlags::User |
+ (startSequence?ModificationFlags::StartAction:ModificationFlags::None),
pos, len,
LinesTotal() - prevLinesTotal, text));
}
@@ -1275,7 +1281,7 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci:
insertion.clear();
NotifyModified(
DocModification(
- SC_MOD_INSERTCHECK,
+ ModificationFlags::InsertCheck,
position, insertLength,
0, s));
if (insertionSet) {
@@ -1284,7 +1290,7 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci:
}
NotifyModified(
DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
+ ModificationFlags::BeforeInsert | ModificationFlags::User,
position, insertLength,
0, s));
const Sci::Line prevLinesTotal = LinesTotal();
@@ -1296,7 +1302,8 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci:
ModifiedAt(position);
NotifyModified(
DocModification(
- SC_MOD_INSERTTEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0),
+ ModificationFlags::InsertText | ModificationFlags::User |
+ (startSequence?ModificationFlags::StartAction:ModificationFlags::None),
position, insertLength,
LinesTotal() - prevLinesTotal, text));
if (insertionSet) { // Free memory as could be large
@@ -1316,11 +1323,11 @@ int SCI_METHOD Document::AddData(const char *data, Sci_Position length) {
const Sci::Position position = Length();
InsertString(position, data, length);
} catch (std::bad_alloc &) {
- return SC_STATUS_BADALLOC;
+ return static_cast<int>(Status::BadAlloc);
} catch (...) {
- return SC_STATUS_FAILURE;
+ return static_cast<int>(Status::Failure);
}
- return 0;
+ return static_cast<int>(Status::Ok);
}
void * SCI_METHOD Document::ConvertToDocument() {
@@ -1346,9 +1353,9 @@ Sci::Position Document::Undo() {
const Action &action = cb.GetUndoStep();
if (action.at == ActionType::remove) {
NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action));
+ ModificationFlags::BeforeInsert | ModificationFlags::Undo, action));
} else if (action.at == ActionType::container) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO);
+ DocModification dm(ModificationFlags::Container | ModificationFlags::Undo);
dm.token = action.position;
NotifyModified(dm);
if (!action.mayCoalesce) {
@@ -1359,7 +1366,7 @@ Sci::Position Document::Undo() {
}
} else {
NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action));
+ ModificationFlags::BeforeDelete | ModificationFlags::Undo, action));
}
cb.PerformUndoStep();
if (action.at != ActionType::container) {
@@ -1367,11 +1374,11 @@ Sci::Position Document::Undo() {
newPos = action.position;
}
- int modFlags = SC_PERFORMED_UNDO;
+ ModificationFlags modFlags = ModificationFlags::Undo;
// With undo, an insertion action becomes a deletion notification
if (action.at == ActionType::remove) {
newPos += action.lenData;
- modFlags |= SC_MOD_INSERTTEXT;
+ modFlags |= ModificationFlags::InsertText;
if ((coalescedRemoveLen > 0) &&
(action.position == prevRemoveActionPos || action.position == (prevRemoveActionPos + prevRemoveActionLen))) {
coalescedRemoveLen += action.lenData;
@@ -1383,21 +1390,21 @@ Sci::Position Document::Undo() {
prevRemoveActionPos = action.position;
prevRemoveActionLen = action.lenData;
} else if (action.at == ActionType::insert) {
- modFlags |= SC_MOD_DELETETEXT;
+ modFlags |= ModificationFlags::DeleteText;
coalescedRemovePos = -1;
coalescedRemoveLen = 0;
prevRemoveActionPos = -1;
prevRemoveActionLen = 0;
}
if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
+ modFlags |= ModificationFlags::MultiStepUndoRedo;
const Sci::Line linesAdded = LinesTotal() - prevLinesTotal;
if (linesAdded != 0)
multiLine = true;
if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
+ modFlags |= ModificationFlags::LastStepInUndoRedo;
if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
+ modFlags |= ModificationFlags::MultilineUndoRedo;
}
NotifyModified(DocModification(modFlags, action.position, action.lenData,
linesAdded, action.data.get()));
@@ -1426,14 +1433,14 @@ Sci::Position Document::Redo() {
const Action &action = cb.GetRedoStep();
if (action.at == ActionType::insert) {
NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_REDO, action));
+ ModificationFlags::BeforeInsert | ModificationFlags::Redo, action));
} else if (action.at == ActionType::container) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_REDO);
+ DocModification dm(ModificationFlags::Container | ModificationFlags::Redo);
dm.token = action.position;
NotifyModified(dm);
} else {
NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_REDO, action));
+ ModificationFlags::BeforeDelete | ModificationFlags::Redo, action));
}
cb.PerformRedoStep();
if (action.at != ActionType::container) {
@@ -1441,22 +1448,22 @@ Sci::Position Document::Redo() {
newPos = action.position;
}
- int modFlags = SC_PERFORMED_REDO;
+ ModificationFlags modFlags = ModificationFlags::Redo;
if (action.at == ActionType::insert) {
newPos += action.lenData;
- modFlags |= SC_MOD_INSERTTEXT;
+ modFlags |= ModificationFlags::InsertText;
} else if (action.at == ActionType::remove) {
- modFlags |= SC_MOD_DELETETEXT;
+ modFlags |= ModificationFlags::DeleteText;
}
if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
+ modFlags |= ModificationFlags::MultiStepUndoRedo;
const Sci::Line linesAdded = LinesTotal() - prevLinesTotal;
if (linesAdded != 0)
multiLine = true;
if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
+ modFlags |= ModificationFlags::LastStepInUndoRedo;
if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
+ modFlags |= ModificationFlags::MultilineUndoRedo;
}
NotifyModified(
DocModification(modFlags, action.position, action.lenData,
@@ -1645,15 +1652,15 @@ void Document::Indent(bool forwards, Sci::Line lineBottom, Sci::Line lineTop) {
// Convert line endings for a piece of text to a particular mode.
// Stop at len or when a NUL is found.
-std::string Document::TransformLineEnds(const char *s, size_t len, int eolModeWanted) {
+std::string Document::TransformLineEnds(const char *s, size_t len, EndOfLine eolModeWanted) {
std::string dest;
for (size_t i = 0; (i < len) && (s[i]); i++) {
if (s[i] == '\n' || s[i] == '\r') {
- if (eolModeWanted == SC_EOL_CR) {
+ if (eolModeWanted == EndOfLine::Cr) {
dest.push_back('\r');
- } else if (eolModeWanted == SC_EOL_LF) {
+ } else if (eolModeWanted == EndOfLine::Lf) {
dest.push_back('\n');
- } else { // eolModeWanted == SC_EOL_CRLF
+ } else { // eolModeWanted == EndOfLine::CrLf
dest.push_back('\r');
dest.push_back('\n');
}
@@ -1667,25 +1674,25 @@ std::string Document::TransformLineEnds(const char *s, size_t len, int eolModeWa
return dest;
}
-void Document::ConvertLineEnds(int eolModeSet) {
+void Document::ConvertLineEnds(EndOfLine eolModeSet) {
UndoGroup ug(this);
for (Sci::Position pos = 0; pos < Length(); pos++) {
if (cb.CharAt(pos) == '\r') {
if (cb.CharAt(pos + 1) == '\n') {
// CRLF
- if (eolModeSet == SC_EOL_CR) {
+ if (eolModeSet == EndOfLine::Cr) {
DeleteChars(pos + 1, 1); // Delete the LF
- } else if (eolModeSet == SC_EOL_LF) {
+ } else if (eolModeSet == EndOfLine::Lf) {
DeleteChars(pos, 1); // Delete the CR
} else {
pos++;
}
} else {
// CR
- if (eolModeSet == SC_EOL_CRLF) {
+ if (eolModeSet == EndOfLine::CrLf) {
pos += InsertString(pos + 1, "\n", 1); // Insert LF
- } else if (eolModeSet == SC_EOL_LF) {
+ } else if (eolModeSet == EndOfLine::Lf) {
pos += InsertString(pos, "\n", 1); // Insert LF
DeleteChars(pos, 1); // Delete CR
pos--;
@@ -1693,9 +1700,9 @@ void Document::ConvertLineEnds(int eolModeSet) {
}
} else if (cb.CharAt(pos) == '\n') {
// LF
- if (eolModeSet == SC_EOL_CRLF) {
+ if (eolModeSet == EndOfLine::CrLf) {
pos += InsertString(pos, "\r", 1); // Insert CR
- } else if (eolModeSet == SC_EOL_CR) {
+ } else if (eolModeSet == EndOfLine::Cr) {
pos += InsertString(pos, "\r", 1); // Insert CR
DeleteChars(pos, 1); // Delete LF
pos--;
@@ -1705,9 +1712,9 @@ void Document::ConvertLineEnds(int eolModeSet) {
}
-int Document::Options() const noexcept {
- return (IsLarge() ? SC_DOCUMENTOPTION_TEXT_LARGE : 0) |
- (cb.HasStyles() ? 0 : SC_DOCUMENTOPTION_STYLES_NONE);
+DocumentOption Document::Options() const noexcept {
+ return (IsLarge() ? DocumentOption::TextLarge : DocumentOption::Default) |
+ (cb.HasStyles() ? DocumentOption::Default : DocumentOption::StylesNone);
}
bool Document::IsWhiteLine(Sci::Line line) const {
@@ -1751,7 +1758,7 @@ Sci::Position Document::ParaDown(Sci::Position pos) const {
CharacterClass Document::WordCharacterClass(unsigned int ch) const {
if (dbcsCodePage && (!UTF8IsAscii(ch))) {
- if (SC_CP_UTF8 == dbcsCodePage) {
+ if (CpUtf8 == dbcsCodePage) {
// Use hard coded Unicode class
const CharacterCategory cc = charMap.CategoryFor(ch);
switch (cc) {
@@ -2018,13 +2025,13 @@ Document::CharacterExtracted Document::ExtractCharacter(Sci::Position position)
* Has not been tested with backwards DBCS searches yet.
*/
Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, const char *search,
- int flags, Sci::Position *length) {
+ FindOption flags, Sci::Position *length) {
if (*length <= 0)
return minPos;
- const bool caseSensitive = (flags & SCFIND_MATCHCASE) != 0;
- const bool word = (flags & SCFIND_WHOLEWORD) != 0;
- const bool wordStart = (flags & SCFIND_WORDSTART) != 0;
- const bool regExp = (flags & SCFIND_REGEXP) != 0;
+ const bool caseSensitive = FlagSet(flags, FindOption::MatchCase);
+ const bool word = FlagSet(flags, FindOption::WholeWord);
+ const bool wordStart = FlagSet(flags, FindOption::WordStart);
+ const bool regExp = FlagSet(flags, FindOption::RegExp);
if (regExp) {
if (!regex)
regex = std::unique_ptr<RegexSearchBase>(CreateRegexSearch(&charClass));
@@ -2064,7 +2071,7 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con
if (!NextCharacter(pos, increment))
break;
}
- } else if (SC_CP_UTF8 == dbcsCodePage) {
+ } else if (CpUtf8 == dbcsCodePage) {
constexpr size_t maxFoldingExpansion = 4;
std::vector<char> searchThing((lengthFind+1) * UTF8MaxBytes * maxFoldingExpansion + 1);
const size_t lenSearch =
@@ -2184,15 +2191,15 @@ const char *Document::SubstituteByPosition(const char *text, Sci::Position *leng
return nullptr;
}
-int Document::LineCharacterIndex() const noexcept {
+LineCharacterIndexType Document::LineCharacterIndex() const noexcept {
return cb.LineCharacterIndex();
}
-void Document::AllocateLineCharacterIndex(int lineCharacterIndex) {
+void Document::AllocateLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) {
return cb.AllocateLineCharacterIndex(lineCharacterIndex);
}
-void Document::ReleaseLineCharacterIndex(int lineCharacterIndex) {
+void Document::ReleaseLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) {
return cb.ReleaseLineCharacterIndex(lineCharacterIndex);
}
@@ -2231,7 +2238,7 @@ bool SCI_METHOD Document::SetStyleFor(Sci_Position length, char style) {
enteredStyling++;
const Sci::Position prevEndStyled = endStyled;
if (cb.SetStyleFor(endStyled, length, style)) {
- const DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER,
+ const DocModification mh(ModificationFlags::ChangeStyle | ModificationFlags::User,
prevEndStyled, length);
NotifyModified(mh);
}
@@ -2260,7 +2267,7 @@ bool SCI_METHOD Document::SetStyles(Sci_Position length, const char *styles) {
}
}
if (didChange) {
- const DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER,
+ const DocModification mh(ModificationFlags::ChangeStyle | ModificationFlags::User,
startMod, endMod - startMod + 1);
NotifyModified(mh);
}
@@ -2311,7 +2318,7 @@ void Document::SetLexInterface(std::unique_ptr<LexInterface> pLexInterface) noex
int SCI_METHOD Document::SetLineState(Sci_Position line, int state) {
const int statePrevious = States()->SetLineState(line, state);
if (state != statePrevious) {
- const DocModification mh(SC_MOD_CHANGELINESTATE, LineStart(line), 0, 0, nullptr,
+ const DocModification mh(ModificationFlags::ChangeLineState, LineStart(line), 0, 0, nullptr,
static_cast<Sci::Line>(line));
NotifyModified(mh);
}
@@ -2327,7 +2334,7 @@ Sci::Line Document::GetMaxLineState() const noexcept {
}
void SCI_METHOD Document::ChangeLexerState(Sci_Position start, Sci_Position end) {
- const DocModification mh(SC_MOD_LEXERSTATE, start,
+ const DocModification mh(ModificationFlags::LexerState, start,
end-start, 0, 0, 0);
NotifyModified(mh);
}
@@ -2340,20 +2347,20 @@ StyledText Document::MarginStyledText(Sci::Line line) const noexcept {
void Document::MarginSetText(Sci::Line line, const char *text) {
Margins()->SetText(line, text);
- const DocModification mh(SC_MOD_CHANGEMARGIN, LineStart(line),
+ const DocModification mh(ModificationFlags::ChangeMargin, LineStart(line),
0, 0, 0, line);
NotifyModified(mh);
}
void Document::MarginSetStyle(Sci::Line line, int style) {
Margins()->SetStyle(line, style);
- NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line),
+ NotifyModified(DocModification(ModificationFlags::ChangeMargin, LineStart(line),
0, 0, 0, line));
}
void Document::MarginSetStyles(Sci::Line line, const unsigned char *styles) {
Margins()->SetStyles(line, styles);
- NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line),
+ NotifyModified(DocModification(ModificationFlags::ChangeMargin, LineStart(line),
0, 0, 0, line));
}
@@ -2376,7 +2383,7 @@ void Document::AnnotationSetText(Sci::Line line, const char *text) {
const Sci::Line linesBefore = AnnotationLines(line);
Annotations()->SetText(line, text);
const int linesAfter = AnnotationLines(line);
- DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line),
+ DocModification mh(ModificationFlags::ChangeAnnotation, LineStart(line),
0, 0, 0, line);
mh.annotationLinesAdded = linesAfter - linesBefore;
NotifyModified(mh);
@@ -2386,7 +2393,7 @@ void Document::AnnotationSetText(Sci::Line line, const char *text) {
void Document::AnnotationSetStyle(Sci::Line line, int style) {
if (line >= 0 && line < LinesTotal()) {
Annotations()->SetStyle(line, style);
- const DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line),
+ const DocModification mh(ModificationFlags::ChangeAnnotation, LineStart(line),
0, 0, 0, line);
NotifyModified(mh);
}
@@ -2419,7 +2426,7 @@ StyledText Document::EOLAnnotationStyledText(Sci::Line line) const noexcept {
void Document::EOLAnnotationSetText(Sci::Line line, const char *text) {
if (line >= 0 && line < LinesTotal()) {
EOLAnnotations()->SetText(line, text);
- const DocModification mh(SC_MOD_CHANGEEOLANNOTATION, LineStart(line),
+ const DocModification mh(ModificationFlags::ChangeEOLAnnotation, LineStart(line),
0, 0, 0, line);
NotifyModified(mh);
}
@@ -2428,7 +2435,7 @@ void Document::EOLAnnotationSetText(Sci::Line line, const char *text) {
void Document::EOLAnnotationSetStyle(Sci::Line line, int style) {
if (line >= 0 && line < LinesTotal()) {
EOLAnnotations()->SetStyle(line, style);
- const DocModification mh(SC_MOD_CHANGEEOLANNOTATION, LineStart(line),
+ const DocModification mh(ModificationFlags::ChangeEOLAnnotation, LineStart(line),
0, 0, 0, line);
NotifyModified(mh);
}
@@ -2454,7 +2461,7 @@ void SCI_METHOD Document::DecorationFillRange(Sci_Position position, int value,
const FillResult<Sci::Position> fr = decorations->FillRange(
position, value, fillLength);
if (fr.changed) {
- const DocModification mh(SC_MOD_CHANGEINDICATOR | SC_PERFORMED_USER,
+ const DocModification mh(ModificationFlags::ChangeIndicator | ModificationFlags::User,
fr.position, fr.fillLength);
NotifyModified(mh);
}
@@ -2493,9 +2500,9 @@ void Document::NotifySavePoint(bool atSavePoint) {
}
void Document::NotifyModified(DocModification mh) {
- if (mh.modificationType & SC_MOD_INSERTTEXT) {
+ if (FlagSet(mh.modificationType, ModificationFlags::InsertText)) {
decorations->InsertSpace(mh.position, mh.length);
- } else if (mh.modificationType & SC_MOD_DELETETEXT) {
+ } else if (FlagSet(mh.modificationType, ModificationFlags::DeleteText)) {
decorations->DeleteRange(mh.position, mh.length);
}
for (const WatcherWithUserData &watcher : watchers) {
@@ -2722,7 +2729,7 @@ public:
~BuiltinRegex() override = default;
Sci::Position FindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s,
- bool caseSensitive, bool word, bool wordStart, int flags,
+ bool caseSensitive, bool word, bool wordStart, FindOption flags,
Sci::Position *length) override;
const char *SubstituteByPosition(Document *doc, const char *text, Sci::Position *length) override;
@@ -3144,7 +3151,7 @@ Sci::Position Cxx11RegexFindText(const Document *doc, Sci::Position minPos, Sci:
search.Clear();
bool matched = false;
- if (SC_CP_UTF8 == doc->dbcsCodePage) {
+ if (CpUtf8 == doc->dbcsCodePage) {
const std::wstring ws = WStringFromUTF8(s);
std::wregex regexp;
regexp.assign(ws, flagsRe);
@@ -3181,11 +3188,11 @@ Sci::Position Cxx11RegexFindText(const Document *doc, Sci::Position minPos, Sci:
}
Sci::Position BuiltinRegex::FindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s,
- bool caseSensitive, bool, bool, int flags,
+ bool caseSensitive, bool, bool, FindOption flags,
Sci::Position *length) {
#ifndef NO_CXX11_REGEX
- if (flags & SCFIND_CXX11REGEX) {
+ if (FlagSet(flags, FindOption::Cxx11RegEx)) {
return Cxx11RegexFindText(doc, minPos, maxPos, s,
caseSensitive, length, search);
}
@@ -3193,7 +3200,7 @@ Sci::Position BuiltinRegex::FindText(Document *doc, Sci::Position minPos, Sci::P
const RESearchRange resr(doc, minPos, maxPos);
- const bool posix = (flags & SCFIND_POSIX) != 0;
+ const bool posix = FlagSet(flags, FindOption::Posix);
const char *errmsg = search.Compile(s, *length, caseSensitive, posix);
if (errmsg) {
@@ -3320,7 +3327,7 @@ const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text,
#ifndef SCI_OWNREGEX
-RegexSearchBase *Scintilla::CreateRegexSearch(CharClassify *charClassTable) {
+RegexSearchBase *Scintilla::Internal::CreateRegexSearch(CharClassify *charClassTable) {
return new BuiltinRegex(charClassTable);
}