static void php_enchant_broker_free(zend_resource *rsrc) /* {{{ */ { if (rsrc->ptr) { enchant_broker *broker = (enchant_broker *)rsrc->ptr; if (broker) { if (broker->pbroker) { if (broker->dictcnt && broker->dict) { if (broker->dict) { int total; total = broker->dictcnt-1; do { if (broker->dict[total]) { enchant_dict *pdict = broker->dict[total]; broker->dict[total] = NULL; zend_list_free(pdict->rsrc); efree(pdict); } total--; } while (total>=0); } efree(broker->dict); broker->dict = NULL; } enchant_broker_free(broker->pbroker); } efree(broker); } } }
TEST_FIXTURE(EnchantBrokerFreeTestFixture, EnchantBrokerFree_DisposesProviders) { enchant_broker_free(_broker); CHECK(disposeWasCalled); _broker = NULL; }
void sc_speller_free(void) { sc_speller_dicts_free(); if (sc_speller_dict != NULL) enchant_broker_free_dict(sc_speller_broker, sc_speller_dict); enchant_broker_free(sc_speller_broker); }
TEST_FIXTURE(EnchantBrokerFreeNoDisposeTestFixture, EnchantBrokerFree_ProviderLacksDispose) { testResults_; enchant_broker_free(_broker); _broker = NULL; }
static void empathy_spell_free_language (SpellLanguage *lang) { enchant_broker_free_dict (lang->config, lang->speller); enchant_broker_free (lang->config); g_slice_free (SpellLanguage, lang); }
TEST_FIXTURE(EnchantBrokerFreeTestFixture, EnchantBrokerFree_DictionaryNotFreed_FreesDictionary) { EnchantDict* dict = enchant_broker_request_dict(_broker, "en_GB"); CHECK(dict); CHECK(!disposeDictionaryCalled); enchant_broker_free(_broker); _broker = NULL; CHECK(disposeDictionaryCalled); }
GList * empathy_spell_get_language_codes (void) { EnchantBroker *broker; GList *list_langs = NULL; broker = enchant_broker_init (); enchant_broker_list_dicts (broker, enumerate_dicts, &list_langs); enchant_broker_free (broker); return list_langs; }
int weechat_plugin_end (struct t_weechat_plugin *plugin) { /* make C compiler happy */ (void) plugin; weechat_aspell_config_write (); weechat_aspell_config_free (); weechat_aspell_speller_end (); #ifdef USE_ENCHANT /* release enchant broker */ enchant_broker_free (broker); #endif return WEECHAT_RC_OK; }
const GSList * cedit_spell_checker_get_available_languages (void) { EnchantBroker *broker; GTree *dicts; if (available_languages_initialized) return available_languages; g_return_val_if_fail (available_languages == NULL, NULL); available_languages_initialized = TRUE; broker = enchant_broker_init (); g_return_val_if_fail (broker != NULL, NULL); /* Use a GTree to efficiently remove duplicates while building the list */ dicts = g_tree_new_full (key_cmp, NULL, (GDestroyNotify)g_free, (GDestroyNotify)g_free); iso_639_table = create_iso_639_table (); iso_3166_table = create_iso_3166_table (); enchant_broker_list_dicts (broker, enumerate_dicts, dicts); enchant_broker_free (broker); g_hash_table_destroy (iso_639_table); g_hash_table_destroy (iso_3166_table); iso_639_table = NULL; iso_3166_table = NULL; g_tree_foreach (dicts, (GTraverseFunc)build_langs_list, NULL); g_tree_destroy (dicts); return available_languages; }
static void spell_notify_languages_cb (EmpathyConf *conf, const gchar *key, gpointer user_data) { GList *l; DEBUG ("Resetting languages due to config change"); /* We just reset the languages list. */ for (l = languages; l; l = l->next) { SpellLanguage *lang; lang = l->data; enchant_broker_free_dict (lang->config, lang->speller); enchant_broker_free (lang->config); g_slice_free (SpellLanguage, lang); } g_list_free (languages); languages = NULL; }
gboolean suggestions_uninit() { gboolean free_success = FALSE; if(enchant_dict) { enchant_broker_free_dict(enchant_broker, enchant_dict); enchant_dict = NULL; } if(enchant_broker) { enchant_broker_free(enchant_broker); enchant_broker = NULL; } if(mod_enchant) { free_success = g_module_close(mod_enchant); mod_enchant = NULL; } return free_success; }
int main (int argc, char **argv) { EnchantBroker *broker; EnchantDict *dict; char * lang_tag = NULL; int mode = 0, i; for (i = 1; i < argc; i++) { if (!strcmp (argv[i], "-lang")) { if (i < (argc - 1)) { lang_tag = g_strdup (argv[++i]); } else { lang_tag = enchant_get_user_language(); if (!lang_tag || !strcmp (lang_tag, "C")) { if (lang_tag) /* lang might be "C" */ g_free (lang_tag); lang_tag = g_strdup ("en"); } } mode = 1; } else if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "-?") || !strcmp(argv[i], "-help")) { printf ("%s [-lang [language_tag]] [-list-dicts] [-h] [-v]\n", argv[0]); if (lang_tag) g_free (lang_tag); return 0; } else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "-version")) { printf ("%s %s\n", argv[0], VERSION); if (lang_tag) g_free (lang_tag); return 0; } else if (!strcmp (argv[i], "-list-dicts")) { mode = 2; } } broker = enchant_broker_init (); if (mode == 0) { enchant_broker_describe (broker, enumerate_providers, stdout); } else if (mode == 1) { if (!lang_tag) { printf ("Error: language tag not specified and environment variable $LANG not set.\n"); enchant_broker_free (broker); return 1; } dict = enchant_broker_request_dict (broker, lang_tag); if (!dict) { printf ("No dictionary available for '%s'.\n", lang_tag); if (lang_tag) g_free (lang_tag); enchant_broker_free (broker); return 1; } else { enchant_dict_describe (dict, describe_dict, stdout); enchant_broker_free_dict (broker, dict); } } else if (mode == 2) { enchant_broker_list_dicts (broker, enumerate_dicts, stdout); } if (lang_tag) g_free (lang_tag); enchant_broker_free (broker); return 0; }
static int parse_file (FILE * in, FILE * out, IspellMode_t mode, int countLines, gchar *dictionary) { EnchantBroker * broker; EnchantDict * dict; GString * str, * word = NULL; GSList * tokens, *token_ptr; gchar * lang; size_t pos, lineCount = 0; gboolean was_last_line = FALSE, corrected_something = FALSE, terse_mode = FALSE; if (mode == MODE_A) print_version (out); if (dictionary) { lang = convert_language_code (dictionary); } else { lang = enchant_get_user_language(); if(!lang) return 1; } /* Enchant will get rid of useless trailing garbage like de_DE@euro or de_DE.ISO-8859-15 */ broker = enchant_broker_init (); dict = enchant_broker_request_dict (broker, lang); if (!dict) { fprintf (stderr, "Couldn't create a dictionary for %s\n", lang); g_free (lang); enchant_broker_free (broker); return 1; } g_free (lang); str = g_string_new (NULL); while (!was_last_line) { gboolean mode_A_no_command = FALSE; was_last_line = consume_line (in, str); if (countLines) lineCount++; if (str->len) { corrected_something = FALSE; if (mode == MODE_A) { switch (*str->str) { case '&': /* Insert uncapitalised in personal word list */ if (str->len > 1) { gunichar c = g_utf8_get_char_validated(str->str + 1, str->len); if (c > 0) { str = g_string_erase(str, 1, g_utf8_next_char(str->str + 1) - (str->str + 1)); g_string_insert_unichar(str, 1, g_unichar_tolower(c)); } } /* FALLTHROUGH */ case '*': /* Insert in personal word list */ if (str->len == 1) goto empty_word; enchant_dict_add(dict, str->str + 1, -1); break; case '@': /* Accept for this session */ if (str->len == 1) goto empty_word; enchant_dict_add_to_session(dict, str->str + 1, -1); break; case '%': /* Exit terse mode */ terse_mode = FALSE; break; case '!': /* Enter terse mode */ terse_mode = TRUE; break; /* Ignore these commands */ case '#': /* Save personal word list (enchant does this automatically) */ case '+': /* LaTeX mode */ case '-': /* nroff mode [default] */ case '~': /* change string character type (enchant is fixed to UTF-8) */ case '`': /* Enter verbose-correction mode */ break; case '$': /* Save correction for rest of session [aspell extension] */ { /* Syntax: $$ra <MISSPELLED>,<REPLACEMENT> */ gchar *prefix = "$$ra "; if (g_str_has_prefix(str->str, prefix)) { gchar *comma = g_utf8_strchr(str->str, -1, (gunichar)','); char *mis = str->str + strlen(prefix); char *cor = comma + 1; ssize_t mis_len = comma - mis; ssize_t cor_len = strlen(str->str) - (cor - str->str); enchant_dict_store_replacement(dict, mis, mis_len, cor, cor_len); } } break; case '^': /* ^ is used as prefix to prevent interpretation of original first character as a command */ /* FALLTHROUGH */ default: /* A word or words to check */ mode_A_no_command = TRUE; break; empty_word: fprintf (out, "Error: The word \"\" is invalid. Empty string.\n"); } } if (mode != MODE_A || mode_A_no_command) { token_ptr = tokens = tokenize_line (str); if (tokens == NULL) putc('\n', out); while (tokens != NULL) { corrected_something = TRUE; word = (GString *)tokens->data; tokens = tokens->next; pos = GPOINTER_TO_INT(tokens->data); tokens = tokens->next; if (mode == MODE_A) do_mode_a (out, dict, word, pos, lineCount, terse_mode); else if (mode == MODE_L) do_mode_l (out, dict, word, lineCount); g_string_free(word, TRUE); } if (token_ptr) g_slist_free (token_ptr); } } if (mode == MODE_A && corrected_something) { fwrite ("\n", 1, 1, out); } g_string_truncate (str, 0); fflush (out); } enchant_broker_free_dict (broker, dict); enchant_broker_free (broker); g_string_free (str, TRUE); return 0; }
///////////////////////////////////////////////////////////////////////////// // Test Error Conditions TEST_FIXTURE(EnchantBrokerFreeTestFixture, EnchantBrokerFree_NullBroker_DoNothing) { enchant_broker_free(NULL); CHECK(!disposeWasCalled); }
gboolean suggestions_init() { gchar dict_tag[DICT_TAG_MAX_LENGTH] = ""; if(g_module_supported() && (mod_enchant = g_module_open(ENCHANT_FILE, G_MODULE_BIND_LAZY))) { g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_init), (gpointer *) &enchant_broker_init); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_free), (gpointer *) &enchant_broker_free); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_list_dicts), (gpointer *) &enchant_broker_list_dicts); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_dict_exists), (gpointer *) &enchant_broker_dict_exists); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_request_dict), (gpointer *) &enchant_broker_request_dict); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_broker_free_dict), (gpointer *) &enchant_broker_free_dict); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_dict_check), (gpointer *) &enchant_dict_check); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_dict_suggest), (gpointer *) &enchant_dict_suggest); g_module_symbol(mod_enchant, G_STRINGIFY(enchant_dict_free_string_list), (gpointer *) &enchant_dict_free_string_list); // in older version of Enchant, enchant_dict_free_string_list might be absent, they will have the // now deprecated function enchant_dict_free_suggestions if(NULL == enchant_dict_free_string_list) g_module_symbol(mod_enchant, G_STRINGIFY(enchant_dict_free_string_list), (gpointer *) &enchant_dict_free_string_list); // check if we have obtained the essential function pointers if(NULL != enchant_broker_init && NULL != enchant_broker_free && NULL != enchant_broker_dict_exists && NULL != enchant_broker_request_dict && NULL != enchant_broker_free_dict && NULL != enchant_dict_check && NULL != enchant_dict_suggest && NULL != enchant_dict_free_string_list) { enchant_broker = enchant_broker_init(); if(enchant_broker) { /* if the sys. lang is suitable, copy that else copy the default lang tag */ if(try_sys_lang(dict_tag, DICT_TAG_MAX_LENGTH)) { if(enchant_broker_dict_exists(enchant_broker, dict_tag)) { enchant_dict = enchant_broker_request_dict(enchant_broker, dict_tag); return TRUE; } G_MESSAGE("Suggestions: Couldn't get '%s' dict. Looking for alternatives...\n", dict_lang_tag); } g_strlcpy(dict_tag, dict_lang_tag, DICT_TAG_MAX_LENGTH); /* if the req. dict. doesn't exist and if list dict func. exists then try to enumerate the dictionaries and see if a compatible one can be found */ if(!enchant_broker_dict_exists(enchant_broker, dict_tag) && enchant_broker_list_dicts) { G_MESSAGE("Suggestions: Couldn't get '%s' dict. Looking for alternatives...\n", dict_lang_tag); dict_tag[0] = '\0'; enchant_broker_list_dicts(enchant_broker, find_dictionary, dict_tag); } if(dict_tag[0] != '\0') { enchant_dict = enchant_broker_request_dict(enchant_broker, dict_tag); G_MESSAGE("Suggestions module successfully loaded"); return TRUE; } } } } if(enchant_broker) { enchant_broker_free(enchant_broker); enchant_broker = NULL; } if(mod_enchant) { g_module_close(mod_enchant); mod_enchant = NULL; } G_MESSAGE("Failed to load suggestions module"); return FALSE; }