diff options
| author | Zufu Liu <unknown> | 2021-07-02 10:13:21 +1000 | 
|---|---|---|
| committer | Zufu Liu <unknown> | 2021-07-02 10:13:21 +1000 | 
| commit | 7b646db9fbfb71c41c477b01d99e1e1c6c85cef8 (patch) | |
| tree | d0886cd0c743eed7d1ef4fca864c1f1bf474e0d3 /src/Document.cxx | |
| parent | 12dabace25a229d74db880473ecb7a5081bc65b9 (diff) | |
| download | scintilla-mirror-7b646db9fbfb71c41c477b01d99e1e1c6c85cef8.tar.gz | |
Feature [feature-requests:#1408] Treat valid DBCS lead byte followed by invalid
trail byte as single byte.
Diffstat (limited to 'src/Document.cxx')
| -rw-r--r-- | src/Document.cxx | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index c3fcf10c3..876e95b4f 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -892,11 +892,13 @@ Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) co  			return CharacterExtracted(UnicodeFromUTF8(charBytes), utf8status & UTF8MaskWidth);  		}  	} else { -		if (IsDBCSLeadByteNoExcept(leadByte) && ((position + 1) < LengthNoExcept())) { -			return CharacterExtracted::DBCS(leadByte, cb.UCharAt(position + 1)); -		} else { -			return CharacterExtracted(leadByte, 1); +		if (IsDBCSLeadByteNoExcept(leadByte)) { +			const unsigned char trailByte = cb.UCharAt(position + 1); +			if (!IsDBCSTrailByteInvalid(trailByte)) { +				return CharacterExtracted::DBCS(leadByte, trailByte); +			}  		} +		return CharacterExtracted(leadByte, 1);  	}  } @@ -1007,8 +1009,13 @@ int SCI_METHOD Document::GetCharacterAndWidth(Sci_Position position, Sci_Positio  			}  		} else {  			if (IsDBCSLeadByteNoExcept(leadByte)) { -				bytesInCharacter = 2; -				character = (leadByte << 8) | cb.UCharAt(position+1); +				const unsigned char trailByte = cb.UCharAt(position + 1); +				if (!IsDBCSTrailByteInvalid(trailByte)) { +					bytesInCharacter = 2; +					character = (leadByte << 8) | trailByte; +				} else { +					character = leadByte; +				}  			} else {  				character = leadByte;  			}  | 
