+
+/** Test reading of a .srt file with RTL text */
+BOOST_AUTO_TEST_CASE (subrip_reader_test4)
+{
+ boost::filesystem::path p = private_test / "rtl.srt";
+ FILE* f = fopen (p.string().c_str(), "r");
+ sub::SubripReader reader (f);
+ fclose (f);
+ auto subs = sub::collect<std::vector<sub::Subtitle>>(reader.subtitles());
+
+ auto i = subs.begin();
+ std::cout << i->lines.front().blocks.front().text << "\n";
+
+ std::string const t = i->lines.front().blocks.front().text;
+ for (size_t i = 0; i < t.length() - 2; ++i) {
+ /* Check that unicode U+202B (right-to-left embedding) has been stripped */
+ unsigned char const a = t[i];
+ unsigned char const b = t[i+1];
+ unsigned char const c = t[i+2];
+ BOOST_CHECK ((a != 0xe2 || b != 0x80 || c != 0xab));
+ }
+
+ BOOST_CHECK (t == "- \"(دريه فابينار)\"");
+}
+
+/** Test <font color="rgba(255,255,255,255)"> */
+BOOST_AUTO_TEST_CASE (subrip_reader_test5)
+{
+ sub::RawSubtitle rs;
+ sub::SubripReader r;
+ r.convert_line ("<font color=\"rgba(255,128,64,15)\">Foo bar</font>", rs);
+ BOOST_REQUIRE_EQUAL (r._subs.size(), 1);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "Foo bar");
+ BOOST_CHECK_CLOSE (r._subs.front().colour.r, 255.0 / 255, 0.1);
+ BOOST_CHECK_CLOSE (r._subs.front().colour.g, 128.0 / 255, 0.1);
+ BOOST_CHECK_CLOSE (r._subs.front().colour.b, 64.0 / 255, 0.1);
+ r._subs.clear ();
+
+ rs = sub::RawSubtitle ();
+ r.convert_line ("<font color=\"rgba(1, 2 , 3, 4)\">Foo bar</font>", rs);
+ BOOST_REQUIRE_EQUAL (r._subs.size(), 1);
+ BOOST_CHECK_EQUAL (r._subs.front().text, "Foo bar");
+ BOOST_CHECK_CLOSE (r._subs.front().colour.r, 1.0 / 255, 0.1);
+ 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 ();
+}
+
+
+BOOST_AUTO_TEST_CASE(subrip_with_unicode_line_separator_test)
+{
+ auto f = fopen ("test/data/newline.srt", "r");
+ BOOST_REQUIRE(f);
+ sub::SubripReader reader(f);
+ fclose(f);
+ auto subs = sub::collect<std::vector<sub::Subtitle>>(reader.subtitles());
+
+ BOOST_REQUIRE_EQUAL(subs.size(), 2U);
+
+ BOOST_REQUIRE_EQUAL(subs[0].lines.size(), 2U);
+ BOOST_REQUIRE_EQUAL(subs[0].lines[0].blocks.size(), 1U);
+ BOOST_CHECK_EQUAL(subs[0].lines[0].blocks[0].text, "Du fühlst dich danach besser.");
+ BOOST_REQUIRE_EQUAL(subs[0].lines[1].blocks.size(), 1U);
+ BOOST_CHECK_EQUAL(subs[0].lines[1].blocks[0].text, "Okay, Kleiner?");
+
+ BOOST_REQUIRE_EQUAL(subs[1].lines.size(), 2U);
+ BOOST_REQUIRE_EQUAL(subs[1].lines[0].blocks.size(), 1U);
+ BOOST_CHECK_EQUAL(subs[1].lines[0].blocks[0].text, "Sie kann es nicht machen");
+ BOOST_REQUIRE_EQUAL(subs[1].lines[1].blocks.size(), 1U);
+ BOOST_CHECK_EQUAL(subs[1].lines[1].blocks[0].text, "wenn du dich bewegst.");
+}
+