@@ -76,22 +76,26 @@ class BaseItemsActionHandler: BackgroundDbProcessingActionHandler {
7676 }
7777
7878 var components : [ String ] = [ ]
79- for (idx, match) in matches. enumerated ( ) {
80- if match. range. lowerBound > 0 {
81- let lowerBound = idx == 0 ? 0 : matches [ idx - 1 ] . range. upperBound
82- let precedingRange = normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: lowerBound) ..< normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: match. range. lowerBound)
83- let precedingComponents = separateComponents ( from: String ( normalizedSearchTerm [ precedingRange] ) )
79+ var previousMatchEnd = normalizedSearchTerm. startIndex
80+ for match in matches {
81+ guard let matchRange = Range ( match. range, in: normalizedSearchTerm) else { continue }
82+
83+ if matchRange. lowerBound > previousMatchEnd {
84+ let precedingComponents = separateComponents ( from: String ( normalizedSearchTerm [ previousMatchEnd..< matchRange. lowerBound] ) )
8485 components. append ( contentsOf: precedingComponents)
8586 }
8687
87- let upperBound = normalizedSearchTerm [ normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: ( match. range. upperBound - 1 ) ) ] == " \" " ? match. range. upperBound - 1 : match. range. upperBound
88- let range = normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: ( match. range. lowerBound + 1 ) ) ..< normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: upperBound)
89- components. append ( String ( normalizedSearchTerm [ range] ) )
88+ // Strip the opening quote, and the closing quote if present
89+ var innerStart = normalizedSearchTerm. index ( after: matchRange. lowerBound)
90+ let innerEnd = normalizedSearchTerm [ normalizedSearchTerm. index ( before: matchRange. upperBound) ] == " \" " ? normalizedSearchTerm. index ( before: matchRange. upperBound) : matchRange. upperBound
91+ if innerStart > innerEnd { innerStart = innerEnd }
92+ components. append ( String ( normalizedSearchTerm [ innerStart..< innerEnd] ) )
93+
94+ previousMatchEnd = matchRange. upperBound
9095 }
9196
92- if let match = matches. last, match. range. upperBound != ( normalizedSearchTerm. count - 1 ) {
93- let lastRange = normalizedSearchTerm. index ( normalizedSearchTerm. startIndex, offsetBy: match. range. upperBound) ..< normalizedSearchTerm. endIndex
94- let lastComponents = separateComponents ( from: String ( normalizedSearchTerm [ lastRange] ) )
97+ if previousMatchEnd < normalizedSearchTerm. endIndex {
98+ let lastComponents = separateComponents ( from: String ( normalizedSearchTerm [ previousMatchEnd..< normalizedSearchTerm. endIndex] ) )
9599 components. append ( contentsOf: lastComponents)
96100 }
97101
0 commit comments