Support multi-release-group patterns (e.g. FUM[ettv] or lol[ettv])
This commit is contained in:
parent
4d6f4032b8
commit
6a2e1a61d9
|
@ -102,12 +102,12 @@ public class ReleaseInfo {
|
||||||
// try case-sensitive match
|
// try case-sensitive match
|
||||||
String match = matchLast(getReleaseGroupPattern(true), groups, strings);
|
String match = matchLast(getReleaseGroupPattern(true), groups, strings);
|
||||||
|
|
||||||
// try case-insensitive match as fallback
|
if (match != null) {
|
||||||
if (match == null) {
|
return match;
|
||||||
match = matchLast(getReleaseGroupPattern(false), groups, strings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return match;
|
// try case-insensitive match
|
||||||
|
return matchLast(getReleaseGroupPattern(false), groups, strings);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Locale> languages;
|
private Map<String, Locale> languages;
|
||||||
|
@ -121,13 +121,14 @@ public class ReleaseInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
String lang = matchLast(languageSuffix, null, name);
|
String lang = matchLast(languageSuffix, null, name);
|
||||||
if (lang == null)
|
if (lang == null) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return languages.get(lang);
|
return languages.get(lang);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String matchLast(Pattern pattern, String[] standardValues, CharSequence... sequence) {
|
protected String matchLast(Pattern pattern, String[] paragon, CharSequence... sequence) {
|
||||||
String lastMatch = null;
|
String lastMatch = null;
|
||||||
|
|
||||||
// match last occurrence
|
// match last occurrence
|
||||||
|
@ -142,11 +143,9 @@ public class ReleaseInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
// prefer standard value over matched value
|
// prefer standard value over matched value
|
||||||
if (lastMatch != null && standardValues != null) {
|
if (lastMatch != null && paragon != null) {
|
||||||
for (String standard : standardValues) {
|
for (String it : paragon) {
|
||||||
if (standard.equalsIgnoreCase(lastMatch)) {
|
lastMatch = compile("(?<!\\p{Alnum})" + it.replaceAll("[\\p{Punct}\\s]", ".") + "(?!\\p{Alnum})", CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS).matcher(lastMatch).replaceAll(it);
|
||||||
return standard;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,7 +303,7 @@ public class ReleaseInfo {
|
||||||
|
|
||||||
public Pattern getReleaseGroupPattern(boolean strict) throws Exception {
|
public Pattern getReleaseGroupPattern(boolean strict) throws Exception {
|
||||||
// pattern matching any release group name enclosed in separators
|
// pattern matching any release group name enclosed in separators
|
||||||
return compile("(?<!\\p{Alnum})" + or(releaseGroup.get()) + "(?!\\p{Alnum}|[^\\p{Alnum}](19|20)\\d{2})", strict ? 0 : CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS);
|
return compile("((?<!\\p{Alnum})" + or(releaseGroup.get()) + "(?!\\p{Alnum}|[^\\p{Alnum}](19|20)\\d{2})($|[\\p{Punct}]))+", strict ? 0 : CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pattern getReleaseGroupTrimPattern() throws Exception {
|
public Pattern getReleaseGroupTrimPattern() throws Exception {
|
||||||
|
|
|
@ -7,7 +7,7 @@ import java.util.regex.Pattern;
|
||||||
public class Normalization {
|
public class Normalization {
|
||||||
|
|
||||||
private static final Pattern apostrophe = compile("['`´‘’ʻ]+");
|
private static final Pattern apostrophe = compile("['`´‘’ʻ]+");
|
||||||
private static final Pattern punctuation = compile("[\\p{Punct}\\p{Space}]+");
|
private static final Pattern punctuation = compile("[\\p{Punct}\\s]+");
|
||||||
|
|
||||||
private static final Pattern space = compile("\\s+");
|
private static final Pattern space = compile("\\s+");
|
||||||
private static final Pattern spaceLikePunctuation = compile("[:?._]");
|
private static final Pattern spaceLikePunctuation = compile("[:?._]");
|
||||||
|
|
Loading…
Reference in New Issue