[Unicode] Add convenience APIs to Unicode encodings

Add convenience APIs to the stdlib's Unicode encodings:

* Unicode.UTF16
  * isASCII
  * isSurrogate
* Unicode.UTF8
  * isASCII
  * width
* Unicode.UTF32
  * isASCII
* Unicode.ASCII
  * isASCII

Tests added
This commit is contained in:
Michael Ilseman
2019-02-26 13:59:53 -08:00
parent b6a158e1fc
commit 4967fc08eb
13 changed files with 424 additions and 353 deletions

View File

@@ -418,7 +418,7 @@ extension String.UnicodeScalarView {
internal func _foreignIndex(after i: Index) -> Index {
_internalInvariant(_guts.isForeign)
let cu = _guts.foreignErrorCorrectedUTF16CodeUnit(at: i)
let len = _isLeadingSurrogate(cu) ? 2 : 1
let len = UTF16.isLeadSurrogate(cu) ? 2 : 1
return i.encoded(offsetBy: len)
}
@@ -429,7 +429,7 @@ extension String.UnicodeScalarView {
_internalInvariant(_guts.isForeign)
let priorIdx = i.priorEncoded
let cu = _guts.foreignErrorCorrectedUTF16CodeUnit(at: priorIdx)
let len = _isTrailingSurrogate(cu) ? 2 : 1
let len = UTF16.isTrailSurrogate(cu) ? 2 : 1
return i.encoded(offsetBy: -len)
}