Ignore newlines in subtitle text (#2341).
authorCarl Hetherington <cth@carlh.net>
Fri, 16 Jun 2023 22:03:51 +0000 (00:03 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 3 Sep 2023 18:43:51 +0000 (20:43 +0200)
src/lib/render_text.cc
test/data
test/render_subtitles_test.cc

index 8e5acc0ff89cd6bdc1e0f543e409b5a5481dc10e..870f3045d31340fb692c98cb65d8c858d6c4b38f 100644 (file)
@@ -104,6 +104,7 @@ marked_up(vector<StringText> subtitles, int target_height, float fade_factor, st
                boost::algorithm::replace_all(text, "&", "&amp;");
                boost::algorithm::replace_all(text, "<", "&lt;");
                boost::algorithm::replace_all(text, ">", "&gt;");
+               boost::algorithm::replace_all(text, "\n", "");
 
                span += text;
                span += "</span>";
index dab44217068e681f3bfded6a8d71a54867b1cf9e..b6d209730b870fec225a375c9b19350cd7f6724d 160000 (submodule)
--- a/test/data
+++ b/test/data
@@ -1 +1 @@
-Subproject commit dab44217068e681f3bfded6a8d71a54867b1cf9e
+Subproject commit b6d209730b870fec225a375c9b19350cd7f6724d
index 02323756802c2ca21c7464463183c6b980338098..5672230da44a17b1b1aea81ca729715b8f16a565 100644 (file)
 #include "lib/image_png.h"
 #include "lib/render_text.h"
 #include "lib/string_text.h"
+#include "test.h"
 #include <dcp/subtitle_string.h>
 #include <boost/test/unit_test.hpp>
 
 
+using std::make_shared;
 using std::shared_ptr;
 
 
@@ -120,6 +122,54 @@ BOOST_AUTO_TEST_CASE (marked_up_test6)
 }
 
 
+BOOST_AUTO_TEST_CASE(render_text_with_newline_test)
+{
+       std::list<dcp::SubtitleString> ss = {
+               {
+                       {}, true, false, false, dcp::Colour(255, 255, 255), 42, 1.0,
+                       dcp::Time(0, 0, 0, 0, 24), dcp::Time(0, 0, 1, 0, 24),
+                       0.5, dcp::HAlign::CENTER,
+                       0.5, dcp::VAlign::CENTER,
+                       0.0,
+                       dcp::Direction::LTR,
+                       "Hello                     world",
+                       dcp::Effect::NONE, dcp::Colour(0, 0, 0),
+                       {}, {},
+                       0
+               },
+               {
+                       {}, true, false, false, dcp::Colour(255, 255, 255), 42, 1.0,
+                       dcp::Time(0, 0, 0, 0, 24), dcp::Time(0, 0, 1, 0, 24),
+                       0.5, dcp::HAlign::CENTER,
+                       0.5, dcp::VAlign::CENTER,
+                       0.0,
+                       dcp::Direction::LTR,
+                       "\n",
+                       dcp::Effect::NONE, dcp::Colour(0, 0, 0),
+                       {}, {},
+                       0
+               }
+       };
+
+       std::vector<StringText> st;
+       for (auto i: ss) {
+               st.push_back({i, 0, make_shared<dcpomatic::Font>("foo"), dcp::SubtitleStandard::SMPTE_2014});
+       }
+
+       auto images = render_text(st, dcp::Size(1998, 1080), {}, 24);
+
+       BOOST_CHECK_EQUAL(images.size(), 1U);
+       image_as_png(Image::ensure_alignment(images.front().image, Image::Alignment::PADDED)).write("build/test/render_text_with_newline_test.png");
+#if defined(DCPOMATIC_OSX)
+       check_image("test/data/mac/render_text_with_newline_test.png", "build/test/render_text_with_newline_test.png");
+#elif defined(DCPOMATIC_WINDOWS)
+       check_image("test/data/windows/render_text_with_newline_test.png", "build/test/render_text_with_newline_test.png");
+#else
+       check_image("test/data/render_text_with_newline_test.png", "build/test/render_text_with_newline_test.png");
+#endif
+}
+
+
 #if 0
 
 BOOST_AUTO_TEST_CASE (render_text_test)