summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-10-06 13:29:36 +0100
committerCarl Hetherington <cth@carlh.net>2014-10-06 13:29:36 +0100
commit4ada3e7583dfdc658dbebca3c3603be1e3477c12 (patch)
tree0516fdd142b79e7083ed3d455fe45fffce26a9a8
parent86440b2afe0a2b83a7e810f37b1f65dbddee90e8 (diff)
Template-ize collect so that any container can be used.
Add new vertical reference of TOP_OF_SUBTITLE, and use references with line numbers as well as proportional specifiers. Add a couple of methods to MetricTime.
-rw-r--r--src/collect.cc60
-rw-r--r--src/collect.h35
-rw-r--r--src/dcp_reader.cc4
-rw-r--r--src/metric_time.h8
-rw-r--r--src/stl_binary_reader.cc1
-rw-r--r--src/stl_binary_writer.cc10
-rw-r--r--src/stl_text_reader.cc1
-rw-r--r--src/subrip_reader.cc4
-rw-r--r--src/vertical_position.cc4
-rw-r--r--src/vertical_position.h6
-rw-r--r--src/vertical_reference.cc6
-rw-r--r--src/vertical_reference.h7
-rw-r--r--src/wscript1
-rw-r--r--test/dcp_reader_test.cc58
-rw-r--r--test/dcp_to_stl_binary_test.cc5
-rw-r--r--test/stl_binary_writer_test.cc3
-rw-r--r--test/stl_text_reader_test.cc2
-rw-r--r--test/subrip_reader_test.cc15
-rw-r--r--tools/dumpsubs.cc2
19 files changed, 112 insertions, 120 deletions
diff --git a/src/collect.cc b/src/collect.cc
deleted file mode 100644
index 0f592d4..0000000
--- a/src/collect.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "raw_subtitle.h"
-#include "subtitle.h"
-#include "collect.h"
-
-using std::list;
-using boost::optional;
-using namespace sub;
-
-list<Subtitle>
-sub::collect (list<RawSubtitle> raw)
-{
- raw.sort ();
-
- list<Subtitle> out;
-
- optional<Subtitle> current;
- for (list<RawSubtitle>::const_iterator i = raw.begin (); i != raw.end(); ++i) {
- if (current && current->same_metadata (*i)) {
- /* This RawSubtitle can be added to current... */
- if (!current->lines.empty() && current->lines.back().same_metadata (*i)) {
- /* ... and indeed to its last line */
- current->lines.back().blocks.push_back (Block (*i));
- } else {
- /* ... as a new line */
- current->lines.push_back (Line (*i));
- }
- } else {
- /* We must start a new Subtitle */
- if (current) {
- out.push_back (current.get ());
- }
- current = Subtitle (*i);
- }
- }
-
- if (current) {
- out.push_back (current.get ());
- }
-
- return out;
-}
diff --git a/src/collect.h b/src/collect.h
index 62e872f..ff43ce0 100644
--- a/src/collect.h
+++ b/src/collect.h
@@ -22,6 +22,39 @@
namespace sub {
-std::list<Subtitle> collect (std::list<RawSubtitle>);
+template <class T>
+T
+collect (std::list<RawSubtitle> raw)
+{
+ raw.sort ();
+
+ T out;
+
+ boost::optional<Subtitle> current;
+ for (std::list<RawSubtitle>::const_iterator i = raw.begin (); i != raw.end(); ++i) {
+ if (current && current->same_metadata (*i)) {
+ /* This RawSubtitle can be added to current... */
+ if (!current->lines.empty() && current->lines.back().same_metadata (*i)) {
+ /* ... and indeed to its last line */
+ current->lines.back().blocks.push_back (Block (*i));
+ } else {
+ /* ... as a new line */
+ current->lines.push_back (Line (*i));
+ }
+ } else {
+ /* We must start a new Subtitle */
+ if (current) {
+ out.push_back (current.get ());
+ }
+ current = Subtitle (*i);
+ }
+ }
+
+ if (current) {
+ out.push_back (current.get ());
+ }
+
+ return out;
+}
}
diff --git a/src/dcp_reader.cc b/src/dcp_reader.cc
index b938b6c..3634d93 100644
--- a/src/dcp_reader.cc
+++ b/src/dcp_reader.cc
@@ -47,11 +47,11 @@ class DCPText
public:
DCPText ()
: v_position (0)
- , v_align (TOP)
+ , v_align (TOP_OF_SCREEN)
{}
DCPText (shared_ptr<const cxml::Node> node)
- : v_align (CENTRE)
+ : v_align (CENTRE_OF_SCREEN)
{
text = node->content ();
v_position = node->number_attribute<float> ("VPosition");
diff --git a/src/metric_time.h b/src/metric_time.h
index 86c1923..404464e 100644
--- a/src/metric_time.h
+++ b/src/metric_time.h
@@ -42,6 +42,14 @@ public:
int seconds () const;
int milliseconds () const;
+ double all_as_seconds () const {
+ return all_as_milliseconds() / 1000.0;
+ }
+
+ int64_t all_as_milliseconds () const {
+ return _ms;
+ }
+
void add (MetricTime t);
void scale (float f);
diff --git a/src/stl_binary_reader.cc b/src/stl_binary_reader.cc
index dd0020f..ff3d9a0 100644
--- a/src/stl_binary_reader.cc
+++ b/src/stl_binary_reader.cc
@@ -98,6 +98,7 @@ STLBinaryReader::STLBinaryReader (istream& in)
sub.from.set_frame (get_timecode (5));
sub.to.set_frame (get_timecode (9));
sub.vertical_position.line = get_int (13, 1) + i;
+ sub.vertical_position.reference = TOP_OF_SCREEN;
string text;
for (size_t j = 0; j < lines[i].size(); ++j) {
diff --git a/src/stl_binary_writer.cc b/src/stl_binary_writer.cc
index 9b98b84..0ebdc2c 100644
--- a/src/stl_binary_writer.cc
+++ b/src/stl_binary_writer.cc
@@ -135,18 +135,22 @@ sub::write_stl_binary (
if (j->vertical_position.proportional) {
switch (j->vertical_position.reference.get ()) {
- case TOP:
+ case TOP_OF_SCREEN:
check_top.insert (j->vertical_position.proportional.get ());
break;
- case CENTRE:
+ case CENTRE_OF_SCREEN:
check_centre.insert (j->vertical_position.proportional.get ());
break;
- case BOTTOM:
+ case BOTTOM_OF_SCREEN:
check_bottom.insert (j->vertical_position.proportional.get ());
break;
+ case TOP_OF_SUBTITLE:
+ /* XXX: something needs to be done here */
+ break;
}
} else {
check_rows.insert (j->vertical_position.line.get ());
+ /* XXX: this needs to take vertical_position.reference into account */
}
}
}
diff --git a/src/stl_text_reader.cc b/src/stl_text_reader.cc
index 7eaa24b..3c60e41 100644
--- a/src/stl_text_reader.cc
+++ b/src/stl_text_reader.cc
@@ -39,6 +39,7 @@ using namespace sub;
STLTextReader::STLTextReader (istream& in)
{
_subtitle.vertical_position.line = 0;
+ _subtitle.vertical_position.reference = TOP_OF_SCREEN;
while (in.good ()) {
string line;
diff --git a/src/subrip_reader.cc b/src/subrip_reader.cc
index 2728d20..8bd2005 100644
--- a/src/subrip_reader.cc
+++ b/src/subrip_reader.cc
@@ -131,8 +131,8 @@ SubripReader::convert_line (string t, int line_number, TimePair from, TimePair t
p.font_size.set_points (48);
p.from = from;
p.to = to;
- p.vertical_position.proportional = 0.7 + line_number * 0.1;
- p.vertical_position.reference = TOP;
+ p.vertical_position.line = line_number;
+ p.vertical_position.reference = TOP_OF_SUBTITLE;
/* XXX: missing <font> support */
/* XXX: nesting of tags e.g. <b>foo<i>bar<b>baz</b>fred</i>jim</b> might
diff --git a/src/vertical_position.cc b/src/vertical_position.cc
index 3984568..1fdb1e1 100644
--- a/src/vertical_position.cc
+++ b/src/vertical_position.cc
@@ -26,8 +26,8 @@ VerticalPosition::operator== (VerticalPosition const & other) const
{
if (proportional && reference && other.proportional && other.reference) {
return proportional.get() == other.proportional.get() && reference.get() == other.reference.get();
- } else if (line && other.line) {
- return line.get() == other.line.get();
+ } else if (reference && line && other.reference && other.line) {
+ return line.get() == other.line.get() && reference.get() == other.reference.get();
}
return false;
diff --git a/src/vertical_position.h b/src/vertical_position.h
index 6a0fff4..1d0b939 100644
--- a/src/vertical_position.h
+++ b/src/vertical_position.h
@@ -33,10 +33,10 @@ class VerticalPosition
public:
/** as a proportion of screen height offset from some reference point */
boost::optional<float> proportional;
- /** reference position for proportional */
- boost::optional<VerticalReference> reference;
- /** line number from the top of the screen */
+ /** line number offset from some reference point */
boost::optional<int> line;
+ /** reference point */
+ boost::optional<VerticalReference> reference;
bool operator== (VerticalPosition const & other) const;
diff --git a/src/vertical_reference.cc b/src/vertical_reference.cc
index 69f9d84..3f9219b 100644
--- a/src/vertical_reference.cc
+++ b/src/vertical_reference.cc
@@ -28,11 +28,11 @@ VerticalReference
sub::string_to_vertical_reference (string s)
{
if (s == "top") {
- return TOP;
+ return TOP_OF_SCREEN;
} else if (s == "center") {
- return CENTRE;
+ return CENTRE_OF_SCREEN;
} else if (s == "bottom") {
- return BOTTOM;
+ return BOTTOM_OF_SCREEN;
}
throw XMLError ("unknown subtitle valign type");
diff --git a/src/vertical_reference.h b/src/vertical_reference.h
index 52cf840..4bdcde8 100644
--- a/src/vertical_reference.h
+++ b/src/vertical_reference.h
@@ -26,9 +26,10 @@ namespace sub {
enum VerticalReference
{
- TOP,
- CENTRE,
- BOTTOM
+ TOP_OF_SCREEN,
+ CENTRE_OF_SCREEN,
+ BOTTOM_OF_SCREEN,
+ TOP_OF_SUBTITLE
};
VerticalReference string_to_vertical_reference (std::string s);
diff --git a/src/wscript b/src/wscript
index cdc9c3f..58434b2 100644
--- a/src/wscript
+++ b/src/wscript
@@ -11,7 +11,6 @@ def build(bld):
obj.uselib = 'CXML BOOST_FILESYSTEM BOOST_LOCALE'
obj.export_includes = ['.']
obj.source = """
- collect.cc
colour.cc
dcp_reader.cc
effect.cc
diff --git a/test/dcp_reader_test.cc b/test/dcp_reader_test.cc
index c73207e..5da9bf0 100644
--- a/test/dcp_reader_test.cc
+++ b/test/dcp_reader_test.cc
@@ -32,7 +32,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
{
ifstream file ("test/data/test1.xml");
sub::DCPReader reader (file);
- list<sub::Subtitle> subs = sub::collect (reader.subtitles ());
+ list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
list<sub::Subtitle>::iterator i = subs.begin ();
BOOST_CHECK (i != subs.end ());
@@ -51,7 +51,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "My jacket was Idi Amin's");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -77,7 +77,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.21, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "My corset was H.M. The Queen's");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -91,7 +91,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "My large wonderbra");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -117,7 +117,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Once belonged to the Shah");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -143,7 +143,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test1)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "And these are Roy Hattersley's jeans");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -158,7 +158,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
{
ifstream file ("test/data/test2.xml");
sub::DCPReader reader (file);
- list<sub::Subtitle> subs = collect (reader.subtitles ());
+ list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
list<sub::Subtitle>::iterator i = subs.begin ();
BOOST_CHECK (i != subs.end ());
@@ -177,7 +177,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "At afternoon tea with John Peel");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -191,7 +191,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "I enquired if his accent was real");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -217,7 +217,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "He said \"out of the house");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -231,7 +231,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "I'm incredibly scouse");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "At home it depends how I feel.\"");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -273,7 +273,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 2, 208 * 4));
BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 4, 10 * 4));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "I spent a long weekend in Brighton");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -301,7 +301,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "With the legendary Miss Enid Blyton");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -315,7 +315,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "She said \"you be Noddy");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -341,7 +341,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "and I'll show you my body\"");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -355,7 +355,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "But Big Ears kept turning the light on.");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -381,7 +381,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "That curious creature the Sphinx");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -395,7 +395,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Is smarter than anyone thinks");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -421,7 +421,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "It sits there and smirks");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -435,7 +435,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "And you don't think it works");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -461,7 +461,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Then when you're not looking, it winks.");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -475,7 +475,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "When it snows you will find Sister Sledge");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -501,7 +501,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Out mooning, at night, on the ledge");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -515,7 +515,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "One storey down");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -541,7 +541,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Is the maestro, James Brown");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -555,7 +555,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "Displaying his meat and two veg.");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -581,7 +581,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "HELLO");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
@@ -595,7 +595,7 @@ BOOST_AUTO_TEST_CASE (dcp_reader_test2)
BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
BOOST_CHECK_EQUAL (b.text, "WORLD");
BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
diff --git a/test/dcp_to_stl_binary_test.cc b/test/dcp_to_stl_binary_test.cc
index 2d82645..9512262 100644
--- a/test/dcp_to_stl_binary_test.cc
+++ b/test/dcp_to_stl_binary_test.cc
@@ -25,6 +25,7 @@
#include <fstream>
using std::ifstream;
+using std::list;
BOOST_AUTO_TEST_CASE (dcp_to_stl_binary_test1)
{
@@ -35,7 +36,7 @@ BOOST_AUTO_TEST_CASE (dcp_to_stl_binary_test1)
boost::filesystem::path p = private_test / "fd586c30-6d38-48f2-8241-27359acf184c_sub.xml";
ifstream f (p.string().c_str ());
sub::write_stl_binary (
- sub::collect (sub::DCPReader(f).subtitles ()),
+ sub::collect<list<sub::Subtitle> > (sub::DCPReader(f).subtitles ()),
25,
sub::LANGUAGE_FRENCH,
"", "",
@@ -63,7 +64,7 @@ BOOST_AUTO_TEST_CASE (dcp_to_stl_binary_test2)
boost::filesystem::path p = private_test / "93e8a6bf-499e-4d36-9350-a9bfa2e6758a_sub.xml";
ifstream f (p.string().c_str ());
sub::write_stl_binary (
- sub::collect (sub::DCPReader(f).subtitles ()),
+ sub::collect<list<sub::Subtitle> > (sub::DCPReader(f).subtitles ()),
25,
sub::LANGUAGE_FRENCH,
"", "",
diff --git a/test/stl_binary_writer_test.cc b/test/stl_binary_writer_test.cc
index 05b2cac..90142a7 100644
--- a/test/stl_binary_writer_test.cc
+++ b/test/stl_binary_writer_test.cc
@@ -40,6 +40,7 @@ BOOST_AUTO_TEST_CASE (stl_binary_writer_test)
b.font_size.set_points (42);
sub::Line l;
l.vertical_position.line = 0;
+ l.vertical_position.reference = sub::TOP_OF_SCREEN;
l.blocks.push_back (b);
s.lines.push_back (l);
}
@@ -51,6 +52,7 @@ BOOST_AUTO_TEST_CASE (stl_binary_writer_test)
b.font_size.set_points (42);
sub::Line l;
l.vertical_position.line = 1;
+ l.vertical_position.reference = sub::TOP_OF_SCREEN;
l.blocks.push_back (b);
s.lines.push_back (l);
}
@@ -65,6 +67,7 @@ BOOST_AUTO_TEST_CASE (stl_binary_writer_test)
sub::Line l;
l.vertical_position.line = 0;
+ l.vertical_position.reference = sub::TOP_OF_SCREEN;
sub::Block b;
b.text = "This is some ";
diff --git a/test/stl_text_reader_test.cc b/test/stl_text_reader_test.cc
index be58472..b21ecee 100644
--- a/test/stl_text_reader_test.cc
+++ b/test/stl_text_reader_test.cc
@@ -32,7 +32,7 @@ BOOST_AUTO_TEST_CASE (stl_text_reader_test)
{
ifstream file ("test/data/test_text.stl");
sub::STLTextReader reader (file);
- list<sub::Subtitle> subs = sub::collect (reader.subtitles ());
+ list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
list<sub::Subtitle>::iterator i = subs.begin ();
diff --git a/test/subrip_reader_test.cc b/test/subrip_reader_test.cc
index e7680a9..42eacfb 100644
--- a/test/subrip_reader_test.cc
+++ b/test/subrip_reader_test.cc
@@ -35,7 +35,7 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test)
FILE* f = fopen ("test/data/test.srt", "r");
sub::SubripReader reader (f);
fclose (f);
- list<sub::Subtitle> subs = sub::collect (reader.subtitles ());
+ list<sub::Subtitle> subs = sub::collect<std::list<sub::Subtitle> > (reader.subtitles ());
list<sub::Subtitle>::iterator i = subs.begin ();
@@ -56,8 +56,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test)
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
- BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.7, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 0);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
++j;
BOOST_CHECK (j != i->lines.end ());
@@ -69,8 +69,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test)
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
- BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.8, 1);
- BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP);
+ BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 1);
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
++i;
@@ -83,7 +83,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test)
BOOST_CHECK_EQUAL (i->lines.size(), 1);
sub::Line l = i->lines.front ();
BOOST_CHECK_EQUAL (l.blocks.size(), 7);
- BOOST_CHECK_CLOSE (l.vertical_position.proportional.get(), 0.7, 1);
+ BOOST_CHECK_EQUAL (l.vertical_position.line.get(), 0);
+ BOOST_CHECK_EQUAL (l.vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
list<sub::Block>::iterator k = l.blocks.begin ();
@@ -159,7 +160,7 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test2)
FILE* f = fopen ("test/data/test2.srt", "r");
sub::SubripReader reader (f);
fclose (f);
- list<sub::Subtitle> subs = sub::collect (reader.subtitles ());
+ list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
list<sub::Subtitle>::const_iterator i = subs.begin();
diff --git a/tools/dumpsubs.cc b/tools/dumpsubs.cc
index ac582e6..7203078 100644
--- a/tools/dumpsubs.cc
+++ b/tools/dumpsubs.cc
@@ -82,7 +82,7 @@ main (int argc, char* argv[])
cout << i->first << ": " << i->second << "\n";
}
- list<sub::Subtitle> subs = collect (reader->subtitles ());
+ list<sub::Subtitle> subs = collect<list<sub::Subtitle> > (reader->subtitles ());
for (list<sub::Subtitle>::const_iterator i = subs.begin(); i != subs.end(); ++i) {
cout << "Subtitle at " << i->from << " -> " << i->to << "\n";
for (list<sub::Line>::const_iterator j = i->lines.begin(); j != i->lines.end(); ++j) {