TEST_FIXTURE(EnchantBrokerFreeDictTestFixture, 
             EnchantBrokerFreeDict_HasTwoInstances_NoCrash)
{
    EnchantDict* dictionary1 = enchant_broker_request_dict(_broker, "en-GB");
    EnchantDict* dictionary2 = enchant_broker_request_dict(_broker, "en-GB");
    enchant_broker_free_dict(_broker, dictionary1);
    enchant_broker_free_dict(_broker, dictionary2);
}
Пример #2
0
void
weechat_aspell_speller_free_value_cb (struct t_hashtable *hashtable,
                                      const void *key, void *value)
{
#ifdef USE_ENCHANT
    EnchantDict *ptr_speller;
#else
    AspellSpeller *ptr_speller;
#endif /* USE_ENCHANT */

    /* make C compiler happy */
    (void) hashtable;

    if (weechat_aspell_plugin->debug)
    {
        weechat_printf (NULL,
                        "%s: removing speller for lang \"%s\"",
                        ASPELL_PLUGIN_NAME, (const char *)key);
    }

    /* free speller */
#ifdef USE_ENCHANT
    ptr_speller = (EnchantDict *)value;
    enchant_broker_free_dict (broker, ptr_speller);
#else
    ptr_speller = (AspellSpeller *)value;
    aspell_speller_save_all_word_lists (ptr_speller);
    delete_aspell_speller (ptr_speller);
#endif /* USE_ENCHANT */
}
Пример #3
0
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(EnchantBrokerFreeDictTestFixture, 
             EnchantBrokerFreeDict)
{
    enchant_broker_free_dict(_broker, _dictionary);
    CHECK_EQUAL(_dictionary, dictionaryToBeFreed);
    _dictionary = NULL;
}
TEST_FIXTURE(EnchantBrokerFreeDictNoDisposeTestFixture, 
             EnchantBrokerFreeDict_NotOnProvider_DoNothing)
{
    testResults_;
    enchant_broker_free_dict(_broker, _dictionary);
    _dictionary = NULL;
}
Пример #6
0
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);
}
Пример #7
0
void sc_speller_reinit_enchant_dict(void)
{
	const gchar *lang = sc_info->default_language;

	/* Release a previous dict object */
	if (sc_speller_dict != NULL)
		enchant_broker_free_dict(sc_speller_broker, sc_speller_dict);

#if HAVE_ENCHANT_1_5
	{
		const gchar *old_path;
		gchar *new_path;

		/* add custom dictionary path for myspell (primarily used on Windows) */
		old_path = enchant_broker_get_param(sc_speller_broker, "enchant.myspell.dictionary.path");
		if (old_path != NULL)
			new_path = g_strconcat(
				old_path, G_SEARCHPATH_SEPARATOR_S, sc_info->dictionary_dir, NULL);
		else
			new_path = sc_info->dictionary_dir;

		enchant_broker_set_param(sc_speller_broker, "enchant.myspell.dictionary.path", new_path);
		if (new_path != sc_info->dictionary_dir)
			g_free(new_path);
	}
#endif
	create_dicts_array();

	/* Check if the stored default dictionary is (still) available, fall back to the first
	 * one in the list if not */
	if (EMPTY(lang) || ! check_default_lang())
	{
		if (sc_info->dicts->len > 0)
		{
			lang = g_ptr_array_index(sc_info->dicts, 0);
			g_warning("Stored language ('%s') could not be loaded. Falling back to '%s'",
				sc_info->default_language, lang);
		}
		else
			g_warning("Stored language ('%s') could not be loaded.", sc_info->default_language);
	}

	/* Request new dict object */
	if (! EMPTY(lang))
		sc_speller_dict = enchant_broker_request_dict(sc_speller_broker, lang);
	else
		sc_speller_dict = NULL;
	if (sc_speller_dict == NULL)
	{
		broker_init_failed();
		gtk_widget_set_sensitive(sc_info->menu_item, FALSE);
	}
	else
	{
		gtk_widget_set_sensitive(sc_info->menu_item, TRUE);
	}
}
TEST_FIXTURE(EnchantBrokerDictExists_ProviderImplementsAll_TestFixture, 
             EnchantBrokerDictExists_CalledWhenDictionaryIsInUse_DoesNotCallAnyMethods_GetsCachedResult)
{
  EnchantDict* dict = enchant_broker_request_dict(_broker, "en-GB");

  enchant_broker_dict_exists(_broker, "en-GB");
  CHECK_EQUAL(0,listDictionariesCalled);
  CHECK_EQUAL(0,dictionaryExistsCalled);

  enchant_broker_free_dict(_broker, dict);
}
TEST_FIXTURE(EnchantBrokerFreeDictTestFixture, 
             EnchantBrokerFreeDict_HasPreviousError_ErrorCleared)
{
  
    SetErrorOnMockProvider("something bad happened");

    enchant_broker_free_dict(_broker, _dictionary);
    _dictionary = NULL;

    CHECK_EQUAL((void*)NULL, (void*)enchant_broker_get_error(_broker));
}
Пример #10
0
static void spellchecker_reload_dicts()
{
	while (!g_pEnchantDicts->isEmpty())
		enchant_broker_free_dict(g_pEnchantBroker, g_pEnchantDicts->takeFirst());

	const QStringList& wantedDictionaries = KVI_OPTION_STRINGLIST(KviOption_stringlistSpellCheckerDictionaries);
	foreach(QString szLang, wantedDictionaries) {
		EnchantDict* pDict = enchant_broker_request_dict(g_pEnchantBroker, szLang.toUtf8().data());
		if (pDict) {
			g_pEnchantDicts->append(pDict);
		} else {
			qDebug("Can't load spellchecker dictionary %s: %s", szLang.toUtf8().data(), enchant_broker_get_error(g_pEnchantBroker));
		}
	}
Пример #11
0
static void php_enchant_dict_free(zend_resource *rsrc) /* {{{ */

{
	if (rsrc->ptr) {
		enchant_dict *pdict = (enchant_dict *)rsrc->ptr;
		if (pdict) {
			enchant_broker *pbroker = pdict->pbroker;

			if (pdict->pdict && pbroker) {
				enchant_broker_free_dict(pbroker->pbroker, pdict->pdict);
			}

			pbroker->dict[pdict->id] = NULL;
			efree(pdict);
			zend_list_delete(pbroker->rsrc);
		}
	}
}
Пример #12
0
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;
}
Пример #13
0
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;
}
Пример #14
0
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;
}
Пример #15
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_FIXTURE(EnchantBrokerFreeDictTestFixture, 
             EnchantBrokerFreeDict_NullDict_DoNothing)
{
    enchant_broker_free_dict(_broker, NULL);
    CHECK_EQUAL((EnchantDict*)NULL, dictionaryToBeFreed);
}