diff options
Diffstat (limited to 'src/Document.cxx')
-rw-r--r-- | src/Document.cxx | 189 |
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(); } |