50c2ebc59630477eec83032663eefb47272ff0e3
[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 dcp
25 {
26
27 namespace parse
28 {
29
30 class Font;
31
32 class Text
33 {
34 public:
35         Text ()
36                 : v_position (0)
37                 , v_align (TOP)
38         {}
39         
40         Text (boost::shared_ptr<const cxml::Node> node);
41
42         float v_position;
43         VAlign v_align;
44         std::string text;
45         std::list<boost::shared_ptr<Font> > font_nodes;
46 };
47
48 class Subtitle 
49 {
50 public:
51         Subtitle () {}
52         Subtitle (boost::shared_ptr<const cxml::Node> node);
53
54         Time in;
55         Time out;
56         Time fade_up_time;
57         Time fade_down_time;
58         std::list<boost::shared_ptr<Font> > font_nodes;
59         std::list<boost::shared_ptr<Text> > text_nodes;
60
61 private:
62         Time fade_time (boost::shared_ptr<const cxml::Node>, std::string name);
63 };
64
65 class Font 
66 {
67 public:
68         Font ()
69                 : size (0)
70         {}
71         
72         Font (boost::shared_ptr<const cxml::Node> node);
73         Font (std::list<boost::shared_ptr<Font> > const & font_nodes);
74
75         std::string text;
76         std::string id;
77         int size;
78         boost::optional<bool> italic;
79         boost::optional<Color> color;
80         boost::optional<Effect> effect;
81         boost::optional<Color> effect_color;
82         
83         std::list<boost::shared_ptr<Subtitle> > subtitle_nodes;
84         std::list<boost::shared_ptr<Font> > font_nodes;
85         std::list<boost::shared_ptr<Text> > text_nodes;
86 };
87
88 class LoadFont 
89 {
90 public:
91         LoadFont () {}
92         LoadFont (boost::shared_ptr<const cxml::Node> node);
93
94         std::string id;
95         std::string uri;
96 };
97
98 }
99
100 }