From 28b018f99646e0d2148bd3704e81f4dd416d3993 Mon Sep 17 00:00:00 2001 From: Michal Rentka Date: Tue, 15 Aug 2023 16:30:22 +0200 Subject: [PATCH] Updated translator id parsing regex to include only proper translators ids --- .../TranslatorsAndStylesController.swift | 4 ++-- .../RegularExpression+Extensions.swift | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Zotero/Controllers/TranslatorsAndStylesController.swift b/Zotero/Controllers/TranslatorsAndStylesController.swift index 5f313a0e6..7de8ad1f1 100644 --- a/Zotero/Controllers/TranslatorsAndStylesController.swift +++ b/Zotero/Controllers/TranslatorsAndStylesController.swift @@ -75,7 +75,7 @@ final class TranslatorsAndStylesController { weak var coordinator: TranslatorsControllerCoordinatorDelegate? private lazy var uuidExpression: NSRegularExpression? = { do { - return try NSRegularExpression(pattern: #"[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}"#) + return try NSRegularExpression(pattern: #"setTranslator\(['"](?[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12})['"]\)"#) } catch let error { DDLogError("TranslatorsAndStylesController: can't create uuid expression - \(error)") return nil @@ -688,7 +688,7 @@ final class TranslatorsAndStylesController { guard let uuidRegex = self.uuidExpression else { return [] } let matches = uuidRegex.matches(in: code, options: [], range: NSRange(code.startIndex..., in: code)) - return Set(matches.compactMap({ $0.substring(at: 0, in: code).flatMap(String.init) })) + return Set(matches.compactMap({ $0.substring(withName: "uuid", in: code).flatMap(String.init) })) } /// Finds `endIndex` of metadata part in translator file (translator file consists of json metadata and code). diff --git a/Zotero/Extensions/RegularExpression+Extensions.swift b/Zotero/Extensions/RegularExpression+Extensions.swift index 7b609e39d..6d3117d1c 100644 --- a/Zotero/Extensions/RegularExpression+Extensions.swift +++ b/Zotero/Extensions/RegularExpression+Extensions.swift @@ -17,6 +17,14 @@ extension NSTextCheckingResult { return Range(self.range(at: index), in: string) } + /// Creates Swift `Range` from result for given group name in string. + /// - parameter name: Group name of matched range in this result. + /// - parameter string: String from which this result originates. + /// - returns: `Range` if index is in bounds, `nil` otherwise. + func swiftRange(withName name: String, in string: String) -> Range? { + return Range(self.range(withName: name), in: string) + } + /// Creates substring from result at given index in string. /// - parameter index: Index of matched substring in this result. /// - parameter string: String from which this result originates. @@ -24,4 +32,12 @@ extension NSTextCheckingResult { func substring(at index: Int, in string: String) -> Substring? { return self.swiftRange(at: index, in: string).flatMap({ string[$0] }) } + + /// Creates substring from result for given group name in string. + /// - parameter name: Group name of matched substring in this result. + /// - parameter string: String from which this result originates. + /// - returns: Substring if index is in bounds, `nil` otherwise. + func substring(withName name: String, in string: String) -> Substring? { + return self.swiftRange(withName: name, in: string).flatMap({ string[$0] }) + } }