+
+string
+dcp::effect_to_string (Effect e)
+{
+ switch (e) {
+ case NONE:
+ return "none";
+ case BORDER:
+ return "border";
+ case SHADOW:
+ return "shadow";
+ }
+
+ boost::throw_exception (MiscError ("unknown effect type"));
+}
+
+Effect
+dcp::string_to_effect (string s)
+{
+ if (s == "none") {
+ return NONE;
+ } else if (s == "border") {
+ return BORDER;
+ } else if (s == "shadow") {
+ return SHADOW;
+ }
+
+ boost::throw_exception (DCPReadError ("unknown subtitle effect type"));
+}
+
+string
+dcp::halign_to_string (HAlign h)
+{
+ switch (h) {
+ case HALIGN_LEFT:
+ return "left";
+ case HALIGN_CENTER:
+ return "center";
+ case HALIGN_RIGHT:
+ return "right";
+ }
+
+ boost::throw_exception (MiscError ("unknown subtitle halign type"));
+}
+
+HAlign
+dcp::string_to_halign (string s)
+{
+ if (s == "left") {
+ return HALIGN_LEFT;
+ } else if (s == "center") {
+ return HALIGN_CENTER;
+ } else if (s == "right") {
+ return HALIGN_RIGHT;
+ }
+
+ boost::throw_exception (DCPReadError ("unknown subtitle halign type"));
+}
+
+string
+dcp::valign_to_string (VAlign v)
+{
+ switch (v) {
+ case VALIGN_TOP:
+ return "top";
+ case VALIGN_CENTER:
+ return "center";
+ case VALIGN_BOTTOM:
+ return "bottom";
+ }
+
+ boost::throw_exception (MiscError ("unknown subtitle valign type"));
+}
+
+VAlign
+dcp::string_to_valign (string s)
+{
+ if (s == "top") {
+ return VALIGN_TOP;
+ } else if (s == "center") {
+ return VALIGN_CENTER;
+ } else if (s == "bottom") {
+ return VALIGN_BOTTOM;
+ }
+
+ boost::throw_exception (DCPReadError ("unknown subtitle valign type"));
+}