/* Chapter.cs $ This file is part of the HandBrake source code. Homepage: . It may be used under the terms of the GNU General Public License. */ namespace Handbrake.Parsing { using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; /// /// An object representing a Chapter aosciated with a Title, in a DVD /// public class Chapter { /// /// Chapter Number /// private int chapterNumber; /// /// The Duration of the chapter /// private TimeSpan duration; /// /// Gets The number of this Chapter, in regards to it's parent Title /// public int ChapterNumber { get { return chapterNumber; } } /// /// Gets The length in time this Chapter spans /// public TimeSpan Duration { get { return duration; } } /// /// Parse a CLI string to a Chapter object /// /// /// The output. /// /// /// A chapter Object /// public static Chapter Parse(StringReader output) { 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})"); if (m.Success) { var thisChapter = new Chapter { chapterNumber = int.Parse(m.Groups[1].Value.Trim()), duration = TimeSpan.Parse(m.Groups[5].Value) }; return thisChapter; } return null; } /// /// Prase a list of strings / chatpers /// /// /// The output. /// /// /// An array of chapter objects /// public static Chapter[] ParseList(StringReader output) { var chapters = new List(); // this is to read the " + chapters:" line from the buffer // so we can start reading the chapters themselvs output.ReadLine(); while (true) { // Start of the chapter list for this Title Chapter thisChapter = Parse(output); if (thisChapter != null) chapters.Add(thisChapter); else break; } return chapters.ToArray(); } /// /// Override of the ToString method to make this object easier to use in the UI /// /// A string formatted as: {chapter #} public override string ToString() { return chapterNumber.ToString(); } } }