OSDN Git Service

fd0cdc55259178c5cc5e30f482a7ded925dabe42
[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     using Handbrake.Model;\r
13 \r
14     /// <summary>\r
15     /// An object that represents a subtitle associated with a Title, in a DVD\r
16     /// </summary>\r
17     public class Subtitle\r
18     {\r
19         /// <summary>\r
20         /// Gets the track number of this Subtitle\r
21         /// </summary>\r
22         public int TrackNumber { get; private set; }\r
23 \r
24         /// <summary>\r
25         /// Gets the The language (if detected) of this Subtitle\r
26         /// </summary>\r
27         public string Language { get; private set; }\r
28 \r
29         /// <summary>\r
30         /// Gets the Langauage Code\r
31         /// </summary>\r
32         public string LanguageCode { get; private set; }\r
33 \r
34         /// <summary>\r
35         /// Gets the Subtitle Type\r
36         /// </summary>\r
37         public SubtitleType SubtitleType { get; private set; }\r
38 \r
39         /// <summary>\r
40         /// Gets Subtitle Type\r
41         /// </summary>\r
42         public string TypeString\r
43         {\r
44             get\r
45             {\r
46                 return this.SubtitleType == SubtitleType.Picture ? "Bitmap" : "Text";\r
47             }\r
48         }\r
49 \r
50         /// <summary>\r
51         /// Create a new Subtitle Object\r
52         /// </summary>\r
53         /// <param name="track">\r
54         /// The track.\r
55         /// </param>\r
56         /// <param name="lang">\r
57         /// The lang.\r
58         /// </param>\r
59         /// <param name="langCode">\r
60         /// The lang code.\r
61         /// </param>\r
62         /// <param name="type">\r
63         /// The type.\r
64         /// </param>\r
65         /// <returns>\r
66         /// A Subtitle Object\r
67         /// </returns>\r
68         public static Subtitle CreateSubtitleObject(int track, string lang, string langCode, SubtitleType type)\r
69         {\r
70             return new Subtitle { TrackNumber = track, Language = lang, LanguageCode = langCode, SubtitleType = type };\r
71         }\r
72 \r
73         /// <summary>\r
74         /// Parse the input strings related to subtitles\r
75         /// </summary>\r
76         /// <param name="output">\r
77         /// The output.\r
78         /// </param>\r
79         /// <returns>\r
80         /// A Subitle object\r
81         /// </returns>\r
82         public static Subtitle Parse(StringReader output)\r
83         {\r
84             string curLine = output.ReadLine();\r
85 \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
88             {\r
89                 var thisSubtitle = new Subtitle\r
90                                        {\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
95                                        };\r
96                 return thisSubtitle;\r
97             }\r
98             return null;\r
99         }\r
100 \r
101         /// <summary>\r
102         /// Parse a list of Subtitle tracks from an input string.\r
103         /// </summary>\r
104         /// <param name="output">\r
105         /// The output.\r
106         /// </param>\r
107         /// <returns>\r
108         /// An array of Subtitle objects\r
109         /// </returns>\r
110         public static IEnumerable<Subtitle> ParseList(StringReader output)\r
111         {\r
112             var subtitles = new List<Subtitle>();\r
113             while ((char) output.Peek() != '+')\r
114             {\r
115                 Subtitle thisSubtitle = Parse(output);\r
116 \r
117                 if (thisSubtitle != null)\r
118                     subtitles.Add(thisSubtitle);\r
119                 else\r
120                     break;\r
121             }\r
122             return subtitles.ToArray();\r
123         }\r
124 \r
125         /// <summary>\r
126         /// Override of the ToString method to make this object easier to use in the UI\r
127         /// </summary>\r
128         /// <returns>A string formatted as: {track #} {language}</returns>\r
129         public override string ToString()\r
130         {\r
131             return string.Format("{0} {1} ({2})", TrackNumber, Language, TypeString);\r
132         }\r
133     }\r
134 }