Normalise XML attribute names to be camelCase (#2241).
[dcpomatic.git] / src / lib / film.cc
index 27d23b1850a9f7c0dc14e2a5514ad0b42f112522..871ec76b8404b5a6f9d28a0b88b72281a7f791bb 100644 (file)
@@ -416,7 +416,7 @@ Film::metadata (bool with_content_paths) const
        root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0");
        for (auto const& marker: _markers) {
                auto m = root->add_child("Marker");
-               m->set_attribute("Type", dcp::marker_to_string(marker.first));
+               m->set_attribute("type", dcp::marker_to_string(marker.first));
                m->add_child_text(raw_convert<string>(marker.second.get()));
        }
        for (auto i: _ratings) {
@@ -603,7 +603,11 @@ Film::read_metadata (optional<boost::filesystem::path> path)
        _user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false);
 
        for (auto i: f.node_children("Marker")) {
-               _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
+               auto type = i->optional_string_attribute("Type");
+               if (!type) {
+                       type = i->string_attribute("type");
+               }
+               _markers[dcp::marker_from_string(*type)] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
        }
 
        for (auto i: f.node_children("Rating")) {
@@ -784,8 +788,10 @@ Film::subtitle_languages(bool* burnt_in) const
 
        pair<optional<dcp::LanguageTag>, vector<dcp::LanguageTag>> result;
        for (auto i: content()) {
+               auto dcp = dynamic_pointer_cast<DCPContent>(i);
                for (auto const& text: i->text) {
-                       if (text->use() && text->type() == TextType::OPEN_SUBTITLE) {
+                       auto const use = text->use() || (dcp && dcp->reference_text(TextType::OPEN_SUBTITLE));
+                       if (use && text->type() == TextType::OPEN_SUBTITLE) {
                                if (!text->burn() && burnt_in) {
                                        *burnt_in = false;
                                }