-using System;\r
+/* Subtitle.cs $\r
+ \r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
+\r
using System.Collections.Generic;\r
-using System.Text;\r
using System.IO;\r
+using System.Text.RegularExpressions;\r
\r
namespace Handbrake.Parsing\r
{\r
+ /// <summary>\r
+ /// An object that represents a subtitle associated with a Title, in a DVD\r
+ /// </summary>\r
public class Subtitle\r
{\r
+ private string m_language;\r
private int m_trackNumber;\r
+ private string m_type;\r
+ private string m_typecode;\r
+\r
+ /// <summary>\r
+ /// The track number of this Subtitle\r
+ /// </summary>\r
public int TrackNumber\r
{\r
- get\r
- {\r
- return this.m_trackNumber;\r
- }\r
+ get { return m_trackNumber; }\r
}\r
\r
- private string m_language;\r
+ /// <summary>\r
+ /// The language (if detected) of this Subtitle\r
+ /// </summary>\r
public string Language\r
{\r
- get\r
- {\r
- return this.m_language;\r
- }\r
+ get { return m_language; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Langauage Code\r
+ /// </summary>\r
+ public string LanguageCode\r
+ {\r
+ get { return m_typecode; }\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Subtitle Type\r
+ /// </summary>\r
+ public string Type\r
+ {\r
+ get { return m_type; }\r
}\r
\r
+\r
+ /// <summary>\r
+ /// Override of the ToString method to make this object easier to use in the UI\r
+ /// </summary>\r
+ /// <returns>A string formatted as: {track #} {language}</returns>\r
public override string ToString()\r
{\r
- return this.m_language;\r
+ return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_type);\r
}\r
\r
- public static Subtitle Parse(StreamReader output)\r
+ public static Subtitle Parse(StringReader output)\r
{\r
string curLine = output.ReadLine();\r
- if (!curLine.Contains("HandBrake has exited."))\r
+\r
+ Match m = Regex.Match(curLine, @"^ \+ ([0-9]*), ([A-Za-z, ]*) \((.*)\) \(([a-zA-Z]*)\)");\r
+ if (m.Success && !curLine.Contains("HandBrake has exited."))\r
{\r
- Subtitle thisSubtitle = new Subtitle();\r
- string[] splitter = curLine.Split(new string[] { " + ", ", " }, StringSplitOptions.RemoveEmptyEntries);\r
- thisSubtitle.m_trackNumber = int.Parse(splitter[0]);\r
- thisSubtitle.m_language = splitter[1];\r
+ var thisSubtitle = new Subtitle\r
+ {\r
+ m_trackNumber = int.Parse(m.Groups[1].Value.Trim()),\r
+ m_language = m.Groups[2].Value,\r
+ m_typecode = m.Groups[3].Value,\r
+ m_type = m.Groups[4].Value\r
+ };\r
return thisSubtitle;\r
}\r
- else\r
- {\r
- return null;\r
- }\r
+ return null;\r
}\r
\r
- public static Subtitle[] ParseList(StreamReader output)\r
+ public static Subtitle[] ParseList(StringReader output)\r
{\r
- List<Subtitle> subtitles = new List<Subtitle>();\r
- while ((char)output.Peek() != '+') // oh glorious hack, serve me well\r
+ var subtitles = new List<Subtitle>();\r
+ while ((char) output.Peek() != '+')\r
{\r
- Subtitle thisSubtitle = Subtitle.Parse(output);\r
+ Subtitle thisSubtitle = Parse(output);\r
+\r
if (thisSubtitle != null)\r
- {\r
subtitles.Add(thisSubtitle);\r
- }\r
else\r
- {\r
break;\r
- }\r
}\r
return subtitles.ToArray();\r
}\r
}\r
-}\r
+}
\ No newline at end of file