dcp::Subtitle effective_subtitle (*parse_state.subtitle_nodes.back ());
_subtitles.push_back (
- shared_ptr<SubtitleString> (
- new SubtitleString (
- font_id_to_name (effective_font.id),
- effective_font.italic.get(),
- effective_font.color.get(),
- effective_font.size,
- effective_subtitle.in,
- effective_subtitle.out,
- effective_text.v_position,
- effective_text.v_align,
- text,
- effective_font.effect ? effective_font.effect.get() : NONE,
- effective_font.effect_color.get(),
- effective_subtitle.fade_up_time,
- effective_subtitle.fade_down_time
- )
+ SubtitleString (
+ font_id_to_name (effective_font.id),
+ effective_font.italic.get(),
+ effective_font.color.get(),
+ effective_font.size,
+ effective_subtitle.in,
+ effective_subtitle.out,
+ effective_text.v_position,
+ effective_text.v_align,
+ text,
+ effective_font.effect ? effective_font.effect.get() : NONE,
+ effective_font.effect_color.get(),
+ effective_subtitle.fade_up_time,
+ effective_subtitle.fade_down_time
)
);
}
-list<shared_ptr<SubtitleString> >
+list<SubtitleString>
SubtitleContent::subtitles_at (Time t) const
{
- list<shared_ptr<SubtitleString> > s;
- for (list<shared_ptr<SubtitleString> >::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
- if ((*i)->in() <= t && t <= (*i)->out ()) {
+ list<SubtitleString> s;
+ for (list<SubtitleString>::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
+ if (i->in() <= t && t <= i->out ()) {
s.push_back (*i);
}
}
}
void
-SubtitleContent::add (shared_ptr<SubtitleString> s)
+SubtitleContent::add (SubtitleString s)
{
_subtitles.push_back (s);
_need_sort = true;
}
struct SubtitleSorter {
- bool operator() (shared_ptr<SubtitleString> a, shared_ptr<SubtitleString> b) {
- if (a->in() != b->in()) {
- return a->in() < b->in();
+ bool operator() (SubtitleString const & a, SubtitleString const & b) {
+ if (a.in() != b.in()) {
+ return a.in() < b.in();
}
- return a->v_position() < b->v_position();
+ return a.v_position() < b.v_position();
}
};
void
-SubtitleContent::write_xml () const
+SubtitleContent::write_xml (boost::filesystem::path p) const
{
- FILE* f = fopen_boost (file (), "r");
+ FILE* f = fopen_boost (p, "r");
Glib::ustring const s = xml_as_string ();
fwrite (s.c_str(), 1, s.length(), f);
fclose (f);
}
}
- list<shared_ptr<SubtitleString> > sorted = _subtitles;
+ list<SubtitleString> sorted = _subtitles;
if (_need_sort) {
sorted.sort (SubtitleSorter ());
}
xmlpp::Element* font = 0;
xmlpp::Element* subtitle = 0;
- for (list<shared_ptr<SubtitleString> >::iterator i = sorted.begin(); i != sorted.end(); ++i) {
+ for (list<SubtitleString>::iterator i = sorted.begin(); i != sorted.end(); ++i) {
/* We will start a new <Font>...</Font> whenever some font property changes.
I suppose we should really make an optimal hierarchy of <Font> tags, but
*/
bool const font_changed =
- italic != (*i)->italic() ||
- color != (*i)->color() ||
- size != (*i)->size() ||
- effect != (*i)->effect() ||
- effect_color != (*i)->effect_color();
+ italic != i->italic() ||
+ color != i->color() ||
+ size != i->size() ||
+ effect != i->effect() ||
+ effect_color != i->effect_color();
if (font_changed) {
- italic = (*i)->italic ();
- color = (*i)->color ();
- size = (*i)->size ();
- effect = (*i)->effect ();
- effect_color = (*i)->effect_color ();
+ italic = i->italic ();
+ color = i->color ();
+ size = i->size ();
+ effect = i->effect ();
+ effect_color = i->effect_color ();
}
if (!font || font_changed) {
}
if (!subtitle || font_changed ||
- (last_in != (*i)->in() ||
- last_out != (*i)->out() ||
- last_fade_up_time != (*i)->fade_up_time() ||
- last_fade_down_time != (*i)->fade_down_time()
+ (last_in != i->in() ||
+ last_out != i->out() ||
+ last_fade_up_time != i->fade_up_time() ||
+ last_fade_down_time != i->fade_down_time()
)) {
subtitle = font->add_child ("Subtitle");
subtitle->set_attribute ("SpotNumber", raw_convert<string> (spot_number++));
- subtitle->set_attribute ("TimeIn", (*i)->in().to_string());
- subtitle->set_attribute ("TimeOut", (*i)->out().to_string());
- subtitle->set_attribute ("FadeUpTime", raw_convert<string> ((*i)->fade_up_time().to_ticks()));
- subtitle->set_attribute ("FadeDownTime", raw_convert<string> ((*i)->fade_down_time().to_ticks()));
-
- last_in = (*i)->in ();
- last_out = (*i)->out ();
- last_fade_up_time = (*i)->fade_up_time ();
- last_fade_down_time = (*i)->fade_down_time ();
+ subtitle->set_attribute ("TimeIn", i->in().to_string());
+ subtitle->set_attribute ("TimeOut", i->out().to_string());
+ subtitle->set_attribute ("FadeUpTime", raw_convert<string> (i->fade_up_time().to_ticks()));
+ subtitle->set_attribute ("FadeDownTime", raw_convert<string> (i->fade_down_time().to_ticks()));
+
+ last_in = i->in ();
+ last_out = i->out ();
+ last_fade_up_time = i->fade_up_time ();
+ last_fade_down_time = i->fade_down_time ();
}
xmlpp::Element* text = subtitle->add_child ("Text");
- text->set_attribute ("VAlign", valign_to_string ((*i)->v_align()));
- text->set_attribute ("VPosition", raw_convert<string> ((*i)->v_position()));
- text->add_child_text ((*i)->text());
+ text->set_attribute ("VAlign", valign_to_string (i->v_align()));
+ text->set_attribute ("VPosition", raw_convert<string> (i->v_position()));
+ text->add_child_text (i->text());
}
return doc.write_to_string_formatted ("UTF-8");
BOOST_CHECK_EQUAL (subs.language(), "French");
- list<shared_ptr<dcp::SubtitleString> > s = subs.subtitles_at (dcp::Time (0, 0, 6, 1));
+ list<dcp::SubtitleString> s = subs.subtitles_at (dcp::Time (0, 0, 6, 1));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 0, 7, 190));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 1),
dcp::Time (0, 0, 0, 1)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 0, 11, 95));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 0, 14, 42));
BOOST_CHECK_EQUAL (s.size(), 1);
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
{
dcp::SubtitleContent subs ("test/data/subs2.xml", false);
- list<shared_ptr<dcp::SubtitleString> > s = subs.subtitles_at (dcp::Time (0, 0, 42, 100));
+ list<dcp::SubtitleString> s = subs.subtitles_at (dcp::Time (0, 0, 42, 100));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 0, 50, 50));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 2, 300));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 15, 50));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 27, 200));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 42, 300));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 45, 200));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 1, 47, 249));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
false,
dcp::Color (255, 255, 255),
s = subs.subtitles_at (dcp::Time (0, 2, 6, 210));
BOOST_CHECK_EQUAL (s.size(), 2);
- BOOST_CHECK_EQUAL (*(s.front().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),
dcp::Time (0, 0, 0, 0),
dcp::Time (0, 0, 0, 0)
));
- BOOST_CHECK_EQUAL (*(s.back().get()), dcp::SubtitleString (
+ BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
"Arial",
true,
dcp::Color (255, 255, 255),