Bug 762022 - [ESpellEntry] Considers a comma to be a spelling error ][

Whether an apostrophe is part of the word is not a question of current
user's locale, but the question of enabled dictionaries.
This commit is contained in:
Milan Crha
2016-02-22 11:39:30 +01:00
parent f962c8ab98
commit aafdf28d6d

View File

@ -234,36 +234,43 @@ spell_entry_store_word (gchar ***set,
}
static gboolean
entry_is_word_char (gunichar uc)
entry_is_word_char (gunichar uc,
gboolean has_en_language)
{
if (uc == L'\'') {
PangoLanguage *current_locale = pango_language_get_default ();
/* English locales use apostrophes as part of the word */
if (pango_language_matches (current_locale, "en"))
return TRUE;
}
return g_unichar_isalnum (uc) || g_unichar_ismark (uc);
return (uc == L'\'' && has_en_language) ||
g_unichar_isalnum (uc) ||
g_unichar_ismark (uc);
}
static void
entry_strsplit_utf8 (GtkEntry *entry,
entry_strsplit_utf8 (ESpellEntry *entry,
gchar ***set,
gint **starts,
gint **ends)
{
const gchar *text, *ptr, *word_start;
gint n_strings, n_word;
gchar **active_languages;
guint n_languages, ii;
gboolean has_en_language = FALSE;
text = gtk_entry_get_text (GTK_ENTRY (entry));
g_return_if_fail (g_utf8_validate (text, -1, NULL));
active_languages = e_spell_checker_list_active_languages (entry->priv->spell_checker, &n_languages);
for (ii = 0; active_languages && ii < n_languages && !has_en_language; ii++) {
has_en_language =
g_ascii_strncasecmp (active_languages[ii], "en", 2) == 0 &&
(!active_languages[ii][2] || active_languages[ii][2] == '_');
}
g_strfreev (active_languages);
/* Find how many words we have */
n_strings = 0;
word_start = NULL;
for (ptr = text; *ptr; ptr = g_utf8_next_char (ptr)) {
if (!entry_is_word_char (g_utf8_get_char (ptr))) {
if (!entry_is_word_char (g_utf8_get_char (ptr), has_en_language)) {
word_start = NULL;
} else if (!word_start) {
n_strings++;
@ -279,7 +286,7 @@ entry_strsplit_utf8 (GtkEntry *entry,
word_start = NULL;
n_word = -1;
for (ptr = text; *ptr; ptr = g_utf8_next_char (ptr)) {
if (!entry_is_word_char (g_utf8_get_char (ptr))) {
if (!entry_is_word_char (g_utf8_get_char (ptr), has_en_language)) {
if (word_start)
spell_entry_store_word (set, starts, ends, text, n_word, n_strings, word_start, ptr);
word_start = NULL;
@ -374,7 +381,7 @@ add_to_dictionary (GtkWidget *menuitem,
}
entry_strsplit_utf8 (
GTK_ENTRY (entry),
entry,
&entry->priv->words,
&entry->priv->word_starts,
&entry->priv->word_ends);
@ -406,7 +413,7 @@ ignore_all (GtkWidget *menuitem,
}
entry_strsplit_utf8 (
GTK_ENTRY (entry),
entry,
&entry->priv->words,
&entry->priv->word_starts,
&entry->priv->word_ends);
@ -724,7 +731,7 @@ spell_entry_changed (GtkEditable *editable)
}
entry_strsplit_utf8 (
GTK_ENTRY (entry),
entry,
&entry->priv->words,
&entry->priv->word_starts,
&entry->priv->word_ends);