From 2e56e2a31c7985cb120bf52af6b31bc9c90af91d Mon Sep 17 00:00:00 2001 From: Courville Software Date: Sat, 11 May 2024 12:27:30 +0200 Subject: [PATCH] sub/audio name: avoid " (English)" when there are spaces at start of the name Seen in Modern Family tvshow --- .../archos/mediacenter/utils/ISO639codes.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/com/archos/mediacenter/utils/ISO639codes.java b/src/com/archos/mediacenter/utils/ISO639codes.java index b51df632..b9a873f1 100644 --- a/src/com/archos/mediacenter/utils/ISO639codes.java +++ b/src/com/archos/mediacenter/utils/ISO639codes.java @@ -372,15 +372,25 @@ public static boolean isLanguageInString(String language, String string) { return Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(string).matches(); } + public static String removeStartingSpacesAndSurroundingParenthesis(String string) { + String result = string.replaceAll("^\\s+", ""); // Remove starting spaces + if (!result.contains(")(")) { // no nesting parenthesis + result = result.replaceAll("^\\(([^)]*)\\)$", "$1"); // Remove surrounding parenthesis if the content does not contain a closing parenthesis + } + return result; + } + public static String replaceLanguageCodeInString(String string) { // treat strings being "l_XYZ" or "l_XY" or "XYZ" or "XY" or "title (l_XYZ)" or "title (l_XY)" // and replace it with locale language corresponding to XY or XYZ letter code log.debug("replaceLanguageCodeInString: input string=" + string); if (string == null) return ""; + // avoid name=" (l_eng)" with starting space seen in Modern Family show + String cleanString = removeStartingSpacesAndSurroundingParenthesis(string); String pattern = "(?:^l_([A-Za-z]{2,3}\\b)|\\(l_([A-Za-z]{2,3})\\)$)"; // 2 or 3 letters code String languageCode = ""; Pattern regexPattern = Pattern.compile(pattern); - Matcher matcher = regexPattern.matcher(string); + Matcher matcher = regexPattern.matcher(cleanString); String result = ""; if (matcher.find()) { String languageCode1 = matcher.group(1); @@ -389,24 +399,24 @@ public static String replaceLanguageCodeInString(String string) { if (languageCode1 != null) { languageCode = languageCode1; if (languageCode1.equals("und") || languageCode1.equals("Unknown")) result = ""; // und = undefined - else result = capitalizeFirstLetter(string.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode))); + else result = capitalizeFirstLetter(cleanString.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode))); } else if (languageCode2 != null) { languageCode = languageCode2; - result = string.replaceAll(pattern, "(" + ISO639codes.getLanguageNameForLetterCode(languageCode) + ")"); + result = cleanString.replaceAll(pattern, "(" + ISO639codes.getLanguageNameForLetterCode(languageCode) + ")"); } } else { // could be that it is a 2|3 letter code alone: treat this case too pattern = "^[A-Za-z]{2,3}$"; // 2 or 3 letters code regexPattern = Pattern.compile(pattern); - matcher = regexPattern.matcher(string); + matcher = regexPattern.matcher(cleanString); if (matcher.find()) { languageCode = matcher.group(); log.debug("replaceLanguageCodeInString: languageCode=" + languageCode); if (languageCode.equals("und") || languageCode.equals("Unknown")) result = ""; // und = undefined - else result = capitalizeFirstLetter(string.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode))); + else result = capitalizeFirstLetter(cleanString.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode))); } else { - log.error("replaceLanguageCodeInString: no languageCode in " + string); - result = string; + log.error("replaceLanguageCodeInString: no languageCode in " + cleanString); + result = cleanString; } } log.debug("replaceLanguageCodeInString: input={} -> result={}", string, result);