Test and fix italic support in SSA.
authorCarl Hetherington <cth@carlh.net>
Sat, 11 Jun 2016 21:27:27 +0000 (22:27 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 11 Jun 2016 21:27:27 +0000 (22:27 +0100)
src/ssa_reader.cc
test/data/test.ssa
test/ssa_reader_test.cc

index b3df458199df5a3bebc9e18067befd8a1341e8c7..d3555cbb85b9bcc71b46d4f0f417c7545ec9ef33 100644 (file)
@@ -235,9 +235,9 @@ SSAReader::parse_line (RawSubtitle base, string line)
                                        subs.push_back (current);
                                        current.text = "";
                                }
-                               if (style == "i1") {
+                               if (style == "\\i1") {
                                        current.italic = true;
-                               } else if (style == "i0") {
+                               } else if (style == "\\i0" || style == "\\i") {
                                        current.italic = false;
                                }
                                style = "";
index 8ff209d29b3c4a5d23662b4f3e49b54b2c3a3650..a0cc0a4a4f6ce147bb9fa477e1cb00ed2c4ac935 100644 (file)
@@ -18,3 +18,4 @@ Style: Default,Arial,20,16777215,255,0,0,0,0,1,2,2,2,10,10,10,0,1
 Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
 Dialogue: Marked=0,0:00:01.23,0:00:04.55,Default,,0,0,0,,Hello world
 Dialogue: Marked=0,0:00:05.74,0:00:11.00,Default,,0,0,900,,This is vertically moved\nand has two lines.
+Dialogue: Marked=0,0:00:07.74,0:00:09.00,Default,,0,0,0,,Some {\i1}italics{\i} are here.
index 3c958f262b9bf6a1bc48dc4198cecb5dad882760..333d5fd8388d6f8c0e9327cff76b06129342f730 100644 (file)
@@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test)
 BOOST_AUTO_TEST_CASE (ssa_reader_line_test1)
 {
        sub::RawSubtitle base;
-       list<sub::RawSubtitle> r = sub::SSAReader::parse_line (base, "This is a line with some {i1}italics{i0} and then\\nthere is a new line.");
+       list<sub::RawSubtitle> r = sub::SSAReader::parse_line (base, "This is a line with some {\\i1}italics{\\i0} and then\\nthere is a new line.");
 
        list<sub::RawSubtitle>::const_iterator i = r.begin ();
        BOOST_CHECK_EQUAL (i->text, "This is a line with some ");
@@ -101,7 +101,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_line_test1)
 BOOST_AUTO_TEST_CASE (ssa_reader_line_test2)
 {
        sub::RawSubtitle base;
-       list<sub::RawSubtitle> r = sub::SSAReader::parse_line (base, "{i1}It's all just italics{i0}");
+       list<sub::RawSubtitle> r = sub::SSAReader::parse_line (base, "{\\i1}It's all just italics{\\i0}");
 
        list<sub::RawSubtitle>::const_iterator i = r.begin ();
        BOOST_CHECK_EQUAL (i->text, "It's all just italics");
@@ -137,6 +137,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test3)
 
        list<sub::Subtitle>::iterator i = subs.begin ();
 
+       /* Hello world */
        BOOST_REQUIRE (i != subs.end ());
        BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 1, 230));
        BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 4, 550));
@@ -156,6 +157,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test3)
        BOOST_CHECK_EQUAL (b.underline, false);
        ++i;
 
+       /* This is vertically moved\nand has two lines. */
        BOOST_REQUIRE (i != subs.end ());
        BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 5, 740));
        BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 11, 0));
@@ -178,6 +180,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test3)
        BOOST_CHECK_EQUAL (b.italic, false);
        BOOST_CHECK_EQUAL (b.underline, false);
        ++j;
+
        BOOST_CHECK (fabs (j->vertical_position.proportional.get() - (900.0 / 1080)) < 1e-5);
        BOOST_CHECK (j->vertical_position.reference);
        BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
@@ -190,6 +193,42 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test3)
        BOOST_CHECK_EQUAL (b.italic, false);
        BOOST_CHECK_EQUAL (b.underline, false);
        ++j;
+       ++i;
+
+       /* Some {\i1}italics{\i} are here. */
+       BOOST_REQUIRE (i != subs.end ());
+       BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 7, 740));
+       BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 9, 0));
+       j = i->lines.begin();
+       BOOST_REQUIRE (j != i->lines.end ());
+       BOOST_CHECK (j->vertical_position.proportional);
+       BOOST_CHECK_EQUAL (j->vertical_position.proportional.get(), 0);
+       BOOST_CHECK (j->vertical_position.reference);
+       BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
+       BOOST_REQUIRE_EQUAL (j->blocks.size(), 3);
+       list<sub::Block>::const_iterator bi = j->blocks.begin ();
+       BOOST_CHECK_EQUAL (bi->text, "Some ");
+       BOOST_CHECK_EQUAL (bi->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (bi->font_size.points().get(), 20);
+       BOOST_CHECK_EQUAL (bi->bold, false);
+       BOOST_CHECK_EQUAL (bi->italic, false);
+       BOOST_CHECK_EQUAL (bi->underline, false);
+       ++bi;
+       BOOST_CHECK_EQUAL (bi->text, "italics");
+       BOOST_CHECK_EQUAL (bi->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (bi->font_size.points().get(), 20);
+       BOOST_CHECK_EQUAL (bi->bold, false);
+       BOOST_CHECK_EQUAL (bi->italic, true);
+       BOOST_CHECK_EQUAL (bi->underline, false);
+       ++bi;
+       BOOST_CHECK_EQUAL (bi->text, " are here.");
+       BOOST_CHECK_EQUAL (bi->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (bi->font_size.points().get(), 20);
+       BOOST_CHECK_EQUAL (bi->bold, false);
+       BOOST_CHECK_EQUAL (bi->italic, false);
+       BOOST_CHECK_EQUAL (bi->underline, false);
+       ++bi;
+       ++j;
        BOOST_REQUIRE (j == i->lines.end());
        ++i;