Some const correctness.
[dcpomatic.git] / src / lib / text_decoder.cc
index 099e3ee74e34af098188c8e3c8b6b51111c03f74..8111154e348f00b619e0f81229f3d9e7b04993a2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -18,6 +18,7 @@
 
 */
 
+
 #include "text_decoder.h"
 #include "text_content.h"
 #include "util.h"
@@ -27,6 +28,7 @@
 #include <boost/algorithm/string.hpp>
 #include <iostream>
 
+
 using std::list;
 using std::cout;
 using std::string;
@@ -34,9 +36,10 @@ using std::min;
 using std::max;
 using std::shared_ptr;
 using boost::optional;
-using boost::function;
+using std::function;
 using namespace dcpomatic;
 
+
 TextDecoder::TextDecoder (
        Decoder* parent,
        shared_ptr<const TextContent> c,
@@ -49,6 +52,7 @@ TextDecoder::TextDecoder (
 
 }
 
+
 /** Called by subclasses when an image subtitle is starting.
  *  @param from From time of the subtitle.
  *  @param image Subtitle image.
@@ -57,20 +61,22 @@ TextDecoder::TextDecoder (
  *  of the video frame)
  */
 void
-TextDecoder::emit_bitmap_start (ContentTime from, shared_ptr<Image> image, dcpomatic::Rect<double> rect)
+TextDecoder::emit_bitmap_start (ContentTime from, shared_ptr<const Image> image, dcpomatic::Rect<double> rect)
 {
        BitmapStart (ContentBitmapText (from, image, rect));
        _position = from;
 }
 
+
 void
 TextDecoder::emit_plain_start (ContentTime from, list<dcp::SubtitleString> s)
 {
        for (auto& i: s) {
-               /* We must escape < and > in strings, otherwise they might confuse our subtitle
-                  renderer (which uses some HTML-esque markup to do bold/italic etc.)
+               /* We must escape some things, otherwise they might confuse our subtitle
+                  renderer (which uses entities and some HTML-esque markup to do bold/italic etc.)
                */
                string t = i.text ();
+               boost::algorithm::replace_all (t, "&", "&amp;");
                boost::algorithm::replace_all (t, "<", "&lt;");
                boost::algorithm::replace_all (t, ">", "&gt;");
                i.set_text (t);
@@ -97,6 +103,7 @@ TextDecoder::emit_plain_start (ContentTime from, list<dcp::SubtitleString> s)
        _position = from;
 }
 
+
 void
 TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle)
 {
@@ -250,12 +257,14 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle)
        emit_plain_start (from, out);
 }
 
+
 void
 TextDecoder::emit_stop (ContentTime to)
 {
        Stop (to);
 }
 
+
 void
 TextDecoder::emit_plain (ContentTimePeriod period, list<dcp::SubtitleString> s)
 {
@@ -263,6 +272,7 @@ TextDecoder::emit_plain (ContentTimePeriod period, list<dcp::SubtitleString> s)
        emit_stop (period.to);
 }
 
+
 void
 TextDecoder::emit_plain (ContentTimePeriod period, sub::Subtitle const & s)
 {
@@ -270,17 +280,19 @@ TextDecoder::emit_plain (ContentTimePeriod period, sub::Subtitle const & s)
        emit_stop (period.to);
 }
 
+
 /*  @param rect Area expressed as a fraction of the video frame that this subtitle
  *  is for (e.g. a width of 0.5 means the width of the subtitle is half the width
  *  of the video frame)
  */
 void
-TextDecoder::emit_bitmap (ContentTimePeriod period, shared_ptr<Image> image, dcpomatic::Rect<double> rect)
+TextDecoder::emit_bitmap (ContentTimePeriod period, shared_ptr<const Image> image, dcpomatic::Rect<double> rect)
 {
        emit_bitmap_start (period.from, image, rect);
        emit_stop (period.to);
 }
 
+
 void
 TextDecoder::seek ()
 {