LMAssembly // Introducing StringView Ranges Extension MK2.
Co-authored-by: IsaacXen <blackoutxen@gmail.com>
This commit is contained in:
parent
2f98f2cc21
commit
6d874e78d9
|
@ -0,0 +1,49 @@
|
|||
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
|
||||
// StringView Ranges extension by (c) 2022 and onwards Isaac Xen (MIT License).
|
||||
// ====================
|
||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
||||
// ... with NTL restriction stating that:
|
||||
// No trademark license is granted to use the trade names, trademarks, service
|
||||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: - StringView Ranges Extension MK2
|
||||
|
||||
// Credit: Isaac Xen (MK1) & Shiki Suen (MK2)
|
||||
|
||||
extension String {
|
||||
/// 分析傳入的原始辭典檔案(UTF-8 TXT)的資料。
|
||||
/// - Parameters:
|
||||
/// - separator: 行內單元分隔符。
|
||||
/// - task: 要執行的外包任務。
|
||||
func parse(
|
||||
splitee separator: Element,
|
||||
task: @escaping (_ theRange: Range<String.Index>) -> Void
|
||||
) {
|
||||
var startIndex = startIndex
|
||||
split(separator: separator).forEach { substring in
|
||||
let theRange = range(of: substring, range: startIndex..<endIndex)
|
||||
guard let theRange = theRange else { return }
|
||||
task(theRange)
|
||||
startIndex = theRange.upperBound
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - StringView Ranges Extension MK1 Backup (by Isaac Xen)
|
||||
|
||||
// This is only for reference and is not used in this assembly.
|
||||
|
||||
extension String {
|
||||
fileprivate func ranges(splitBy separator: Element) -> [Range<String.Index>] {
|
||||
var startIndex = startIndex
|
||||
return split(separator: separator).reduce(into: []) { ranges, substring in
|
||||
_ = range(of: substring, range: startIndex..<endIndex).map { range in
|
||||
ranges.append(range)
|
||||
startIndex = range.upperBound
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue