OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / Chapter.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.IO;\r
5 using System.Text.RegularExpressions;\r
6 \r
7 namespace Handbrake.Parsing\r
8 {\r
9     /// <summary>\r
10     /// An object representing a Chapter aosciated with a Title, in a DVD\r
11     /// </summary>\r
12     public class Chapter\r
13     {\r
14         private int m_chapterNumber;\r
15         /// <summary>\r
16         /// The number of this Chapter, in regards to it's parent Title\r
17         /// </summary>\r
18         public int ChapterNumber\r
19         {\r
20             get\r
21             {\r
22                 return this.m_chapterNumber;\r
23             }\r
24         }\r
25 \r
26         private TimeSpan m_duration;\r
27         /// <summary>\r
28         /// The length in time this Chapter spans\r
29         /// </summary>\r
30         public TimeSpan Duration\r
31         {\r
32             get\r
33             {\r
34                 return this.m_duration;\r
35             }\r
36         }\r
37 \r
38         /// <summary>\r
39         /// Override of the ToString method to make this object easier to use in the UI\r
40         /// </summary>\r
41         /// <returns>A string formatted as: {chapter #}</returns>\r
42         public override string ToString()\r
43         {\r
44             return this.m_chapterNumber.ToString();\r
45         }\r
46 \r
47         public static Chapter Parse(StringReader output)\r
48         {\r
49             Match m = Regex.Match(output.ReadLine(), @"^    \+ ([0-9]*): cells ([0-9]*)->([0-9]*), ([0-9]*) blocks, duration ([0-9]{2}:[0-9]{2}:[0-9]{2})");\r
50             if (m.Success)\r
51             {\r
52                 Chapter thisChapter = new Chapter();\r
53                 thisChapter.m_chapterNumber = int.Parse(m.Groups[1].Value);\r
54                 thisChapter.m_duration = TimeSpan.Parse(m.Groups[5].Value);\r
55                 return thisChapter;\r
56             }\r
57             else\r
58             {\r
59                 return null;\r
60             }\r
61         }\r
62 \r
63         public static Chapter[] ParseList(StringReader output)\r
64         {\r
65             List<Chapter> chapters = new List<Chapter>();\r
66 \r
67             // this is to read the "  + chapters:" line from the buffer\r
68             // so we can start reading the chapters themselvs\r
69             output.ReadLine();\r
70 \r
71             while (true)\r
72             {\r
73                 // Start of the chapter list for this Title\r
74                 Chapter thisChapter = Chapter.Parse(output);\r
75 \r
76                 if (thisChapter != null)\r
77                 {\r
78                     chapters.Add(thisChapter);\r
79                 }\r
80                 else\r
81                 {\r
82                     break;\r
83                 }\r
84             }\r
85             return chapters.ToArray();\r
86         }\r
87     }\r
88 }\r