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