aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx189
1 files changed, 96 insertions, 93 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 595c4ba9a..b0efee5e7 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -53,7 +53,7 @@ void LexInterface::Colourise(Sci::Position start, Sci::Position end) {
// code looks for child lines which may trigger styling.
performingStyle = true;
- const Sci::Position lengthDoc = static_cast<Sci::Position>(pdoc->Length());
+ const Sci::Position lengthDoc = pdoc->Length();
if (end == -1)
end = lengthDoc;
const Sci::Position len = end - start;
@@ -290,7 +290,7 @@ Sci::Line Document::MarkerNext(Sci::Line lineStart, int mask) const {
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, static_cast<Sci::Position>(LineStart(line)), 0, 0, 0, line);
+ const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
NotifyModified(mh);
return prev;
} else {
@@ -307,13 +307,13 @@ void Document::AddMarkSet(Sci::Line line, int valueSet) {
if (m & 1)
Markers()->AddMark(line, i, LinesTotal());
}
- const DocModification mh(SC_MOD_CHANGEMARKER, static_cast<Sci::Position>(LineStart(line)), 0, 0, 0, line);
+ const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
NotifyModified(mh);
}
void Document::DeleteMark(Sci::Line line, int markerNum) {
Markers()->DeleteMark(line, markerNum, false);
- const DocModification mh(SC_MOD_CHANGEMARKER, static_cast<Sci::Position>(LineStart(line)), 0, 0, 0, line);
+ const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
NotifyModified(mh);
}
@@ -353,12 +353,12 @@ Sci_Position SCI_METHOD Document::LineEnd(Sci_Position line) const {
if (line >= LinesTotal() - 1) {
return LineStart(line + 1);
} else {
- Sci::Position position = static_cast<Sci::Position>(LineStart(line + 1));
+ Sci::Position position = LineStart(line + 1);
if (SC_CP_UTF8 == dbcsCodePage) {
const unsigned char bytes[] = {
- static_cast<unsigned char>(cb.CharAt(position-3)),
- static_cast<unsigned char>(cb.CharAt(position-2)),
- static_cast<unsigned char>(cb.CharAt(position-1)),
+ cb.UCharAt(position-3),
+ cb.UCharAt(position-2),
+ cb.UCharAt(position-1),
};
if (UTF8IsSeparator(bytes)) {
return position - UTF8SeparatorLength;
@@ -384,11 +384,16 @@ void SCI_METHOD Document::SetErrorStatus(int status) {
}
Sci_Position SCI_METHOD Document::LineFromPosition(Sci_Position pos) const {
- return cb.LineFromPosition(static_cast<Sci::Position>(pos));
+ return cb.LineFromPosition(pos);
+}
+
+Sci::Line Document::SciLineFromPosition(Sci::Position pos) const {
+ // Avoids casting in callers for this very common function
+ return cb.LineFromPosition(pos);
}
Sci::Position Document::LineEndPosition(Sci::Position position) const {
- return static_cast<Sci::Position>(LineEnd(LineFromPosition(position)));
+ return LineEnd(LineFromPosition(position));
}
bool Document::IsLineEndPosition(Sci::Position position) const {
@@ -400,9 +405,9 @@ bool Document::IsPositionInLineEnd(Sci::Position position) const {
}
Sci::Position Document::VCHomePosition(Sci::Position position) const {
- const Sci::Line line = static_cast<Sci::Line>(LineFromPosition(position));
- const Sci::Position startPosition = static_cast<Sci::Position>(LineStart(line));
- const Sci::Position endLine = static_cast<Sci::Position>(LineEnd(line));
+ const Sci::Line line = SciLineFromPosition(position);
+ const Sci::Position startPosition = LineStart(line);
+ const Sci::Position endLine = LineEnd(line);
Sci::Position startText = startPosition;
while (startText < endLine && (cb.CharAt(startText) == ' ' || cb.CharAt(startText) == '\t'))
startText++;
@@ -416,7 +421,7 @@ int SCI_METHOD Document::SetLevel(Sci_Position line, int level) {
const int prev = Levels()->SetLevel(static_cast<Sci::Line>(line), level, LinesTotal());
if (prev != level) {
DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER,
- static_cast<Sci::Position>(LineStart(line)), 0, 0, 0, static_cast<Sci::Line>(line));
+ LineStart(line), 0, 0, 0, static_cast<Sci::Line>(line));
mh.foldLevelNow = level;
mh.foldLevelPrev = prev;
NotifyModified(mh);
@@ -446,7 +451,7 @@ Sci::Line Document::GetLastChild(Sci::Line lineParent, int level, Sci::Line last
const Sci::Line lookLastLine = (lastLine != -1) ? std::min(LinesTotal() - 1, lastLine) : -1;
Sci::Line lineMaxSubord = lineParent;
while (lineMaxSubord < maxLine - 1) {
- EnsureStyledTo(static_cast<Sci::Position>(LineStart(lineMaxSubord + 2)));
+ EnsureStyledTo(LineStart(lineMaxSubord + 2));
if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1)))
break;
if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !(GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG))
@@ -552,7 +557,7 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
}
Sci::Position Document::ClampPositionIntoDocument(Sci::Position pos) const {
- return std::clamp(pos, static_cast<Sci::Position>(0), static_cast<Sci::Position>(Length()));
+ return std::clamp(pos, static_cast<Sci::Position>(0), Length());
}
bool Document::IsCrLf(Sci::Position pos) const {
@@ -569,9 +574,9 @@ int Document::LenChar(Sci::Position pos) {
} else if (IsCrLf(pos)) {
return 2;
} else if (SC_CP_UTF8 == dbcsCodePage) {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(pos));
+ const unsigned char leadByte = cb.UCharAt(pos);
const int widthCharBytes = UTF8BytesOfLead[leadByte];
- const Sci::Position lengthDoc = static_cast<Sci::Position>(Length());
+ const Sci::Position lengthDoc = Length();
if ((pos + widthCharBytes) > lengthDoc)
return static_cast<int>(lengthDoc - pos);
else
@@ -585,11 +590,11 @@ int Document::LenChar(Sci::Position pos) {
bool Document::InGoodUTF8(Sci::Position pos, Sci::Position &start, Sci::Position &end) const {
Sci::Position trail = pos;
- while ((trail>0) && (pos-trail < UTF8MaxBytes) && UTF8IsTrailByte(static_cast<unsigned char>(cb.CharAt(trail-1))))
+ while ((trail>0) && (pos-trail < UTF8MaxBytes) && UTF8IsTrailByte(cb.UCharAt(trail-1)))
trail--;
start = (trail > 0) ? trail-1 : trail;
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(start));
+ const unsigned char leadByte = cb.UCharAt(start);
const int widthCharBytes = UTF8BytesOfLead[leadByte];
if (widthCharBytes == 1) {
return false;
@@ -600,8 +605,8 @@ bool Document::InGoodUTF8(Sci::Position pos, Sci::Position &start, Sci::Position
// pos too far from lead
return false;
char charBytes[UTF8MaxBytes] = {static_cast<char>(leadByte),0,0,0};
- for (int b=1; b<widthCharBytes && ((start+b) < Length()); b++)
- charBytes[b] = cb.CharAt(static_cast<Sci::Position>(start+b));
+ for (Sci::Position b=1; b<widthCharBytes && ((start+b) < Length()); b++)
+ charBytes[b] = cb.CharAt(start+b);
const int utf8status = UTF8Classify(reinterpret_cast<const unsigned char *>(charBytes), widthCharBytes);
if (utf8status & UTF8MaskInvalid)
return false;
@@ -621,7 +626,7 @@ Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position
if (pos <= 0)
return 0;
if (pos >= Length())
- return static_cast<Sci::Position>(Length());
+ return Length();
// PLATFORM_ASSERT(pos > 0 && pos < Length());
if (checkLineEnd && IsCrLf(pos - 1)) {
@@ -633,7 +638,7 @@ Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position
if (dbcsCodePage) {
if (SC_CP_UTF8 == dbcsCodePage) {
- const unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
+ const unsigned char ch = cb.UCharAt(pos);
// If ch is not a trail byte then pos is valid intercharacter position
if (UTF8IsTrailByte(ch)) {
Sci::Position startUTF = pos;
@@ -650,7 +655,7 @@ Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position
} else {
// Anchor DBCS calculations at start of line because start of line can
// not be a DBCS trail byte.
- const Sci::Position posStartLine = static_cast<Sci::Position>(LineStart(LineFromPosition(pos)));
+ const Sci::Position posStartLine = LineStart(LineFromPosition(pos));
if (pos == posStartLine)
return pos;
@@ -688,13 +693,13 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const {
if (pos + increment <= 0)
return 0;
if (pos + increment >= Length())
- return static_cast<Sci::Position>(Length());
+ return Length();
if (dbcsCodePage) {
if (SC_CP_UTF8 == dbcsCodePage) {
if (increment == 1) {
// Simple forward movement case so can avoid some checks
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(pos));
+ const unsigned char leadByte = cb.UCharAt(pos);
if (UTF8IsAscii(leadByte)) {
// Single byte character or invalid
pos++;
@@ -702,7 +707,7 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const {
const int widthCharBytes = UTF8BytesOfLead[leadByte];
char charBytes[UTF8MaxBytes] = {static_cast<char>(leadByte),0,0,0};
for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = cb.CharAt(static_cast<int>(pos+b));
+ charBytes[b] = cb.CharAt(pos+b);
const int utf8status = UTF8Classify(reinterpret_cast<const unsigned char *>(charBytes), widthCharBytes);
if (utf8status & UTF8MaskInvalid)
pos++;
@@ -712,7 +717,7 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const {
} else {
// Examine byte before position
pos--;
- const unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
+ const unsigned char ch = cb.UCharAt(pos);
// If ch is not a trail byte then pos is valid intercharacter position
if (UTF8IsTrailByte(ch)) {
// If ch is a trail byte in a valid UTF-8 character then return start of character
@@ -729,11 +734,11 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const {
const int mbsize = IsDBCSLeadByte(cb.CharAt(pos)) ? 2 : 1;
pos += mbsize;
if (pos > Length())
- pos = static_cast<Sci::Position>(Length());
+ pos = Length();
} else {
// Anchor DBCS calculations at start of line because start of line can
// not be a DBCS trail byte.
- const Sci::Position posStartLine = static_cast<Sci::Position>(LineStart(LineFromPosition(pos)));
+ const Sci::Position posStartLine = LineStart(LineFromPosition(pos));
// See http://msdn.microsoft.com/en-us/library/cc194792%28v=MSDN.10%29.aspx
// http://msdn.microsoft.com/en-us/library/cc194790.aspx
if ((pos - 1) <= posStartLine) {
@@ -775,7 +780,7 @@ Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) co
if (position >= Length()) {
return CharacterExtracted(unicodeReplacementChar, 0);
}
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(position));
+ const unsigned char leadByte = cb.UCharAt(position);
if (!dbcsCodePage || UTF8IsAscii(leadByte)) {
// Common case: ASCII character
return CharacterExtracted(leadByte, 1);
@@ -784,7 +789,7 @@ Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) co
const int widthCharBytes = UTF8BytesOfLead[leadByte];
unsigned char charBytes[UTF8MaxBytes] = { leadByte, 0, 0, 0 };
for (int b = 1; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(cb.CharAt(position + b));
+ charBytes[b] = cb.UCharAt(position + b);
const int utf8status = UTF8Classify(charBytes, widthCharBytes);
if (utf8status & UTF8MaskInvalid) {
// Treat as invalid and use up just one byte
@@ -794,7 +799,7 @@ Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) co
}
} else {
if (IsDBCSLeadByte(leadByte) && ((position + 1) < Length())) {
- return CharacterExtracted::DBCS(leadByte, static_cast<unsigned char>(cb.CharAt(position + 1)));
+ return CharacterExtracted::DBCS(leadByte, cb.UCharAt(position + 1));
} else {
return CharacterExtracted(leadByte, 1);
}
@@ -805,7 +810,7 @@ Document::CharacterExtracted Document::CharacterBefore(Sci::Position position) c
if (position <= 0) {
return CharacterExtracted(unicodeReplacementChar, 0);
}
- const unsigned char previousByte = static_cast<unsigned char>(cb.CharAt(position - 1));
+ const unsigned char previousByte = cb.UCharAt(position - 1);
if (0 == dbcsCodePage) {
return CharacterExtracted(previousByte, 1);
}
@@ -823,7 +828,7 @@ Document::CharacterExtracted Document::CharacterBefore(Sci::Position position) c
const int widthCharBytes = static_cast<int>(endUTF - startUTF);
unsigned char charBytes[UTF8MaxBytes] = { 0, 0, 0, 0 };
for (int b = 0; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(cb.CharAt(startUTF + b));
+ charBytes[b] = cb.UCharAt(startUTF + b);
const int utf8status = UTF8Classify(charBytes, widthCharBytes);
if (utf8status & UTF8MaskInvalid) {
// Treat as invalid and use up just one byte
@@ -844,7 +849,7 @@ Document::CharacterExtracted Document::CharacterBefore(Sci::Position position) c
// Return -1 on out-of-bounds
Sci_Position SCI_METHOD Document::GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const {
- Sci::Position pos = static_cast<Sci::Position>(positionStart);
+ Sci::Position pos = positionStart;
if (dbcsCodePage) {
const int increment = (characterOffset > 0) ? 1 : -1;
while (characterOffset != 0) {
@@ -855,7 +860,7 @@ Sci_Position SCI_METHOD Document::GetRelativePosition(Sci_Position positionStart
characterOffset -= increment;
}
} else {
- pos = static_cast<Sci::Position>(positionStart + characterOffset);
+ pos = positionStart + characterOffset;
if ((pos < 0) || (pos > Length()))
return INVALID_POSITION;
}
@@ -887,8 +892,7 @@ int SCI_METHOD Document::GetCharacterAndWidth(Sci_Position position, Sci_Positio
int character;
int bytesInCharacter = 1;
if (dbcsCodePage) {
- const unsigned char leadByte = static_cast<unsigned char>(
- cb.CharAt(static_cast<Sci::Position>(position)));
+ const unsigned char leadByte = cb.UCharAt(position);
if (SC_CP_UTF8 == dbcsCodePage) {
if (UTF8IsAscii(leadByte)) {
// Single byte character or invalid
@@ -897,8 +901,7 @@ int SCI_METHOD Document::GetCharacterAndWidth(Sci_Position position, Sci_Positio
const int widthCharBytes = UTF8BytesOfLead[leadByte];
unsigned char charBytes[UTF8MaxBytes] = {leadByte,0,0,0};
for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(
- cb.CharAt(static_cast<Sci::Position>(position+b)));
+ charBytes[b] = cb.UCharAt(position+b);
const int utf8status = UTF8Classify(charBytes, widthCharBytes);
if (utf8status & UTF8MaskInvalid) {
// Report as singleton surrogate values which are invalid Unicode
@@ -911,14 +914,13 @@ int SCI_METHOD Document::GetCharacterAndWidth(Sci_Position position, Sci_Positio
} else {
if (IsDBCSLeadByte(leadByte)) {
bytesInCharacter = 2;
- character = (leadByte << 8) | static_cast<unsigned char>(
- cb.CharAt(static_cast<Sci::Position>(position+1)));
+ character = (leadByte << 8) | cb.UCharAt(position+1);
} else {
character = leadByte;
}
}
} else {
- character = cb.CharAt(static_cast<Sci::Position>(position));
+ character = cb.CharAt(position);
}
if (pWidth) {
*pWidth = bytesInCharacter;
@@ -1095,7 +1097,7 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci:
0, s));
if (insertionSet) {
s = insertion.c_str();
- insertLength = static_cast<int>(insertion.length());
+ insertLength = insertion.length();
}
NotifyModified(
DocModification(
@@ -1128,8 +1130,8 @@ void Document::ChangeInsertion(const char *s, Sci::Position length) {
int SCI_METHOD Document::AddData(const char *data, Sci_Position length) {
try {
- const Sci::Position position = static_cast<Sci::Position>(Length());
- InsertString(position, data, static_cast<Sci::Position>(length));
+ const Sci::Position position = Length();
+ InsertString(position, data, length);
} catch (std::bad_alloc &) {
return SC_STATUS_BADALLOC;
} catch (...) {
@@ -1326,8 +1328,8 @@ static std::string CreateIndentation(Sci::Position indent, int tabSize, bool ins
int SCI_METHOD Document::GetLineIndentation(Sci_Position line) {
int indent = 0;
if ((line >= 0) && (line < LinesTotal())) {
- const Sci::Position lineStart = static_cast<Sci::Position>(LineStart(line));
- const Sci::Position length = static_cast<Sci::Position>(Length());
+ const Sci::Position lineStart = LineStart(line);
+ const Sci::Position length = Length();
for (Sci::Position i = lineStart; i < length; i++) {
const char ch = cb.CharAt(i);
if (ch == ' ')
@@ -1347,12 +1349,12 @@ Sci::Position Document::SetLineIndentation(Sci::Line line, Sci::Position indent)
indent = 0;
if (indent != indentOfLine) {
std::string linebuf = CreateIndentation(indent, tabInChars, !useTabs);
- const Sci::Position thisLineStart = static_cast<Sci::Position>(LineStart(line));
+ const Sci::Position thisLineStart = LineStart(line);
const Sci::Position indentPos = GetLineIndentPosition(line);
UndoGroup ug(this);
DeleteChars(thisLineStart, indentPos - thisLineStart);
return thisLineStart + InsertString(thisLineStart, linebuf.c_str(),
- static_cast<Sci::Position>(linebuf.length()));
+ linebuf.length());
} else {
return GetLineIndentPosition(line);
}
@@ -1361,8 +1363,8 @@ Sci::Position Document::SetLineIndentation(Sci::Line line, Sci::Position indent)
Sci::Position Document::GetLineIndentPosition(Sci::Line line) const {
if (line < 0)
return 0;
- Sci::Position pos = static_cast<Sci::Position>(LineStart(line));
- const Sci::Position length = static_cast<Sci::Position>(Length());
+ Sci::Position pos = LineStart(line);
+ const Sci::Position length = Length();
while ((pos < length) && IsSpaceOrTab(cb.CharAt(pos))) {
pos++;
}
@@ -1371,9 +1373,9 @@ Sci::Position Document::GetLineIndentPosition(Sci::Line line) const {
Sci::Position Document::GetColumn(Sci::Position pos) {
Sci::Position column = 0;
- const Sci::Line line = static_cast<Sci::Line>(LineFromPosition(pos));
+ const Sci::Line line = SciLineFromPosition(pos);
if ((line >= 0) && (line < LinesTotal())) {
- for (Sci::Position i = static_cast<Sci::Position>(LineStart(line)); i < pos;) {
+ for (Sci::Position i = LineStart(line); i < pos;) {
const char ch = cb.CharAt(i);
if (ch == '\t') {
column = NextTab(column, tabInChars);
@@ -1421,7 +1423,7 @@ Sci::Position Document::CountUTF16(Sci::Position startPos, Sci::Position endPos)
}
Sci::Position Document::FindColumn(Sci::Line line, Sci::Position column) {
- Sci::Position position = static_cast<Sci::Position>(LineStart(line));
+ Sci::Position position = LineStart(line);
if ((line >= 0) && (line < LinesTotal())) {
Sci::Position columnCurrent = 0;
while ((columnCurrent < column) && (position < Length())) {
@@ -1526,10 +1528,10 @@ int Document::Options() const {
}
bool Document::IsWhiteLine(Sci::Line line) const {
- Sci::Position currentChar = static_cast<Sci::Position>(LineStart(line));
- const Sci::Position endLine = static_cast<Sci::Position>(LineEnd(line));
+ Sci::Position currentChar = LineStart(line);
+ const Sci::Position endLine = LineEnd(line);
while (currentChar < endLine) {
- if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') {
+ if (!IsSpaceOrTab(cb.CharAt(currentChar))) {
return false;
}
++currentChar;
@@ -1538,7 +1540,7 @@ bool Document::IsWhiteLine(Sci::Line line) const {
}
Sci::Position Document::ParaUp(Sci::Position pos) const {
- Sci::Line line = static_cast<Sci::Line>(LineFromPosition(pos));
+ Sci::Line line = SciLineFromPosition(pos);
line--;
while (line >= 0 && IsWhiteLine(line)) { // skip empty lines
line--;
@@ -1547,11 +1549,11 @@ Sci::Position Document::ParaUp(Sci::Position pos) const {
line--;
}
line++;
- return static_cast<Sci::Position>(LineStart(line));
+ return LineStart(line);
}
Sci::Position Document::ParaDown(Sci::Position pos) const {
- Sci::Line line = static_cast<Sci::Line>(LineFromPosition(pos));
+ Sci::Line line = SciLineFromPosition(pos);
while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines
line++;
}
@@ -1559,9 +1561,9 @@ Sci::Position Document::ParaDown(Sci::Position pos) const {
line++;
}
if (line < LinesTotal())
- return static_cast<Sci::Position>(LineStart(line));
+ return LineStart(line);
else // end of a document
- return static_cast<Sci::Position>(LineEnd(line-1));
+ return LineEnd(line-1);
}
bool Document::IsASCIIWordByte(unsigned char ch) const {
@@ -1817,7 +1819,7 @@ void Document::SetCaseFolder(CaseFolder *pcf_) {
}
Document::CharacterExtracted Document::ExtractCharacter(Sci::Position position) const {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(position));
+ const unsigned char leadByte = cb.UCharAt(position);
if (UTF8IsAscii(leadByte)) {
// Common case: ASCII character
return CharacterExtracted(leadByte, 1);
@@ -1825,7 +1827,7 @@ Document::CharacterExtracted Document::ExtractCharacter(Sci::Position position)
const int widthCharBytes = UTF8BytesOfLead[leadByte];
unsigned char charBytes[UTF8MaxBytes] = { leadByte, 0, 0, 0 };
for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(cb.CharAt(position + b));
+ charBytes[b] = cb.UCharAt(position + b);
const int utf8status = UTF8Classify(charBytes, widthCharBytes);
if (utf8status & UTF8MaskInvalid) {
// Treat as invalid and use up just one byte
@@ -1900,7 +1902,7 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con
size_t indexSearch = 0;
bool characterMatches = true;
for (;;) {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(posIndexDocument));
+ const unsigned char leadByte = cb.UCharAt(posIndexDocument);
bytes[0] = leadByte;
int widthChar = 1;
if (!UTF8IsAscii(leadByte)) {
@@ -2024,7 +2026,7 @@ int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *bu
}
void SCI_METHOD Document::StartStyling(Sci_Position position) {
- endStyled = static_cast<Sci::Position>(position);
+ endStyled = position;
}
bool SCI_METHOD Document::SetStyleFor(Sci_Position length, char style) {
@@ -2033,12 +2035,12 @@ bool SCI_METHOD Document::SetStyleFor(Sci_Position length, char style) {
} else {
enteredStyling++;
const Sci::Position prevEndStyled = endStyled;
- if (cb.SetStyleFor(static_cast<Sci::Position>(endStyled), static_cast<Sci::Position>(length), style)) {
+ if (cb.SetStyleFor(endStyled, length, style)) {
const DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER,
- prevEndStyled, static_cast<Sci::Position>(length));
+ prevEndStyled, length);
NotifyModified(mh);
}
- endStyled += static_cast<Sci::Position>(length);
+ endStyled += length;
enteredStyling--;
return true;
}
@@ -2076,8 +2078,8 @@ void Document::EnsureStyledTo(Sci::Position pos) {
if ((enteredStyling == 0) && (pos > GetEndStyled())) {
IncrementStyleClock();
if (pli && !pli->UseContainerLexing()) {
- const Sci::Line lineEndStyled = static_cast<Sci::Line>(LineFromPosition(GetEndStyled()));
- const Sci::Position endStyledTo = static_cast<Sci::Position>(LineStart(lineEndStyled));
+ const Sci::Line lineEndStyled = SciLineFromPosition(GetEndStyled());
+ const Sci::Position endStyledTo = LineStart(lineEndStyled);
pli->Colourise(endStyledTo, pos);
} else {
// Ask the watchers to style, and stop as soon as one responds.
@@ -2099,11 +2101,11 @@ void Document::StyleToAdjustingLineDuration(Sci::Position pos) {
// Most recent value contributes 25% to smoothed value.
const double alpha = 0.25;
- const Sci::Line lineFirst = static_cast<Sci::Line>(LineFromPosition(GetEndStyled()));
+ const Sci::Line lineFirst = SciLineFromPosition(GetEndStyled());
ElapsedTime etStyling;
EnsureStyledTo(pos);
const double durationStyling = etStyling.Duration();
- const Sci::Line lineLast = static_cast<Sci::Line>(LineFromPosition(GetEndStyled()));
+ const Sci::Line lineLast = SciLineFromPosition(GetEndStyled());
if (lineLast >= lineFirst + 8) {
// Only adjust for styling multiple lines to avoid instability
const double durationOneLine = durationStyling / (lineLast - lineFirst);
@@ -2134,7 +2136,7 @@ void Document::SetLexInterface(LexInterface *pLexInterface) {
int SCI_METHOD Document::SetLineState(Sci_Position line, int state) {
const int statePrevious = States()->SetLineState(static_cast<Sci::Line>(line), state);
if (state != statePrevious) {
- const DocModification mh(SC_MOD_CHANGELINESTATE, static_cast<Sci::Position>(LineStart(line)), 0, 0, 0,
+ const DocModification mh(SC_MOD_CHANGELINESTATE, LineStart(line), 0, 0, 0,
static_cast<Sci::Line>(line));
NotifyModified(mh);
}
@@ -2150,8 +2152,8 @@ Sci::Line Document::GetMaxLineState() const {
}
void SCI_METHOD Document::ChangeLexerState(Sci_Position start, Sci_Position end) {
- const DocModification mh(SC_MOD_LEXERSTATE, static_cast<Sci::Position>(start),
- static_cast<Sci::Position>(end-start), 0, 0, 0);
+ const DocModification mh(SC_MOD_LEXERSTATE, start,
+ end-start, 0, 0, 0);
NotifyModified(mh);
}
@@ -2163,20 +2165,20 @@ StyledText Document::MarginStyledText(Sci::Line line) const {
void Document::MarginSetText(Sci::Line line, const char *text) {
Margins()->SetText(line, text);
- const DocModification mh(SC_MOD_CHANGEMARGIN, static_cast<Sci::Position>(LineStart(line)),
+ const DocModification mh(SC_MOD_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, static_cast<Sci::Position>(LineStart(line)),
+ NotifyModified(DocModification(SC_MOD_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, static_cast<Sci::Position>(LineStart(line)),
+ NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line),
0, 0, 0, line));
}
@@ -2199,7 +2201,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, static_cast<Sci::Position>(LineStart(line)),
+ DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line),
0, 0, 0, line);
mh.annotationLinesAdded = linesAfter - linesBefore;
NotifyModified(mh);
@@ -2208,7 +2210,8 @@ void Document::AnnotationSetText(Sci::Line line, const char *text) {
void Document::AnnotationSetStyle(Sci::Line line, int style) {
Annotations()->SetStyle(line, style);
- const DocModification mh(SC_MOD_CHANGEANNOTATION, static_cast<Sci::Position>(LineStart(line)), 0, 0, 0, line);
+ const DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line),
+ 0, 0, 0, line);
NotifyModified(mh);
}
@@ -2240,7 +2243,7 @@ void SCI_METHOD Document::DecorationSetCurrentIndicator(int indicator) {
void SCI_METHOD Document::DecorationFillRange(Sci_Position position, int value, Sci_Position fillLength) {
const FillResult<Sci::Position> fr = decorations->FillRange(
- static_cast<Sci::Position>(position), value, static_cast<Sci::Position>(fillLength));
+ position, value, fillLength);
if (fr.changed) {
const DocModification mh(SC_MOD_CHANGEINDICATOR | SC_PERFORMED_USER,
fr.position, fr.fillLength);
@@ -2388,7 +2391,7 @@ Sci::Position Document::WordPartLeft(Sci::Position pos) const {
Sci::Position Document::WordPartRight(Sci::Position pos) const {
CharacterExtracted ceStart = CharacterAfter(pos);
- const Sci::Position length = static_cast<Sci::Position>(Length());
+ const Sci::Position length = Length();
if (IsWordPartSeparator(ceStart.character)) {
while (pos < length && IsWordPartSeparator(CharacterAfter(pos).character))
pos += CharacterAfter(pos).widthBytes;
@@ -2540,12 +2543,12 @@ public:
startPos = doc->MovePositionOutsideChar(minPos, 1, true);
endPos = doc->MovePositionOutsideChar(maxPos, 1, true);
- lineRangeStart = static_cast<Sci::Line>(doc->LineFromPosition(startPos));
- lineRangeEnd = static_cast<Sci::Line>(doc->LineFromPosition(endPos));
+ lineRangeStart = doc->SciLineFromPosition(startPos);
+ lineRangeEnd = doc->SciLineFromPosition(endPos);
lineRangeBreak = lineRangeEnd + increment;
}
Range LineRange(Sci::Line line) const {
- Range range(static_cast<Sci::Position>(doc->LineStart(line)), static_cast<Sci::Position>(doc->LineEnd(line)));
+ Range range(doc->LineStart(line), doc->LineEnd(line));
if (increment == 1) {
if (line == lineRangeStart)
range.start = startPos;
@@ -2985,8 +2988,8 @@ Sci::Position BuiltinRegex::FindText(Document *doc, Sci::Position minPos, Sci::P
const char searchEndPrev = (*length > 1) ? s[*length - 2] : '\0';
const bool searchforLineEnd = (searchEnd == '$') && (searchEndPrev != '\\');
for (Sci::Line line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) {
- Sci::Position startOfLine = static_cast<Sci::Position>(doc->LineStart(line));
- Sci::Position endOfLine = static_cast<Sci::Position>(doc->LineEnd(line));
+ Sci::Position startOfLine = doc->LineStart(line);
+ Sci::Position endOfLine = doc->LineEnd(line);
if (resr.increment == 1) {
if (line == resr.lineRangeStart) {
if ((resr.startPos != startOfLine) && searchforLineStart)
@@ -3043,7 +3046,7 @@ Sci::Position BuiltinRegex::FindText(Document *doc, Sci::Position minPos, Sci::P
const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text, Sci::Position *length) {
substituted.clear();
- const DocumentIndexer di(doc, static_cast<Sci::Position>(doc->Length()));
+ const DocumentIndexer di(doc, doc->Length());
search.GrabMatches(di);
for (int j = 0; j < *length; j++) {
if (text[j] == '\\') {
@@ -3089,7 +3092,7 @@ const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text,
substituted.push_back(text[j]);
}
}
- *length = static_cast<int>(substituted.length());
+ *length = substituted.length();
return substituted.c_str();
}