From 797916ae28d976f3c5be62d37b45864219af6098 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 13 May 2013 14:20:36 +0100 Subject: Use libcxml. Lump all static configuration flags into one. --- src/cpl_file.cc | 147 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 73 insertions(+), 74 deletions(-) (limited to 'src/cpl_file.cc') diff --git a/src/cpl_file.cc b/src/cpl_file.cc index 6a17d721..3126b99c 100644 --- a/src/cpl_file.cc +++ b/src/cpl_file.cc @@ -23,126 +23,125 @@ #include #include "cpl_file.h" +#include "xml.h" +#include "util.h" -using namespace std; +using std::string; +using std::bad_cast; +using boost::shared_ptr; using namespace libdcp; CPLFile::CPLFile (string file) - : XMLFile (file, "CompositionPlaylist") { - id = string_child ("Id"); - annotation_text = optional_string_child ("AnnotationText"); - issue_date = string_child ("IssueDate"); - creator = optional_string_child ("Creator"); - content_title_text = string_child ("ContentTitleText"); - content_kind = kind_child ("ContentKind"); - content_version = optional_type_child ("ContentVersion"); - ignore_child ("RatingList"); - reels = type_grand_children ("ReelList", "Reel"); - - ignore_child ("Issuer"); - ignore_child ("Signer"); - ignore_child ("Signature"); - - done (); + cxml::File f (file, "CompositionPlaylist"); + + id = f.string_child ("Id"); + annotation_text = f.optional_string_child ("AnnotationText").get_value_or (""); + issue_date = f.string_child ("IssueDate"); + creator = f.optional_string_child ("Creator").get_value_or (""); + content_title_text = f.string_child ("ContentTitleText"); + content_kind = content_kind_from_string (f.string_child ("ContentKind")); + content_version = optional_type_child (f, "ContentVersion"); + f.ignore_child ("RatingList"); + reels = type_grand_children (f, "ReelList", "Reel"); + + f.ignore_child ("Issuer"); + f.ignore_child ("Signer"); + f.ignore_child ("Signature"); + + f.done (); } -ContentVersion::ContentVersion (xmlpp::Node const * node) - : XMLNode (node) +ContentVersion::ContentVersion (shared_ptr node) { - id = optional_string_child ("Id"); - label_text = string_child ("LabelText"); - done (); + id = node->optional_string_child ("Id").get_value_or (""); + label_text = node->string_child ("LabelText"); + node->done (); } -CPLReel::CPLReel (xmlpp::Node const * node) - : XMLNode (node) +CPLReel::CPLReel (shared_ptr node) { - id = string_child ("Id"); - asset_list = type_child ("AssetList"); + id = node->string_child ("Id"); + asset_list = type_child (node, "AssetList"); - ignore_child ("AnnotationText"); - done (); + node->ignore_child ("AnnotationText"); + node->done (); } -CPLAssetList::CPLAssetList (xmlpp::Node const * node) - : XMLNode (node) +CPLAssetList::CPLAssetList (shared_ptr node) { - main_picture = optional_type_child ("MainPicture"); - main_stereoscopic_picture = optional_type_child ("MainStereoscopicPicture"); - main_sound = optional_type_child ("MainSound"); - main_subtitle = optional_type_child ("MainSubtitle"); + main_picture = optional_type_child (node, "MainPicture"); + main_stereoscopic_picture = optional_type_child (node, "MainStereoscopicPicture"); + main_sound = optional_type_child (node, "MainSound"); + main_subtitle = optional_type_child (node, "MainSubtitle"); - done (); + node->done (); } -MainPicture::MainPicture (xmlpp::Node const * node) +MainPicture::MainPicture (shared_ptr node) : Picture (node) { } -MainStereoscopicPicture::MainStereoscopicPicture (xmlpp::Node const * node) +MainStereoscopicPicture::MainStereoscopicPicture (shared_ptr node) : Picture (node) { } -Picture::Picture (xmlpp::Node const * node) - : XMLNode (node) +Picture::Picture (shared_ptr node) { - id = string_child ("Id"); - annotation_text = optional_string_child ("AnnotationText"); - edit_rate = fraction_child ("EditRate"); - intrinsic_duration = int64_child ("IntrinsicDuration"); - entry_point = int64_child ("EntryPoint"); - duration = int64_child ("Duration"); - frame_rate = fraction_child ("FrameRate"); + id = node->string_child ("Id"); + annotation_text = node->optional_string_child ("AnnotationText").get_value_or (""); + edit_rate = Fraction (node->string_child ("EditRate")); + intrinsic_duration = node->number_child ("IntrinsicDuration"); + entry_point = node->number_child ("EntryPoint"); + duration = node->number_child ("Duration"); + frame_rate = Fraction (node->string_child ("FrameRate")); try { - screen_aspect_ratio = fraction_child ("ScreenAspectRatio"); + screen_aspect_ratio = Fraction (node->string_child ("ScreenAspectRatio")); } catch (XMLError& e) { /* Maybe it's not a fraction */ } try { - float f = float_child ("ScreenAspectRatio"); + float f = node->number_child ("ScreenAspectRatio"); screen_aspect_ratio = Fraction (f * 1000, 1000); } catch (bad_cast& e) { } - ignore_child ("Hash"); + node->ignore_child ("Hash"); - done (); + node->done (); } -MainSound::MainSound (xmlpp::Node const * node) - : XMLNode (node) +MainSound::MainSound (shared_ptr node) { - id = string_child ("Id"); - annotation_text = optional_string_child ("AnnotationText"); - edit_rate = fraction_child ("EditRate"); - intrinsic_duration = int64_child ("IntrinsicDuration"); - entry_point = int64_child ("EntryPoint"); - duration = int64_child ("Duration"); - - ignore_child ("Hash"); - ignore_child ("Language"); + id = node->string_child ("Id"); + annotation_text = node->optional_string_child ("AnnotationText").get_value_or (""); + edit_rate = Fraction (node->string_child ("EditRate")); + intrinsic_duration = node->number_child ("IntrinsicDuration"); + entry_point = node->number_child ("EntryPoint"); + duration = node->number_child ("Duration"); + + node->ignore_child ("Hash"); + node->ignore_child ("Language"); - done (); + node->done (); } -MainSubtitle::MainSubtitle (xmlpp::Node const * node) - : XMLNode (node) +MainSubtitle::MainSubtitle (shared_ptr node) { - id = string_child ("Id"); - annotation_text = optional_string_child ("AnnotationText"); - edit_rate = fraction_child ("EditRate"); - intrinsic_duration = int64_child ("IntrinsicDuration"); - entry_point = int64_child ("EntryPoint"); - duration = int64_child ("Duration"); - - ignore_child ("Hash"); - ignore_child ("Language"); + id = node->string_child ("Id"); + annotation_text = node->optional_string_child ("AnnotationText").get_value_or (""); + edit_rate = Fraction (node->string_child ("EditRate")); + intrinsic_duration = node->number_child ("IntrinsicDuration"); + entry_point = node->number_child ("EntryPoint"); + duration = node->number_child ("Duration"); + + node->ignore_child ("Hash"); + node->ignore_child ("Language"); - done (); + node->done (); } -- cgit v1.2.3