diff --git a/VoiceInk/Services/WordReplacementService.swift b/VoiceInk/Services/WordReplacementService.swift index eb74277..2c6fe85 100644 --- a/VoiceInk/Services/WordReplacementService.swift +++ b/VoiceInk/Services/WordReplacementService.swift @@ -15,16 +15,22 @@ class WordReplacementService { // Apply each replacement (case-insensitive, whole word) for (original, replacement) in replacements { - // Create a regular expression that matches the word boundaries - let pattern = "\\b\(NSRegularExpression.escapedPattern(for: original))\\b" - if let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) { - let range = NSRange(modifiedText.startIndex..., in: modifiedText) - modifiedText = regex.stringByReplacingMatches( - in: modifiedText, - options: [], - range: range, - withTemplate: replacement - ) + let isPhrase = original.contains(" ") || original.trimmingCharacters(in: .whitespacesAndNewlines) != original + + if isPhrase { + modifiedText = modifiedText.replacingOccurrences(of: original, with: replacement, options: .caseInsensitive) + } else { + // Create a regular expression that matches the word boundaries + let pattern = "\\b\(NSRegularExpression.escapedPattern(for: original))\\b" + if let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) { + let range = NSRange(modifiedText.startIndex..., in: modifiedText) + modifiedText = regex.stringByReplacingMatches( + in: modifiedText, + options: [], + range: range, + withTemplate: replacement + ) + } } } diff --git a/VoiceInk/Views/Dictionary/WordReplacementView.swift b/VoiceInk/Views/Dictionary/WordReplacementView.swift index 703170a..8cc1358 100644 --- a/VoiceInk/Views/Dictionary/WordReplacementView.swift +++ b/VoiceInk/Views/Dictionary/WordReplacementView.swift @@ -273,12 +273,12 @@ struct AddReplacementSheet: View { } private func addReplacement() { - let trimmedOriginal = originalWord.trimmingCharacters(in: .whitespacesAndNewlines) - let trimmedReplacement = replacementWord.trimmingCharacters(in: .whitespacesAndNewlines) + let original = originalWord + let replacement = replacementWord - guard !trimmedOriginal.isEmpty && !trimmedReplacement.isEmpty else { return } + guard !original.isEmpty && !replacement.isEmpty else { return } - manager.addReplacement(original: trimmedOriginal, replacement: trimmedReplacement) + manager.addReplacement(original: original, replacement: replacement) dismiss() } }