xmlpp::Element*
order::Font::as_xml (xmlpp::Element* parent, Context&) const
{
- auto e = parent->add_child("Font");
+ auto e = cxml::add_child(parent, "Font");
for (const auto& i: _values) {
e->set_attribute (i.first, i.second);
}
order::String::as_xml (xmlpp::Element* parent, Context& context) const
{
if (fabs(_space_before) > SPACE_BEFORE_EPSILON) {
- auto space = parent->add_child("Space");
+ auto space = cxml::add_child(parent, "Space");
auto size = raw_convert<string>(_space_before, 2);
if (context.standard == Standard::INTEROP) {
size += "em";
static void
-position_align (xmlpp::Element* e, order::Context& context, HAlign h_align, float h_position, VAlign v_align, float v_position)
+position_align (xmlpp::Element* e, order::Context& context, HAlign h_align, float h_position, VAlign v_align, float v_position, float z_position)
{
if (h_align != HAlign::CENTER) {
if (context.standard == Standard::SMPTE) {
e->set_attribute ("VPosition", "0");
}
}
+
+ if (fabs(z_position) > ALIGN_EPSILON && context.standard == Standard::SMPTE) {
+ e->set_attribute("Zposition", raw_convert<string>(z_position * 100, 6));
+ }
}
xmlpp::Element*
order::Text::as_xml (xmlpp::Element* parent, Context& context) const
{
- auto e = parent->add_child ("Text");
+ auto e = cxml::add_child(parent, "Text");
- position_align (e, context, _h_align, _h_position, _v_align, _v_position);
+ position_align(e, context, _h_align, _h_position, _v_align, _v_position, _z_position);
/* Interop only supports "horizontal" or "vertical" for direction, so only write this
for SMPTE.
e->set_attribute ("Direction", direction_to_string (_direction));
}
+ for (auto const& ruby: _rubies) {
+ auto xml = cxml::add_child(e, "Ruby");
+ cxml::add_child(xml, "Rb")->add_child_text(ruby.base);
+ auto rt = cxml::add_child(xml, "Rt");
+ rt->add_child_text(ruby.annotation);
+ rt->set_attribute("Size", dcp::raw_convert<string>(ruby.size, 6));
+ rt->set_attribute("Position", ruby.position == RubyPosition::BEFORE ? "before" : "after");
+ rt->set_attribute("Offset", dcp::raw_convert<string>(ruby.offset, 6));
+ rt->set_attribute("Spacing", dcp::raw_convert<string>(ruby.spacing, 6));
+ rt->set_attribute("AspectAdjust", dcp::raw_convert<string>(ruby.aspect_adjust, 6));
+ }
+
return e;
}
xmlpp::Element*
order::Subtitle::as_xml (xmlpp::Element* parent, Context& context) const
{
- auto e = parent->add_child ("Subtitle");
+ auto e = cxml::add_child(parent, "Subtitle");
e->set_attribute ("SpotNumber", raw_convert<string> (context.spot_number++));
e->set_attribute ("TimeIn", _in.rebase(context.time_code_rate).as_string(context.standard));
e->set_attribute ("TimeOut", _out.rebase(context.time_code_rate).as_string(context.standard));
xmlpp::Element *
order::Image::as_xml (xmlpp::Element* parent, Context& context) const
{
- auto e = parent->add_child ("Image");
+ auto e = cxml::add_child(parent, "Image");
- position_align (e, context, _h_align, _h_position, _v_align, _v_position);
+ position_align(e, context, _h_align, _h_position, _v_align, _v_position, _z_position);
if (context.standard == Standard::SMPTE) {
e->add_child_text ("urn:uuid:" + _id);
} else {