diff options
| author | Neil <nyamatongwe@gmail.com> | 2018-04-19 17:09:27 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2018-04-19 17:09:27 +1000 | 
| commit | a29a92c614ae03f4058f0e63899350d83c43d670 (patch) | |
| tree | 5b2c629dde7ea3c7976912d80ddf1626c27a258b /src | |
| parent | 463b5ec1bd24fd9b23d0f6149a30a4e0d9136eaa (diff) | |
| download | scintilla-mirror-a29a92c614ae03f4058f0e63899350d83c43d670.tar.gz | |
Casting changed in many places, due to change to 64-bit variables for 64-bit
builds. Some of the changes ensure no truncation while others remove casts
that are no longer needed because the externally visible Sci_Position is now
identical to Sci::Position. Some extra methods (CellBuffer::UCharAt and
Document::SciLineFromPosition) added to avoid casting in client code.
Sci::Line is currently identical to Sci::Position but it could be made smaller
so lines have Sci::Line types and are cast.
Some arguments widened.
Diffstat (limited to 'src')
| -rw-r--r-- | src/CellBuffer.cxx | 8 | ||||
| -rw-r--r-- | src/CellBuffer.h | 1 | ||||
| -rw-r--r-- | src/Document.cxx | 189 | ||||
| -rw-r--r-- | src/Document.h | 7 | ||||
| -rw-r--r-- | src/EditView.cxx | 88 | ||||
| -rw-r--r-- | src/Editor.cxx | 688 | ||||
| -rw-r--r-- | src/Editor.h | 8 | ||||
| -rw-r--r-- | src/MarginView.cxx | 2 | ||||
| -rw-r--r-- | src/ScintillaBase.cxx | 22 | 
9 files changed, 508 insertions, 505 deletions
| diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx index 697d75b54..177aa60e8 100644 --- a/src/CellBuffer.cxx +++ b/src/CellBuffer.cxx @@ -381,6 +381,10 @@ char CellBuffer::CharAt(Sci::Position position) const {  	return substance.ValueAt(position);  } +unsigned char CellBuffer::UCharAt(Sci::Position position) const { +	return static_cast<unsigned char>(substance.ValueAt(position)); +} +  void CellBuffer::GetCharRange(char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const {  	if (lengthRetrieve <= 0)  		return; @@ -424,7 +428,7 @@ const char *CellBuffer::RangePointer(Sci::Position position, Sci::Position range  }  Sci::Position CellBuffer::GapPosition() const { -	return static_cast<Sci::Position>(substance.GapPosition()); +	return substance.GapPosition();  }  // The char* returned is to an allocation owned by the undo history @@ -493,7 +497,7 @@ const char *CellBuffer::DeleteChars(Sci::Position position, Sci::Position delete  }  Sci::Position CellBuffer::Length() const { -	return static_cast<Sci::Position>(substance.Length()); +	return substance.Length();  }  void CellBuffer::Allocate(Sci::Position newSize) { diff --git a/src/CellBuffer.h b/src/CellBuffer.h index 935ea6e69..065c73795 100644 --- a/src/CellBuffer.h +++ b/src/CellBuffer.h @@ -135,6 +135,7 @@ public:  	/// Retrieving positions outside the range of the buffer works and returns 0  	char CharAt(Sci::Position position) const; +	unsigned char UCharAt(Sci::Position position) const;  	void GetCharRange(char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const;  	char StyleAt(Sci::Position position) const;  	void GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const; 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();  } diff --git a/src/Document.h b/src/Document.h index d5d0a4d2e..387af74f0 100644 --- a/src/Document.h +++ b/src/Document.h @@ -290,6 +290,7 @@ public:  	void SCI_METHOD SetErrorStatus(int status) override;  	Sci_Position SCI_METHOD LineFromPosition(Sci_Position pos) const override; +	Sci::Line SciLineFromPosition(Sci::Position pos) const;	// Avoids casting LineFromPosition  	Sci::Position ClampPositionIntoDocument(Sci::Position pos) const;  	bool ContainsLineEnd(const char *s, Sci::Position length) const { return cb.ContainsLineEnd(s, length); }  	bool IsCrLf(Sci::Position pos) const; @@ -360,10 +361,10 @@ public:  	char CharAt(Sci::Position position) const { return cb.CharAt(position); }  	void SCI_METHOD GetCharRange(char *buffer, Sci_Position position, Sci_Position lengthRetrieve) const override { -		cb.GetCharRange(buffer, static_cast<Sci::Position>(position), static_cast<Sci::Position>(lengthRetrieve)); +		cb.GetCharRange(buffer, position, lengthRetrieve);  	} -	char SCI_METHOD StyleAt(Sci_Position position) const override { return cb.StyleAt(static_cast<Sci::Position>(position)); } -	int StyleIndexAt(Sci_Position position) const { return static_cast<unsigned char>(cb.StyleAt(static_cast<Sci::Position>(position))); } +	char SCI_METHOD StyleAt(Sci_Position position) const override { return cb.StyleAt(position); } +	int StyleIndexAt(Sci_Position position) const { return static_cast<unsigned char>(cb.StyleAt(position)); }  	void GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const {  		cb.GetStyleRange(buffer, position, lengthRetrieve);  	} diff --git a/src/EditView.cxx b/src/EditView.cxx index acf7b3b84..e9e369e79 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -333,10 +333,10 @@ void EditView::RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewSt  }  LineLayout *EditView::RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model) { -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineNumber)); -	const Sci::Position posLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(lineNumber + 1)); +	const Sci::Position posLineStart = model.pdoc->LineStart(lineNumber); +	const Sci::Position posLineEnd = model.pdoc->LineStart(lineNumber + 1);  	PLATFORM_ASSERT(posLineEnd >= posLineStart); -	const Sci::Line lineCaret = static_cast<Sci::Line>(model.pdoc->LineFromPosition(model.sel.MainCaret())); +	const Sci::Line lineCaret = model.pdoc->SciLineFromPosition(model.sel.MainCaret());  	return llc.Retrieve(lineNumber, lineCaret,  		static_cast<int>(posLineEnd - posLineStart), model.pdoc->GetStyleClock(),  		model.LinesOnScreen() + 1, model.pdoc->LinesTotal()); @@ -353,8 +353,8 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa  	PLATFORM_ASSERT(line < model.pdoc->LinesTotal());  	PLATFORM_ASSERT(ll->chars != NULL); -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); -	Sci::Position posLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); +	const Sci::Position posLineStart = model.pdoc->LineStart(line); +	Sci::Position posLineEnd = model.pdoc->LineStart(line + 1);  	// If the line is very long, limit the treatment to a length that should fit in the viewport  	if (posLineEnd >(posLineStart + ll->maxLineLength)) {  		posLineEnd = posLineStart + ll->maxLineLength; @@ -362,7 +362,7 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa  	if (ll->validity == LineLayout::llCheckTextAndStyle) {  		Sci::Position lineLength = posLineEnd - posLineStart;  		if (!vstyle.viewEOL) { -			lineLength = static_cast<Sci::Position>(model.pdoc->LineEnd(line)) - posLineStart; +			lineLength = model.pdoc->LineEnd(line) - posLineStart;  		}  		if (lineLength == ll->numCharsInLine) {  			// See if chars, styles, indicators, are all the same @@ -593,12 +593,12 @@ Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, S  	Point pt;  	if (pos.Position() == INVALID_POSITION)  		return pt; -	Sci::Line lineDoc = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos.Position())); -	Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +	Sci::Line lineDoc = model.pdoc->SciLineFromPosition(pos.Position()); +	Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  	if ((pe & peLineEnd) && (lineDoc > 0) && (pos.Position() == posLineStart)) {  		// Want point at end of first line  		lineDoc--; -		posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +		posLineStart = model.pdoc->LineStart(lineDoc);  	}  	const Sci::Line lineVisible = model.pcs->DisplayFromDoc(lineDoc);  	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); @@ -619,7 +619,7 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci::  		return rangeSubLine;  	}  	const Sci::Line lineDoc = model.pcs->DocFromDisplay(lineVisible); -	const Sci::Position positionLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +	const Sci::Position positionLineStart = model.pdoc->LineStart(lineDoc);  	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));  	if (surface && ll) {  		LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); @@ -628,7 +628,7 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci::  		if (subLine < ll->lines) {  			rangeSubLine = ll->SubLineRange(subLine);  			if (subLine == ll->lines-1) { -				rangeSubLine.end = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1)) - +				rangeSubLine.end = model.pdoc->LineStart(lineDoc + 1) -  					positionLineStart;  			}  		} @@ -648,8 +648,8 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo  		return SelectionPosition(INVALID_POSITION);  	if (lineDoc >= model.pdoc->LinesTotal())  		return SelectionPosition(canReturnInvalid ? INVALID_POSITION : -			static_cast<Sci::Position>(model.pdoc->Length())); -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +			model.pdoc->Length()); +	const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));  	if (surface && ll) {  		LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); @@ -692,7 +692,7 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo  SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel &model, Sci::Line lineDoc, int x, const ViewStyle &vs) {  	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));  	if (surface && ll) { -		const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +		const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  		LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);  		const Range rangeSubLine = ll->SubLineRange(0);  		const XYPOSITION subLineStart = ll->positions[rangeSubLine.start]; @@ -709,12 +709,12 @@ SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel  }  Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model, Sci::Position pos, const ViewStyle &vs) { -	const Sci::Line lineDoc = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos)); +	const Sci::Line lineDoc = model.pdoc->SciLineFromPosition(pos);  	Sci::Line lineDisplay = model.pcs->DisplayFromDoc(lineDoc);  	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));  	if (surface && ll) {  		LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); -		const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +		const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  		const Sci::Position posInLine = pos - posLineStart;  		lineDisplay--; // To make up for first increment ahead.  		for (int subLine = 0; subLine < ll->lines; subLine++) { @@ -727,11 +727,11 @@ Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model  }  Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &model, Sci::Position pos, bool start, const ViewStyle &vs) { -	const Sci::Line line = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos)); +	const Sci::Line line = model.pdoc->SciLineFromPosition(pos);  	AutoLineLayout ll(llc, RetrieveLineLayout(line, model));  	Sci::Position posRet = INVALID_POSITION;  	if (surface && ll) { -		const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +		const Sci::Position posLineStart = model.pdoc->LineStart(line);  		LayoutLine(model, line, surface, vs, ll, model.wrapWidth);  		const Sci::Position posInLine = pos - posLineStart;  		if (posInLine <= ll->maxLineLength) { @@ -859,14 +859,14 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  	PRectangle rcLine, Sci::Line line, Sci::Position lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart,  	ColourOptional background) { -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +	const Sci::Position posLineStart = model.pdoc->LineStart(line);  	PRectangle rcSegment = rcLine;  	const bool lastSubLine = subLine == (ll->lines - 1);  	XYPOSITION virtualSpace = 0;  	if (lastSubLine) {  		const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth; -		virtualSpace = model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))) * spaceWidth; +		virtualSpace = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)) * spaceWidth;  	}  	const XYPOSITION xEol = static_cast<XYPOSITION>(ll->positions[lineEnd] - subLineStart); @@ -876,9 +876,9 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  		rcSegment.right = xEol + xStart + virtualSpace;  		surface->FillRectangle(rcSegment, background.isSet ? background : vsDraw.styles[ll->styles[ll->numCharsInLine]].back);  		if (!hideSelection && ((vsDraw.selAlpha == SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha == SC_ALPHA_NOALPHA))) { -			const SelectionSegment virtualSpaceRange(SelectionPosition(static_cast<Sci::Position>(model.pdoc->LineEnd(line))), -				SelectionPosition(static_cast<Sci::Position>(model.pdoc->LineEnd(line)), -					model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))))); +			const SelectionSegment virtualSpaceRange(SelectionPosition(model.pdoc->LineEnd(line)), +				SelectionPosition(model.pdoc->LineEnd(line), +					model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line))));  			for (size_t r = 0; r<model.sel.Count(); r++) {  				const int alpha = (r == model.sel.Main()) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha;  				if (alpha == SC_ALPHA_NOALPHA) { @@ -901,7 +901,7 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  	int eolInSelection = 0;  	int alpha = SC_ALPHA_NOALPHA;  	if (!hideSelection) { -		const Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); +		const Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1);  		eolInSelection = (lastSubLine == true) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0;  		alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha;  	} @@ -1038,7 +1038,7 @@ static void DrawIndicator(int indicNum, Sci::Position startPos, Sci::Position en  static void DrawIndicators(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll,  	Sci::Line line, int xStart, PRectangle rcLine, int subLine, Sci::Position lineEnd, bool under, Sci::Position hoverIndicatorPos) {  	// Draw decorators -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +	const Sci::Position posLineStart = model.pdoc->LineStart(line);  	const Sci::Position lineStart = ll->LineStart(subLine);  	const Sci::Position posLineEnd = posLineStart + lineEnd; @@ -1108,14 +1108,14 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con  	int eolInSelection = 0;  	int alpha = SC_ALPHA_NOALPHA;  	if (!hideSelection) { -		const Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); +		const Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1);  		eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0;  		alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha;  	}  	const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;  	const XYPOSITION virtualSpace = model.sel.VirtualSpaceFor( -		static_cast<Sci::Position>(model.pdoc->LineEnd(line))) * spaceWidth; +		model.pdoc->LineEnd(line)) * spaceWidth;  	rcSegment.left = xStart + static_cast<XYPOSITION>(ll->positions[ll->numCharsInLine] - subLineStart) + virtualSpace + vsDraw.aveCharWidth;  	rcSegment.right = rcSegment.left + static_cast<XYPOSITION>(widthFoldDisplayText); @@ -1316,7 +1316,7 @@ void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewSt  	const bool drawDrag = model.posDrag.IsValid();  	if (hideSelection && !drawDrag)  		return; -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +	const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  	// For each selection draw  	for (size_t r = 0; (r<model.sel.Count()) || drawDrag; r++) {  		const bool mainCaret = r == model.sel.Main(); @@ -1550,12 +1550,12 @@ static void DrawMarkUnderline(Surface *surface, const EditModel &model, const Vi  static void DrawTranslucentSelection(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll,  	Sci::Line line, PRectangle rcLine, int subLine, Range lineRange, int xStart) {  	if ((vsDraw.selAlpha != SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha != SC_ALPHA_NOALPHA)) { -		const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +		const Sci::Position posLineStart = model.pdoc->LineStart(line);  		const XYACCUMULATOR subLineStart = ll->positions[lineRange.start];  		// For each selection draw  		Sci::Position virtualSpaces = 0;  		if (subLine == (ll->lines - 1)) { -			virtualSpaces = model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))); +			virtualSpaces = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line));  		}  		const SelectionPosition posStart(posLineStart + lineRange.start);  		const SelectionPosition posEnd(posLineStart + lineRange.end, virtualSpaces); @@ -1815,7 +1815,7 @@ void EditView::DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &mode  	Sci::Line line, Sci::Line lineVisible, PRectangle rcLine, int xStart, int subLine) {  	if ((vsDraw.viewIndentationGuides == ivLookForward || vsDraw.viewIndentationGuides == ivLookBoth)  		&& (subLine == 0)) { -		const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +		const Sci::Position posLineStart = model.pdoc->LineStart(line);  		int indentSpace = model.pdoc->GetLineIndentation(line);  		int xStartText = static_cast<int>(ll->positions[model.pdoc->GetLineIndentPosition(line) - posLineStart]); @@ -1876,7 +1876,7 @@ void EditView::DrawLine(Surface *surface, const EditModel &model, const ViewStyl  	// See if something overrides the line background color.  	const ColourOptional background = vsDraw.Background(model.pdoc->GetMark(line), model.caret.active, ll->containsCaret); -	const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); +	const Sci::Position posLineStart = model.pdoc->LineStart(line);  	const Range lineRange = ll->SubLineRange(subLine);  	const XYACCUMULATOR subLineStart = ll->positions[lineRange.start]; @@ -1990,7 +1990,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  		SelectionPosition posCaret = model.sel.RangeMain().caret;  		if (model.posDrag.IsValid())  			posCaret = model.posDrag; -		const Sci::Line lineCaret = static_cast<Sci::Line>(model.pdoc->LineFromPosition(posCaret.Position())); +		const Sci::Line lineCaret = model.pdoc->SciLineFromPosition(posCaret.Position());  		PRectangle rcTextArea = rcClient;  		if (vsDraw.marginInside) { @@ -2060,8 +2060,8 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  					rcLine.top = static_cast<XYPOSITION>(ypos);  					rcLine.bottom = static_cast<XYPOSITION>(ypos + vsDraw.lineHeight); -					const Range rangeLine(static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)), -						static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1))); +					const Range rangeLine(model.pdoc->LineStart(lineDoc), +						model.pdoc->LineStart(lineDoc + 1));  					// Highlight the current braces if any  					ll->SetBracesHighlight(rangeLine, model.braces, static_cast<char>(model.bracesMatchStyle), @@ -2150,7 +2150,7 @@ void EditView::FillLineRemainder(Surface *surface, const EditModel &model, const  		int eolInSelection = 0;  		int alpha = SC_ALPHA_NOALPHA;  		if (!hideSelection) { -			const Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); +			const Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1);  			eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0;  			alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha;  		} @@ -2260,21 +2260,21 @@ Sci::Position EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *  		vsPrint.Refresh(*surfaceMeasure, model.pdoc->tabInChars);	// Recalculate fixedColumnWidth  	} -	const Sci::Line linePrintStart = static_cast<Sci::Line>( -		model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMin))); +	const Sci::Line linePrintStart = +		model.pdoc->SciLineFromPosition(static_cast<Sci::Position>(pfr->chrg.cpMin));  	Sci::Line linePrintLast = linePrintStart + (pfr->rc.bottom - pfr->rc.top) / vsPrint.lineHeight - 1;  	if (linePrintLast < linePrintStart)  		linePrintLast = linePrintStart; -	const Sci::Line linePrintMax = static_cast<Sci::Line>( -		model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMax))); +	const Sci::Line linePrintMax = +		model.pdoc->SciLineFromPosition(static_cast<Sci::Position>(pfr->chrg.cpMax));  	if (linePrintLast > linePrintMax)  		linePrintLast = linePrintMax;  	//Platform::DebugPrintf("Formatting lines=[%0d,%0d,%0d] top=%0d bottom=%0d line=%0d %0d\n",  	//      linePrintStart, linePrintLast, linePrintMax, pfr->rc.top, pfr->rc.bottom, vsPrint.lineHeight,  	//      surfaceMeasure->Height(vsPrint.styles[STYLE_LINENUMBER].font)); -	Sci::Position endPosPrint = static_cast<Sci::Position>(model.pdoc->Length()); +	Sci::Position endPosPrint = model.pdoc->Length();  	if (linePrintLast < model.pdoc->LinesTotal()) -		endPosPrint = static_cast<Sci::Position>(model.pdoc->LineStart(linePrintLast + 1)); +		endPosPrint = model.pdoc->LineStart(linePrintLast + 1);  	// Ensure we are styled to where we are formatting.  	model.pdoc->EnsureStyledTo(endPosPrint); @@ -2316,7 +2316,7 @@ Sci::Position EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *  		// line of the page.  		if (visibleLine == 0) {  			const Sci::Position startWithinLine = nPrintPos - -				static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); +				model.pdoc->LineStart(lineDoc);  			for (int iwl = 0; iwl < ll.lines - 1; iwl++) {  				if (ll.LineStart(iwl) <= startWithinLine && ll.LineStart(iwl + 1) >= startWithinLine) {  					visibleLine = -iwl; @@ -2359,7 +2359,7 @@ Sci::Position EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *  				}  				visibleLine++;  				if (iwl == ll.lines - 1) -					nPrintPos = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1)); +					nPrintPos = model.pdoc->LineStart(lineDoc + 1);  				else  					nPrintPos += ll.LineStart(iwl + 1) - ll.LineStart(iwl);  			} diff --git a/src/Editor.cxx b/src/Editor.cxx index ca23b0030..e3e90b5de 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -355,7 +355,7 @@ SelectionPosition Editor::ClampPositionIntoDocument(SelectionPosition sp) const  	if (sp.Position() < 0) {  		return SelectionPosition(0);  	} else if (sp.Position() > pdoc->Length()) { -		return SelectionPosition(static_cast<Sci::Position>(pdoc->Length())); +		return SelectionPosition(pdoc->Length());  	} else {  		// If not at end of line then set offset to 0  		if (!pdoc->IsLineEndPosition(sp.Position())) @@ -416,7 +416,7 @@ Sci::Position Editor::PositionFromLocation(Point pt, bool canReturnInvalid, bool  SelectionPosition Editor::SPositionFromLineX(Sci::Line lineDoc, int x) {  	RefreshStyleData();  	if (lineDoc >= pdoc->LinesTotal()) -		return SelectionPosition(static_cast<Sci::Position>(pdoc->Length())); +		return SelectionPosition(pdoc->Length());  	//Platform::DebugPrintf("Position of (%d,%d) line = %d top=%d\n", pt.x, pt.y, line, topLine);  	AutoSurface surface(this);  	return view.SPositionFromLineX(surface, *this, lineDoc, x, vs); @@ -435,7 +435,7 @@ void Editor::SetTopLine(Sci::Line topLineNew) {  		topLine = topLineNew;  		ContainerNeedsUpdate(SC_UPDATE_V_SCROLL);  	} -	posTopLine = static_cast<Sci::Position>(pdoc->LineStart(pcs->DocFromDisplay(topLine))); +	posTopLine = pdoc->LineStart(pcs->DocFromDisplay(topLine));  }  /** @@ -498,7 +498,7 @@ void Editor::RedrawSelMargin(Sci::Line line, bool allAfter) {  		rcMarkers.right = rcMarkers.left + vs.fixedColumnWidth;  	}  	if (line != -1) { -		PRectangle rcLine = RectangleFromRange(Range(static_cast<Sci::Position>(pdoc->LineStart(line))), 0); +		PRectangle rcLine = RectangleFromRange(Range(pdoc->LineStart(line)), 0);  		// Inflate line rectangle if there are image markers with height larger than line height  		if (vs.largestMarkerHeight > vs.lineHeight) { @@ -528,9 +528,9 @@ void Editor::RedrawSelMargin(Sci::Line line, bool allAfter) {  PRectangle Editor::RectangleFromRange(Range r, int overlap) {  	const Sci::Line minLine = pcs->DisplayFromDoc( -		static_cast<Sci::Line>(pdoc->LineFromPosition(r.First()))); +		pdoc->SciLineFromPosition(r.First()));  	const Sci::Line maxLine = pcs->DisplayLastFromDoc( -		static_cast<Sci::Line>(pdoc->LineFromPosition(r.Last()))); +		pdoc->SciLineFromPosition(r.Last()));  	const PRectangle rcClientDrawing = GetClientDrawingRectangle();  	PRectangle rc;  	const int leftTextOverlap = ((xOffset == 0) && (vs.leftMarginWidth > 0)) ? 1 : 0; @@ -572,10 +572,10 @@ void Editor::SetRectangularRange() {  		if (sel.selType == Selection::selThin) {  			xCaret = xAnchor;  		} -		const Sci::Line lineAnchorRect = static_cast<Sci::Line>( -			pdoc->LineFromPosition(sel.Rectangular().anchor.Position())); -		const Sci::Line lineCaret = static_cast<Sci::Line>( -			pdoc->LineFromPosition(sel.Rectangular().caret.Position())); +		const Sci::Line lineAnchorRect = +			pdoc->SciLineFromPosition(sel.Rectangular().anchor.Position()); +		const Sci::Line lineCaret = +			pdoc->SciLineFromPosition(sel.Rectangular().caret.Position());  		const int increment = (lineCaret > lineAnchorRect) ? 1 : -1;  		for (Sci::Line line=lineAnchorRect; line != lineCaret+increment; line += increment) {  			SelectionRange range(SPositionFromLineX(line, xCaret), SPositionFromLineX(line, xAnchor)); @@ -629,15 +629,15 @@ void Editor::InvalidateWholeSelection() {     at the beginning and end of the region lines. */  SelectionRange Editor::LineSelectionRange(SelectionPosition currentPos_, SelectionPosition anchor_) const {  	if (currentPos_ > anchor_) { -		anchor_ = SelectionPosition(static_cast<Sci::Position>( -			pdoc->LineStart(pdoc->LineFromPosition(anchor_.Position())))); -		currentPos_ = SelectionPosition(static_cast<Sci::Position>( -			pdoc->LineEnd(pdoc->LineFromPosition(currentPos_.Position())))); +		anchor_ = SelectionPosition( +			pdoc->LineStart(pdoc->LineFromPosition(anchor_.Position()))); +		currentPos_ = SelectionPosition( +			pdoc->LineEnd(pdoc->LineFromPosition(currentPos_.Position())));  	} else { -		currentPos_ = SelectionPosition(static_cast<Sci::Position>( -			pdoc->LineStart(pdoc->LineFromPosition(currentPos_.Position())))); -		anchor_ = SelectionPosition(static_cast<Sci::Position>( -			pdoc->LineEnd(pdoc->LineFromPosition(anchor_.Position())))); +		currentPos_ = SelectionPosition( +			pdoc->LineStart(pdoc->LineFromPosition(currentPos_.Position()))); +		anchor_ = SelectionPosition( +			pdoc->LineEnd(pdoc->LineFromPosition(anchor_.Position())));  	}  	return SelectionRange(currentPos_, anchor_);  } @@ -645,7 +645,7 @@ SelectionRange Editor::LineSelectionRange(SelectionPosition currentPos_, Selecti  void Editor::SetSelection(SelectionPosition currentPos_, SelectionPosition anchor_) {  	currentPos_ = ClampPositionIntoDocument(currentPos_);  	anchor_ = ClampPositionIntoDocument(anchor_); -	const Sci::Line currentLine = static_cast<Sci::Line>(pdoc->LineFromPosition(currentPos_.Position())); +	const Sci::Line currentLine = pdoc->SciLineFromPosition(currentPos_.Position());  	SelectionRange rangeNew(currentPos_, anchor_);  	if (sel.selType == Selection::selLines) {  		rangeNew = LineSelectionRange(currentPos_, anchor_); @@ -671,7 +671,7 @@ void Editor::SetSelection(Sci::Position currentPos_, Sci::Position anchor_) {  // Just move the caret on the main selection  void Editor::SetSelection(SelectionPosition currentPos_) {  	currentPos_ = ClampPositionIntoDocument(currentPos_); -	const Sci::Line currentLine = static_cast<Sci::Line>(pdoc->LineFromPosition(currentPos_.Position())); +	const Sci::Line currentLine = pdoc->SciLineFromPosition(currentPos_.Position());  	if (sel.Count() > 1 || !(sel.RangeMain().caret == currentPos_)) {  		InvalidateSelection(SelectionRange(currentPos_));  	} @@ -699,8 +699,7 @@ void Editor::SetSelection(int currentPos_) {  }  void Editor::SetEmptySelection(SelectionPosition currentPos_) { -	const Sci::Line currentLine = static_cast<Sci::Line>( -		pdoc->LineFromPosition(currentPos_.Position())); +	const Sci::Line currentLine = pdoc->SciLineFromPosition(currentPos_.Position());  	SelectionRange rangeNew(ClampPositionIntoDocument(currentPos_));  	if (sel.Count() > 1 || !(sel.RangeMain() == rangeNew)) {  		InvalidateSelection(rangeNew); @@ -756,9 +755,9 @@ void Editor::MultipleSelectAdd(AddNumber addNumber) {  			Sci::Position searchStart = it->start;  			const Sci::Position searchEnd = it->end;  			for (;;) { -				Sci::Position lengthFound = static_cast<Sci::Position>(selectedText.length()); -				const Sci::Position pos = static_cast<Sci::Position>(pdoc->FindText(searchStart, searchEnd, -					selectedText.c_str(), searchFlags, &lengthFound)); +				Sci::Position lengthFound = selectedText.length(); +				const Sci::Position pos = pdoc->FindText(searchStart, searchEnd, +					selectedText.c_str(), searchFlags, &lengthFound);  				if (pos >= 0) {  					sel.AddSelection(SelectionRange(pos + lengthFound, pos));  					ScrollRange(sel.RangeMain()); @@ -829,8 +828,7 @@ SelectionPosition Editor::MovePositionOutsideChar(SelectionPosition pos, Sci::Po  }  void Editor::MovedCaret(SelectionPosition newPos, SelectionPosition previousPos, bool ensureVisible) { -	const Sci::Line currentLine = static_cast<Sci::Line>( -		pdoc->LineFromPosition(newPos.Position())); +	const Sci::Line currentLine = pdoc->SciLineFromPosition(newPos.Position());  	if (ensureVisible) {  		// In case in need of wrapping to ensure DisplayFromDoc works.  		if (currentLine >= wrapPending.start) { @@ -899,7 +897,7 @@ void Editor::MovePositionTo(Sci::Position newPos, Selection::selTypes selt, bool  SelectionPosition Editor::MovePositionSoVisible(SelectionPosition pos, int moveDir) {  	pos = ClampPositionIntoDocument(pos);  	pos = MovePositionOutsideChar(pos, moveDir); -	const Sci::Line lineDoc = static_cast<Sci::Line>(pdoc->LineFromPosition(pos.Position())); +	const Sci::Line lineDoc = pdoc->SciLineFromPosition(pos.Position());  	if (pcs->GetVisible(lineDoc)) {  		return pos;  	} else { @@ -907,12 +905,12 @@ SelectionPosition Editor::MovePositionSoVisible(SelectionPosition pos, int moveD  		if (moveDir > 0) {  			// lineDisplay is already line before fold as lines in fold use display line of line after fold  			lineDisplay = std::clamp(lineDisplay, static_cast<Sci::Line>(0), pcs->LinesDisplayed()); -			return SelectionPosition(static_cast<Sci::Position>( -				pdoc->LineStart(pcs->DocFromDisplay(lineDisplay)))); +			return SelectionPosition( +				pdoc->LineStart(pcs->DocFromDisplay(lineDisplay)));  		} else {  			lineDisplay = std::clamp(lineDisplay - 1, static_cast<Sci::Line>(0), pcs->LinesDisplayed()); -			return SelectionPosition(static_cast<Sci::Position>( -				pdoc->LineEnd(pcs->DocFromDisplay(lineDisplay)))); +			return SelectionPosition( +				pdoc->LineEnd(pcs->DocFromDisplay(lineDisplay)));  		}  	}  } @@ -982,8 +980,8 @@ void Editor::HorizontalScrollTo(int xPos) {  }  void Editor::VerticalCentreCaret() { -	const Sci::Line lineDoc = static_cast<Sci::Line>( -		pdoc->LineFromPosition(sel.IsRectangular() ? sel.Rectangular().caret.Position() : sel.MainCaret())); +	const Sci::Line lineDoc = +		pdoc->SciLineFromPosition(sel.IsRectangular() ? sel.Rectangular().caret.Position() : sel.MainCaret());  	const Sci::Line lineDisplay = pcs->DisplayFromDoc(lineDoc);  	const Sci::Line newTop = lineDisplay - (LinesOnScreen() / 2);  	if (topLine != newTop) { @@ -992,30 +990,24 @@ void Editor::VerticalCentreCaret() {  	}  } -// Avoid 64 bit compiler warnings. -// Scintilla does not support text buffers larger than 2**31 -static int istrlen(const char *s) { -	return static_cast<int>(s ? strlen(s) : 0); -} -  void Editor::MoveSelectedLines(int lineDelta) {  	// if selection doesn't start at the beginning of the line, set the new start  	Sci::Position selectionStart = SelectionStart().Position(); -	const Sci::Line startLine = static_cast<Sci::Line>(pdoc->LineFromPosition(selectionStart)); -	const Sci::Position beginningOfStartLine = static_cast<Sci::Position>(pdoc->LineStart(startLine)); +	const Sci::Line startLine = pdoc->SciLineFromPosition(selectionStart); +	const Sci::Position beginningOfStartLine = pdoc->LineStart(startLine);  	selectionStart = beginningOfStartLine;  	// if selection doesn't end at the beginning of a line greater than that of the start,  	// then set it at the beginning of the next one  	Sci::Position selectionEnd = SelectionEnd().Position(); -	const Sci::Line endLine = static_cast<Sci::Line>(pdoc->LineFromPosition(selectionEnd)); -	const Sci::Position beginningOfEndLine = static_cast<Sci::Position>(pdoc->LineStart(endLine)); +	const Sci::Line endLine = pdoc->SciLineFromPosition(selectionEnd); +	const Sci::Position beginningOfEndLine = pdoc->LineStart(endLine);  	bool appendEol = false;  	if (selectionEnd > beginningOfEndLine  		|| selectionStart == selectionEnd) { -		selectionEnd = static_cast<Sci::Position>(pdoc->LineStart(endLine + 1)); -		appendEol = (selectionEnd == pdoc->Length() && pdoc->LineFromPosition(selectionEnd) == endLine); +		selectionEnd = pdoc->LineStart(endLine + 1); +		appendEol = (selectionEnd == pdoc->Length() && pdoc->SciLineFromPosition(selectionEnd) == endLine);  	}  	// if there's nowhere for the selection to move @@ -1049,12 +1041,12 @@ void Editor::MoveSelectedLines(int lineDelta) {  	const char *eol = StringFromEOLMode(pdoc->eolMode);  	if (currentLine + lineDelta >= pdoc->LinesTotal()) -		pdoc->InsertString(static_cast<Sci::Position>(pdoc->Length()), eol, istrlen(eol)); +		pdoc->InsertString(pdoc->Length(), eol, strlen(eol));  	GoToLine(currentLine + lineDelta);  	selectionLength = pdoc->InsertString(CurrentPosition(), selectedText.Data(), selectionLength);  	if (appendEol) { -		const Sci::Position lengthInserted = pdoc->InsertString(CurrentPosition() + selectionLength, eol, istrlen(eol)); +		const Sci::Position lengthInserted = pdoc->InsertString(CurrentPosition() + selectionLength, eol, strlen(eol));  		selectionLength += lengthInserted;  	}  	SetSelection(CurrentPosition(), CurrentPosition() + selectionLength); @@ -1077,7 +1069,7 @@ void Editor::MoveCaretInsideView(bool ensureVisible) {  					false, false, UserVirtualSpace()),  					Selection::noSel, ensureVisible);  	} else if ((pt.y + vs.lineHeight - 1) > rcClient.bottom) { -		const Sci::Position yOfLastLineFullyDisplayed = static_cast<Sci::Position>(rcClient.top) + (LinesOnScreen() - 1) * vs.lineHeight; +		const ptrdiff_t yOfLastLineFullyDisplayed = static_cast<ptrdiff_t>(rcClient.top) + (LinesOnScreen() - 1) * vs.lineHeight;  		MovePositionTo(SPositionFromLocation(  		            Point::FromInts(lastXChosen - xOffset, static_cast<int>(rcClient.top + yOfLastLineFullyDisplayed)),  					false, false, UserVirtualSpace()), @@ -1514,7 +1506,7 @@ bool Editor::WrapLines(WrapScope ws) {  		Sci::Line lineToWrap = wrapPending.start;  		Sci::Line lineToWrapEnd = std::min(wrapPending.end, pdoc->LinesTotal());  		const Sci::Line lineDocTop = pcs->DocFromDisplay(topLine); -		const int subLineTop = static_cast<int>(topLine - pcs->DisplayFromDoc(lineDocTop)); +		const Sci::Line subLineTop = topLine - pcs->DisplayFromDoc(lineDocTop);  		if (ws == WrapScope::wsVisible) {  			lineToWrap = std::clamp(lineDocTop-5, wrapPending.start, pdoc->LinesTotal());  			// Priority wrap to just after visible area. @@ -1539,7 +1531,7 @@ bool Editor::WrapLines(WrapScope ws) {  		lineToWrapEnd = std::min(lineToWrapEnd, lineEndNeedWrap);  		// Ensure all lines being wrapped are styled. -		pdoc->EnsureStyledTo(static_cast<Sci::Position>(pdoc->LineStart(lineToWrapEnd))); +		pdoc->EnsureStyledTo(pdoc->LineStart(lineToWrapEnd));  		if (lineToWrap < lineToWrapEnd) { @@ -1560,7 +1552,8 @@ bool Editor::WrapLines(WrapScope ws) {  					lineToWrap++;  				} -				goodTopLine = pcs->DisplayFromDoc(lineDocTop) + std::min(subLineTop, pcs->GetHeight(lineDocTop)-1); +				goodTopLine = pcs->DisplayFromDoc(lineDocTop) + std::min( +					subLineTop, static_cast<Sci::Line>(pcs->GetHeight(lineDocTop)-1));  			}  		} @@ -1615,27 +1608,26 @@ void Editor::LinesSplit(int pixelWidth) {  			const PRectangle rcText = GetTextRectangle();  			pixelWidth = static_cast<int>(rcText.Width());  		} -		const Sci::Line lineStart = static_cast<Sci::Line>(pdoc->LineFromPosition(targetStart)); -		Sci::Line lineEnd = static_cast<Sci::Line>(pdoc->LineFromPosition(targetEnd)); +		const Sci::Line lineStart = pdoc->SciLineFromPosition(targetStart); +		Sci::Line lineEnd = pdoc->SciLineFromPosition(targetEnd);  		const char *eol = StringFromEOLMode(pdoc->eolMode);  		UndoGroup ug(pdoc);  		for (Sci::Line line = lineStart; line <= lineEnd; line++) {  			AutoSurface surface(this);  			AutoLineLayout ll(view.llc, view.RetrieveLineLayout(line, *this));  			if (surface && ll) { -				const Sci::Position posLineStart = static_cast<Sci::Position>(pdoc->LineStart(line)); +				const Sci::Position posLineStart = pdoc->LineStart(line);  				view.LayoutLine(*this, line, surface, vs, ll, pixelWidth);  				Sci::Position lengthInsertedTotal = 0;  				for (int subLine = 1; subLine < ll->lines; subLine++) {  					const Sci::Position lengthInserted = pdoc->InsertString( -						static_cast<int>(posLineStart + lengthInsertedTotal + -							ll->LineStart(subLine)), -							eol, istrlen(eol)); +						posLineStart + lengthInsertedTotal + ll->LineStart(subLine), +						eol, strlen(eol));  					targetEnd += lengthInserted;  					lengthInsertedTotal += lengthInserted;  				}  			} -			lineEnd = static_cast<Sci::Line>(pdoc->LineFromPosition(targetEnd)); +			lineEnd = pdoc->SciLineFromPosition(targetEnd);  		}  	}  } @@ -1803,7 +1795,7 @@ int Editor::TextWidth(int style, const char *text) {  	RefreshStyleData();  	AutoSurface surface(this);  	if (surface) { -		return static_cast<int>(surface->WidthText(vs.styles[style].font, text, istrlen(text))); +		return static_cast<int>(surface->WidthText(vs.styles[style].font, text, static_cast<int>(strlen(text))));  	} else {  		return 1;  	} @@ -1852,7 +1844,7 @@ void Editor::ChangeSize() {  Sci::Position Editor::RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace) {  	if (virtualSpace > 0) { -		const Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(position)); +		const Sci::Line line = pdoc->SciLineFromPosition(position);  		const Sci::Position indent = pdoc->GetLineIndentPosition(line);  		if (indent == position) {  			return pdoc->SetLineIndentation(line, pdoc->GetLineIndentation(line) + virtualSpace); @@ -1933,7 +1925,7 @@ void Editor::AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS) {  				if (Wrapping()) {  					AutoSurface surface(this);  					if (surface) { -						if (WrapOneLine(surface, static_cast<Sci::Line>(pdoc->LineFromPosition(positionInsert)))) { +						if (WrapOneLine(surface, pdoc->SciLineFromPosition(positionInsert))) {  							SetScrollBars();  							SetVerticalScrollPos();  							Redraw(); @@ -2002,7 +1994,7 @@ void Editor::ClearBeforeTentativeStart() {  	}  } -void Editor::InsertPaste(const char *text, int len) { +void Editor::InsertPaste(const char *text, Sci::Position len) {  	if (multiPasteMode == SC_MULTIPASTE_ONCE) {  		SelectionPosition selStart = sel.Start();  		selStart = RealizeVirtualSpace(selStart); @@ -2037,25 +2029,25 @@ void Editor::InsertPaste(const char *text, int len) {  	}  } -void Editor::InsertPasteShape(const char *text, int len, PasteShape shape) { +void Editor::InsertPasteShape(const char *text, Sci::Position len, PasteShape shape) {  	std::string convertedText;  	if (convertPastes) {  		// Convert line endings of the paste into our local line-endings mode  		convertedText = Document::TransformLineEnds(text, len, pdoc->eolMode); -		len = static_cast<int>(convertedText.length()); +		len = convertedText.length();  		text = convertedText.c_str();  	}  	if (shape == pasteRectangular) {  		PasteRectangular(sel.Start(), text, len);  	} else {  		if (shape == pasteLine) { -			const Sci::Position insertPos = static_cast<Sci::Position>( -				pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret()))); +			const Sci::Position insertPos = +				pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret()));  			Sci::Position lengthInserted = pdoc->InsertString(insertPos, text, len);  			// add the newline if necessary  			if ((len > 0) && (text[len - 1] != '\n' && text[len - 1] != '\r')) {  				const char *endline = StringFromEOLMode(pdoc->eolMode); -				const int length = static_cast<int>(strlen(endline)); +				const Sci::Position length = strlen(endline);  				lengthInserted += pdoc->InsertString(insertPos + lengthInserted, endline, length);  			}  			if (sel.MainCaret() == insertPos) { @@ -2091,7 +2083,7 @@ void Editor::ClearAll() {  	{  		UndoGroup ug(pdoc);  		if (0 != pdoc->Length()) { -			pdoc->DeleteChars(0, static_cast<Sci::Position>(pdoc->Length())); +			pdoc->DeleteChars(0, pdoc->Length());  		}  		if (!pdoc->IsReadOnly()) {  			pcs->Clear(); @@ -2137,7 +2129,7 @@ void Editor::PasteRectangular(SelectionPosition pos, const char *ptr, Sci::Posit  	}  	sel.Clear();  	sel.RangeMain() = SelectionRange(pos); -	Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); +	Sci::Line line = pdoc->SciLineFromPosition(sel.MainCaret());  	UndoGroup ug(pdoc);  	sel.RangeMain().caret = RealizeVirtualSpace(sel.RangeMain().caret);  	const int xInsert = XFromPosition(sel.RangeMain().caret); @@ -2150,9 +2142,9 @@ void Editor::PasteRectangular(SelectionPosition pos, const char *ptr, Sci::Posit  				line++;  			if (line >= pdoc->LinesTotal()) {  				if (pdoc->eolMode != SC_EOL_LF) -					pdoc->InsertString(static_cast<Sci::Position>(pdoc->Length()), "\r", 1); +					pdoc->InsertString(pdoc->Length(), "\r", 1);  				if (pdoc->eolMode != SC_EOL_CR) -					pdoc->InsertString(static_cast<Sci::Position>(pdoc->Length()), "\n", 1); +					pdoc->InsertString(pdoc->Length(), "\n", 1);  			}  			// Pad the end of lines with spaces if required  			sel.RangeMain().caret.SetPosition(PositionFromLineX(line, xInsert)); @@ -2212,7 +2204,7 @@ void Editor::Clear() {  void Editor::SelectAll() {  	sel.Clear(); -	SetSelection(0, static_cast<Sci::Position>(pdoc->Length())); +	SetSelection(0, pdoc->Length());  	Redraw();  } @@ -2249,8 +2241,8 @@ void Editor::DelCharBack(bool allowLineStartDeletion) {  					sel.Range(r).caret.SetVirtualSpace(sel.Range(r).caret.VirtualSpace() - 1);  					sel.Range(r).anchor.SetVirtualSpace(sel.Range(r).caret.VirtualSpace());  				} else { -					const Sci::Line lineCurrentPos = static_cast<Sci::Line>( -						pdoc->LineFromPosition(sel.Range(r).caret.Position())); +					const Sci::Line lineCurrentPos = +						pdoc->SciLineFromPosition(sel.Range(r).caret.Position());  					if (allowLineStartDeletion || (pdoc->LineStart(lineCurrentPos) != sel.Range(r).caret.Position())) {  						if (pdoc->GetColumn(sel.Range(r).caret.Position()) <= pdoc->GetLineIndentation(lineCurrentPos) &&  								pdoc->GetColumn(sel.Range(r).caret.Position()) > 0 && pdoc->backspaceUnindents) { @@ -2408,11 +2400,11 @@ void Editor::NotifyIndicatorClick(bool click, Sci::Position position, int modifi  bool Editor::NotifyMarginClick(Point pt, int modifiers) {  	const int marginClicked = vs.MarginFromLocation(pt);  	if ((marginClicked >= 0) && vs.ms[marginClicked].sensitive) { -		const Sci::Position position = static_cast<Sci::Position>(pdoc->LineStart(LineFromLocation(pt))); +		const Sci::Position position = pdoc->LineStart(LineFromLocation(pt));  		if ((vs.ms[marginClicked].mask & SC_MASK_FOLDERS) && (foldAutomatic & SC_AUTOMATICFOLD_CLICK)) {  			const bool ctrl = (modifiers & SCI_CTRL) != 0;  			const bool shift = (modifiers & SCI_SHIFT) != 0; -			const Sci::Line lineClick = static_cast<Sci::Line>(pdoc->LineFromPosition(position)); +			const Sci::Line lineClick = pdoc->SciLineFromPosition(position);  			if (shift && ctrl) {  				FoldAll(SC_FOLDACTION_TOGGLE);  			} else { @@ -2446,7 +2438,7 @@ bool Editor::NotifyMarginClick(Point pt, int modifiers) {  bool Editor::NotifyMarginRightClick(Point pt, int modifiers) {  	const int marginRightClicked = vs.MarginFromLocation(pt);  	if ((marginRightClicked >= 0) && vs.ms[marginRightClicked].sensitive) { -		const Sci::Position position = static_cast<Sci::Position>(pdoc->LineStart(LineFromLocation(pt))); +		const Sci::Position position = pdoc->LineStart(LineFromLocation(pt));  		SCNotification scn = {};  		scn.nmhdr.code = SCN_MARGINRIGHTCLICK;  		scn.modifiers = modifiers; @@ -2496,7 +2488,7 @@ void Editor::NotifySavePoint(Document *, void *, bool atSavePoint) {  void Editor::CheckModificationForWrap(DocModification mh) {  	if (mh.modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) {  		view.llc.Invalidate(LineLayout::llCheckTextAndStyle); -		const Sci::Line lineDoc = static_cast<Sci::Line>(pdoc->LineFromPosition(mh.position)); +		const Sci::Line lineDoc = pdoc->SciLineFromPosition(mh.position);  		const Sci::Line lines = std::max(static_cast<Sci::Line>(0), mh.linesAdded);  		if (Wrapping()) {  			NeedWrapping(lineDoc, lineDoc + lines + 1); @@ -2538,8 +2530,8 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) {  	if (mh.modificationType & SC_MOD_CHANGELINESTATE) {  		if (paintState == painting) {  			CheckForChangeOutsidePaint( -			    Range(static_cast<Sci::Position>(pdoc->LineStart(mh.line)), -					static_cast<Sci::Position>(pdoc->LineStart(mh.line + 1)))); +			    Range(pdoc->LineStart(mh.line), +					pdoc->LineStart(mh.line + 1)));  		} else {  			// Could check that change is before last visible line.  			Redraw(); @@ -2585,20 +2577,20 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) {  		}  		if ((mh.modificationType & (SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE)) && pcs->HiddenLines()) {  			// Some lines are hidden so may need shown. -			const Sci::Line lineOfPos = static_cast<Sci::Line>(pdoc->LineFromPosition(mh.position)); +			const Sci::Line lineOfPos = pdoc->SciLineFromPosition(mh.position);  			Sci::Position endNeedShown = mh.position;  			if (mh.modificationType & SC_MOD_BEFOREINSERT) {  				if (pdoc->ContainsLineEnd(mh.text, mh.length) && (mh.position != pdoc->LineStart(lineOfPos))) -					endNeedShown = static_cast<Sci::Position>(pdoc->LineStart(lineOfPos+1)); +					endNeedShown = pdoc->LineStart(lineOfPos+1);  			} else if (mh.modificationType & SC_MOD_BEFOREDELETE) {  				// If the deletion includes any EOL then we extend the need shown area.  				endNeedShown = mh.position + mh.length; -				Sci::Line lineLast = static_cast<Sci::Line>(pdoc->LineFromPosition(mh.position+mh.length)); +				Sci::Line lineLast = pdoc->SciLineFromPosition(mh.position+mh.length);  				for (Sci::Line line = lineOfPos + 1; line <= lineLast; line++) {  					const Sci::Line lineMaxSubord = pdoc->GetLastChild(line, -1, -1);  					if (lineLast < lineMaxSubord) {  						lineLast = lineMaxSubord; -						endNeedShown = static_cast<Sci::Position>(pdoc->LineEnd(lineLast)); +						endNeedShown = pdoc->LineEnd(lineLast);  					}  				}  			} @@ -2607,7 +2599,7 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) {  		if (mh.linesAdded != 0) {  			// Update contraction state for inserted and removed lines  			// lineOfPos should be calculated in context of state before modification, shouldn't it -			Sci::Line lineOfPos = static_cast<Sci::Line>(pdoc->LineFromPosition(mh.position)); +			Sci::Line lineOfPos = pdoc->SciLineFromPosition(mh.position);  			if (mh.position > pdoc->LineStart(lineOfPos))  				lineOfPos++;	// Affecting subsequent lines  			if (mh.linesAdded > 0) { @@ -2618,7 +2610,7 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) {  			view.LinesAddedOrRemoved(lineOfPos, mh.linesAdded);  		}  		if (mh.modificationType & SC_MOD_CHANGEANNOTATION) { -			const Sci::Line lineDoc = static_cast<Sci::Line>(pdoc->LineFromPosition(mh.position)); +			const Sci::Line lineDoc = pdoc->SciLineFromPosition(mh.position);  			if (vs.annotationVisible) {  				if (pcs->SetHeight(lineDoc, static_cast<int>(pcs->GetHeight(lineDoc) + mh.annotationLinesAdded))) {  					SetScrollBars(); @@ -2638,7 +2630,7 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) {  			}  			if (paintState == notPainting && !CanDeferToLastStep(mh)) { -				QueueIdleWork(WorkNeeded::workStyle, static_cast<Sci::Position>(pdoc->Length())); +				QueueIdleWork(WorkNeeded::workStyle, pdoc->Length());  				Redraw();  			}  		} else { @@ -2846,12 +2838,12 @@ void Editor::PageMove(int direction, Selection::selTypes selt, bool stuttered) {  	Sci::Line topLineNew;  	SelectionPosition newPos; -	const Sci::Line currentLine = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); +	const Sci::Line currentLine = pdoc->SciLineFromPosition(sel.MainCaret());  	const Sci::Line topStutterLine = topLine + caretYSlop; -	const Sci::Line bottomStutterLine = static_cast<Sci::Line>( -	    pdoc->LineFromPosition(PositionFromLocation( +	const Sci::Line bottomStutterLine = +	    pdoc->SciLineFromPosition(PositionFromLocation(  	                Point::FromInts(lastXChosen - xOffset, direction * vs.lineHeight * static_cast<int>(LinesToScroll())))) -	    - caretYSlop - 1); +	    - caretYSlop - 1;  	if (stuttered && (direction < 0 && currentLine > topStutterLine)) {  		topLineNew = topLine; @@ -2908,15 +2900,15 @@ void Editor::ChangeCaseOfSelection(int caseMapping) {  				}  				const size_t endDifferenceText = sText.size() - 1 - lastDifferenceText;  				pdoc->DeleteChars( -					static_cast<Sci::Position>(currentNoVS.Start().Position() + firstDifference), -					static_cast<Sci::Position>(rangeBytes - firstDifference - endDifferenceText)); -				const Sci::Position lengthChange = static_cast<Sci::Position>(lastDifferenceMapped - firstDifference + 1); +					currentNoVS.Start().Position() + firstDifference, +					rangeBytes - firstDifference - endDifferenceText); +				const Sci::Position lengthChange = lastDifferenceMapped - firstDifference + 1;  				const Sci::Position lengthInserted = pdoc->InsertString( -					static_cast<int>(currentNoVS.Start().Position() + firstDifference), +					currentNoVS.Start().Position() + firstDifference,  					sMapped.c_str() + firstDifference,  					lengthChange);  				// Automatic movement changes selection so reset to exactly the same as it was. -				const Sci::Position diffSizes = static_cast<Sci::Position>(sMapped.size() - sText.size()) + lengthInserted - lengthChange; +				const Sci::Position diffSizes = sMapped.size() - sText.size() + lengthInserted - lengthChange;  				if (diffSizes != 0) {  					if (current.anchor > current.caret)  						current.anchor.Add(diffSizes); @@ -2930,36 +2922,34 @@ void Editor::ChangeCaseOfSelection(int caseMapping) {  }  void Editor::LineTranspose() { -	const Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); +	const Sci::Line line = pdoc->SciLineFromPosition(sel.MainCaret());  	if (line > 0) {  		UndoGroup ug(pdoc); -		const Sci::Position startPrevious = static_cast<Sci::Position>(pdoc->LineStart(line - 1)); -		const std::string linePrevious = RangeText(startPrevious, -			static_cast<Sci::Position>(pdoc->LineEnd(line - 1))); +		const Sci::Position startPrevious = pdoc->LineStart(line - 1); +		const std::string linePrevious = RangeText(startPrevious, pdoc->LineEnd(line - 1)); -		Sci::Position startCurrent = static_cast<Sci::Position>(pdoc->LineStart(line)); -		const std::string lineCurrent = RangeText(startCurrent, -			static_cast<Sci::Position>(pdoc->LineEnd(line))); +		Sci::Position startCurrent = pdoc->LineStart(line); +		const std::string lineCurrent = RangeText(startCurrent, pdoc->LineEnd(line)); -		pdoc->DeleteChars(startCurrent, static_cast<Sci::Position>(lineCurrent.length())); -		pdoc->DeleteChars(startPrevious, static_cast<Sci::Position>(linePrevious.length())); -		startCurrent -= static_cast<Sci::Position>(linePrevious.length()); +		pdoc->DeleteChars(startCurrent, lineCurrent.length()); +		pdoc->DeleteChars(startPrevious, linePrevious.length()); +		startCurrent -= linePrevious.length();  		startCurrent += pdoc->InsertString(startPrevious, lineCurrent.c_str(), -			static_cast<Sci::Position>(lineCurrent.length())); +			lineCurrent.length());  		pdoc->InsertString(startCurrent, linePrevious.c_str(), -			static_cast<Sci::Position>(linePrevious.length())); +			linePrevious.length());  		// Move caret to start of current line  		MovePositionTo(SelectionPosition(startCurrent));  	}  }  void Editor::LineReverse() { -	const Sci::Line lineStart = static_cast<Sci::Line>( -		pdoc->LineFromPosition(sel.RangeMain().Start().Position())); -	const Sci::Line lineEnd = static_cast<Sci::Line>( -		pdoc->LineFromPosition(sel.RangeMain().End().Position()-1)); +	const Sci::Line lineStart = +		pdoc->SciLineFromPosition(sel.RangeMain().Start().Position()); +	const Sci::Line lineEnd = +		pdoc->SciLineFromPosition(sel.RangeMain().End().Position()-1);  	const Sci::Line lineDiff = lineEnd - lineStart;  	if (lineDiff <= 0)  		return; @@ -2967,12 +2957,12 @@ void Editor::LineReverse() {  	for (Sci::Line i=(lineDiff+1)/2-1; i>=0; --i) {  		const Sci::Line lineNum2 = lineEnd - i;  		const Sci::Line lineNum1 = lineStart + i; -		Sci::Position lineStart2 = static_cast<Sci::Position>(pdoc->LineStart(lineNum2)); -		const Sci::Position lineStart1 = static_cast<Sci::Position>(pdoc->LineStart(lineNum1)); -		const std::string line2 = RangeText(lineStart2, static_cast<Sci::Position>(pdoc->LineEnd(lineNum2))); -		const std::string line1 = RangeText(lineStart1, static_cast<Sci::Position>(pdoc->LineEnd(lineNum1))); -		const Sci::Position lineLen2 = static_cast<Sci::Position>(line2.length()); -		const Sci::Position lineLen1 = static_cast<Sci::Position>(line1.length()); +		Sci::Position lineStart2 = pdoc->LineStart(lineNum2); +		const Sci::Position lineStart1 = pdoc->LineStart(lineNum1); +		const std::string line2 = RangeText(lineStart2, pdoc->LineEnd(lineNum2)); +		const std::string line1 = RangeText(lineStart1, pdoc->LineEnd(lineNum1)); +		const Sci::Position lineLen2 = line2.length(); +		const Sci::Position lineLen1 = line1.length();  		pdoc->DeleteChars(lineStart2, lineLen2);  		pdoc->DeleteChars(lineStart1, lineLen1);  		lineStart2 -= lineLen1; @@ -2980,8 +2970,8 @@ void Editor::LineReverse() {  		pdoc->InsertString(lineStart1, line2.c_str(), lineLen2);  	}  	// Wholly select all affected lines -	sel.RangeMain() = SelectionRange(static_cast<Sci::Position>(pdoc->LineStart(lineStart)), -		static_cast<Sci::Position>(pdoc->LineStart(lineEnd+1))); +	sel.RangeMain() = SelectionRange(pdoc->LineStart(lineStart), +		pdoc->LineStart(lineEnd+1));  }  void Editor::Duplicate(bool forLine) { @@ -2990,31 +2980,31 @@ void Editor::Duplicate(bool forLine) {  	}  	UndoGroup ug(pdoc);  	const char *eol = ""; -	int eolLen = 0; +	Sci::Position eolLen = 0;  	if (forLine) {  		eol = StringFromEOLMode(pdoc->eolMode); -		eolLen = istrlen(eol); +		eolLen = strlen(eol);  	}  	for (size_t r=0; r<sel.Count(); r++) {  		SelectionPosition start = sel.Range(r).Start();  		SelectionPosition end = sel.Range(r).End();  		if (forLine) { -			const Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.Range(r).caret.Position())); -			start = SelectionPosition(static_cast<Sci::Position>(pdoc->LineStart(line))); -			end = SelectionPosition(static_cast<Sci::Position>(pdoc->LineEnd(line))); +			const Sci::Line line = pdoc->SciLineFromPosition(sel.Range(r).caret.Position()); +			start = SelectionPosition(pdoc->LineStart(line)); +			end = SelectionPosition(pdoc->LineEnd(line));  		}  		std::string text = RangeText(start.Position(), end.Position());  		Sci::Position lengthInserted = eolLen;  		if (forLine)  			lengthInserted = pdoc->InsertString(end.Position(), eol, eolLen); -		pdoc->InsertString(end.Position() + lengthInserted, text.c_str(), static_cast<Sci::Position>(text.length())); +		pdoc->InsertString(end.Position() + lengthInserted, text.c_str(), text.length());  	}  	if (sel.Count() && sel.IsRectangular()) {  		SelectionPosition last = sel.Last();  		if (forLine) { -			const Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(last.Position())); +			const Sci::Line line = pdoc->SciLineFromPosition(last.Position());  			last = SelectionPosition(last.Position() + -				static_cast<Sci::Position>(pdoc->LineStart(line+1) - pdoc->LineStart(line))); +				pdoc->LineStart(line+1) - pdoc->LineStart(line));  		}  		if (sel.Rectangular().anchor > sel.Rectangular().caret)  			sel.Rectangular().anchor = last; @@ -3048,7 +3038,7 @@ void Editor::NewLine() {  		sel.Range(r).ClearVirtualSpace();  		const char *eol = StringFromEOLMode(pdoc->eolMode);  		const Sci::Position positionInsert = sel.Range(r).caret.Position(); -		const Sci::Position insertLength = pdoc->InsertString(positionInsert, eol, istrlen(eol)); +		const Sci::Position insertLength = pdoc->InsertString(positionInsert, eol, strlen(eol));  		if (insertLength > 0) {  			sel.Range(r) = SelectionRange(positionInsert + insertLength);  			countInsertions++; @@ -3083,8 +3073,8 @@ SelectionPosition Editor::PositionUpOrDown(SelectionPosition spStart, int direct  	int skipLines = 0;  	if (vs.annotationVisible) { -		const Sci::Line lineDoc = static_cast<Sci::Line>(pdoc->LineFromPosition(spStart.Position())); -		const Point ptStartLine = LocationFromPosition(static_cast<Sci::Position>(pdoc->LineStart(lineDoc))); +		const Sci::Line lineDoc = pdoc->SciLineFromPosition(spStart.Position()); +		const Point ptStartLine = LocationFromPosition(pdoc->LineStart(lineDoc));  		const int subLine = static_cast<int>(pt.y - ptStartLine.y) / vs.lineHeight;  		if (direction < 0 && subLine == 0) { @@ -3179,7 +3169,7 @@ void Editor::ParaUpOrDown(int direction, Selection::selTypes selt) {  	const Sci::Position savedPos = sel.MainCaret();  	do {  		MovePositionTo(SelectionPosition(direction > 0 ? pdoc->ParaDown(sel.MainCaret()) : pdoc->ParaUp(sel.MainCaret())), selt); -		lineDoc = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); +		lineDoc = pdoc->SciLineFromPosition(sel.MainCaret());  		if (direction > 0) {  			if (sel.MainCaret() >= pdoc->Length() && !pcs->GetVisible(lineDoc)) {  				if (selt == Selection::noSel) { @@ -3375,7 +3365,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {  		case SCI_HOMERECTEXTEND:  		case SCI_HOMEEXTEND: // only when sel.IsRectangular() && sel.MoveExtends()  			spCaret = SelectionPosition( -				static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())))); +				pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())));  			break;  		case SCI_VCHOMERECTEXTEND:  		case SCI_VCHOMEEXTEND: // only when sel.IsRectangular() && sel.MoveExtends() @@ -3397,7 +3387,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {  		switch (iMessage) {  		case SCI_HOME:  			selAtLimit = SelectionPosition( -				static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(selAtLimit.Position())))); +				pdoc->LineStart(pdoc->LineFromPosition(selAtLimit.Position())));  			break;  		case SCI_VCHOME:  			selAtLimit = SelectionPosition(pdoc->VCHomePosition(selAtLimit.Position())); @@ -3460,7 +3450,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {  			case SCI_HOME:  			case SCI_HOMEEXTEND:  				spCaret = SelectionPosition( -					static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())))); +					pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())));  				break;  			case SCI_HOMEDISPLAY:  			case SCI_HOMEDISPLAYEXTEND: @@ -3471,7 +3461,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {  				spCaret = MovePositionSoVisible(StartEndDisplayLine(spCaret.Position(), true), -1);  				if (spCaretNow <= spCaret)  					spCaret = SelectionPosition( -						static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())))); +						pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position())));  				break;  			case SCI_VCHOME:  			case SCI_VCHOMEEXTEND: @@ -3621,13 +3611,13 @@ int Editor::DelWordOrLine(unsigned int iMessage) {  			break;  		case SCI_DELLINELEFT:  			rangeDelete = Range( -				static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(sel.Range(r).caret.Position()))), +				pdoc->LineStart(pdoc->LineFromPosition(sel.Range(r).caret.Position())),  				sel.Range(r).caret.Position());  			break;  		case SCI_DELLINERIGHT:  			rangeDelete = Range(  				sel.Range(r).caret.Position(), -				static_cast<Sci::Position>(pdoc->LineEnd(pdoc->LineFromPosition(sel.Range(r).caret.Position())))); +				pdoc->LineEnd(pdoc->LineFromPosition(sel.Range(r).caret.Position())));  			break;  		}  		if (!RangeContainsProtected(rangeDelete.start, rangeDelete.end)) { @@ -3738,11 +3728,11 @@ int Editor::KeyCommand(unsigned int iMessage) {  		SetLastXChosen();  		break;  	case SCI_DOCUMENTEND: -		MovePositionTo(static_cast<Sci::Position>(pdoc->Length())); +		MovePositionTo(pdoc->Length());  		SetLastXChosen();  		break;  	case SCI_DOCUMENTENDEXTEND: -		MovePositionTo(static_cast<Sci::Position>(pdoc->Length()), Selection::selStream); +		MovePositionTo(pdoc->Length(), Selection::selStream);  		SetLastXChosen();  		break;  	case SCI_STUTTEREDPAGEUP: @@ -3848,26 +3838,26 @@ int Editor::KeyCommand(unsigned int iMessage) {  		return DelWordOrLine(iMessage);  	case SCI_LINECOPY: { -			const Sci::Line lineStart = static_cast<Sci::Line>(pdoc->LineFromPosition(SelectionStart().Position())); -			const Sci::Line lineEnd = static_cast<Sci::Line>(pdoc->LineFromPosition(SelectionEnd().Position())); -			CopyRangeToClipboard(static_cast<Sci::Position>(pdoc->LineStart(lineStart)), -				static_cast<Sci::Position>(pdoc->LineStart(lineEnd + 1))); +			const Sci::Line lineStart = pdoc->SciLineFromPosition(SelectionStart().Position()); +			const Sci::Line lineEnd = pdoc->SciLineFromPosition(SelectionEnd().Position()); +			CopyRangeToClipboard(pdoc->LineStart(lineStart), +				pdoc->LineStart(lineEnd + 1));  		}  		break;  	case SCI_LINECUT: { -			const Sci::Line lineStart = static_cast<Sci::Line>(pdoc->LineFromPosition(SelectionStart().Position())); -			const Sci::Line lineEnd = static_cast<Sci::Line>(pdoc->LineFromPosition(SelectionEnd().Position())); -			const Sci::Position start = static_cast<Sci::Position>(pdoc->LineStart(lineStart)); -			const Sci::Position end = static_cast<Sci::Position>(pdoc->LineStart(lineEnd + 1)); +			const Sci::Line lineStart = pdoc->SciLineFromPosition(SelectionStart().Position()); +			const Sci::Line lineEnd = pdoc->SciLineFromPosition(SelectionEnd().Position()); +			const Sci::Position start = pdoc->LineStart(lineStart); +			const Sci::Position end = pdoc->LineStart(lineEnd + 1);  			SetSelection(start, end);  			Cut();  			SetLastXChosen();  		}  		break;  	case SCI_LINEDELETE: { -			const Sci::Line line = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); -			const Sci::Position start = static_cast<Sci::Position>(pdoc->LineStart(line)); -			const Sci::Position end = static_cast<Sci::Position>(pdoc->LineStart(line + 1)); +			const Sci::Line line = pdoc->SciLineFromPosition(sel.MainCaret()); +			const Sci::Position start = pdoc->LineStart(line); +			const Sci::Position end = pdoc->LineStart(line + 1);  			pdoc->DeleteChars(start, end - start);  		}  		break; @@ -3920,10 +3910,10 @@ int Editor::KeyDownWithModifiers(int key, int modifiers, bool *consumed) {  void Editor::Indent(bool forwards) {  	UndoGroup ug(pdoc);  	for (size_t r=0; r<sel.Count(); r++) { -		const Sci::Line lineOfAnchor = static_cast<Sci::Line>( -			pdoc->LineFromPosition(sel.Range(r).anchor.Position())); +		const Sci::Line lineOfAnchor = +			pdoc->SciLineFromPosition(sel.Range(r).anchor.Position());  		Sci::Position caretPosition = sel.Range(r).caret.Position(); -		const Sci::Line lineCurrentPos = static_cast<Sci::Line>(pdoc->LineFromPosition(caretPosition)); +		const Sci::Line lineCurrentPos = pdoc->SciLineFromPosition(caretPosition);  		if (lineOfAnchor == lineCurrentPos) {  			if (forwards) {  				pdoc->DeleteChars(sel.Range(r).Start().Position(), sel.Range(r).Length()); @@ -3946,7 +3936,7 @@ void Editor::Indent(bool forwards) {  							numSpaces = pdoc->tabInChars;  						const std::string spaceText(numSpaces, ' ');  						const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, spaceText.c_str(), -							static_cast<Sci::Position>(spaceText.length())); +							spaceText.length());  						sel.Range(r) = SelectionRange(caretPosition + lengthInserted);  					}  				} @@ -3970,9 +3960,9 @@ void Editor::Indent(bool forwards) {  			}  		} else {	// Multiline  			const Sci::Position anchorPosOnLine = sel.Range(r).anchor.Position() - -				static_cast<Sci::Position>(pdoc->LineStart(lineOfAnchor)); +				pdoc->LineStart(lineOfAnchor);  			const Sci::Position currentPosPosOnLine = caretPosition - -				static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos)); +				pdoc->LineStart(lineCurrentPos);  			// Multiple lines selected so indent / dedent  			const Sci::Line lineTopSel = std::min(lineOfAnchor, lineCurrentPos);  			Sci::Line lineBottomSel = std::max(lineOfAnchor, lineCurrentPos); @@ -3981,18 +3971,18 @@ void Editor::Indent(bool forwards) {  			pdoc->Indent(forwards, lineBottomSel, lineTopSel);  			if (lineOfAnchor < lineCurrentPos) {  				if (currentPosPosOnLine == 0) -					sel.Range(r) = SelectionRange(static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos)), -						static_cast<Sci::Position>(pdoc->LineStart(lineOfAnchor))); +					sel.Range(r) = SelectionRange(pdoc->LineStart(lineCurrentPos), +						pdoc->LineStart(lineOfAnchor));  				else -					sel.Range(r) = SelectionRange(static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos + 1)), -						static_cast<Sci::Position>(pdoc->LineStart(lineOfAnchor))); +					sel.Range(r) = SelectionRange(pdoc->LineStart(lineCurrentPos + 1), +						pdoc->LineStart(lineOfAnchor));  			} else {  				if (anchorPosOnLine == 0) -					sel.Range(r) = SelectionRange(static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos)), -						static_cast<Sci::Position>(pdoc->LineStart(lineOfAnchor))); +					sel.Range(r) = SelectionRange(pdoc->LineStart(lineCurrentPos), +						pdoc->LineStart(lineOfAnchor));  				else -					sel.Range(r) = SelectionRange(static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos)), -						static_cast<Sci::Position>(pdoc->LineStart(lineOfAnchor + 1))); +					sel.Range(r) = SelectionRange(pdoc->LineStart(lineCurrentPos), +						pdoc->LineStart(lineOfAnchor + 1));  			}  		}  	} @@ -4024,7 +4014,7 @@ Sci::Position Editor::FindText(      sptr_t lParam) {	///< @c Sci_TextToFind structure: The text to search for in the given range.  	Sci_TextToFind *ft = reinterpret_cast<Sci_TextToFind *>(lParam); -	Sci::Position lengthFound = istrlen(ft->lpstrText); +	Sci::Position lengthFound = strlen(ft->lpstrText);  	if (!pdoc->HasCaseFolder())  		pdoc->SetCaseFolder(CaseFolderForEncoding());  	try { @@ -4038,7 +4028,7 @@ Sci::Position Editor::FindText(  			ft->chrgText.cpMin = static_cast<Sci_PositionCR>(pos);  			ft->chrgText.cpMax = static_cast<Sci_PositionCR>(pos + lengthFound);  		} -		return static_cast<int>(pos); +		return pos;  	} catch (RegexError &) {  		errorStatus = SC_STATUS_WARN_REGEX;  		return -1; @@ -4073,12 +4063,12 @@ Sci::Position Editor::SearchText(  	const char *txt = reinterpret_cast<char *>(lParam);  	Sci::Position pos; -	Sci::Position lengthFound = istrlen(txt); +	Sci::Position lengthFound = strlen(txt);  	if (!pdoc->HasCaseFolder())  		pdoc->SetCaseFolder(CaseFolderForEncoding());  	try {  		if (iMessage == SCI_SEARCHNEXT) { -			pos = pdoc->FindText(searchAnchor, static_cast<Sci::Position>(pdoc->Length()), txt, +			pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,  					static_cast<int>(wParam),  					&lengthFound);  		} else { @@ -4143,7 +4133,7 @@ void Editor::GoToLine(Sci::Line lineNo) {  		lineNo = pdoc->LinesTotal();  	if (lineNo < 0)  		lineNo = 0; -	SetEmptySelection(static_cast<Sci::Position>(pdoc->LineStart(lineNo))); +	SetEmptySelection(pdoc->LineStart(lineNo));  	ShowCaretAtCurrentPosition();  	EnsureCaretVisible();  } @@ -4171,9 +4161,9 @@ std::string Editor::RangeText(Sci::Position start, Sci::Position end) const {  void Editor::CopySelectionRange(SelectionText *ss, bool allowLineCopy) {  	if (sel.Empty()) {  		if (allowLineCopy) { -			const Sci::Line currentLine = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); -			const Sci::Position start = static_cast<Sci::Position>(pdoc->LineStart(currentLine)); -			const Sci::Position end = static_cast<Sci::Position>(pdoc->LineEnd(currentLine)); +			const Sci::Line currentLine = pdoc->SciLineFromPosition(sel.MainCaret()); +			const Sci::Position start = pdoc->LineStart(currentLine); +			const Sci::Position end = pdoc->LineEnd(currentLine);  			std::string text = RangeText(start, end);  			if (pdoc->eolMode != SC_EOL_LF) @@ -4212,7 +4202,7 @@ void Editor::CopyRangeToClipboard(Sci::Position start, Sci::Position end) {  	CopyToClipboard(selectedText);  } -void Editor::CopyText(int length, const char *text) { +void Editor::CopyText(size_t length, const char *text) {  	SelectionText selectedText;  	selectedText.Copy(std::string(text, length),  		pdoc->dbcsCodePage, vs.styles[STYLE_DEFAULT].characterSet, false, false); @@ -4298,14 +4288,14 @@ void Editor::DropAt(SelectionPosition position, const char *value, size_t length  		std::string convertedText = Document::TransformLineEnds(value, lengthValue, pdoc->eolMode);  		if (rectangular) { -			PasteRectangular(position, convertedText.c_str(), static_cast<Sci::Position>(convertedText.length())); +			PasteRectangular(position, convertedText.c_str(), convertedText.length());  			// Should try to select new rectangle but it may not be a rectangle now so just select the drop position  			SetEmptySelection(position);  		} else {  			position = MovePositionOutsideChar(position, sel.MainCaret() - position.Position());  			position = RealizeVirtualSpace(position);  			const Sci::Position lengthInserted = pdoc->InsertString( -				position.Position(), convertedText.c_str(), static_cast<int>(convertedText.length())); +				position.Position(), convertedText.c_str(), convertedText.length());  			if (lengthInserted > 0) {  				SelectionPosition posAfterInsertion = position;  				posAfterInsertion.Add(lengthInserted); @@ -4391,17 +4381,17 @@ void Editor::TrimAndSetSelection(Sci::Position currentPos_, Sci::Position anchor  void Editor::LineSelection(Sci::Position lineCurrentPos_, Sci::Position lineAnchorPos_, bool wholeLine) {  	Sci::Position selCurrentPos, selAnchorPos;  	if (wholeLine) { -		const Sci::Line lineCurrent_ = static_cast<Sci::Line>(pdoc->LineFromPosition(lineCurrentPos_)); -		const Sci::Line lineAnchor_ = static_cast<Sci::Line>(pdoc->LineFromPosition(lineAnchorPos_)); +		const Sci::Line lineCurrent_ = pdoc->SciLineFromPosition(lineCurrentPos_); +		const Sci::Line lineAnchor_ = pdoc->SciLineFromPosition(lineAnchorPos_);  		if (lineAnchorPos_ < lineCurrentPos_) { -			selCurrentPos = static_cast<Sci::Position>(pdoc->LineStart(lineCurrent_ + 1)); -			selAnchorPos = static_cast<Sci::Position>(pdoc->LineStart(lineAnchor_)); +			selCurrentPos = pdoc->LineStart(lineCurrent_ + 1); +			selAnchorPos = pdoc->LineStart(lineAnchor_);  		} else if (lineAnchorPos_ > lineCurrentPos_) { -			selCurrentPos = static_cast<Sci::Position>(pdoc->LineStart(lineCurrent_)); -			selAnchorPos = static_cast<Sci::Position>(pdoc->LineStart(lineAnchor_ + 1)); +			selCurrentPos = pdoc->LineStart(lineCurrent_); +			selAnchorPos = pdoc->LineStart(lineAnchor_ + 1);  		} else { // Same line, select it -			selCurrentPos = static_cast<Sci::Position>(pdoc->LineStart(lineAnchor_ + 1)); -			selAnchorPos = static_cast<Sci::Position>(pdoc->LineStart(lineAnchor_)); +			selCurrentPos = pdoc->LineStart(lineAnchor_ + 1); +			selAnchorPos = pdoc->LineStart(lineAnchor_);  		}  	} else {  		if (lineAnchorPos_ < lineCurrentPos_) { @@ -4884,7 +4874,7 @@ void Editor::ButtonUpWithModifiers(Point pt, unsigned int curTime, int modifiers  			const SelectionPosition selEnd = SelectionEnd();  			if (selStart < selEnd) {  				if (drag.Length()) { -					const int length = static_cast<int>(drag.Length()); +					const Sci::Position length = drag.Length();  					if (modifiers & SCI_CTRL) {  						const Sci::Position lengthInserted = pdoc->InsertString(  							newPos.Position(), drag.Data(), length); @@ -4892,15 +4882,15 @@ void Editor::ButtonUpWithModifiers(Point pt, unsigned int curTime, int modifiers  							SetSelection(newPos.Position(), newPos.Position() + lengthInserted);  						}  					} else if (newPos < selStart) { -						pdoc->DeleteChars(selStart.Position(), static_cast<int>(drag.Length())); +						pdoc->DeleteChars(selStart.Position(), drag.Length());  						const Sci::Position lengthInserted = pdoc->InsertString(  							newPos.Position(), drag.Data(), length);  						if (lengthInserted > 0) {  							SetSelection(newPos.Position(), newPos.Position() + lengthInserted);  						}  					} else if (newPos > selEnd) { -						pdoc->DeleteChars(selStart.Position(), static_cast<int>(drag.Length())); -						newPos.Add(-static_cast<int>(drag.Length())); +						pdoc->DeleteChars(selStart.Position(), drag.Length()); +						newPos.Add(-static_cast<Sci::Position>(drag.Length()));  						const Sci::Position lengthInserted = pdoc->InsertString(  							newPos.Position(), drag.Data(), length);  						if (lengthInserted > 0) { @@ -5023,9 +5013,9 @@ Sci::Position Editor::PositionAfterArea(PRectangle rcArea) const {  	// detect multiline comment additions and heals single line comments  	const Sci::Line lineAfter = TopLineOfMain() + static_cast<Sci::Line>(rcArea.bottom - 1) / vs.lineHeight + 1;  	if (lineAfter < pcs->LinesDisplayed()) -		return static_cast<Sci::Position>(pdoc->LineStart(pcs->DocFromDisplay(lineAfter) + 1)); +		return pdoc->LineStart(pcs->DocFromDisplay(lineAfter) + 1);  	else -		return static_cast<Sci::Position>(pdoc->Length()); +		return pdoc->Length();  }  // Style to a position within the view. If this causes a change at end of last line then @@ -5059,9 +5049,9 @@ Sci::Position Editor::PositionAfterMaxStyling(Sci::Position posMax, bool scrolli  	const Sci::Line linesToStyle = std::clamp(static_cast<int>(secondsAllowed / pdoc->durationStyleOneLine),  		10, 0x10000);  	const Sci::Line stylingMaxLine = std::min( -		static_cast<Sci::Line>(pdoc->LineFromPosition(pdoc->GetEndStyled()) + linesToStyle), +		pdoc->SciLineFromPosition(pdoc->GetEndStyled()) + linesToStyle,  		pdoc->LinesTotal()); -	return std::min(static_cast<Sci::Position>(pdoc->LineStart(stylingMaxLine)), posMax); +	return std::min(pdoc->LineStart(stylingMaxLine), posMax);  }  void Editor::StartIdleStyling(bool truncatedLastStyling) { @@ -5097,7 +5087,7 @@ void Editor::StyleAreaBounded(PRectangle rcArea, bool scrolling) {  void Editor::IdleStyling() {  	const Sci::Position posAfterArea = PositionAfterArea(GetClientRectangle());  	const Sci::Position endGoal = (idleStyling >= SC_IDLESTYLING_AFTERVISIBLE) ? -		static_cast<Sci::Position>(pdoc->Length()) : posAfterArea; +		pdoc->Length() : posAfterArea;  	const Sci::Position posAfterMax = PositionAfterMaxStyling(endGoal, false);  	pdoc->StyleToAdjustingLineDuration(posAfterMax);  	if (pdoc->GetEndStyled() >= endGoal) { @@ -5109,7 +5099,7 @@ void Editor::IdleWork() {  	// Style the line after the modification as this allows modifications that change just the  	// line of the modification to heal instead of propagating to the rest of the window.  	if (workNeeded.items & WorkNeeded::workStyle) { -		StyleToPositionInView(static_cast<Sci::Position>(pdoc->LineStart(pdoc->LineFromPosition(workNeeded.upTo) + 2))); +		StyleToPositionInView(pdoc->LineStart(pdoc->LineFromPosition(workNeeded.upTo) + 2));  	}  	NotifyUpdateUI();  	workNeeded.Reset(); @@ -5305,8 +5295,8 @@ void Editor::FoldLine(Sci::Line line, int action) {  				pcs->SetExpanded(line, false);  				pcs->SetVisible(line + 1, lineMaxSubord, false); -				const Sci::Line lineCurrent = static_cast<Sci::Line>( -					pdoc->LineFromPosition(sel.MainCaret())); +				const Sci::Line lineCurrent = +					pdoc->SciLineFromPosition(sel.MainCaret());  				if (lineCurrent > line && lineCurrent <= lineMaxSubord) {  					// This does not re-expand the fold  					EnsureCaretVisible(); @@ -5425,7 +5415,7 @@ void Editor::EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy) {  }  void Editor::FoldAll(int action) { -	pdoc->EnsureStyledTo(static_cast<Sci::Position>(pdoc->Length())); +	pdoc->EnsureStyledTo(pdoc->Length());  	const Sci::Line maxLine = pdoc->LinesTotal();  	bool expanding = action == SC_FOLDACTION_EXPAND;  	if (action == SC_FOLDACTION_TOGGLE) { @@ -5446,7 +5436,7 @@ void Editor::FoldAll(int action) {  			}  		}  	} else { -		for (int line = 0; line < maxLine; line++) { +		for (Sci::Line line = 0; line < maxLine; line++) {  			const int level = pdoc->GetLevel(line);  			if ((level & SC_FOLDLEVELHEADERFLAG) &&  					(SC_FOLDLEVELBASE == LevelNumber(level))) { @@ -5514,8 +5504,8 @@ void Editor::FoldChanged(Sci::Line line, int levelNow, int levelPrev) {  void Editor::NeedShown(Sci::Position pos, Sci::Position len) {  	if (foldAutomatic & SC_AUTOMATICFOLD_SHOW) { -		const Sci::Line lineStart = static_cast<Sci::Line>(pdoc->LineFromPosition(pos)); -		const Sci::Line lineEnd = static_cast<Sci::Line>(pdoc->LineFromPosition(pos+len)); +		const Sci::Line lineStart = pdoc->SciLineFromPosition(pos); +		const Sci::Line lineEnd = pdoc->SciLineFromPosition(pos+len);  		for (Sci::Line line = lineStart; line <= lineEnd; line++) {  			EnsureLineVisible(line, false);  		} @@ -5545,7 +5535,7 @@ Sci::Position Editor::GetTag(char *tagValue, int tagNumber) {  Sci::Position Editor::ReplaceTarget(bool replacePatterns, const char *text, Sci::Position length) {  	UndoGroup ug(pdoc);  	if (length == -1) -		length = istrlen(text); +		length = strlen(text);  	if (replacePatterns) {  		text = pdoc->SubstituteByPosition(text, &length);  		if (!text) { @@ -5571,7 +5561,7 @@ int Editor::CodePage() const {  		return 0;  } -int Editor::WrapCount(int line) { +Sci::Line Editor::WrapCount(Sci::Line line) {  	AutoSurface surface(this);  	AutoLineLayout ll(view.llc, view.RetrieveLineLayout(line, *this)); @@ -5705,27 +5695,27 @@ void Editor::SetSelectionNMessage(unsigned int iMessage, uptr_t wParam, sptr_t l  	switch (iMessage) {  	case SCI_SETSELECTIONNCARET: -		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); +		sel.Range(wParam).caret.SetPosition(static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETSELECTIONNANCHOR: -		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); +		sel.Range(wParam).anchor.SetPosition(static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETSELECTIONNCARETVIRTUALSPACE: -		sel.Range(wParam).caret.SetVirtualSpace(static_cast<int>(lParam)); +		sel.Range(wParam).caret.SetVirtualSpace(static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETSELECTIONNANCHORVIRTUALSPACE: -		sel.Range(wParam).anchor.SetVirtualSpace(static_cast<int>(lParam)); +		sel.Range(wParam).anchor.SetVirtualSpace(static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETSELECTIONNSTART: -		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); +		sel.Range(wParam).anchor.SetPosition(static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETSELECTIONNEND: -		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); +		sel.Range(wParam).caret.SetPosition(static_cast<Sci::Position>(lParam));  		break;  	} @@ -5783,10 +5773,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			if (lParam == 0)  				return 0;  			UndoGroup ug(pdoc); -			pdoc->DeleteChars(0, static_cast<Sci::Position>(pdoc->Length())); +			pdoc->DeleteChars(0, pdoc->Length());  			SetEmptySelection(0);  			const char *text = CharPtrFromSPtr(lParam); -			pdoc->InsertString(0, text, istrlen(text)); +			pdoc->InsertString(0, text, strlen(text));  			return 1;  		} @@ -5819,11 +5809,11 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_COPYRANGE: -		CopyRangeToClipboard(static_cast<int>(wParam), static_cast<int>(lParam)); +		CopyRangeToClipboard(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  		break;  	case SCI_COPYTEXT: -		CopyText(static_cast<int>(wParam), CharPtrFromSPtr(lParam)); +		CopyText(wParam, CharPtrFromSPtr(lParam));  		break;  	case SCI_PASTE: @@ -5856,14 +5846,14 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return topLine;  	case SCI_SETFIRSTVISIBLELINE: -		ScrollTo(static_cast<int>(wParam)); +		ScrollTo(static_cast<Sci::Line>(wParam));  		break;  	case SCI_GETLINE: {	// Risk of overwriting the end of the buffer -			const Sci::Position lineStart = static_cast<Sci::Position>( -				pdoc->LineStart(static_cast<Sci::Line>(wParam))); -			const Sci::Position lineEnd = static_cast<Sci::Position>( -				pdoc->LineStart(static_cast<Sci::Line>(wParam + 1))); +			const Sci::Position lineStart = +				pdoc->LineStart(static_cast<Sci::Line>(wParam)); +			const Sci::Position lineEnd = +				pdoc->LineStart(static_cast<Sci::Line>(wParam + 1));  			if (lParam == 0) {  				return lineEnd - lineStart;  			} @@ -5888,7 +5878,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			Sci::Position nStart = static_cast<Sci::Position>(wParam);  			Sci::Position nEnd = static_cast<Sci::Position>(lParam);  			if (nEnd < 0) -				nEnd = static_cast<Sci::Position>(pdoc->Length()); +				nEnd = pdoc->Length();  			if (nStart < 0)  				nStart = nEnd; 	// Remove selection  			InvalidateSelection(SelectionRange(nStart, nEnd)); @@ -5918,12 +5908,12 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		}  	case SCI_LINEFROMPOSITION: -		if (static_cast<int>(wParam) < 0) +		if (static_cast<Sci::Position>(wParam) < 0)  			return 0; -		return pdoc->LineFromPosition(static_cast<int>(wParam)); +		return pdoc->LineFromPosition(static_cast<Sci::Position>(wParam));  	case SCI_POSITIONFROMLINE: -		if (static_cast<int>(wParam) < 0) +		if (static_cast<Sci::Position>(wParam) < 0)  			wParam = pdoc->LineFromPosition(SelectionStart().Position());  		if (wParam == 0)  			return 0; 	// Even if there is no text, there is a first line that starts at 0 @@ -5931,14 +5921,14 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			return -1;  		//if (wParam > pdoc->LineFromPosition(pdoc->Length()))	// Useful test, anyway...  		//	return -1; -		return pdoc->LineStart(static_cast<int>(wParam)); +		return pdoc->LineStart(static_cast<Sci::Position>(wParam));  		// Replacement of the old Scintilla interpretation of EM_LINELENGTH  	case SCI_LINELENGTH: -		if ((static_cast<int>(wParam) < 0) || -		        (static_cast<int>(wParam) > pdoc->LineFromPosition(pdoc->Length()))) +		if ((static_cast<Sci::Position>(wParam) < 0) || +		        (static_cast<Sci::Position>(wParam) > pdoc->LineFromPosition(pdoc->Length())))  			return 0; -		return pdoc->LineStart(static_cast<int>(wParam) + 1) - pdoc->LineStart(static_cast<int>(wParam)); +		return pdoc->LineStart(static_cast<Sci::Position>(wParam) + 1) - pdoc->LineStart(static_cast<Sci::Position>(wParam));  	case SCI_REPLACESEL: {  			if (lParam == 0) @@ -5947,7 +5937,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			ClearSelection();  			const char *replacement = CharPtrFromSPtr(lParam);  			const Sci::Position lengthInserted = pdoc->InsertString( -				sel.MainCaret(), replacement, istrlen(replacement)); +				sel.MainCaret(), replacement, strlen(replacement));  			SetEmptySelection(sel.MainCaret() + lengthInserted);  			SetLastXChosen();  			EnsureCaretVisible(); @@ -5955,27 +5945,27 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_SETTARGETSTART: -		targetStart = static_cast<int>(wParam); +		targetStart = static_cast<Sci::Position>(wParam);  		break;  	case SCI_GETTARGETSTART:  		return targetStart;  	case SCI_SETTARGETEND: -		targetEnd = static_cast<int>(wParam); +		targetEnd = static_cast<Sci::Position>(wParam);  		break;  	case SCI_GETTARGETEND:  		return targetEnd;  	case SCI_SETTARGETRANGE: -		targetStart = static_cast<int>(wParam); -		targetEnd = static_cast<int>(lParam); +		targetStart = static_cast<Sci::Position>(wParam); +		targetEnd = static_cast<Sci::Position>(lParam);  		break;  	case SCI_TARGETWHOLEDOCUMENT:  		targetStart = 0; -		targetEnd = static_cast<Sci::Position>(pdoc->Length()); +		targetEnd = pdoc->Length();  		break;  	case SCI_TARGETFROMSELECTION: @@ -6016,14 +6006,15 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return GetTag(CharPtrFromSPtr(lParam), static_cast<int>(wParam));  	case SCI_POSITIONBEFORE: -		return pdoc->MovePositionOutsideChar(static_cast<int>(wParam) - 1, -1, true); +		return pdoc->MovePositionOutsideChar(static_cast<Sci::Position>(wParam) - 1, -1, true);  	case SCI_POSITIONAFTER: -		return pdoc->MovePositionOutsideChar(static_cast<int>(wParam) + 1, 1, true); +		return pdoc->MovePositionOutsideChar(static_cast<Sci::Position>(wParam) + 1, 1, true);  	case SCI_POSITIONRELATIVE: -		return std::clamp(static_cast<int>(pdoc->GetRelativePosition(static_cast<int>(wParam), static_cast<int>(lParam))), -			0, static_cast<int>(pdoc->Length())); +		return std::clamp(pdoc->GetRelativePosition( +			static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)), +			static_cast<Sci::Position>(0), pdoc->Length());  	case SCI_LINESCROLL:  		ScrollTo(topLine + static_cast<Sci::Line>(lParam)); @@ -6062,7 +6053,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (lParam < 0) {  			return 0;  		} else { -			const Point pt = LocationFromPosition(static_cast<int>(lParam)); +			const Point pt = LocationFromPosition(static_cast<Sci::Position>(lParam));  			// Convert to view-relative  			return static_cast<int>(pt.x) - vs.textStart + vs.fixedColumnWidth;  		} @@ -6071,7 +6062,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (lParam < 0) {  			return 0;  		} else { -			const Point pt = LocationFromPosition(static_cast<int>(lParam)); +			const Point pt = LocationFromPosition(static_cast<Sci::Position>(lParam));  			return static_cast<int>(pt.y);  		} @@ -6084,10 +6075,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			Sci_TextRange *tr = reinterpret_cast<Sci_TextRange *>(lParam);  			Sci::Position cpMax = static_cast<Sci::Position>(tr->chrg.cpMax);  			if (cpMax == -1) -				cpMax = static_cast<Sci::Position>(pdoc->Length()); +				cpMax = pdoc->Length();  			PLATFORM_ASSERT(cpMax <= pdoc->Length()); -			int len = static_cast<int>(cpMax - tr->chrg.cpMin); 	// No -1 as cpMin and cpMax are referring to inter character positions -			pdoc->GetCharRange(tr->lpstrText, static_cast<int>(tr->chrg.cpMin), len); +			Sci::Position len = cpMax - tr->chrg.cpMin; 	// No -1 as cpMin and cpMax are referring to inter character positions +			pdoc->GetCharRange(tr->lpstrText, tr->chrg.cpMin, len);  			// Spec says copied text is terminated with a NUL  			tr->lpstrText[len] = '\0';  			return len; 	// Not including NUL @@ -6138,11 +6129,11 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			if (lParam == 0)  				return 0;  			Sci::Position insertPos = static_cast<Sci::Position>(wParam); -			if (static_cast<int>(wParam) == -1) +			if (insertPos == -1)  				insertPos = CurrentPosition();  			Sci::Position newCurrent = CurrentPosition();  			const char *sz = CharPtrFromSPtr(lParam); -			const Sci::Position lengthInserted = pdoc->InsertString(insertPos, sz, istrlen(sz)); +			const Sci::Position lengthInserted = pdoc->InsertString(insertPos, sz, strlen(sz));  			if (newCurrent > insertPos)  				newCurrent += lengthInserted;  			SetEmptySelection(newCurrent); @@ -6151,12 +6142,12 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_CHANGEINSERTION:  		PLATFORM_ASSERT(lParam); -		pdoc->ChangeInsertion(CharPtrFromSPtr(lParam), static_cast<int>(wParam)); +		pdoc->ChangeInsertion(CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam));  		return 0;  	case SCI_APPENDTEXT: -		pdoc->InsertString(static_cast<Sci::Position>(pdoc->Length()), -			CharPtrFromSPtr(lParam), static_cast<int>(wParam)); +		pdoc->InsertString(pdoc->Length(), +			CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam));  		return 0;  	case SCI_CLEARALL: @@ -6164,7 +6155,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return 0;  	case SCI_DELETERANGE: -		pdoc->DeleteChars(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->DeleteChars(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  		return 0;  	case SCI_CLEARDOCUMENTSTYLE: @@ -6240,7 +6231,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_SETCURRENTPOS:  		if (sel.IsRectangular()) { -			sel.Rectangular().caret.SetPosition(static_cast<int>(wParam)); +			sel.Rectangular().caret.SetPosition(static_cast<Sci::Position>(wParam));  			SetRectangularRange();  			Redraw();  		} else { @@ -6279,7 +6270,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return sel.LimitsForRectangularElseMain().end.Position();  	case SCI_SETEMPTYSELECTION: -		SetEmptySelection(static_cast<int>(wParam)); +		SetEmptySelection(static_cast<Sci::Position>(wParam));  		break;  	case SCI_SETPRINTMAGNIFICATION: @@ -6304,10 +6295,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return view.printParameters.wrapState;  	case SCI_GETSTYLEAT: -		if (static_cast<int>(wParam) >= pdoc->Length()) +		if (static_cast<Sci::Position>(wParam) >= pdoc->Length())  			return 0;  		else -			return pdoc->StyleAt(static_cast<int>(wParam)); +			return pdoc->StyleAt(static_cast<Sci::Position>(wParam));  	case SCI_REDO:  		Redo(); @@ -6327,8 +6318,8 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			Sci_TextRange *tr = reinterpret_cast<Sci_TextRange *>(lParam);  			int iPlace = 0;  			for (long iChar = tr->chrg.cpMin; iChar < tr->chrg.cpMax; iChar++) { -				tr->lpstrText[iPlace++] = pdoc->CharAt(static_cast<int>(iChar)); -				tr->lpstrText[iPlace++] = pdoc->StyleAt(static_cast<int>(iChar)); +				tr->lpstrText[iPlace++] = pdoc->CharAt(iChar); +				tr->lpstrText[iPlace++] = pdoc->StyleAt(iChar);  			}  			tr->lpstrText[iPlace] = '\0';  			tr->lpstrText[iPlace + 1] = '\0'; @@ -6386,18 +6377,18 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  					    true, true);  	case SCI_GOTOLINE: -		GoToLine(static_cast<int>(wParam)); +		GoToLine(static_cast<Sci::Line>(wParam));  		break;  	case SCI_GOTOPOS: -		SetEmptySelection(static_cast<int>(wParam)); +		SetEmptySelection(static_cast<Sci::Position>(wParam));  		EnsureCaretVisible();  		break;  	case SCI_GETCURLINE: { -			const Sci::Line lineCurrentPos = static_cast<Sci::Line>(pdoc->LineFromPosition(sel.MainCaret())); -			const Sci::Position lineStart = static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos)); -			const Sci::Position lineEnd = static_cast<Sci::Position>(pdoc->LineStart(lineCurrentPos + 1)); +			const Sci::Line lineCurrentPos = pdoc->SciLineFromPosition(sel.MainCaret()); +			const Sci::Position lineStart = pdoc->LineStart(lineCurrentPos); +			const Sci::Position lineEnd = pdoc->LineStart(lineCurrentPos + 1);  			if (lParam == 0) {  				return 1 + lineEnd - lineStart;  			} @@ -6437,20 +6428,20 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return pdoc->GetLineEndTypesActive();  	case SCI_STARTSTYLING: -		pdoc->StartStyling(static_cast<int>(wParam)); +		pdoc->StartStyling(static_cast<Sci::Position>(wParam));  		break;  	case SCI_SETSTYLING: -		if (static_cast<int>(wParam) < 0) +		if (static_cast<Sci::Position>(wParam) < 0)  			errorStatus = SC_STATUS_FAILURE;  		else -			pdoc->SetStyleFor(static_cast<int>(wParam), static_cast<char>(lParam)); +			pdoc->SetStyleFor(static_cast<Sci::Position>(wParam), static_cast<char>(lParam));  		break;  	case SCI_SETSTYLINGEX:             // Specify a complete styling buffer  		if (lParam == 0)  			return 0; -		pdoc->SetStyles(static_cast<int>(wParam), CharPtrFromSPtr(lParam)); +		pdoc->SetStyles(static_cast<Sci::Position>(wParam), CharPtrFromSPtr(lParam));  		break;  	case SCI_SETBUFFEREDDRAW: @@ -6500,21 +6491,21 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return pdoc->tabInChars;  	case SCI_CLEARTABSTOPS: -		if (view.ClearTabstops(static_cast<int>(wParam))) { -			const DocModification mh(SC_MOD_CHANGETABSTOPS, 0, 0, 0, 0, static_cast<int>(wParam)); +		if (view.ClearTabstops(static_cast<Sci::Line>(wParam))) { +			const DocModification mh(SC_MOD_CHANGETABSTOPS, 0, 0, 0, 0, static_cast<Sci::Line>(wParam));  			NotifyModified(pdoc, mh, NULL);  		}  		break;  	case SCI_ADDTABSTOP: -		if (view.AddTabstop(static_cast<int>(wParam), static_cast<int>(lParam))) { -			const DocModification mh(SC_MOD_CHANGETABSTOPS, 0, 0, 0, 0, static_cast<int>(wParam)); +		if (view.AddTabstop(static_cast<Sci::Line>(wParam), static_cast<int>(lParam))) { +			const DocModification mh(SC_MOD_CHANGETABSTOPS, 0, 0, 0, 0, static_cast<Sci::Line>(wParam));  			NotifyModified(pdoc, mh, NULL);  		}  		break;  	case SCI_GETNEXTTABSTOP: -		return view.GetNextTabstop(static_cast<int>(wParam), static_cast<int>(lParam)); +		return view.GetNextTabstop(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  	case SCI_SETINDENT:  		pdoc->indentInChars = static_cast<int>(wParam); @@ -6537,14 +6528,14 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return pdoc->useTabs;  	case SCI_SETLINEINDENTATION: -		pdoc->SetLineIndentation(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->SetLineIndentation(static_cast<Sci::Line>(wParam), static_cast<Sci::Position>(lParam));  		break;  	case SCI_GETLINEINDENTATION: -		return pdoc->GetLineIndentation(static_cast<int>(wParam)); +		return pdoc->GetLineIndentation(static_cast<Sci::Line>(wParam));  	case SCI_GETLINEINDENTPOSITION: -		return pdoc->GetLineIndentPosition(static_cast<int>(wParam)); +		return pdoc->GetLineIndentPosition(static_cast<Sci::Line>(wParam));  	case SCI_SETTABINDENTS:  		pdoc->tabIndents = wParam != 0; @@ -6569,13 +6560,13 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return dwellDelay;  	case SCI_WORDSTARTPOSITION: -		return pdoc->ExtendWordSelect(static_cast<int>(wParam), -1, lParam != 0); +		return pdoc->ExtendWordSelect(static_cast<Sci::Position>(wParam), -1, lParam != 0);  	case SCI_WORDENDPOSITION: -		return pdoc->ExtendWordSelect(static_cast<int>(wParam), 1, lParam != 0); +		return pdoc->ExtendWordSelect(static_cast<Sci::Position>(wParam), 1, lParam != 0);  	case SCI_ISRANGEWORD: -		return pdoc->IsWordAt(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->IsWordAt(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_SETIDLESTYLING:  		idleStyling = static_cast<int>(wParam); @@ -6651,7 +6642,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_SETSCROLLWIDTH:  		PLATFORM_ASSERT(wParam > 0); -		if ((wParam > 0) && (wParam != static_cast<unsigned int >(scrollWidth))) { +		if ((wParam > 0) && (wParam != static_cast<unsigned int>(scrollWidth))) {  			view.lineWidthMaxSeen = 0;  			scrollWidth = static_cast<int>(wParam);  			SetScrollBars(); @@ -6711,10 +6702,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_GETCOLUMN: -		return pdoc->GetColumn(static_cast<int>(wParam)); +		return pdoc->GetColumn(static_cast<Sci::Position>(wParam));  	case SCI_FINDCOLUMN: -		return pdoc->FindColumn(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->FindColumn(static_cast<Sci::Line>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_SETHSCROLLBAR :  		if (horizontalScrollBarVisible != (wParam != 0)) { @@ -6759,7 +6750,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return highlightGuideColumn;  	case SCI_GETLINEENDPOSITION: -		return pdoc->LineEnd(static_cast<int>(wParam)); +		return pdoc->LineEnd(static_cast<Sci::Line>(wParam));  	case SCI_SETCODEPAGE:  		if (ValidCodePage(static_cast<int>(wParam))) { @@ -6834,16 +6825,16 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		InvalidateStyleRedraw();  		break;  	case SCI_MARKERADD: { -			const int markerID = pdoc->AddMark(static_cast<int>(wParam), static_cast<int>(lParam)); +			const int markerID = pdoc->AddMark(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  			return markerID;  		}  	case SCI_MARKERADDSET:  		if (lParam != 0) -			pdoc->AddMarkSet(static_cast<int>(wParam), static_cast<int>(lParam)); +			pdoc->AddMarkSet(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  		break;  	case SCI_MARKERDELETE: -		pdoc->DeleteMark(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->DeleteMark(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  		break;  	case SCI_MARKERDELETEALL: @@ -6851,13 +6842,13 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_MARKERGET: -		return pdoc->GetMark(static_cast<int>(wParam)); +		return pdoc->GetMark(static_cast<Sci::Line>(wParam));  	case SCI_MARKERNEXT: -		return pdoc->MarkerNext(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->MarkerNext(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  	case SCI_MARKERPREVIOUS: { -			for (int iLine = static_cast<int>(wParam); iLine >= 0; iLine--) { +			for (Sci::Line iLine = static_cast<Sci::Line>(wParam); iLine >= 0; iLine--) {  				if ((pdoc->GetMark(iLine) & lParam) != 0)  					return iLine;  			} @@ -7037,10 +7028,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  #endif  	case SCI_SETLINESTATE: -		return pdoc->SetLineState(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->SetLineState(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  	case SCI_GETLINESTATE: -		return pdoc->GetLineState(static_cast<int>(wParam)); +		return pdoc->GetLineState(static_cast<Sci::Line>(wParam));  	case SCI_GETMAXLINESTATE:  		return pdoc->GetMaxLineState(); @@ -7067,7 +7058,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_GETCARETLINEBACK:  		return vs.caretLineBackground.AsLong();  	case SCI_SETCARETLINEBACK: -		vs.caretLineBackground = static_cast<int>(wParam); +		vs.caretLineBackground = ColourDesired(static_cast<long>(wParam));  		InvalidateStyleRedraw();  		break;  	case SCI_GETCARETLINEBACKALPHA: @@ -7080,55 +7071,55 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		// Folding messages  	case SCI_VISIBLEFROMDOCLINE: -		return pcs->DisplayFromDoc(static_cast<int>(wParam)); +		return pcs->DisplayFromDoc(static_cast<Sci::Line>(wParam));  	case SCI_DOCLINEFROMVISIBLE: -		return pcs->DocFromDisplay(static_cast<int>(wParam)); +		return pcs->DocFromDisplay(static_cast<Sci::Line>(wParam));  	case SCI_WRAPCOUNT: -		return WrapCount(static_cast<int>(wParam)); +		return WrapCount(static_cast<Sci::Line>(wParam));  	case SCI_SETFOLDLEVEL: { -			const int prev = pdoc->SetLevel(static_cast<int>(wParam), static_cast<int>(lParam)); +			const int prev = pdoc->SetLevel(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  			if (prev != static_cast<int>(lParam))  				RedrawSelMargin();  			return prev;  		}  	case SCI_GETFOLDLEVEL: -		return pdoc->GetLevel(static_cast<int>(wParam)); +		return pdoc->GetLevel(static_cast<Sci::Line>(wParam));  	case SCI_GETLASTCHILD: -		return pdoc->GetLastChild(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->GetLastChild(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  	case SCI_GETFOLDPARENT: -		return pdoc->GetFoldParent(static_cast<int>(wParam)); +		return pdoc->GetFoldParent(static_cast<Sci::Line>(wParam));  	case SCI_SHOWLINES: -		pcs->SetVisible(static_cast<int>(wParam), static_cast<int>(lParam), true); +		pcs->SetVisible(static_cast<Sci::Line>(wParam), static_cast<Sci::Line>(lParam), true);  		SetScrollBars();  		Redraw();  		break;  	case SCI_HIDELINES:  		if (wParam > 0) -			pcs->SetVisible(static_cast<int>(wParam), static_cast<int>(lParam), false); +			pcs->SetVisible(static_cast<Sci::Line>(wParam), static_cast<Sci::Line>(lParam), false);  		SetScrollBars();  		Redraw();  		break;  	case SCI_GETLINEVISIBLE: -		return pcs->GetVisible(static_cast<int>(wParam)); +		return pcs->GetVisible(static_cast<Sci::Line>(wParam));  	case SCI_GETALLLINESVISIBLE:  		return pcs->HiddenLines() ? 0 : 1;  	case SCI_SETFOLDEXPANDED: -		SetFoldExpanded(static_cast<int>(wParam), lParam != 0); +		SetFoldExpanded(static_cast<Sci::Line>(wParam), lParam != 0);  		break;  	case SCI_GETFOLDEXPANDED: -		return pcs->GetExpanded(static_cast<int>(wParam)); +		return pcs->GetExpanded(static_cast<Sci::Line>(wParam));  	case SCI_SETAUTOMATICFOLD:  		foldAutomatic = static_cast<int>(wParam); @@ -7143,8 +7134,8 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_TOGGLEFOLDSHOWTEXT: -		pcs->SetFoldDisplayText(static_cast<int>(wParam), CharPtrFromSPtr(lParam)); -		FoldLine(static_cast<int>(wParam), SC_FOLDACTION_TOGGLE); +		pcs->SetFoldDisplayText(static_cast<Sci::Line>(wParam), CharPtrFromSPtr(lParam)); +		FoldLine(static_cast<Sci::Line>(wParam), SC_FOLDACTION_TOGGLE);  		break;  	case SCI_FOLDDISPLAYTEXTSETSTYLE: @@ -7153,15 +7144,15 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_TOGGLEFOLD: -		FoldLine(static_cast<int>(wParam), SC_FOLDACTION_TOGGLE); +		FoldLine(static_cast<Sci::Line>(wParam), SC_FOLDACTION_TOGGLE);  		break;  	case SCI_FOLDLINE: -		FoldLine(static_cast<int>(wParam), static_cast<int>(lParam)); +		FoldLine(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  		break;  	case SCI_FOLDCHILDREN: -		FoldExpand(static_cast<int>(wParam), static_cast<int>(lParam), pdoc->GetLevel(static_cast<int>(wParam))); +		FoldExpand(static_cast<Sci::Line>(wParam), static_cast<int>(lParam), pdoc->GetLevel(static_cast<int>(wParam)));  		break;  	case SCI_FOLDALL: @@ -7169,22 +7160,22 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_EXPANDCHILDREN: -		FoldExpand(static_cast<int>(wParam), SC_FOLDACTION_EXPAND, static_cast<int>(lParam)); +		FoldExpand(static_cast<Sci::Line>(wParam), SC_FOLDACTION_EXPAND, static_cast<int>(lParam));  		break;  	case SCI_CONTRACTEDFOLDNEXT: -		return ContractedFoldNext(static_cast<int>(wParam)); +		return ContractedFoldNext(static_cast<Sci::Line>(wParam));  	case SCI_ENSUREVISIBLE: -		EnsureLineVisible(static_cast<int>(wParam), false); +		EnsureLineVisible(static_cast<Sci::Line>(wParam), false);  		break;  	case SCI_ENSUREVISIBLEENFORCEPOLICY: -		EnsureLineVisible(static_cast<int>(wParam), true); +		EnsureLineVisible(static_cast<Sci::Line>(wParam), true);  		break;  	case SCI_SCROLLRANGE: -		ScrollRange(SelectionRange(static_cast<int>(wParam), static_cast<int>(lParam))); +		ScrollRange(SelectionRange(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)));  		break;  	case SCI_SEARCHANCHOR: @@ -7393,24 +7384,26 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return pdoc->decorations->GetCurrentValue();  	case SCI_INDICATORFILLRANGE: -		pdoc->DecorationFillRange(static_cast<int>(wParam), pdoc->decorations->GetCurrentValue(), static_cast<int>(lParam)); +		pdoc->DecorationFillRange(static_cast<Sci::Position>(wParam), +			pdoc->decorations->GetCurrentValue(), static_cast<Sci::Position>(lParam));  		break;  	case SCI_INDICATORCLEARRANGE: -		pdoc->DecorationFillRange(static_cast<int>(wParam), 0, static_cast<int>(lParam)); +		pdoc->DecorationFillRange(static_cast<Sci::Position>(wParam), 0, +			static_cast<Sci::Position>(lParam));  		break;  	case SCI_INDICATORALLONFOR: -		return pdoc->decorations->AllOnFor(static_cast<int>(wParam)); +		return pdoc->decorations->AllOnFor(static_cast<Sci::Position>(wParam));  	case SCI_INDICATORVALUEAT: -		return pdoc->decorations->ValueAt(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->decorations->ValueAt(static_cast<int>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_INDICATORSTART: -		return pdoc->decorations->Start(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->decorations->Start(static_cast<int>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_INDICATOREND: -		return pdoc->decorations->End(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->decorations->End(static_cast<int>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_LINEDOWN:  	case SCI_LINEDOWNEXTEND: @@ -7508,7 +7501,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return KeyCommand(iMessage);  	case SCI_BRACEHIGHLIGHT: -		SetBraceHighlight(static_cast<int>(wParam), static_cast<int>(lParam), STYLE_BRACELIGHT); +		SetBraceHighlight(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam), STYLE_BRACELIGHT);  		break;  	case SCI_BRACEHIGHLIGHTINDICATOR: @@ -7519,7 +7512,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_BRACEBADLIGHT: -		SetBraceHighlight(static_cast<int>(wParam), -1, STYLE_BRACEBAD); +		SetBraceHighlight(static_cast<Sci::Position>(wParam), -1, STYLE_BRACEBAD);  		break;  	case SCI_BRACEBADLIGHTINDICATOR: @@ -7532,7 +7525,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_BRACEMATCH:  		// wParam is position of char to find brace for,  		// lParam is maximum amount of text to restyle to find it -		return pdoc->BraceMatch(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->BraceMatch(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  	case SCI_GETVIEWEOL:  		return vs.viewEOL; @@ -7603,7 +7596,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_CREATEDOCUMENT: {  			Document *doc = new Document(static_cast<int>(lParam));  			doc->AddRef(); -			doc->Allocate(static_cast<int>(wParam)); +			doc->Allocate(static_cast<Sci::Position>(wParam));  			pcs = ContractionStateCreate(pdoc->IsLarge());  			return reinterpret_cast<sptr_t>(doc);  		} @@ -7622,7 +7615,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_CREATELOADER: {  			Document *doc = new Document(static_cast<int>(lParam));  			doc->AddRef(); -			doc->Allocate(static_cast<int>(wParam)); +			doc->Allocate(static_cast<Sci::Position>(wParam));  			doc->SetUndoCollection(false);  			pcs = ContractionStateCreate(pdoc->IsLarge());  			return reinterpret_cast<sptr_t>(static_cast<ILoader *>(doc)); @@ -7641,7 +7634,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return 0;  	case SCI_SETLENGTHFORENCODE: -		lengthForEncode = static_cast<int>(wParam); +		lengthForEncode = static_cast<Sci::Position>(wParam);  		return 0;  	case SCI_SELECTIONISRECTANGLE: @@ -7692,8 +7685,8 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_GETLINESELSTARTPOSITION:  	case SCI_GETLINESELENDPOSITION: {  			const SelectionSegment segmentLine( -				SelectionPosition(static_cast<Sci::Position>(pdoc->LineStart(static_cast<int>(wParam)))), -				SelectionPosition(static_cast<Sci::Position>(pdoc->LineEnd(static_cast<int>(wParam))))); +				SelectionPosition(pdoc->LineStart(static_cast<Sci::Position>(wParam))), +				SelectionPosition(pdoc->LineEnd(static_cast<Sci::Position>(wParam))));  			for (size_t r=0; r<sel.Count(); r++) {  				const SelectionSegment portion = sel.Range(r).Intersect(segmentLine);  				if (portion.start.IsValid()) { @@ -7840,7 +7833,8 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return reinterpret_cast<sptr_t>(pdoc->BufferPointer());  	case SCI_GETRANGEPOINTER: -		return reinterpret_cast<sptr_t>(pdoc->RangePointer(static_cast<int>(wParam), static_cast<int>(lParam))); +		return reinterpret_cast<sptr_t>(pdoc->RangePointer( +			static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)));  	case SCI_GETGAPPOSITION:  		return pdoc->GapPosition(); @@ -7877,29 +7871,29 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return marginOptions;  	case SCI_MARGINSETTEXT: -		pdoc->MarginSetText(static_cast<int>(wParam), CharPtrFromSPtr(lParam)); +		pdoc->MarginSetText(static_cast<Sci::Line>(wParam), CharPtrFromSPtr(lParam));  		break;  	case SCI_MARGINGETTEXT: { -			const StyledText st = pdoc->MarginStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->MarginStyledText(static_cast<Sci::Line>(wParam));  			return BytesResult(lParam, reinterpret_cast<const unsigned char *>(st.text), st.length);  		}  	case SCI_MARGINSETSTYLE: -		pdoc->MarginSetStyle(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->MarginSetStyle(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  		break;  	case SCI_MARGINGETSTYLE: { -			const StyledText st = pdoc->MarginStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->MarginStyledText(static_cast<Sci::Line>(wParam));  			return st.style;  		}  	case SCI_MARGINSETSTYLES: -		pdoc->MarginSetStyles(static_cast<int>(wParam), reinterpret_cast<const unsigned char *>(lParam)); +		pdoc->MarginSetStyles(static_cast<Sci::Line>(wParam), reinterpret_cast<const unsigned char *>(lParam));  		break;  	case SCI_MARGINGETSTYLES: { -			const StyledText st = pdoc->MarginStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->MarginStyledText(static_cast<Sci::Line>(wParam));  			return BytesResult(lParam, st.styles, st.length);  		} @@ -7908,34 +7902,34 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_ANNOTATIONSETTEXT: -		pdoc->AnnotationSetText(static_cast<int>(wParam), CharPtrFromSPtr(lParam)); +		pdoc->AnnotationSetText(static_cast<Sci::Line>(wParam), CharPtrFromSPtr(lParam));  		break;  	case SCI_ANNOTATIONGETTEXT: { -			const StyledText st = pdoc->AnnotationStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->AnnotationStyledText(static_cast<Sci::Line>(wParam));  			return BytesResult(lParam, reinterpret_cast<const unsigned char *>(st.text), st.length);  		}  	case SCI_ANNOTATIONGETSTYLE: { -			const StyledText st = pdoc->AnnotationStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->AnnotationStyledText(static_cast<Sci::Line>(wParam));  			return st.style;  		}  	case SCI_ANNOTATIONSETSTYLE: -		pdoc->AnnotationSetStyle(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->AnnotationSetStyle(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));  		break;  	case SCI_ANNOTATIONSETSTYLES: -		pdoc->AnnotationSetStyles(static_cast<int>(wParam), reinterpret_cast<const unsigned char *>(lParam)); +		pdoc->AnnotationSetStyles(static_cast<Sci::Line>(wParam), reinterpret_cast<const unsigned char *>(lParam));  		break;  	case SCI_ANNOTATIONGETSTYLES: { -			const StyledText st = pdoc->AnnotationStyledText(static_cast<int>(wParam)); +			const StyledText st = pdoc->AnnotationStyledText(static_cast<Sci::Line>(wParam));  			return BytesResult(lParam, st.styles, st.length);  		}  	case SCI_ANNOTATIONGETLINES: -		return pdoc->AnnotationLines(static_cast<int>(wParam)); +		return pdoc->AnnotationLines(static_cast<Sci::Line>(wParam));  	case SCI_ANNOTATIONCLEARALL:  		pdoc->AnnotationClearAll(); @@ -7964,7 +7958,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return vs.AllocateExtendedStyles(static_cast<int>(wParam));  	case SCI_ADDUNDOACTION: -		pdoc->AddUndoAction(static_cast<int>(wParam), lParam & UNDO_MAY_COALESCE); +		pdoc->AddUndoAction(static_cast<Sci::Position>(wParam), lParam & UNDO_MAY_COALESCE);  		break;  	case SCI_SETMOUSESELECTIONRECTANGULARSWITCH: @@ -8026,24 +8020,24 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_SETSELECTION: -		sel.SetSelection(SelectionRange(static_cast<int>(wParam), static_cast<int>(lParam))); +		sel.SetSelection(SelectionRange(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)));  		Redraw();  		break;  	case SCI_ADDSELECTION: -		sel.AddSelection(SelectionRange(static_cast<int>(wParam), static_cast<int>(lParam))); +		sel.AddSelection(SelectionRange(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)));  		ContainerNeedsUpdate(SC_UPDATE_SELECTION);  		Redraw();  		break;  	case SCI_DROPSELECTIONN: -		sel.DropSelection(static_cast<int>(wParam)); +		sel.DropSelection(static_cast<size_t>(wParam));  		ContainerNeedsUpdate(SC_UPDATE_SELECTION);  		Redraw();  		break;  	case SCI_SETMAINSELECTION: -		sel.SetMain(static_cast<int>(wParam)); +		sel.SetMain(static_cast<size_t>(wParam));  		ContainerNeedsUpdate(SC_UPDATE_SELECTION);  		Redraw();  		break; @@ -8082,7 +8076,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (!sel.IsRectangular())  			sel.Clear();  		sel.selType = Selection::selRectangle; -		sel.Rectangular().caret.SetPosition(static_cast<int>(wParam)); +		sel.Rectangular().caret.SetPosition(static_cast<Sci::Position>(wParam));  		SetRectangularRange();  		Redraw();  		break; @@ -8094,7 +8088,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (!sel.IsRectangular())  			sel.Clear();  		sel.selType = Selection::selRectangle; -		sel.Rectangular().anchor.SetPosition(static_cast<int>(wParam)); +		sel.Rectangular().anchor.SetPosition(static_cast<Sci::Position>(wParam));  		SetRectangularRange();  		Redraw();  		break; @@ -8106,7 +8100,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (!sel.IsRectangular())  			sel.Clear();  		sel.selType = Selection::selRectangle; -		sel.Rectangular().caret.SetVirtualSpace(static_cast<int>(wParam)); +		sel.Rectangular().caret.SetVirtualSpace(static_cast<Sci::Position>(wParam));  		SetRectangularRange();  		Redraw();  		break; @@ -8118,7 +8112,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		if (!sel.IsRectangular())  			sel.Clear();  		sel.selType = Selection::selRectangle; -		sel.Rectangular().anchor.SetVirtualSpace(static_cast<int>(wParam)); +		sel.Rectangular().anchor.SetVirtualSpace(static_cast<Sci::Position>(wParam));  		SetRectangularRange();  		Redraw();  		break; @@ -8178,7 +8172,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_CHANGELEXERSTATE: -		pdoc->ChangeLexerState(static_cast<int>(wParam), static_cast<int>(lParam)); +		pdoc->ChangeLexerState(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  		break;  	case SCI_SETIDENTIFIER: @@ -8196,7 +8190,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return technology;  	case SCI_COUNTCHARACTERS: -		return pdoc->CountCharacters(static_cast<int>(wParam), static_cast<int>(lParam)); +		return pdoc->CountCharacters(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam));  	default:  		return DefWndProc(iMessage, wParam, lParam); diff --git a/src/Editor.h b/src/Editor.h index db070916d..3f6f8f2c8 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -394,9 +394,9 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	void AddChar(char ch);  	virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false);  	void ClearBeforeTentativeStart(); -	void InsertPaste(const char *text, int len); +	void InsertPaste(const char *text, Sci::Position len);  	enum PasteShape { pasteStream=0, pasteRectangular = 1, pasteLine = 2 }; -	void InsertPasteShape(const char *text, int len, PasteShape shape); +	void InsertPasteShape(const char *text, Sci::Position len, PasteShape shape);  	void ClearSelection(bool retainMultipleSelections = false);  	void ClearAll();  	void ClearDocumentStyle(); @@ -483,7 +483,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	std::string RangeText(Sci::Position start, Sci::Position end) const;  	void CopySelectionRange(SelectionText *ss, bool allowLineCopy=false);  	void CopyRangeToClipboard(Sci::Position start, Sci::Position end); -	void CopyText(int length, const char *text); +	void CopyText(size_t length, const char *text);  	void SetDragPosition(SelectionPosition newPos);  	virtual void DisplayCursor(Window::Cursor c);  	virtual bool DragThreshold(Point ptStart, Point ptNow); @@ -557,7 +557,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	int CodePage() const;  	virtual bool ValidCodePage(int /* codePage */) const { return true; } -	int WrapCount(int line); +	Sci::Line WrapCount(Sci::Line line);  	void AddStyledText(char *buffer, Sci::Position appendLength);  	virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0; diff --git a/src/MarginView.cxx b/src/MarginView.cxx index 02a961b10..09f1b636d 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -245,7 +245,7 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  				if (highlightDelimiter.isEnabled) {  					const Sci::Line lastLine = model.pcs->DocFromDisplay(topLine + model.LinesOnScreen()) + 1;  					model.pdoc->GetHighlightDelimiters(highlightDelimiter, -						static_cast<Sci::Line>(model.pdoc->LineFromPosition(model.sel.MainCaret())), lastLine); +						model.pdoc->SciLineFromPosition(model.sel.MainCaret()), lastLine);  				}  			} diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index febc4f11f..4df4c2a13 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -247,7 +247,7 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list  		if (list && !strchr(list, ac.GetSeparator())) {  			const char *typeSep = strchr(list, ac.GetTypesep());  			const Sci::Position lenInsert = typeSep ? -				static_cast<Sci::Position>(typeSep-list) : static_cast<Sci::Position>(strlen(list)); +				(typeSep-list) : strlen(list);  			if (ac.ignoreCase) {  				// May need to convert the case before invocation, so remove lenEntered characters  				AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, list, lenInsert); @@ -423,7 +423,7 @@ void ScintillaBase::AutoCompleteCompleted(char ch, unsigned int completionMethod  		endPos = pdoc->ExtendWordSelect(endPos, 1, true);  	if (endPos < firstPos)  		return; -	AutoCompleteInsert(firstPos, endPos - firstPos, selected.c_str(), static_cast<Sci::Position>(selected.length())); +	AutoCompleteInsert(firstPos, endPos - firstPos, selected.c_str(), selected.length());  	SetLastXChosen();  	scn.nmhdr.code = SCN_AUTOCCOMPLETED; @@ -656,7 +656,7 @@ void LexState::SetWordList(int n, const char *wl) {  	if (instance) {  		const Sci_Position firstModification = instance->WordListSet(n, wl);  		if (firstModification >= 0) { -			pdoc->ModifiedAt(static_cast<Sci::Position>(firstModification)); +			pdoc->ModifiedAt(firstModification);  		}  	}  } @@ -702,7 +702,7 @@ void LexState::PropSet(const char *key, const char *val) {  	if (instance) {  		const Sci_Position firstModification = instance->PropertySet(key, val);  		if (firstModification >= 0) { -			pdoc->ModifiedAt(static_cast<Sci::Position>(firstModification)); +			pdoc->ModifiedAt(firstModification);  		}  	}  } @@ -825,10 +825,10 @@ const char *LexState::DescriptionOfStyle(int style) {  void ScintillaBase::NotifyStyleToNeeded(Sci::Position endStyleNeeded) {  #ifdef SCI_LEXER  	if (DocumentLexState()->lexLanguage != SCLEX_CONTAINER) { -		const Sci::Line lineEndStyled = static_cast<Sci::Line>( -			pdoc->LineFromPosition(pdoc->GetEndStyled())); -		const Sci::Position endStyled = static_cast<Sci::Position>( -			pdoc->LineStart(lineEndStyled)); +		const Sci::Line lineEndStyled = +			pdoc->SciLineFromPosition(pdoc->GetEndStyled()); +		const Sci::Position endStyled = +			pdoc->LineStart(lineEndStyled);  		DocumentLexState()->Colourise(endStyled, endStyleNeeded);  		return;  	} @@ -984,7 +984,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  		return ac.GetTypesep();  	case SCI_CALLTIPSHOW: -		CallTipShow(LocationFromPosition(static_cast<int>(wParam)), +		CallTipShow(LocationFromPosition(static_cast<Sci::Position>(wParam)),  			reinterpret_cast<const char *>(lParam));  		break; @@ -999,7 +999,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  		return ct.posStartCallTip;  	case SCI_CALLTIPSETPOSSTART: -		ct.posStartCallTip = static_cast<int>(wParam); +		ct.posStartCallTip = static_cast<Sci::Position>(wParam);  		break;  	case SCI_CALLTIPSETHLT: @@ -1048,7 +1048,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  	case SCI_COLOURISE:  		if (DocumentLexState()->lexLanguage == SCLEX_CONTAINER) {  			pdoc->ModifiedAt(static_cast<Sci::Position>(wParam)); -			NotifyStyleToNeeded((lParam == -1) ? static_cast<Sci::Position>(pdoc->Length()) : +			NotifyStyleToNeeded((lParam == -1) ? pdoc->Length() :  					    static_cast<Sci::Position>(lParam));  		} else {  			DocumentLexState()->Colourise(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)); | 
