diff options
| -rw-r--r-- | src/subrip_reader.cc | 15 | ||||
| -rw-r--r-- | test/subrip_reader_test.cc | 11 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/subrip_reader.cc b/src/subrip_reader.cc index a59b43f..268582d 100644 --- a/src/subrip_reader.cc +++ b/src/subrip_reader.cc @@ -269,9 +269,16 @@ SubripReader::convert_line (string t, RawSubtitle& p) ++i; } ++i; - if (boost::regex_search (tag, match, re) && string (match[1]).size() == 6) { - p.colour = Colour::from_rgb_hex (match[1]); - colours.push_back (p.colour); + if (boost::regex_search(tag, match, re)) { + if (string(match[1]).size() == 6) { + p.colour = Colour::from_rgb_hex(match[1]); + colours.push_back(p.colour); + } else if (string(match[1]).size() == 8) { + p.colour = Colour::from_rgba_hex(match[1]); + colours.push_back(p.colour); + } else { + throw SubripError(tag, "a colour in the format #rrggbb #rrggbbaa or rgba(rr,gg,bb,aa)", _context); + } } else { re = boost::regex ( ".*color=\"rgba\\(" @@ -287,7 +294,7 @@ SubripReader::convert_line (string t, RawSubtitle& p) p.colour.b = raw_convert<int>(string(match[3])) / 255.0; colours.push_back (p.colour); } else { - throw SubripError (tag, "a colour in the format #rrggbb or rgba(rr,gg,bb,aa)", _context); + throw SubripError (tag, "a colour in the format #rrggbb #rrggbbaa or rgba(rr,gg,bb,aa)", _context); } } } else if (has_next(t, i, "</font>")) { diff --git a/test/subrip_reader_test.cc b/test/subrip_reader_test.cc index aa37602..dc9698d 100644 --- a/test/subrip_reader_test.cc +++ b/test/subrip_reader_test.cc @@ -397,6 +397,17 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) r._subs.clear (); rs = sub::RawSubtitle(); + r.convert_line("<font color=\"#0000ffdd\">some blue text with alpha</font>", rs); + BOOST_CHECK_EQUAL(r._subs.size(), 1); + i = r._subs.begin(); + BOOST_CHECK_EQUAL(i->text, "some blue text with alpha"); + BOOST_CHECK_EQUAL(i->bold, false); + BOOST_CHECK(fabs(i->colour.r) < 0.01); + BOOST_CHECK(fabs(i->colour.g) < 0.01); + BOOST_CHECK_CLOSE(i->colour.b, 1, 0.1); + r._subs.clear(); + + rs = sub::RawSubtitle(); r.convert_line ("<< angle brackets but no HTML >>", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); i = r._subs.begin (); |
