Enhance word replacement functionality

This commit is contained in:
Beingpax 2025-06-24 18:51:07 +05:45
parent 51dc742e1e
commit 8e4b8ffee1
2 changed files with 20 additions and 14 deletions

View File

@ -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
)
}
}
}

View File

@ -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()
}
}