static const char *enca_guess(struct mp_log *log, bstr buf, const char *language) { if (!language || !language[0]) language = "__"; // neutral language const char *detected_cp = NULL; EncaAnalyser analyser = enca_analyser_alloc(language); if (analyser) { enca_set_termination_strictness(analyser, 0); EncaEncoding enc = enca_analyse_const(analyser, buf.start, buf.len); const char *tmp = enca_charset_name(enc.charset, ENCA_NAME_STYLE_ICONV); if (tmp && enc.charset != ENCA_CS_UNKNOWN) detected_cp = tmp; enca_analyser_free(analyser); } else { mp_err(log, "ENCA doesn't know language '%s'\n", language); size_t langcnt; const char **languages = enca_get_languages(&langcnt); mp_err(log, "ENCA supported languages:"); for (int i = 0; i < langcnt; i++) mp_err(log, " %s", languages[i]); mp_err(log, "\n"); free(languages); } return detected_cp; }
static const char *enca_guess(struct mp_log *log, bstr buf, const char *language) { // Do our own UTF-8 detection, because ENCA seems to get it wrong sometimes // (suggested by divVerent). Explicitly allow cut-off UTF-8. if (bstr_validate_utf8(buf) > -8) return "UTF-8"; if (!language || !language[0]) language = "__"; // neutral language const char *detected_cp = NULL; EncaAnalyser analyser = enca_analyser_alloc(language); if (analyser) { enca_set_termination_strictness(analyser, 0); EncaEncoding enc = enca_analyse_const(analyser, buf.start, buf.len); const char *tmp = enca_charset_name(enc.charset, ENCA_NAME_STYLE_ICONV); if (tmp && enc.charset != ENCA_CS_UNKNOWN) detected_cp = tmp; enca_analyser_free(analyser); } else { mp_err(log, "ENCA doesn't know language '%s'\n", language); size_t langcnt; const char **languages = enca_get_languages(&langcnt); mp_err(log, "ENCA supported languages:"); for (int i = 0; i < langcnt; i++) mp_err(log, " %s", languages[i]); mp_err(log, "\n"); free(languages); } return detected_cp; }
SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) { m_ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); findCodecs(); foreach (QTextCodec *codec, codecs) m_ui.icyEncodingComboBox->addItem(codec->name()); #ifdef WITH_ENCA size_t n = 0; const char **langs = enca_get_languages(&n); for (size_t i = 0; i < n; ++i) m_ui.encaAnalyserComboBox->addItem(langs[i]); #endif QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("HTTP"); int pos = m_ui.icyEncodingComboBox->findText(settings.value("icy_encoding","UTF-8").toString()); m_ui.icyEncodingComboBox->setCurrentIndex(pos); m_ui.bufferSizeSpinBox->setValue(settings.value("buffer_size",384).toInt()); m_ui.userAgentCheckBox->setChecked(settings.value("override_user_agent",false).toBool()); m_ui.userAgentLineEdit->setText(settings.value("user_agent").toString()); #ifdef WITH_ENCA m_ui.autoCharsetCheckBox->setChecked(settings.value("use_enca", false).toBool()); pos = m_ui.encaAnalyserComboBox->findText(settings.value("enca_lang", langs[n-1]).toString()); m_ui.encaAnalyserComboBox->setCurrentIndex(pos); #else m_ui.autoCharsetCheckBox->setEnabled(false); #endif settings.endGroup(); }
SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); findCodecs(); foreach (QTextCodec *codec, codecs) ui.cueEncComboBox->addItem(codec->name()); #ifdef WITH_ENCA size_t n = 0; const char **langs = enca_get_languages(&n); for (size_t i = 0; i < n; ++i) ui.encaAnalyserComboBox->addItem(langs[i]); #endif QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("CUE"); int pos = ui.cueEncComboBox->findText(settings.value("encoding","UTF-8").toString()); ui.cueEncComboBox->setCurrentIndex(pos); #ifdef WITH_ENCA ui.autoCharsetCheckBox->setChecked(settings.value("use_enca", false).toBool()); pos = ui.encaAnalyserComboBox->findText(settings.value("enca_lang", langs[n-1]).toString()); ui.encaAnalyserComboBox->setCurrentIndex(pos); #else ui.autoCharsetCheckBox->setEnabled(false); #endif ui.dirtyCueCheckBox->setChecked(settings.value("dirty_cue", false).toBool()); settings.endGroup(); }
void *ass_guess_buffer_cp(ASS_Library *library, unsigned char *buffer, int buflen, char *preferred_language, char *fallback) { const char **languages; size_t langcnt; EncaAnalyser analyser; EncaEncoding encoding; char *detected_sub_cp = NULL; int i; languages = enca_get_languages(&langcnt); ass_msg(library, MSGL_V, "ENCA supported languages"); for (i = 0; i < langcnt; i++) { ass_msg(library, MSGL_V, "lang %s", languages[i]); } for (i = 0; i < langcnt; i++) { const char *tmp; if (strcasecmp(languages[i], preferred_language) != 0) continue; analyser = enca_analyser_alloc(languages[i]); encoding = enca_analyse_const(analyser, buffer, buflen); tmp = enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV); if (tmp && encoding.charset != ENCA_CS_UNKNOWN) { detected_sub_cp = strdup(tmp); ass_msg(library, MSGL_INFO, "ENCA detected charset: %s", tmp); } enca_analyser_free(analyser); } free(languages); if (!detected_sub_cp) { detected_sub_cp = strdup(fallback); ass_msg(library, MSGL_INFO, "ENCA detection failed: fallback to %s", fallback); } return detected_sub_cp; }