|
|
|
@ -27,6 +27,14 @@ struct Tools {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return retVal
|
|
|
|
return retVal
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Assumes THE string is 'polymer'
|
|
|
|
|
|
|
|
static func stringIndexRange(withString str: String, fromRange range: Range<Int>) -> Range<String.Index> {
|
|
|
|
|
|
|
|
let myrange = Range(uncheckedBounds: (lower: max(0, min(str.length, range.lowerBound)), upper: min(str.length, max(0, range.upperBound))))
|
|
|
|
|
|
|
|
let start = str.index(str.startIndex, offsetBy: myrange.lowerBound)
|
|
|
|
|
|
|
|
let end = str.index(start, offsetBy: myrange.upperBound - myrange.lowerBound)
|
|
|
|
|
|
|
|
return start ..< end
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extension Character {
|
|
|
|
extension Character {
|
|
|
|
@ -39,7 +47,41 @@ extension Character {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extension StringProtocol {
|
|
|
|
extension StringProtocol {
|
|
|
|
|
|
|
|
// var string: String { return String(self) }
|
|
|
|
|
|
|
|
|
|
|
|
var ascii: [UInt32] {
|
|
|
|
var ascii: [UInt32] {
|
|
|
|
return compactMap { $0.ascii }
|
|
|
|
return compactMap { $0.ascii }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// subscript(offset: Int) -> Element {
|
|
|
|
|
|
|
|
// return self[index(startIndex, offsetBy: offset)]
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extension String {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var length: Int {
|
|
|
|
|
|
|
|
return count
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subscript (i: Int) -> String {
|
|
|
|
|
|
|
|
return self[i ..< i + 1]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func substring(fromIndex: Int) -> String {
|
|
|
|
|
|
|
|
return self[min(fromIndex, length) ..< length]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func substring(toIndex: Int) -> String {
|
|
|
|
|
|
|
|
return self[0 ..< max(0, toIndex)]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subscript (r: Range<Int>) -> String {
|
|
|
|
|
|
|
|
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
|
|
|
|
|
|
|
|
upper: min(length, max(0, r.upperBound))))
|
|
|
|
|
|
|
|
let start = index(startIndex, offsetBy: range.lowerBound)
|
|
|
|
|
|
|
|
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
|
|
|
|
|
|
|
|
return String(self[start ..< end])
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|