using std::vector;
using std::cout;
using std::string;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::scoped_array;
using boost::optional;
-using dcp::Data;
+using dcp::ArrayData;
using namespace dcpomatic;
StringTextFile::StringTextFile (shared_ptr<const StringTextFileContent> content)
string ext = content->path(0).extension().string();
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
- sub::Reader* reader = 0;
+ std::unique_ptr<sub::Reader> reader;
if (ext == ".stl") {
- FILE* f = fopen_boost (content->path(0), "rb");
+ auto f = fopen_boost (content->path(0), "rb");
if (!f) {
throw OpenFileError (content->path(0), errno, OpenFileError::READ);
}
try {
- reader = new sub::STLBinaryReader (f);
+ reader.reset(new sub::STLBinaryReader(f));
} catch (...) {
fclose (f);
throw;
} else {
/* Text-based file; sort out its character encoding before we try to parse it */
- Data in (content->path (0));
+ ArrayData in (content->path (0));
UErrorCode status = U_ZERO_ERROR;
UCharsetDetector* detector = ucsdet_open (&status);
- ucsdet_setText (detector, reinterpret_cast<const char *> (in.data().get()), in.size(), &status);
+ ucsdet_setText (detector, reinterpret_cast<const char *>(in.data()), in.size(), &status);
UCharsetMatch const * match = ucsdet_detect (detector, &status);
char const * in_charset = ucsdet_getName (match, &status);
scoped_array<uint16_t> utf16 (new uint16_t[in.size() * 2]);
int const utf16_len = ucnv_toUChars (
to_utf16, reinterpret_cast<UChar*>(utf16.get()), in.size() * 2,
- reinterpret_cast<const char *> (in.data().get()), in.size(),
+ reinterpret_cast<const char *>(in.data()), in.size(),
&status
);
ucnv_close (to_utf8);
if (ext == ".srt") {
- reader = new sub::SubripReader (utf8.get());
+ reader.reset(new sub::SubripReader(utf8.get()));
} else if (ext == ".ssa" || ext == ".ass") {
- reader = new sub::SSAReader (utf8.get());
+ reader.reset(new sub::SSAReader(utf8.get()));
}
}
if (reader) {
- _subtitles = sub::collect<vector<sub::Subtitle> > (reader->subtitles ());
+ _subtitles = sub::collect<vector<sub::Subtitle>>(reader->subtitles());
}
-
- delete reader;
}
/** @return time of first subtitle, if there is one */