libsub
subtitle.h
1 /*
2  Copyright (C) 2014 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 #ifndef LIBSUB_SUBTITLE_H
21 #define LIBSUB_SUBTITLE_H
22 
23 #include "colour.h"
24 #include "vertical_reference.h"
25 #include "effect.h"
26 #include "font_size.h"
27 #include "vertical_position.h"
28 #include "horizontal_position.h"
29 #include "raw_subtitle.h"
30 #include <boost/optional.hpp>
31 #include <string>
32 #include <vector>
33 
34 namespace sub {
35 
41 class Block
42 {
43 public:
44  Block ()
45  : colour (1, 1, 1)
46  , bold (false)
47  , italic (false)
48  , underline (false)
49  {}
50 
52  Block (RawSubtitle s);
53 
55  std::string text;
56  boost::optional<std::string> font;
57 
60 
61  boost::optional<Effect> effect;
62  boost::optional<Colour> effect_colour;
63 
64  Colour colour;
65  bool bold;
66  bool italic;
67  bool underline;
68 };
69 
70 extern bool operator== (Block const & a, Block const & b);
71 
77 class Line
78 {
79 public:
80  Line ()
81  {
82  horizontal_position.reference = HORIZONTAL_CENTRE_OF_SCREEN;
83  }
84 
86  Line (RawSubtitle s);
87 
88  HorizontalPosition horizontal_position;
89 
92 
93  std::vector<Block> blocks;
94 
95  bool same_metadata (RawSubtitle) const;
96 };
97 
98 extern bool operator== (Line const & a, Line const & b);
99 
106 class Subtitle
107 {
108 public:
109  Subtitle ()
110  {}
111 
113  Subtitle (RawSubtitle s);
114 
119 
120  boost::optional<Time> fade_up;
121  boost::optional<Time> fade_down;
122 
123  std::vector<Line> lines;
124 
125  bool same_metadata (RawSubtitle) const;
126 };
127 
128 extern bool operator== (Subtitle const & a, Subtitle const & b);
129 
130 }
131 
132 #endif
A block of text within a subtitle's line.
Definition: subtitle.h:42
bool italic
true to use an italic version of font
Definition: subtitle.h:66
FontSize font_size
Definition: subtitle.h:59
bool bold
true to use a bold version of font
Definition: subtitle.h:65
bool underline
true to underline
Definition: subtitle.h:67
std::string text
Definition: subtitle.h:55
An RGB colour.
Definition: colour.h:36
A description of a font's size in one of a number of ways.
Definition: font_size.h:34
Definition: horizontal_position.h:28
A line of text within a subtitle.
Definition: subtitle.h:78
VerticalPosition vertical_position
Definition: subtitle.h:91
A bit of a subtitle, created with no regard for any nearby bits.
Definition: raw_subtitle.h:40
A subtitle which has been collected into lines and blocks.
Definition: subtitle.h:107
Time from
Definition: subtitle.h:116
Time to
Definition: subtitle.h:118
Definition: sub_time.h:29
Vertical position of the baseline of some text, expressed in one of a number of ways.
Definition: vertical_position.h:32
Colour class.