/*
- Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "xml.h"
#include "raw_convert.h"
#include "font.h"
+#include <boost/foreach.hpp>
using std::list;
using std::string;
+using std::cout;
using boost::shared_ptr;
using boost::optional;
+using boost::dynamic_pointer_cast;
using namespace dcp;
InteropSubtitleContent::InteropSubtitleContent (boost::filesystem::path file)
_id = xml->string_child ("SubtitleID");
_movie_title = xml->string_child ("MovieTitle");
-
_load_font_nodes = type_children<dcp::InteropLoadFont> (xml, "LoadFont");
- list<shared_ptr<dcp::Font> > font_nodes = type_children<dcp::Font> (xml, "Font");
+
+ list<cxml::NodePtr> f = xml->node_children ("Font");
+ list<shared_ptr<dcp::Font> > font_nodes;
+ BOOST_FOREACH (cxml::NodePtr& i, f) {
+ font_nodes.push_back (shared_ptr<Font> (new Font (i, 250)));
+ }
parse_common (xml, font_nodes);
}
optional<string> font;
bool italic = false;
- Color color;
+ Colour colour;
int size = 0;
Effect effect = NONE;
- Color effect_color;
+ Colour effect_colour;
int spot_number = 1;
Time last_in;
Time last_out;
bool const font_changed =
font != i->font() ||
italic != i->italic() ||
- color != i->color() ||
+ colour != i->colour() ||
size != i->size() ||
effect != i->effect() ||
- effect_color != i->effect_color();
+ effect_colour != i->effect_colour();
if (font_changed) {
font = i->font ();
italic = i->italic ();
- color = i->color ();
+ colour = i->colour ();
size = i->size ();
effect = i->effect ();
- effect_color = i->effect_color ();
+ effect_colour = i->effect_colour ();
}
if (!font_element || font_changed) {
font_element->set_attribute ("Id", font.get ());
}
font_element->set_attribute ("Italic", italic ? "yes" : "no");
- font_element->set_attribute ("Color", color.to_argb_string());
+ font_element->set_attribute ("Color", colour.to_argb_string());
font_element->set_attribute ("Size", raw_convert<string> (size));
font_element->set_attribute ("Effect", effect_to_string (effect));
- font_element->set_attribute ("EffectColor", effect_color.to_argb_string());
+ font_element->set_attribute ("EffectColor", effect_colour.to_argb_string());
font_element->set_attribute ("Script", "normal");
font_element->set_attribute ("Underlined", "no");
font_element->set_attribute ("Weight", "normal");
subtitle_element->set_attribute ("SpotNumber", raw_convert<string> (spot_number++));
subtitle_element->set_attribute ("TimeIn", i->in().to_string());
subtitle_element->set_attribute ("TimeOut", i->out().to_string());
- subtitle_element->set_attribute ("FadeUpTime", raw_convert<string> (i->fade_up_time().to_ticks()));
- subtitle_element->set_attribute ("FadeDownTime", raw_convert<string> (i->fade_down_time().to_ticks()));
+ subtitle_element->set_attribute ("FadeUpTime", raw_convert<string> (i->fade_up_time().to_editable_units(250)));
+ subtitle_element->set_attribute ("FadeDownTime", raw_convert<string> (i->fade_down_time().to_editable_units(250)));
last_in = i->in ();
last_out = i->out ();
return doc.write_to_string_formatted ("UTF-8");
}
+void
+InteropSubtitleContent::add_font (string id, string uri)
+{
+ _load_font_nodes.push_back (shared_ptr<InteropLoadFont> (new InteropLoadFont (id, uri)));
+}
+
+bool
+InteropSubtitleContent::equals (shared_ptr<const Asset> other_asset, EqualityOptions options, NoteHandler note) const
+{
+ if (!SubtitleContent::equals (other_asset, options, note)) {
+ return false;
+ }
+
+ shared_ptr<const InteropSubtitleContent> other = dynamic_pointer_cast<const InteropSubtitleContent> (other_asset);
+ if (!other) {
+ return false;
+ }
+
+ list<shared_ptr<InteropLoadFont> >::const_iterator i = _load_font_nodes.begin ();
+ list<shared_ptr<InteropLoadFont> >::const_iterator j = other->_load_font_nodes.begin ();
+
+ while (i != _load_font_nodes.end ()) {
+ if (j == _load_font_nodes.end ()) {
+ note (DCP_ERROR, "<LoadFont> nodes differ");
+ return false;
+ }
+
+ if (**i != **j) {
+ note (DCP_ERROR, "<LoadFont> nodes differ");
+ return false;
+ }
+
+ ++i;
+ ++j;
+ }
+
+ if (_movie_title != other->_movie_title) {
+ note (DCP_ERROR, "Subtitle movie titles differ");
+ return false;
+ }
+
+ return true;
+}
+
+list<shared_ptr<LoadFont> >
+InteropSubtitleContent::load_font_nodes () const
+{
+ list<shared_ptr<LoadFont> > lf;
+ copy (_load_font_nodes.begin(), _load_font_nodes.end(), back_inserter (lf));
+ return lf;
+}