OSDN Git Service

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