/*
- Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2020 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
#include "util.h"
#include "sub_assert.h"
#include "raw_convert.h"
+#include "ssa_reader.h"
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/regex.hpp>
RawSubtitle rs;
- /* This reader extracts no information about where the subtitle
- should be on screen, so its reference is TOP_OF_SUBTITLE.
- */
rs.vertical_position.line = 0;
rs.vertical_position.reference = TOP_OF_SUBTITLE;
rs.italic = false;
rs.underline = false;
rs.vertical_position.line = 0;
+ rs.vertical_position.reference = TOP_OF_SUBTITLE;
}
break;
case METADATA:
SUB_ASSERT (!colours.empty());
colours.pop_back ();
p.colour = colours.back ();
+ } else if (tag.size() > 0 && tag[0] == '\\') {
+ SSAReader::parse_style (p, tag, 288, 288);
}
tag.clear ();
state = TEXT;
/*
- Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2020 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
struct subrip_reader_convert_line_test;
struct subrip_reader_convert_time_test;
struct subrip_reader_test5;
+struct subrip_reader_test6;
namespace sub {
friend struct ::subrip_reader_convert_line_test;
friend struct ::subrip_reader_convert_time_test;
friend struct ::subrip_reader_test5;
+ friend struct ::subrip_reader_test6;
SubripReader () {}
Time convert_time (std::string t);
/* Alignments */
SUB_START (sub::Time::from_hms (0, 0, 9, 230), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::BOTTOM_OF_SCREEN, 0, sub::LEFT_OF_SCREEN);
BLOCK("bottom left", "Arial", 20, false, false, false);
SUB_END ();
SUB_END ();
SUB_START (sub::Time::from_hms (0, 0, 9, 250), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::BOTTOM_OF_SCREEN, 0, sub::RIGHT_OF_SCREEN);
BLOCK("bottom right", "Arial", 20, false, false, false);
SUB_END ();
SUB_START (sub::Time::from_hms (0, 0, 9, 260), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::LEFT_OF_SCREEN);
BLOCK("middle left", "Arial", 20, false, false, false);
SUB_END ();
SUB_END ();
SUB_START (sub::Time::from_hms (0, 0, 9, 280), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::RIGHT_OF_SCREEN);
BLOCK("middle right", "Arial", 20, false, false, false);
SUB_END ();
SUB_START (sub::Time::from_hms (0, 0, 9, 290), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::TOP_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::TOP_OF_SCREEN, 0, sub::LEFT_OF_SCREEN);
BLOCK("top left", "Arial", 20, false, false, false);
SUB_END ();
SUB_END ();
SUB_START (sub::Time::from_hms (0, 0, 9, 310), sub::Time::from_hms (0, 0, 11, 560));
- LINE (0, sub::TOP_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ LINE (0, sub::TOP_OF_SCREEN, 0, sub::RIGHT_OF_SCREEN);
BLOCK("top right", "Arial", 20, false, false, false);
SUB_END ();
/*
- Copyright (C) 2014-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2020 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
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
+ BOOST_REQUIRE (j->vertical_position.line);
BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 0);
BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
++j;
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
+ BOOST_REQUIRE (j->vertical_position.line);
BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 1);
BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
++i;
BOOST_CHECK_CLOSE (r._subs.front().colour.g, 2.0 / 255, 0.1);
BOOST_CHECK_CLOSE (r._subs.front().colour.b, 3.0 / 255, 0.1);
}
+
+/** Test alignment */
+BOOST_AUTO_TEST_CASE (subrip_reader_test6)
+{
+ sub::RawSubtitle rs;
+ rs.vertical_position.line = 0;
+ rs.vertical_position.reference = sub::TOP_OF_SUBTITLE;
+ sub::SubripReader r;
+ r.convert_line ("Hello world", rs);
+ BOOST_REQUIRE_EQUAL (r._subs.size(), 1);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world");
+ BOOST_REQUIRE (r._subs.front().vertical_position.line);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.line.get(), 0);
+ BOOST_REQUIRE (r._subs.front().vertical_position.reference);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.reference.get(), sub::TOP_OF_SUBTITLE);
+ r._subs.clear ();
+
+ rs = sub::RawSubtitle ();
+ rs.vertical_position.line = 0;
+ r.convert_line ("{\\an1}Hello", rs);
+ BOOST_REQUIRE_EQUAL (r._subs.size(), 1);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "Hello");
+ BOOST_REQUIRE (r._subs.front().vertical_position.line);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.line.get(), 0);
+ BOOST_REQUIRE (r._subs.front().vertical_position.reference);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.proportional, 0);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.reference, sub::LEFT_OF_SCREEN);
+ r._subs.clear ();
+
+ rs = sub::RawSubtitle ();
+ rs.vertical_position.line = 0;
+ r.convert_line ("{\\an2}to", rs);
+ BOOST_REQUIRE_EQUAL (r._subs.size(), 1);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "to");
+ BOOST_REQUIRE (r._subs.front().vertical_position.line);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.line.get(), 0);
+ BOOST_REQUIRE (r._subs.front().vertical_position.reference);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.proportional, 0);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.reference, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ r._subs.clear ();
+
+ rs = sub::RawSubtitle ();
+ rs.vertical_position.line = 0;
+ r.convert_line ("{\\an3}you", rs);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "you");
+ BOOST_REQUIRE (r._subs.front().vertical_position.line);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.line.get(), 0);
+ BOOST_REQUIRE (r._subs.front().vertical_position.reference);
+ BOOST_CHECK_EQUAL (r._subs.front().vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.proportional, 0);
+ BOOST_CHECK_EQUAL (r._subs.front().horizontal_position.reference, sub::RIGHT_OF_SCREEN);
+ r._subs.clear ();
+}
+