ProgrammingError (std::string file, int line);
};
+class TextEncodingError : public StringError
+{
+public:
+ TextEncodingError (std::string s)
+ : StringError (s)
+ {}
+};
+
#endif
#include "subrip_content.h"
#include <sub/subrip_reader.h>
#include <sub/collect.h>
+#include <uchardet/uchardet.h>
+#include <iostream>
#include "i18n.h"
using std::vector;
+using std::cout;
+using std::string;
using boost::shared_ptr;
SubRip::SubRip (shared_ptr<const SubRipContent> content)
throw OpenFileError (content->path (0));
}
+ /* Guess the encoding */
+ uchardet_t det = uchardet_new ();
+ char buffer[1024];
+ while (!feof (f)) {
+ int const n = fread (buffer, 1, sizeof (buffer), f);
+ if (uchardet_handle_data (det, buffer, n)) {
+ break;
+ }
+ }
+
+ uchardet_data_end (det);
+ string charset = uchardet_get_charset (det);
+ uchardet_delete (det);
+
+ if (charset != "UTF-8") {
+ throw TextEncodingError (_("unrecognised character set; please use files encoded in UTF-8"));
+ }
+
+ rewind (f);
sub::SubripReader reader (f);
_subtitles = sub::collect<vector<sub::Subtitle> > (reader.subtitles ());
}
def build(bld):
uselib = 'BOOST_THREAD BOOST_DATETIME OPENJPEG DCP XMLSEC CXML XMLPP AVFORMAT AVFILTER AVCODEC '
uselib += 'AVUTIL SWSCALE POSTPROC CURL BOOST_FILESYSTEM SSH ZIP CAIROMM FONTCONFIG PANGOMM SUB MAGICK SNDFILE SAMPLERATE BOOST_REGEX '
+ uselib += 'UCHARDET '
if bld.env.TARGET_WINDOWS:
uselib += 'WINSOCK2'
obj = bld(features='cxx cxxprogram')
obj.name = 'unit-tests'
obj.uselib = 'BOOST_TEST BOOST_THREAD BOOST_FILESYSTEM BOOST_DATETIME SNDFILE SAMPLERATE DCP OPENJPEG FONTCONFIG CAIROMM PANGOMM XMLPP '
- obj.uselib += 'AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML MAGICK SUB GLIB CURL SSH XMLSEC BOOST_REGEX '
+ obj.uselib += 'AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC CXML MAGICK SUB GLIB CURL SSH XMLSEC BOOST_REGEX UCHARDET '
if bld.env.TARGET_WINDOWS:
obj.uselib += 'WINSOCK2'
obj.use = 'libdcpomatic2'
else:
conf.check_cfg(package='libcurl', args='--cflags --libs', uselib_store='CURL', mandatory=True)
+ # uchardet
+ conf.check_cfg(package='uchardet', args='--cflags --libs', uselib_store='UCHARDET', mandatory=True)
# libsndfile
conf.check_cfg(package='sndfile', args='--cflags --libs', uselib_store='SNDFILE', mandatory=True)