/// <summary> /// Load a subtitle from a file. /// Check "OriginalFormat" to see what subtitle format was used. /// Check "OriginalEncoding" to see what text encoding was used. /// </summary> /// <param name="fileName">File name of subtitle to load.</param> /// <param name="formatsToLookfor">List of subtitle formats to use.</param> /// <returns>Loaded subtitle, null if file is not matched by any format in formatsToLookFor.</returns> public static Subtitle Parse(string fileName, List <SubtitleFormat> formatsToLookFor) { var subtitle = new Subtitle { FileName = fileName }; List <string> lines; try { lines = ReadLinesFromFile(fileName, null, out var encoding); subtitle.OriginalEncoding = encoding; } catch (Exception exception) { System.Diagnostics.Debug.WriteLine(exception.Message); return(null); } var ext = Path.GetExtension(fileName).ToLowerInvariant(); foreach (var subtitleFormat in formatsToLookFor.Where(p => p.Extension == ext && !p.Name.StartsWith("Unknown", StringComparison.Ordinal))) { if (subtitleFormat.IsMine(lines, fileName)) { subtitle.FinalizeFormat(fileName, false, null, lines, subtitleFormat, true); return(subtitle); } } foreach (var subtitleFormat in formatsToLookFor.Where(p => p.Extension != ext || p.Name.StartsWith("Unknown", StringComparison.Ordinal))) { if (subtitleFormat.IsMine(lines, fileName)) { subtitle.FinalizeFormat(fileName, false, null, lines, subtitleFormat, true); return(subtitle); } } return(null); }