OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / Subtitle.cs
1 /*  Subtitle.cs $\r
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
5 \r
6 namespace Handbrake.Parsing\r
7 {\r
8     using System.Collections.Generic;\r
9     using System.IO;\r
10     using System.Text.RegularExpressions;\r
11 \r
12     /// <summary>\r
13     /// An object that represents a subtitle associated with a Title, in a DVD\r
14     /// </summary>\r
15     public class Subtitle\r
16     {\r
17         /// <summary>\r
18         /// The Language\r
19         /// </summary>\r
20         private string language;\r
21 \r
22         /// <summary>\r
23         /// The Track Number\r
24         /// </summary>\r
25         private int trackNumber;\r
26 \r
27         /// <summary>\r
28         /// The type of subtitle\r
29         /// </summary>\r
30         private string type;\r
31 \r
32         /// <summary>\r
33         /// The typecode\r
34         /// </summary>\r
35         private string typecode;\r
36 \r
37         /// <summary>\r
38         /// Gets the track number of this Subtitle\r
39         /// </summary>\r
40         public int TrackNumber\r
41         {\r
42             get { return trackNumber; }\r
43         }\r
44 \r
45         /// <summary>\r
46         /// Gets the The language (if detected) of this Subtitle\r
47         /// </summary>\r
48         public string Language\r
49         {\r
50             get { return language; }\r
51         }\r
52 \r
53         /// <summary>\r
54         /// Gets the Langauage Code\r
55         /// </summary>\r
56         public string LanguageCode\r
57         {\r
58             get { return typecode; }\r
59         }\r
60 \r
61         /// <summary>\r
62         /// Gets the Subtitle Type\r
63         /// </summary>\r
64         public string Type\r
65         {\r
66             get { return type; }\r
67         }\r
68 \r
69         /// <summary>\r
70         /// Parse the input strings related to subtitles\r
71         /// </summary>\r
72         /// <param name="output">\r
73         /// The output.\r
74         /// </param>\r
75         /// <returns>\r
76         /// A Subitle object\r
77         /// </returns>\r
78         public static Subtitle Parse(StringReader output)\r
79         {\r
80             string curLine = output.ReadLine();\r
81 \r
82             Match m = Regex.Match(curLine, @"^    \+ ([0-9]*), ([A-Za-z, ]*) \((.*)\) \(([a-zA-Z]*)\)");\r
83             if (m.Success && !curLine.Contains("HandBrake has exited."))\r
84             {\r
85                 var thisSubtitle = new Subtitle\r
86                                        {\r
87                                            trackNumber = int.Parse(m.Groups[1].Value.Trim()), \r
88                                            language = m.Groups[2].Value, \r
89                                            typecode = m.Groups[3].Value, \r
90                                            type = m.Groups[4].Value\r
91                                        };\r
92                 return thisSubtitle;\r
93             }\r
94             return null;\r
95         }\r
96 \r
97         /// <summary>\r
98         /// Parse a list of Subtitle tracks from an input string.\r
99         /// </summary>\r
100         /// <param name="output">\r
101         /// The output.\r
102         /// </param>\r
103         /// <returns>\r
104         /// An array of Subtitle objects\r
105         /// </returns>\r
106         public static IEnumerable<Subtitle> ParseList(StringReader output)\r
107         {\r
108             var subtitles = new List<Subtitle>();\r
109             while ((char) output.Peek() != '+')\r
110             {\r
111                 Subtitle thisSubtitle = Parse(output);\r
112 \r
113                 if (thisSubtitle != null)\r
114                     subtitles.Add(thisSubtitle);\r
115                 else\r
116                     break;\r
117             }\r
118             return subtitles.ToArray();\r
119         }\r
120 \r
121         /// <summary>\r
122         /// Override of the ToString method to make this object easier to use in the UI\r
123         /// </summary>\r
124         /// <returns>A string formatted as: {track #} {language}</returns>\r
125         public override string ToString()\r
126         {\r
127             return string.Format("{0} {1} ({2})", trackNumber, language, type);\r
128         }\r
129     }\r
130 }