Add "U8" character code table for binary STL.
[libsub.git] / src / reader_factory.cc
index 31a205b91bfd38a35e9feb12533717ca67ba2617..fb717eac703ed1b475e06639d7afcfec11d7fb2c 100644 (file)
 
 */
 
-#include <fstream>
-#include <boost/algorithm/string.hpp>
 #include "reader_factory.h"
-#include "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>
 
 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>
@@ -35,10 +38,15 @@ sub::reader_factory (boost::filesystem::path file_name)
 {
        string ext = file_name.extension().string();
        transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
-       
-       if (ext == ".xml" || ext == ".mxf") {
+
+       if (ext == ".xml") {
                return shared_ptr<Reader> (new DCPReader (file_name));
-       }
+        }
+
+        if (ext == ".mxf") {
+                /* Assume this is some MXF-wrapped SMPTE subtitles */
+                return shared_ptr<Reader> (new DCPReader (file_name));
+        }
 
        if (ext == ".stl") {
                /* Check the start of the DFC */
@@ -53,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> ();
 }