UNPKG

@ctrl/video-filename-parser

Version:
125 lines (124 loc) 5.73 kB
import { parseTitleAndYear } from './title.js'; export var Language; (function (Language) { Language["English"] = "English"; Language["French"] = "French"; Language["Spanish"] = "Spanish"; Language["German"] = "German"; Language["Italian"] = "Italian"; Language["Danish"] = "Danish"; Language["Dutch"] = "Dutch"; Language["Japanese"] = "Japanese"; Language["Cantonese"] = "Cantonese"; Language["Mandarin"] = "Mandarin"; Language["Russian"] = "Russian"; Language["Polish"] = "Polish"; Language["Vietnamese"] = "Vietnamese"; Language["Nordic"] = "Nordic"; Language["Swedish"] = "Swedish"; Language["Norwegian"] = "Norwegian"; Language["Finnish"] = "Finnish"; Language["Turkish"] = "Turkish"; Language["Portuguese"] = "Portuguese"; Language["Flemish"] = "Flemish"; Language["Greek"] = "Greek"; Language["Korean"] = "Korean"; Language["Hungarian"] = "Hungarian"; Language["Persian"] = "Persian"; Language["Bengali"] = "Bengali"; Language["Bulgarian"] = "Bulgarian"; Language["Brazilian"] = "Brazilian"; Language["Hebrew"] = "Hebrew"; Language["Czech"] = "Czech"; Language["Ukrainian"] = "Ukrainian"; Language["Catalan"] = "Catalan"; Language["Chinese"] = "Chinese"; Language["Thai"] = "Thai"; Language["Hindi"] = "Hindi"; Language["Tamil"] = "Tamil"; Language["Arabic"] = "Arabic"; Language["Estonian"] = "Estonian"; Language["Icelandic"] = "Icelandic"; Language["Latvian"] = "Latvian"; Language["Lithuanian"] = "Lithuanian"; Language["Romanian"] = "Romanian"; Language["Slovak"] = "Slovak"; Language["Serbian"] = "Serbian"; })(Language || (Language = {})); const languagePatterns = [ { language: Language.English, pattern: /\b(english|eng|EN|FI)\b/i }, { language: Language.Spanish, pattern: 'spanish' }, { language: Language.Danish, pattern: /\b(DK|DAN|danish)\b/i }, { language: Language.Japanese, pattern: 'japanese' }, { language: Language.Cantonese, pattern: 'cantonese' }, { language: Language.Mandarin, pattern: 'mandarin' }, { language: Language.Korean, pattern: 'korean' }, { language: Language.Vietnamese, pattern: 'vietnamese' }, { language: Language.Swedish, pattern: /\b(SE|SWE|swedish)\b/i }, { language: Language.Finnish, pattern: 'finnish' }, { language: Language.Turkish, pattern: 'turkish' }, { language: Language.Portuguese, pattern: 'portuguese' }, { language: Language.Hebrew, pattern: 'hebrew' }, { language: Language.Czech, pattern: 'czech' }, { language: Language.Ukrainian, pattern: 'ukrainian' }, { language: Language.Catalan, pattern: 'catalan' }, { language: Language.Estonian, pattern: 'estonian' }, { language: Language.Icelandic, pattern: /\b(ice|Icelandic)\b/i }, { language: Language.Chinese, pattern: /\b(chi|chinese)\b/i }, { language: Language.Thai, pattern: 'thai' }, { language: Language.Italian, pattern: /\b(ita|italian)\b/i }, { language: Language.German, pattern: /\b(german|videomann)\b/i }, { language: Language.Flemish, pattern: /\b(flemish)\b/i }, { language: Language.Greek, pattern: /\b(greek)\b/i }, { language: Language.French, pattern: /\b(FR|FRENCH|VOSTFR|VO|VFF|VFQ|VF2|TRUEFRENCH|SUBFRENCH)\b/i, }, { language: Language.Russian, pattern: /\b(russian|rus)\b/i }, { language: Language.Norwegian, pattern: /\b(norwegian|NO)\b/i }, { language: Language.Hungarian, pattern: /\b(HUNDUB|HUN|hungarian)\b/i }, { language: Language.Hebrew, pattern: /\b(HebDub)\b/i }, { language: Language.Czech, pattern: /\b(CZ|SK)\b/i }, { language: Language.Ukrainian, pattern: /\bukr\b/i }, { language: Language.Polish, pattern: /\b(PL|PLDUB|POLISH)\b/i }, { language: Language.Dutch, pattern: /\b(nl|dutch)\b/i }, { language: Language.Hindi, pattern: /\b(HIN|Hindi)\b/i }, { language: Language.Tamil, pattern: /\b(TAM|Tamil)\b/i }, { language: Language.Arabic, pattern: /\b(Arabic)\b/i }, { language: Language.Latvian, pattern: /\b(Latvian)\b/i }, { language: Language.Lithuanian, pattern: /\b(Lithuanian)\b/i }, { language: Language.Romanian, pattern: /\b(RO|Romanian|rodubbed)\b/i }, { language: Language.Slovak, pattern: /\b(SK|Slovak)\b/i }, { language: Language.Brazilian, pattern: /\b(Brazilian)\b/i }, { language: Language.Persian, pattern: /\b(Persian)\b/i }, { language: Language.Bengali, pattern: /\b(Bengali)\b/i }, { language: Language.Bulgarian, pattern: /\b(Bulgarian)\b/i }, { language: Language.Serbian, pattern: /\b(Serbian)\b/i }, { language: Language.Nordic, pattern: /\b(nordic|NORDICSUBS)\b/i }, ]; export function parseLanguage(title, parsedTitle) { parsedTitle ??= parseTitleAndYear(title).title; const languageTitle = title.replaceAll('.', ' ').replace(parsedTitle, '').toLowerCase(); const languages = languagePatterns .filter(({ pattern }) => matchesLanguagePattern(languageTitle, pattern)) .map(({ language }) => language); if (isMulti(languageTitle)) { languages.push(Language.English); } if (languages.length === 0) { languages.push(Language.English); } return [...new Set(languages)]; } function matchesLanguagePattern(languageTitle, pattern) { if (typeof pattern === 'string') { return languageTitle.includes(pattern); } return pattern.test(languageTitle); } // Reviens-moi (2007) [1080p] BluRay MULTi x264-PopHD const multiExp = /(?<!(WEB-))\b(MULTi|DUAL|DL)\b/i; export function isMulti(title) { const noWebTitle = title.replace(/\bWEB-?DL\b/i, ''); return multiExp.test(noWebTitle) || undefined; }