def subtitle_language(): """Subtitle language property. :return: :rtype: Rebulk """ rebulk = Rebulk().regex_defaults(flags=re.IGNORECASE | re.UNICODE, abbreviations=[alt_dash]) rebulk.defaults(name='subtitle_language', validator=seps_surround) # special handling rebulk.regex(r'Legenda(?:s|do)?@PT-?BR', value=babelfish.Language('por', 'BR')) rebulk.regex(r'Legenda(?:s|do)?@PT(?!-?BR)', value=babelfish.Language('por')) rebulk.regex('Subtitulado@ESP(?:a[nñ]ol)?@Spanish', 'Subtitulado@ESP(?:a[nñ]ol)?', value=babelfish.Language('spa'), conflict_solver=lambda match, other: other if other.name == 'language' else '__default__') # undefined language rebulk.regex('Subtitles', 'Legenda(?:s|do)', 'Subbed', 'Sub(?:title)?s?@Latino', value='und', formatter=babelfish.Language, tags='subtitle.undefined') rebulk.rules(RemoveSubtitleUndefined) return rebulk
def other(): """Other property. :return: :rtype: Rebulk """ rebulk = Rebulk().regex_defaults(flags=re.IGNORECASE, abbreviations=[dash]) rebulk.defaults(name='other', validator=seps_surround) # https://github.com/guessit-io/guessit/issues/300 rebulk.regex(r'Re-?Enc(?:oded)?', value='Re-Encoded') rebulk.regex('DIRFIX', value='DirFix') rebulk.regex('INTERNAL', value='Internal') rebulk.regex(r'(?:HD)?iTunes(?:HD)?', value='iTunes') rebulk.regex(r'UNCENSORED', value='Uncensored') rebulk.regex(r'MULTi', value='Multi Language') rebulk.regex('HC', value='Hardcoded subtitles') # Discarded: rebulk.regex('DownRev', 'small-size', private=True) rebulk.rules(ValidateHardcodedSubs) return rebulk
def audio_codec(): """Audio codec property. :return: :rtype: Rebulk """ rebulk = Rebulk().regex_defaults(name='audio_codec', flags=re.IGNORECASE) rebulk.regex(r'DDP', value='AC3') rebulk.rules(Ac3Rule, AudioValidatorRule, HqConflictRule) return rebulk
def blacklist(): """Blacklisted patterns. All blacklisted patterns. :return: :rtype: Rebulk """ rebulk = Rebulk().regex_defaults(flags=re.IGNORECASE, abbreviations=[dash]) rebulk.defaults(name='blacklist', validator=seps_surround, conflict_solver=lambda match, other: other if other.name != 'blacklist' else '__default__') rebulk.regex(r'(?:(?:\[\d+/\d+\])-+)?\.".+".*', tags=['blacklist-01']) rebulk.regex(r'vol\d{2,3}\+\d{2,3}.*', tags=['blacklist-02']) rebulk.regex(r'(?:nzb|par2)-+\d+\.of\.\d+.*', tags=['blacklist-03']) rebulk.regex(r'(?:(?:nzb|par2)-+)?\d+\.of\.\d+.*', tags=['blacklist-03', 'should-have-container-before']) rebulk.rules(ValidateBlacklist, RemoveBlacklisted) return rebulk
def other(): """Other property. :return: :rtype: Rebulk """ rebulk = Rebulk().regex_defaults(flags=re.IGNORECASE, abbreviations=[dash]) rebulk.defaults(name='other', validator=seps_surround) # https://github.com/guessit-io/guessit/issues/300 rebulk.regex(r'Re-?Enc(?:oded)?', value='Re-Encoded') rebulk.regex('DIRFIX', value='DirFix') rebulk.regex('INTERNAL', value='Internal') rebulk.regex(r'(?:HD)?iTunes(?:HD)?', value='iTunes') rebulk.regex('HC', value='Hardcoded subtitles') rebulk.rules(ValidateHardcodedSubs) return rebulk