summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-02-24 22:32:13 +0100
committerCarl Hetherington <cth@carlh.net>2023-02-24 22:32:13 +0100
commit5be50d30b8c5360e0b197b708133165095feefc4 (patch)
tree11732e8db03bba9a963e1f7638ea7ecf55f693a5
parenta67eacd9def1b85e7dd79ec192bb975369567bd6 (diff)
Support font color attributes with alpha channel (even if it's ignored).v1.6.43
-rw-r--r--src/subrip_reader.cc15
-rw-r--r--test/subrip_reader_test.cc11
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 ();