diff --git a/source/net/filebot/format/ExpressionFormatMethods.java b/source/net/filebot/format/ExpressionFormatMethods.java index 5062e2a6..9b490734 100644 --- a/source/net/filebot/format/ExpressionFormatMethods.java +++ b/source/net/filebot/format/ExpressionFormatMethods.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Locale; import java.util.regex.Matcher; +import net.filebot.similarity.Normalization; import net.filebot.util.FileUtilities; import com.ibm.icu.text.Transliterator; @@ -254,6 +255,10 @@ public class ExpressionFormatMethods { return Transliterator.getInstance("Any-Latin;Latin-ASCII;[:Diacritic:]remove").transform(self).replaceAll("[^\\p{ASCII}]+", fallback).trim(); } + public static String asciiQuotes(String self) { + return Normalization.normalizeQuotationMarks(self); + } + /** * Replace multiple replacement pairs * diff --git a/source/net/filebot/similarity/Normalization.java b/source/net/filebot/similarity/Normalization.java index 06e8812a..cbafe6dd 100644 --- a/source/net/filebot/similarity/Normalization.java +++ b/source/net/filebot/similarity/Normalization.java @@ -17,6 +17,18 @@ public class Normalization { private static final Pattern checksum = compile("[\\(\\[]\\p{XDigit}{8}[\\]\\)]"); + private static final char[] doubleQuotes = new char[] { '\"', '\u0060', '\u00b4', '\u2018', '\u2019', '\u02bb' }; + private static final char[] singleQuotes = new char[] { '\'', '\u201c', '\u201d' }; + + public static String normalizeQuotationMarks(String name) { + for (char[] cs : new char[][] { doubleQuotes, singleQuotes }) { + for (char c : cs) { + name = name.replace(c, cs[0]); + } + } + return name; + } + public static String normalizePunctuation(String name) { // remove/normalize special characters name = apostrophe.matcher(name).replaceAll("");