diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-28 00:34:24 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-28 00:34:24 +0100 |
| commit | ff72bf25f215f5cb58ee165898968380f9dff73f (patch) | |
| tree | 3286a7821577c5f4632be4bc1dabfcf54f8f98a7 /src/lib | |
| parent | fbce80e667db180244c3b1588e235bf9b2c6cb01 (diff) | |
Fix pango markup when rendering subtitles.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/render_subtitles.cc | 98 | ||||
| -rw-r--r-- | src/lib/render_subtitles.h | 3 |
2 files changed, 51 insertions, 50 deletions
diff --git a/src/lib/render_subtitles.cc b/src/lib/render_subtitles.cc index 0e985371c..fea788a5c 100644 --- a/src/lib/render_subtitles.cc +++ b/src/lib/render_subtitles.cc @@ -44,6 +44,54 @@ using boost::optional; static FcConfig* fc_config = 0; static list<pair<FontFiles, string> > fc_config_fonts; +string +marked_up (list<dcp::SubtitleString> subtitles) +{ + string out; + bool italic = false; + bool bold = false; + bool underline = false; + BOOST_FOREACH (dcp::SubtitleString const & i, subtitles) { + if (i.italic() && !italic) { + out += "<i>"; + } + if (i.bold() && !bold) { + out += "<b>"; + } + if (i.underline() && !underline) { + out += "<u>"; + } + + out += i.text (); + + if (!i.underline() && underline) { + out += "</u>"; + } + if (!i.bold() && bold) { + out += "</b>"; + } + if (!i.italic() && italic) { + out += "</i>"; + } + + italic = i.italic (); + bold = i.bold (); + underline = i.underline (); + } + + if (underline) { + out += "</u>"; + } + if (bold) { + out += "</b>"; + } + if (italic) { + out += "</i>"; + } + + return out; +} + /** @param subtitles A list of subtitles that are all on the same line */ static PositionImage render_line (list<dcp::SubtitleString> subtitles, list<shared_ptr<Font> > fonts, dcp::Size target) @@ -197,55 +245,7 @@ render_line (list<dcp::SubtitleString> subtitles, list<shared_ptr<Font> > fonts, Pango::FontDescription font (font_name); font.set_absolute_size (subtitles.front().size_in_pixels (target.height) * PANGO_SCALE); layout->set_font_description (font); - - string marked_up; - bool italic = false; - bool bold = false; - bool underline = false; - BOOST_FOREACH (dcp::SubtitleString const & i, subtitles) { - if (i.italic() != italic) { - if (i.italic()) { - marked_up += "<i>"; - } else { - marked_up += "</i>"; - } - italic = i.italic (); - } - - if (i.bold() != bold) { - if (i.bold()) { - marked_up += "<b>"; - } else { - marked_up += "</b>"; - } - bold = i.bold (); - } - - if (i.underline() != underline) { - if (i.underline()) { - marked_up += "<u>"; - } else { - marked_up += "</u>"; - } - underline = i.underline (); - } - - marked_up += i.text (); - } - - if (italic) { - marked_up += "</i>"; - } - - if (bold) { - marked_up += "</b>"; - } - - if (underline) { - marked_up += "</u>"; - } - - layout->set_markup (marked_up); + layout->set_markup (marked_up (subtitles)); /* Compute fade factor */ /* XXX */ diff --git a/src/lib/render_subtitles.h b/src/lib/render_subtitles.h index 4fd931781..281efe97a 100644 --- a/src/lib/render_subtitles.h +++ b/src/lib/render_subtitles.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington <cth@carlh.net> + Copyright (C) 2014-2016 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -24,4 +24,5 @@ class Font; +std::string marked_up (std::list<dcp::SubtitleString> subtitles); std::list<PositionImage> render_subtitles (std::list<dcp::SubtitleString>, std::list<boost::shared_ptr<Font> > fonts, dcp::Size); |
