OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / Title.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using System.IO;\r
6 using System.Windows.Forms;\r
7 \r
8 namespace Handbrake.Parsing\r
9 {\r
10     public class Title\r
11     {\r
12         private List<Chapter> m_chapters;\r
13         public List<Chapter> Chapters\r
14         {\r
15             get\r
16             {\r
17                 return this.m_chapters;\r
18             }\r
19         }\r
20 \r
21         private List<AudioTrack> m_audioTracks;\r
22         public List<AudioTrack> AudioTracks\r
23         {\r
24             get\r
25             {\r
26                 return this.m_audioTracks;\r
27             }\r
28         }\r
29 \r
30         private List<Subtitle> m_subtitles;\r
31         public List<Subtitle> Subtitles\r
32         {\r
33             get\r
34             {\r
35                 return this.m_subtitles;\r
36             }\r
37         }\r
38 \r
39         private int m_titleNumber;\r
40         public int TitleNumber\r
41         {\r
42             get\r
43             {\r
44                 return this.m_titleNumber;\r
45             }\r
46         }\r
47 \r
48         private TimeSpan m_duration;\r
49         public TimeSpan Duration\r
50         {\r
51             get\r
52             {\r
53                 return this.m_duration;\r
54             }\r
55         }\r
56 \r
57         private Size m_resolution;\r
58         public Size Resolution\r
59         {\r
60             get\r
61             {\r
62                 return this.m_resolution;\r
63             }\r
64         }\r
65 \r
66         private float m_aspectRatio;\r
67         public float AspectRatio\r
68         {\r
69             get\r
70             {\r
71                 return this.m_aspectRatio;\r
72             }\r
73         }\r
74 \r
75 \r
76         private int[] m_autoCrop;\r
77         public int[] AutoCropDimensions\r
78         {\r
79             get\r
80             {\r
81                 return this.m_autoCrop;\r
82             }\r
83         }\r
84 \r
85         public Title()\r
86         {\r
87             this.m_audioTracks = new List<AudioTrack>();\r
88             this.m_chapters = new List<Chapter>();\r
89             this.m_subtitles = new List<Subtitle>();\r
90         }\r
91 \r
92         public override string ToString()\r
93         {\r
94             return string.Format("{0} ({1:00}:{2:00}:{3:00})", this.m_titleNumber, this.m_duration.Hours, \r
95                 this.m_duration.Minutes, this.m_duration.Seconds);\r
96         }\r
97 \r
98         public static Title Parse(StreamReader output)\r
99         {\r
100             Title thisTitle = new Title();\r
101 \r
102             /*\r
103              * This will be converted to use Regex soon, I promise ;)\r
104              * brianmario - 7/9/07\r
105              */\r
106         \r
107                 string curLine = output.ReadLine();\r
108                 thisTitle.m_titleNumber = int.Parse(curLine.Substring(curLine.Length - 2, 1));\r
109                 curLine = output.ReadLine();\r
110                 string[] splitter = curLine.Split(',');\r
111    \r
112                 splitter = splitter[2].Trim().Split(' ', '(', ')');\r
113 \r
114                 splitter = splitter[1].Split('-', '>');\r
115 \r
116                 curLine = output.ReadLine();\r
117                 splitter = curLine.Split(new string[] { "  + duration: " }, StringSplitOptions.RemoveEmptyEntries);\r
118                 thisTitle.m_duration = TimeSpan.Parse(splitter[0]);\r
119                 curLine = output.ReadLine();\r
120                 splitter = curLine.Split(new string[] { "  + size: ", "aspect: ", ", ", " fps", "x" }, StringSplitOptions.RemoveEmptyEntries);\r
121                 thisTitle.m_resolution = new Size(int.Parse(splitter[0]), int.Parse(splitter[1]));\r
122                 thisTitle.m_aspectRatio = float.Parse(splitter[2].ToString());\r
123      \r
124                 curLine = output.ReadLine();\r
125                 splitter = curLine.Split(new string[] { "  + autocrop: ", "/" }, StringSplitOptions.RemoveEmptyEntries);\r
126                 thisTitle.m_autoCrop = new int[4] { int.Parse(splitter[0]), int.Parse(splitter[1]), int.Parse(splitter[2]), int.Parse(splitter[3]) };\r
127                 thisTitle.m_chapters.AddRange(Chapter.ParseList(output));\r
128                 thisTitle.m_audioTracks.AddRange(AudioTrack.ParseList(output));\r
129                 thisTitle.m_subtitles.AddRange(Subtitle.ParseList(output));\r
130             \r
131             return thisTitle;\r
132         }\r
133 \r
134         public static Title[] ParseList(StreamReader output)\r
135         {\r
136             List<Title> titles = new List<Title>();\r
137             while ((char)output.Peek() == '+')\r
138             {\r
139                 titles.Add(Title.Parse(output));\r
140             }\r
141             return titles.ToArray();\r
142         }\r
143     }\r
144 }\r