Add conversions from char.
[libdcp.git] / src / font_node.cc
index 5461d6aeacb3921559cf3f532baa176f68cb469f..1aa4be6bfa44978ff9c6eed9675d2fdaed2fee0b 100644 (file)
@@ -1,20 +1,34 @@
 /*
-    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of libdcp.
+
+    libdcp is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
+    libdcp is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+    along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
 
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
 */
 
 #include "types.h"
@@ -31,14 +45,24 @@ using boost::shared_ptr;
 using boost::optional;
 using namespace dcp;
 
-FontNode::FontNode (cxml::ConstNodePtr node, int tcr)
+FontNode::FontNode (cxml::ConstNodePtr node, optional<int> tcr, Standard standard)
 {
        text = node->content ();
 
-       id = node->optional_string_attribute ("Id");
+       if (standard == INTEROP) {
+               id = node->optional_string_attribute ("Id");
+       } else {
+               id = node->optional_string_attribute ("ID");
+       }
        size = node->optional_number_attribute<int64_t> ("Size").get_value_or (0);
        aspect_adjust = node->optional_number_attribute<float> ("AspectAdjust");
        italic = node->optional_bool_attribute ("Italic");
+       bold = node->optional_string_attribute("Weight").get_value_or("normal") == "bold";
+       if (standard == INTEROP) {
+               underline = node->optional_bool_attribute ("Underlined");
+       } else {
+               underline = node->optional_bool_attribute ("Underline");
+       }
        optional<string> c = node->optional_string_attribute ("Color");
        if (c) {
                colour = Colour (c.get ());
@@ -54,23 +78,25 @@ FontNode::FontNode (cxml::ConstNodePtr node, int tcr)
 
        list<cxml::NodePtr> s = node->node_children ("Subtitle");
        BOOST_FOREACH (cxml::NodePtr& i, s) {
-               subtitle_nodes.push_back (shared_ptr<SubtitleNode> (new SubtitleNode (i, tcr)));
+               subtitle_nodes.push_back (shared_ptr<SubtitleNode> (new SubtitleNode (i, tcr, standard)));
        }
 
        list<cxml::NodePtr> f = node->node_children ("Font");
        BOOST_FOREACH (cxml::NodePtr& i, f) {
-               font_nodes.push_back (shared_ptr<FontNode> (new FontNode (i, tcr)));
+               font_nodes.push_back (shared_ptr<FontNode> (new FontNode (i, tcr, standard)));
        }
 
        list<cxml::NodePtr> t = node->node_children ("Text");
        BOOST_FOREACH (cxml::NodePtr& i, t) {
-               text_nodes.push_back (shared_ptr<TextNode> (new TextNode (i, tcr)));
+               text_nodes.push_back (shared_ptr<TextNode> (new TextNode (i, tcr, standard)));
        }
 }
 
 FontNode::FontNode (std::list<boost::shared_ptr<FontNode> > const & font_nodes)
        : size (0)
        , italic (false)
+       , bold (false)
+       , underline (false)
        , colour ("FFFFFFFF")
        , effect_colour ("FFFFFFFF")
 {
@@ -87,6 +113,12 @@ FontNode::FontNode (std::list<boost::shared_ptr<FontNode> > const & font_nodes)
                if ((*i)->italic) {
                        italic = (*i)->italic.get ();
                }
+               if ((*i)->bold) {
+                       bold = (*i)->bold.get ();
+               }
+               if ((*i)->underline) {
+                       underline = (*i)->underline.get ();
+               }
                if ((*i)->colour) {
                        colour = (*i)->colour.get ();
                }