Merge master.
[libdcp.git] / src / parse / subtitle.h
1 /*
2     Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include "../xml.h"
21 #include "../dcp_time.h"
22 #include "../types.h"
23
24 namespace libdcp
25 {
26
27 namespace parse
28 {
29
30 class Font;
31
32 class Text
33 {
34 public:
35         Text () {}
36         Text (boost::shared_ptr<const cxml::Node> node);
37
38         float v_position;
39         VAlign v_align;
40         std::string text;
41         std::list<boost::shared_ptr<Font> > font_nodes;
42 };
43
44 class Subtitle 
45 {
46 public:
47         Subtitle () {}
48         Subtitle (boost::shared_ptr<const cxml::Node> node);
49
50         Time in;
51         Time out;
52         Time fade_up_time;
53         Time fade_down_time;
54         std::list<boost::shared_ptr<Font> > font_nodes;
55         std::list<boost::shared_ptr<Text> > text_nodes;
56
57 private:
58         Time fade_time (boost::shared_ptr<const cxml::Node>, std::string name);
59 };
60
61 class Font 
62 {
63 public:
64         Font () {}
65         Font (boost::shared_ptr<const cxml::Node> node);
66         Font (std::list<boost::shared_ptr<Font> > const & font_nodes);
67
68         std::string text;
69         std::string id;
70         int size;
71         boost::optional<bool> italic;
72         boost::optional<Color> color;
73         boost::optional<Effect> effect;
74         boost::optional<Color> effect_color;
75         
76         std::list<boost::shared_ptr<Subtitle> > subtitle_nodes;
77         std::list<boost::shared_ptr<Font> > font_nodes;
78         std::list<boost::shared_ptr<Text> > text_nodes;
79 };
80
81 class LoadFont 
82 {
83 public:
84         LoadFont () {}
85         LoadFont (boost::shared_ptr<const cxml::Node> node);
86
87         std::string id;
88         std::string uri;
89 };
90
91 }
92
93 }