+ maybe_set_position(bitmap.from());
+}
+
+
+static
+string
+escape_text (string text)
+{
+ /* 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.)
+ */
+ boost::algorithm::replace_all(text, "&", "&");
+ boost::algorithm::replace_all(text, "<", "<");
+ boost::algorithm::replace_all(text, ">", ">");
+ return text;
+}
+
+
+static
+void
+set_forced_appearance(shared_ptr<const TextContent> content, StringText& subtitle)
+{
+ if (content->colour()) {
+ subtitle.set_colour(*content->colour());
+ }
+ if (content->effect_colour()) {
+ subtitle.set_effect_colour(*content->effect_colour());
+ }
+ if (content->effect()) {
+ subtitle.set_effect(*content->effect());
+ }
+ if (content->fade_in()) {
+ subtitle.set_fade_up_time(dcp::Time(content->fade_in()->seconds(), 1000));
+ }
+ if (content->fade_out()) {
+ subtitle.set_fade_down_time (dcp::Time(content->fade_out()->seconds(), 1000));
+ }