X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fsubtitle_asset.h;h=7a00e0369eba87549de42fc4a75b3cebd2b5f939;hb=7d897b0c9e4a9d479effb89dc9b386abdb9ad212;hp=b3936dc24fdb0811262ffb4b7e761be13327c224;hpb=6322c72a13d7be2e991a8e0421414c0af8187b88;p=libdcp.git diff --git a/src/subtitle_asset.h b/src/subtitle_asset.h index b3936dc2..7a00e036 100644 --- a/src/subtitle_asset.h +++ b/src/subtitle_asset.h @@ -17,73 +17,23 @@ */ +#ifndef LIBDCP_SUBTITLE_ASSET_H +#define LIBDCP_SUBTITLE_ASSET_H + +#include #include "asset.h" -#include "xml.h" #include "dcp_time.h" namespace libdcp { -class FontNode; - -class TextNode : public XMLNode -{ -public: - TextNode () {} - TextNode (xmlpp::Node const * node); - - float v_position; - VAlign v_align; - std::string text; - std::list > font_nodes; -}; - -class SubtitleNode : public XMLNode -{ -public: - SubtitleNode () {} - SubtitleNode (xmlpp::Node const * node); - - 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 -{ -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 +namespace parse { -public: - LoadFontNode () {} - LoadFontNode (xmlpp::Node const * node); - - std::string id; - std::string uri; -}; + class Font; + class Text; + class Subtitle; + class LoadFont; +} class Subtitle { @@ -162,9 +112,15 @@ private: std::string _font; bool _italic; Color _color; + /** Size in points as if the screen height is 11 inches, so a 72pt font + * would be 1/11th of the screen height. + */ int _size; Time _in; Time _out; + /** Vertical position as a proportion of the screen height from the top + * (between 0 and 1) + */ float _v_position; VAlign _v_align; std::string _text; @@ -183,10 +139,10 @@ public: 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 bool equals (boost::shared_ptr, EqualityOptions, boost::function note) const { + void write_to_cpl (xmlpp::Element *, bool) const; + virtual bool equals (boost::shared_ptr, EqualityOptions, boost::function note) const { /* XXX */ - note ("subtitle assets not compared yet"); + note (ERROR, "subtitle assets not compared yet"); return true; } @@ -203,29 +159,28 @@ public: void read_xml (std::string); void write_xml () const; - void write_xml (std::ostream& s) const; + Glib::ustring xml_as_string () const; private: std::string font_id_to_name (std::string id) const; - std::string escape (std::string) const; struct ParseState { - std::list > font_nodes; - std::list > text_nodes; - std::list > subtitle_nodes; + std::list > font_nodes; + std::list > text_nodes; + std::list > subtitle_nodes; }; void maybe_add_subtitle (std::string text, ParseState const & parse_state); void examine_font_nodes ( - boost::shared_ptr xml, - std::list > const & 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, + boost::shared_ptr xml, + std::list > const & text_nodes, ParseState& parse_state ); @@ -233,10 +188,12 @@ private: /* strangely, this is sometimes a string */ std::string _reel_number; std::string _language; - std::list > _load_font_nodes; + std::list > _load_font_nodes; std::list > _subtitles; bool _need_sort; }; } + +#endif