X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fsubtitle_asset.h;h=1b834522abff14126c6597143e19208b4d677c55;hb=147cbe31f62fd6087a9a70f0ce2cd4a69b06dbbf;hp=04154a450f768c7cd83e7b02d637d3359c06fa0c;hpb=b56b008e2ad86bd2c29a42390891a32ae658d6c4;p=libdcp.git diff --git a/src/subtitle_asset.h b/src/subtitle_asset.h index 04154a45..1b834522 100644 --- a/src/subtitle_asset.h +++ b/src/subtitle_asset.h @@ -24,6 +24,8 @@ namespace libdcp { +class FontNode; + class TextNode : public XMLNode { public: @@ -31,7 +33,9 @@ public: TextNode (xmlpp::Node const * node); float v_position; + VAlign v_align; std::string text; + std::list > font_nodes; }; class SubtitleNode : public XMLNode @@ -42,7 +46,13 @@ public: Time in; Time out; + Time fade_up_time; + Time fade_down_time; + std::list > font_nodes; std::list > text_nodes; + +private: + Time fade_time (std::string name); }; class FontNode : public XMLNode @@ -50,13 +60,19 @@ class FontNode : public XMLNode public: FontNode () {} FontNode (xmlpp::Node const * node); + FontNode (std::list > const & font_nodes); + std::string text; std::string id; int size; boost::optional italic; + boost::optional color; + boost::optional effect; + boost::optional effect_color; std::list > subtitle_nodes; std::list > font_nodes; + std::list > text_nodes; }; class LoadFontNode : public XMLNode @@ -75,11 +91,17 @@ public: Subtitle ( std::string font, bool italic, + Color color, int size, Time in, Time out, float v_position, - std::string text + VAlign v_align, + std::string text, + Effect effect, + Color effect_color, + Time fade_up_time, + Time fade_down_time ); std::string font () const { @@ -90,6 +112,10 @@ public: return _italic; } + Color color () const { + return _color; + } + Time in () const { return _in; } @@ -106,27 +132,62 @@ public: return _v_position; } + VAlign v_align () const { + return _v_align; + } + + Effect effect () const { + return _effect; + } + + Color effect_color () const { + return _effect_color; + } + + Time fade_up_time () const { + return _fade_up_time; + } + + Time fade_down_time () const { + return _fade_down_time; + } + + int size () const { + return _size; + } + int size_in_pixels (int screen_height) const; private: std::string _font; bool _italic; + Color _color; int _size; Time _in; Time _out; float _v_position; + VAlign _v_align; std::string _text; + Effect _effect; + Color _effect_color; + Time _fade_up_time; + Time _fade_down_time; }; -class SubtitleAsset : public Asset, public XMLFile +bool operator== (Subtitle const & a, Subtitle const & b); +std::ostream& operator<< (std::ostream& s, Subtitle const & sub); + +class SubtitleAsset : public Asset { public: - SubtitleAsset (std::string directory, std::string xml); + SubtitleAsset (std::string directory, std::string xml_file); + SubtitleAsset (std::string directory, std::string movie_title, std::string language); - void write_to_cpl (std::ostream&) const {} - virtual std::list equals (boost::shared_ptr, EqualityOptions) const { + void write_to_cpl (std::ostream&) const; + virtual bool equals (boost::shared_ptr, EqualityOptions, std::list& notes) const { /* XXX */ - return std::list (); + notes.push_back ("subtitle assets not compared yet"); + return true; } std::string language () const { @@ -134,17 +195,40 @@ public: } std::list > subtitles_at (Time t) const; + std::list > const & subtitles () const { + return _subtitles; + } + + void add (boost::shared_ptr); + + void write_xml (); private: std::string font_id_to_name (std::string id) const; - void examine_font_node (boost::shared_ptr font_node, std::list >& current_font_nodes); - std::string id_from_font_nodes (std::list > const & font_nodes) const; - int size_from_font_nodes (std::list > const & font_nodes) const; - bool italic_from_font_nodes (std::list > const & font_nodes) const; + + struct ParseState { + std::list > font_nodes; + std::list > text_nodes; + std::list > subtitle_nodes; + }; + + void maybe_add_subtitle (std::string text, ParseState const & parse_state); - std::string _subtitle_id; + void examine_font_nodes ( + boost::shared_ptr xml, + std::list > const & font_nodes, + ParseState& parse_state + ); + + void examine_text_nodes ( + boost::shared_ptr xml, + std::list > const & text_nodes, + ParseState& parse_state + ); + std::string _movie_title; - int64_t _reel_number; + /* strangely, this is sometimes a string */ + std::string _reel_number; std::string _language; std::list > _load_font_nodes;