summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-11 22:27:27 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-11 22:27:27 +0100
commit7d06515b065e25e8e42e59dc0c35f994ddc06f04 (patch)
tree1ce067c1dafdced30936c8d7af2912b1eb909d88
parentfcc0539dcedfd6428ecdc717444c7d9d8e30e697 (diff)
Test and fix italic support in SSA.
-rw-r--r--src/ssa_reader.cc4
-rw-r--r--test/data/test.ssa1
-rw-r--r--test/ssa_reader_test.cc43
3 files changed, 44 insertions, 4 deletions
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<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;