public CRCRule() { var rb = new ReBulk(name: "crc32").Options(RegexOptions.IgnoreCase); rb = rb.Regex("(?:[a-fA-F]|[0-9]){8}"); RB = rb; }
public SizeRule() { var rb = new ReBulk(name: "size") .Regex(@"\d+\.?[mgt]b", @"\d+\.\d+[mgt]b") .Format((x) => Regex.Replace(x, @"[mgt]b", y => y.ToString().ToUpper())); RB = rb; }
public CDSRule() { var rb = new ReBulk(name: "cds").Options(RegexOptions.IgnoreCase); rb = rb.Regex(@"cd-?(?<cd>\d+)(?:-?of-?(?<cd_count>\d+))?"); rb = rb.Regex(@"(?<cd_count>\d+)-?cds?"); RB = rb; }
public PartRule() { var prefixes = new[] { "pt", "part" }; RB = new ReBulk(name: "part").Options(RegexOptions.IgnoreCase) .Regex(RegexUtils.BuildOrPattern(prefixes, "prefixes") + @"-?(?<part>" + RegexUtils.BuildOrPattern(new[] { Regexes.digital_numeral, Regexes.roman_numeral }, "partnumber") + @")") .Then(x => IsNumeric(x)); }
public ScreenSizeRule() { RB = new ReBulk(name: "screen_size").Options(RegexOptions.IgnoreCase) .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?360(?:i|p?x?)", value: "360p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?368(?:i|p?x?)", value: "368p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?480(?:i|p?x?)", value: "480p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?576(?:i|p?x?)", value: "576p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?720(?:i|p?(?:50|60)?x?)", value: "720p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?720(?:p(?:50|60)?x?)", value: "720p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?720p?hd", value: "720p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?900(?:i|p?x?)", value: "900p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?1080i", value: "1080i") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?1080p?x?", value: "1080p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?1080(?:p(?:50|60)?x?)", value: "1080p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?1080p?hd", value: "1080p") .Regex(Replace: true, regex: @"(?:\d{3,}(?:x|\*))?2160(?:i|p?x?)", value: "4K") .String("4k", true, "4K"); }
public VideoCodecRule() { RB = new ReBulk(name: "video_codec").Options(RegexOptions.IgnoreCase); RB = RB.Regex("Real", true, @"Rv\d{2}"); RB = RB.Regex("Mpeg2", true, "Mpeg2"); RB = RB.Regex("DivX", true, "DVDivX", "DivX"); RB = RB.Regex("XviD", true, "XviD"); RB = RB.Regex("h264", true, "[hx]-?264(?:-?AVC(HD)?)?", "MPEG-?4(?:-?AVC(HD)?)", "AVC(?:HD)?"); RB = RB.Regex("h265", true, "[hx]-?265(?:-?HEVC)?", "HEVC"); RB = RB.Regex("h26510bit", true, "(?<video_codec>hevc)(?<video_profile>10)"); RB = RB.Regex("10bit", true, "10.?bits?", "Hi10P?", "YUV420P10"); RB = RB.Regex("8bit", true, "8.?bits?"); RB = RB.String("BP", true, "BP"); RB = RB.String("XP", true, "EP", "XP"); RB = RB.String("MP", true, "MP"); RB = RB.String("HP", true, "HiP", "HP"); RB = RB.Regex("Hi422P", true, "Hi422P"); RB = RB.Regex("Hi444PP", true, "Hi444PP"); RB = RB.String("DXVA", true, "DXVA"); }
public EditionRule() { var rb = new ReBulk(name: "edition").Options(RegexOptions.IgnoreCase); rb = rb.Regex("Collector Edition", true, "collector", "collector-edition", "edition-collector") .Regex("Special Edition", true, "special-edition", "edition-special") .Regex("Criterion Edition", true, "criterion-edition", "edition-criterion") .Regex("Deluxe Edition", true, "deluxe", "deluxe-edition", "edition-deluxe") .Regex("Limited Edition", true, "limited", "limited-edition") .Regex("Theatrical Edition", true, @"theatrical-cut", @"theatrical-edition", @"theatrical") .Regex("Director's Cut", true, @"director'?s?-cut", @"director'?s?-cut-edition", @"edition-director'?s?-cut") .Regex("Extended", true, "extended", "extended-?cut", "extended-?version") .Regex("Alternative Cut", true, "alternat(e|ive)(?:-?Cut)?") .String("Director's Cut", true, "DC") .String("Special Edition", true, "se") .String("Festival", true, "Festival"); foreach (var item in new[] { "Remastered", "Uncensored", "Uncut", "Unrated" }) { rb = rb.String(item, true, item); } RB = rb; }
public DateRule() { RB = new ReBulk(name: "year").Options(RegexOptions.IgnoreCase) .Regex(@"\d{4}").Then(x => Regex.Match(x, "19|20([0-9]{2})").Success); }