Add "U8" character code table for binary STL.
[libsub.git] / src / reader_factory.cc
index 6c0259d94edb72224f4709908826eff5347407ba..fb717eac703ed1b475e06639d7afcfec11d7fb2c 100644 (file)
 */
 
 #include "reader_factory.h"
-#include "interop_dcp_reader.h"
-#include "smpte_dcp_reader.h"
 #include "stl_binary_reader.h"
 #include "stl_text_reader.h"
+#include "dcp_reader.h"
+#include "subrip_reader.h"
+#include "sub_assert.h"
 #include <libxml++/libxml++.h>
 #include <boost/algorithm/string.hpp>
 #include <fstream>
@@ -29,7 +30,7 @@
 using std::string;
 using std::ifstream;
 using boost::algorithm::ends_with;
-using boost::shared_ptr;
+using std::shared_ptr;
 using namespace sub;
 
 shared_ptr<Reader>
@@ -39,21 +40,12 @@ sub::reader_factory (boost::filesystem::path file_name)
        transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
 
        if (ext == ".xml") {
-                /* XXX: unfortunate API weakness in libcxml; we can't find out what a
-                   file's root node name is.
-                */
-                xmlpp::DomParser parser (file_name.string ());
-                string const root = parser.get_document()->get_root_node()->get_name();
-                if (root == "DCSubtitle") {
-                        return shared_ptr<Reader> (new InteropDCPReader (file_name));
-                } else if (root == "SubtitleReel") {
-                        return shared_ptr<Reader> (new SMPTEDCPReader (file_name, false));
-                }
+               return shared_ptr<Reader> (new DCPReader (file_name));
         }
 
         if (ext == ".mxf") {
                 /* Assume this is some MXF-wrapped SMPTE subtitles */
-                return shared_ptr<Reader> (new SMPTEDCPReader (file_name, true));
+                return shared_ptr<Reader> (new DCPReader (file_name));
         }
 
        if (ext == ".stl") {
@@ -69,5 +61,13 @@ sub::reader_factory (boost::filesystem::path file_name)
                }
        }
 
+       if (ext == ".srt") {
+               FILE* f = fopen (file_name.string().c_str(), "r");
+               SUB_ASSERT (f);
+               shared_ptr<Reader> r (new SubripReader(f));
+               fclose (f);
+               return r;
+       }
+
        return shared_ptr<Reader> ();
 }