From: Carl Hetherington Date: Sat, 11 Jun 2016 21:27:27 +0000 (+0100) Subject: Test and fix italic support in SSA. X-Git-Tag: v1.1.13~14 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=7d06515b065e25e8e42e59dc0c35f994ddc06f04;p=libsub.git Test and fix italic support in SSA. --- diff --git a/src/ssa_reader.cc b/src/ssa_reader.cc index b3df458..d3555cb 100644 --- a/src/ssa_reader.cc +++ b/src/ssa_reader.cc @@ -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 = ""; diff --git a/test/data/test.ssa b/test/data/test.ssa index 8ff209d..a0cc0a4 100644 --- a/test/data/test.ssa +++ b/test/data/test.ssa @@ -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. diff --git a/test/ssa_reader_test.cc b/test/ssa_reader_test.cc index 3c958f2..333d5fd 100644 --- a/test/ssa_reader_test.cc +++ b/test/ssa_reader_test.cc @@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE (ssa_reader_test) BOOST_AUTO_TEST_CASE (ssa_reader_line_test1) { sub::RawSubtitle base; - list r = sub::SSAReader::parse_line (base, "This is a line with some {i1}italics{i0} and then\\nthere is a new line."); + list r = sub::SSAReader::parse_line (base, "This is a line with some {\\i1}italics{\\i0} and then\\nthere is a new line."); list::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 r = sub::SSAReader::parse_line (base, "{i1}It's all just italics{i0}"); + list r = sub::SSAReader::parse_line (base, "{\\i1}It's all just italics{\\i0}"); list::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::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::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;