summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/text_asset.cc132
-rw-r--r--src/text_asset.h6
2 files changed, 73 insertions, 65 deletions
diff --git a/src/text_asset.cc b/src/text_asset.cc
index ff662b69..1a58d22f 100644
--- a/src/text_asset.cc
+++ b/src/text_asset.cc
@@ -409,70 +409,7 @@ TextAsset::maybe_add_text(
return;
}
- ParseState ps;
- for (auto const& i: parse_state) {
- if (i.font_id) {
- ps.font_id = i.font_id.get();
- }
- if (i.size) {
- ps.size = i.size.get();
- }
- if (i.aspect_adjust) {
- ps.aspect_adjust = i.aspect_adjust.get();
- }
- if (i.italic) {
- ps.italic = i.italic.get();
- }
- if (i.bold) {
- ps.bold = i.bold.get();
- }
- if (i.underline) {
- ps.underline = i.underline.get();
- }
- if (i.colour) {
- ps.colour = i.colour.get();
- }
- if (i.effect) {
- ps.effect = i.effect.get();
- }
- if (i.effect_colour) {
- ps.effect_colour = i.effect_colour.get();
- }
- if (i.h_position) {
- ps.h_position = i.h_position.get();
- }
- if (i.h_align) {
- ps.h_align = i.h_align.get();
- }
- if (i.v_position) {
- ps.v_position = i.v_position.get();
- }
- if (i.v_align) {
- ps.v_align = i.v_align.get();
- }
- if (i.z_position) {
- ps.z_position = i.z_position.get();
- }
- if (i.direction) {
- ps.direction = i.direction.get();
- }
- if (i.in) {
- ps.in = i.in.get();
- }
- if (i.out) {
- ps.out = i.out.get();
- }
- if (i.fade_up_time) {
- ps.fade_up_time = i.fade_up_time.get();
- }
- if (i.fade_down_time) {
- ps.fade_down_time = i.fade_down_time.get();
- }
- if (i.type) {
- ps.type = i.type.get();
- }
- }
-
+ ParseState ps(parse_state);
if (!ps.in || !ps.out) {
/* We're not in a <Subtitle> node; just ignore this content */
return;
@@ -1003,3 +940,70 @@ TextAsset::ensure_font(string load_id, dcp::ArrayData data)
}
}
+
+dcp::TextAsset::ParseState::ParseState(std::vector<dcp::TextAsset::ParseState> const& ps)
+{
+ for (auto const& i: ps) {
+ if (i.font_id) {
+ font_id = i.font_id.get();
+ }
+ if (i.size) {
+ size = i.size.get();
+ }
+ if (i.aspect_adjust) {
+ aspect_adjust = i.aspect_adjust.get();
+ }
+ if (i.italic) {
+ italic = i.italic.get();
+ }
+ if (i.bold) {
+ bold = i.bold.get();
+ }
+ if (i.underline) {
+ underline = i.underline.get();
+ }
+ if (i.colour) {
+ colour = i.colour.get();
+ }
+ if (i.effect) {
+ effect = i.effect.get();
+ }
+ if (i.effect_colour) {
+ effect_colour = i.effect_colour.get();
+ }
+ if (i.h_position) {
+ h_position = i.h_position.get();
+ }
+ if (i.h_align) {
+ h_align = i.h_align.get();
+ }
+ if (i.v_position) {
+ v_position = i.v_position.get();
+ }
+ if (i.v_align) {
+ v_align = i.v_align.get();
+ }
+ if (i.z_position) {
+ z_position = i.z_position.get();
+ }
+ if (i.direction) {
+ direction = i.direction.get();
+ }
+ if (i.in) {
+ in = i.in.get();
+ }
+ if (i.out) {
+ out = i.out.get();
+ }
+ if (i.fade_up_time) {
+ fade_up_time = i.fade_up_time.get();
+ }
+ if (i.fade_down_time) {
+ fade_down_time = i.fade_down_time.get();
+ }
+ if (i.type) {
+ type = i.type.get();
+ }
+ }
+}
+
diff --git a/src/text_asset.h b/src/text_asset.h
index 4d739027..0a8ed78c 100644
--- a/src/text_asset.h
+++ b/src/text_asset.h
@@ -141,7 +141,11 @@ protected:
friend struct ::interop_dcp_font_test;
friend struct ::smpte_dcp_font_test;
- struct ParseState {
+ struct ParseState
+ {
+ ParseState() = default;
+ explicit ParseState(std::vector<ParseState> const& ps);
+
boost::optional<std::string> font_id;
boost::optional<int64_t> size;
boost::optional<float> aspect_adjust;