#include <curl/curl.h>
#include <glib.h>
#include <pangomm/init.h>
+#include <unicode/utypes.h>
+#include <unicode/unistr.h>
+#include <unicode/translit.h>
#include <boost/algorithm/string.hpp>
#include <boost/range/algorithm/replace_if.hpp>
#include <boost/thread.hpp>
/* Render something to fontconfig to create its cache */
list<StringText> subs;
dcp::SubtitleString ss(
- optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, dcp::DIRECTION_LTR,
- "Hello dolly", dcp::NONE, dcp::Colour(), dcp::Time(), dcp::Time()
+ optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, dcp::Direction::LTR,
+ "Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time()
);
subs.push_back (StringText(ss, 0));
render_text (subs, list<shared_ptr<Font>>(), dcp::Size(640, 480), DCPTime(), 24);
Safety first and all that.
*/
- wstring ws = boost::locale::conv::utf_to_utf<wchar_t>(s);
+ /* First transliterate using libicu to try to remove accents in a "nice" way */
+ auto icu_utf16 = icu::UnicodeString::fromUTF8(icu::StringPiece(s));
+ auto status = U_ZERO_ERROR;
+ auto transliterator = icu::Transliterator::createInstance("NFD; [:M:] Remove; NFC", UTRANS_FORWARD, status);
+ transliterator->transliterate(icu_utf16);
+ s.clear ();
+ icu_utf16.toUTF8String(s);
+ /* Then remove anything that's not in a very limited character set */
+ wstring ws = boost::locale::conv::utf_to_utf<wchar_t>(s);
string out;
string const allowed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_%.+";
for (size_t i = 0; i < ws.size(); ++i) {
-
wchar_t c = ws[i];
-
- /* Remove some accents */
- if (wstring(L"áàâ").find(c) != string::npos) {
- c = 'a';
- }
- if (wstring(L"éèêë").find(c) != string::npos) {
- c = 'e';
- }
- if (wstring(L"ö").find(c) != string::npos) {
- c = 'o';
- }
- if (wstring(L"ü").find(c) != string::npos) {
- c = 'u';
- }
-
if (allowed.find(c) != string::npos) {
out += c;
}
Eyes
increment_eyes (Eyes e)
{
- if (e == EYES_LEFT) {
- return EYES_RIGHT;
+ if (e == Eyes::LEFT) {
+ return Eyes::RIGHT;
}
- return EYES_LEFT;
+ return Eyes::LEFT;
}
void
emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder)
{
/* XXX: this is rather inefficient; decoding the image just to get its size */
- FFmpegImageProxy proxy (sub.png_image(), VIDEO_RANGE_FULL);
+ FFmpegImageProxy proxy (sub.png_image(), VideoRange::FULL);
auto image = proxy.image().image;
/* set up rect with height and width */
dcpomatic::Rect<double> rect(0, 0, image->size().width / double(size.width), image->size().height / double(size.height));