+
+
+bool
+Subtitle::equals(shared_ptr<const Subtitle> other, EqualityOptions const& options, NoteHandler note) const
+{
+ bool same = true;
+
+ if (in() != other->in()) {
+ note(NoteType::ERROR, "subtitle in times differ");
+ same = false;
+ }
+
+ if (out() != other->out()) {
+ note(NoteType::ERROR, "subtitle out times differ");
+ same = false;
+ }
+
+ if (h_position() != other->h_position()) {
+ note(NoteType::ERROR, "subtitle horizontal positions differ");
+ same = false;
+ }
+
+ if (h_align() != other->h_align()) {
+ note(NoteType::ERROR, "subtitle horizontal alignments differ");
+ same = false;
+ }
+
+ auto const vpos = std::abs(v_position() - other->v_position());
+ if (vpos > options.max_subtitle_vertical_position_error) {
+ note(
+ NoteType::ERROR,
+ String::compose("subtitle vertical positions differ by %1 (more than the allowed difference of %2)", vpos, options.max_subtitle_vertical_position_error)
+ );
+ same = false;
+ }
+
+ if (v_align() != other->v_align()) {
+ note(NoteType::ERROR, "subtitle vertical alignments differ");
+ same = false;
+ }
+
+ if (z_position() != other->z_position()) {
+ note(NoteType::ERROR, "subtitle Z positions differ");
+ same = false;
+ }
+
+ if (fade_up_time() != other->fade_up_time()) {
+ note(NoteType::ERROR, "subtitle fade-up times differ");
+ same = false;
+ }
+
+ if (fade_down_time() != other->fade_down_time()) {
+ note(NoteType::ERROR, "subtitle fade-down times differ");
+ same = false;
+ }
+
+ return same;
+}