From 4ada3e7583dfdc658dbebca3c3603be1e3477c12 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 6 Oct 2014 13:29:36 +0100 Subject: [PATCH] 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. --- src/collect.cc | 60 ---------------------------------- src/collect.h | 35 +++++++++++++++++++- src/dcp_reader.cc | 4 +-- src/metric_time.h | 8 +++++ src/stl_binary_reader.cc | 1 + src/stl_binary_writer.cc | 10 ++++-- src/stl_text_reader.cc | 1 + src/subrip_reader.cc | 4 +-- src/vertical_position.cc | 4 +-- src/vertical_position.h | 6 ++-- src/vertical_reference.cc | 6 ++-- src/vertical_reference.h | 7 ++-- src/wscript | 1 - test/dcp_reader_test.cc | 58 ++++++++++++++++---------------- test/dcp_to_stl_binary_test.cc | 5 +-- test/stl_binary_writer_test.cc | 3 ++ test/stl_text_reader_test.cc | 2 +- test/subrip_reader_test.cc | 15 +++++---- tools/dumpsubs.cc | 2 +- 19 files changed, 112 insertions(+), 120 deletions(-) delete mode 100644 src/collect.cc 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 - - 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 -sub::collect (list raw) -{ - raw.sort (); - - list out; - - optional current; - for (list::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 collect (std::list); +template +T +collect (std::list raw) +{ + raw.sort (); + + T out; + + boost::optional current; + for (std::list::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 node) - : v_align (CENTRE) + : v_align (CENTRE_OF_SCREEN) { text = node->content (); v_position = node->number_attribute ("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 support */ /* XXX: nesting of tags e.g. foobarbazfredjim 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 proportional; - /** reference position for proportional */ - boost::optional reference; - /** line number from the top of the screen */ + /** line number offset from some reference point */ boost::optional line; + /** reference point */ + boost::optional 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 subs = sub::collect (reader.subtitles ()); + list subs = sub::collect > (reader.subtitles ()); list::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 subs = collect (reader.subtitles ()); + list subs = sub::collect > (reader.subtitles ()); list::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 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 > (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 > (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 subs = sub::collect (reader.subtitles ()); + list subs = sub::collect > (reader.subtitles ()); list::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 subs = sub::collect (reader.subtitles ()); + list subs = sub::collect > (reader.subtitles ()); list::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::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 subs = sub::collect (reader.subtitles ()); + list subs = sub::collect > (reader.subtitles ()); list::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 subs = collect (reader->subtitles ()); + list subs = collect > (reader->subtitles ()); for (list::const_iterator i = subs.begin(); i != subs.end(); ++i) { cout << "Subtitle at " << i->from << " -> " << i->to << "\n"; for (list::const_iterator j = i->lines.begin(); j != i->lines.end(); ++j) { -- 2.30.2