2 This file is part of the HandBrake source code.
\r
3 Homepage: <http://handbrake.fr>.
\r
4 It may be used under the terms of the GNU General Public License. */
\r
6 namespace Handbrake.Parsing
\r
8 using System.Collections.Generic;
\r
10 using System.Text.RegularExpressions;
\r
12 using Handbrake.Model;
\r
15 /// An object that represents a subtitle associated with a Title, in a DVD
\r
17 public class Subtitle
\r
20 /// Gets the track number of this Subtitle
\r
22 public int TrackNumber { get; private set; }
\r
25 /// Gets the The language (if detected) of this Subtitle
\r
27 public string Language { get; private set; }
\r
30 /// Gets the Langauage Code
\r
32 public string LanguageCode { get; private set; }
\r
35 /// Gets the Subtitle Type
\r
37 public SubtitleType SubtitleType { get; private set; }
\r
40 /// Gets Subtitle Type
\r
42 public string TypeString
\r
46 return this.SubtitleType == SubtitleType.Picture ? "Bitmap" : "Text";
\r
51 /// Create a new Subtitle Object
\r
53 /// <param name="track">
\r
56 /// <param name="lang">
\r
59 /// <param name="langCode">
\r
62 /// <param name="type">
\r
66 /// A Subtitle Object
\r
68 public static Subtitle CreateSubtitleObject(int track, string lang, string langCode, SubtitleType type)
\r
70 return new Subtitle { TrackNumber = track, Language = lang, LanguageCode = langCode, SubtitleType = type };
\r
74 /// Parse the input strings related to subtitles
\r
76 /// <param name="output">
\r
80 /// A Subitle object
\r
82 public static Subtitle Parse(StringReader output)
\r
84 string curLine = output.ReadLine();
\r
86 Match m = Regex.Match(curLine, @"^ \+ ([0-9]*), ([A-Za-z, ]*) \((.*)\) \(([a-zA-Z]*)\)");
\r
87 if (m.Success && !curLine.Contains("HandBrake has exited."))
\r
89 var thisSubtitle = new Subtitle
\r
91 TrackNumber = int.Parse(m.Groups[1].Value.Trim()),
\r
92 Language = m.Groups[2].Value,
\r
93 LanguageCode = m.Groups[3].Value,
\r
94 SubtitleType = m.Groups[4].Value.Contains("Text") ? SubtitleType.Text : SubtitleType.Picture
\r
96 return thisSubtitle;
\r
102 /// Parse a list of Subtitle tracks from an input string.
\r
104 /// <param name="output">
\r
108 /// An array of Subtitle objects
\r
110 public static IEnumerable<Subtitle> ParseList(StringReader output)
\r
112 var subtitles = new List<Subtitle>();
\r
113 while ((char) output.Peek() != '+')
\r
115 Subtitle thisSubtitle = Parse(output);
\r
117 if (thisSubtitle != null)
\r
118 subtitles.Add(thisSubtitle);
\r
122 return subtitles.ToArray();
\r
126 /// Override of the ToString method to make this object easier to use in the UI
\r
128 /// <returns>A string formatted as: {track #} {language}</returns>
\r
129 public override string ToString()
\r
131 return string.Format("{0} {1} ({2})", TrackNumber, Language, TypeString);
\r