mirror of
https://github.com/Aminark/legado-ios.git
synced 2026-10-20 19:21:22 +08:00
34 lines
1.7 KiB
Swift
34 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
public enum ReplaceRuleValidator {
|
|
public static func validate(_ rule: ReplaceRule) throws {
|
|
guard !rule.pattern.isEmpty else { throw ReplaceRuleImportError.emptyPattern(rule.name) }
|
|
guard rule.scopeTitle || rule.scopeContent else { throw ReplaceRuleImportError.invalidDocument("至少选择标题或正文一个作用域") }
|
|
if rule.isRegex {
|
|
do { _ = try NSRegularExpression(pattern: rule.pattern) }
|
|
catch { throw ReplaceRuleImportError.invalidDocument("正则语法错误:\(error.localizedDescription)") }
|
|
if rule.pattern.hasSuffix("|"), !rule.pattern.hasSuffix("\\|") {
|
|
throw ReplaceRuleImportError.invalidDocument("正则不能以空分支 | 结尾")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public struct ReplaceRuleTestResult: Sendable {
|
|
public let report: ContentProcessingReport
|
|
public let elapsedMilliseconds: Double
|
|
}
|
|
|
|
public struct ReplaceRuleTester: Sendable {
|
|
public init() {}
|
|
public func test(rule: ReplaceRule, title: String, content: String, bookName: String, sourceURL: String) throws -> ReplaceRuleTestResult {
|
|
try ReplaceRuleValidator.validate(rule)
|
|
let book = Book(bookUrl: "test", name: bookName, origin: sourceURL)
|
|
let chapter = BookChapter(url: "chapter", title: title, bookUrl: book.bookUrl, index: 0)
|
|
let started = DispatchTime.now().uptimeNanoseconds
|
|
let report = ContentSanitizer().process(book: book, chapter: chapter, content: content,
|
|
rules: [rule], removeDuplicateTitle: false, resegment: false)
|
|
return .init(report: report, elapsedMilliseconds: Double(DispatchTime.now().uptimeNanoseconds - started) / 1_000_000)
|
|
}
|
|
}
|