예제 #1
0
        /// <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);
        }