OSDN Git Service

merge 0.9.4 to jp
[handbrake-jp/handbrake-jp.git] / win / C# / Parsing / Subtitle.cs
1 /*  Subtitle.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System.Collections.Generic;\r
8 using System.IO;\r
9 using System.Text.RegularExpressions;\r
10 \r
11 namespace Handbrake.Parsing\r
12 {\r
13     /// <summary>\r
14     /// An object that represents a subtitle associated with a Title, in a DVD\r
15     /// </summary>\r
16     public class Subtitle\r
17     {\r
18         private string m_language;\r
19         private int m_trackNumber;\r
20         private string m_type;\r
21         private string m_typecode;\r
22 \r
23         /// <summary>\r
24         /// The track number of this Subtitle\r
25         /// </summary>\r
26         public int TrackNumber\r
27         {\r
28             get { return m_trackNumber; }\r
29         }\r
30 \r
31         /// <summary>\r
32         /// The language (if detected) of this Subtitle\r
33         /// </summary>\r
34         public string Language\r
35         {\r
36             get { return m_language; }\r
37         }\r
38 \r
39         /// <summary>\r
40         /// Langauage Code\r
41         /// </summary>\r
42         public string LanguageCode\r
43         {\r
44             get { return m_typecode; }\r
45         }\r
46 \r
47 \r
48         /// <summary>\r
49         /// Subtitle Type\r
50         /// </summary>\r
51         public string Type\r
52         {\r
53             get { return m_type; }\r
54         }\r
55 \r
56 \r
57         /// <summary>\r
58         /// Override of the ToString method to make this object easier to use in the UI\r
59         /// </summary>\r
60         /// <returns>A string formatted as: {track #} {language}</returns>\r
61         public override string ToString()\r
62         {\r
63             return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_type);\r
64         }\r
65 \r
66         public static Subtitle Parse(StringReader output)\r
67         {\r
68             string curLine = output.ReadLine();\r
69 \r
70             Match m = Regex.Match(curLine, @"^    \+ ([0-9]*), ([A-Za-z, ]*) \((.*)\) \(([a-zA-Z]*)\)");\r
71             if (m.Success && !curLine.Contains("HandBrake has exited."))\r
72             {\r
73                 var thisSubtitle = new Subtitle\r
74                                        {\r
75                                            m_trackNumber = int.Parse(m.Groups[1].Value.Trim()),\r
76                                            m_language = m.Groups[2].Value,\r
77                                            m_typecode = m.Groups[3].Value,\r
78                                            m_type = m.Groups[4].Value\r
79                                        };\r
80                 return thisSubtitle;\r
81             }\r
82             return null;\r
83         }\r
84 \r
85         public static Subtitle[] ParseList(StringReader output)\r
86         {\r
87             var subtitles = new List<Subtitle>();\r
88             while ((char) output.Peek() != '+')\r
89             {\r
90                 Subtitle thisSubtitle = Parse(output);\r
91 \r
92                 if (thisSubtitle != null)\r
93                     subtitles.Add(thisSubtitle);\r
94                 else\r
95                     break;\r
96             }\r
97             return subtitles.ToArray();\r
98         }\r
99     }\r
100 }