diff options
Diffstat (limited to 'src/lib.c')
-rw-r--r-- | src/lib.c | 142 |
1 files changed, 56 insertions, 86 deletions
@@ -1,6 +1,6 @@ /* enchant * Copyright (C) 2003, 2004 Dom Lachowicz - * Copyright (C) 2017 Reuben Thomas <rrt@sc3d.org> + * Copyright (C) 2017-2021 Reuben Thomas <rrt@sc3d.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -166,10 +166,8 @@ enchant_is_valid_dictionary_tag(const char * const tag) { const char * it; for (it = tag; *it; ++it) - { - if(!g_ascii_isalnum(*it) && *it != '_') - return 0; - } + if(!g_ascii_isalnum(*it) && *it != '_') + return 0; return it != tag; /*empty tag invalid*/ } @@ -772,18 +770,20 @@ enchant_provider_is_valid(EnchantProvider * provider) { if (provider == NULL) g_warning ("EnchantProvider cannot be NULL\n"); + else if (provider->dispose == NULL) + g_warning ("EnchantProvider's dispose method cannot be NULL\n"); + else if (provider->request_dict == NULL) + g_warning ("EnchantProvider's request_dict method cannot be NULL\n"); + else if (provider->dispose_dict == NULL) + g_warning ("EnchantProvider's dispose_dict method cannot be NULL\n"); else if (provider->identify == NULL) g_warning ("EnchantProvider's identify method cannot be NULL\n"); else if (!g_utf8_validate((*provider->identify)(provider), -1, NULL)) - g_warning ("EnchantProvider's identify method does not return valid UTF-8.\n"); + g_warning ("EnchantProvider's identify method does not return valid UTF-8\n"); else if (provider->describe == NULL) g_warning ("EnchantProvider's describe method cannot be NULL\n"); else if (!g_utf8_validate((*provider->describe)(provider), -1, NULL)) - g_warning ("EnchantProvider's describe method does not return valid UTF-8.\n"); - else if (provider->dispose == NULL) - g_warning ("EnchantProvider's dispose method cannot be NULL\n"); - else if (provider->dispose_dict == NULL) - g_warning ("EnchantProvider's dispose_dict method cannot be NULL\n"); + g_warning ("EnchantProvider's describe method does not return valid UTF-8\n"); else if (provider->list_dicts == NULL) g_warning ("EnchantProvider's list_dicts method cannot be NULL\n"); else @@ -836,14 +836,10 @@ enchant_load_providers_in_dir (EnchantBroker * broker, const char *dir_name) } } else - { - g_module_close (module); - } + g_module_close (module); } else - { - g_warning ("Error loading plugin: %s\n", g_module_error()); - } + g_warning ("Error loading plugin: %s\n", g_module_error()); g_free (filename); #ifdef _WIN32 @@ -961,10 +957,8 @@ enchant_get_ordered_providers (EnchantBroker * broker, const char * const tag) /* append providers not in the list, or from an unordered list */ for (GSList * iter = broker->provider_list; iter != NULL; iter = g_slist_next (iter)) - { - if (!g_slist_find (list, iter->data)) - list = g_slist_append (list, iter->data); - } + if (!g_slist_find (list, iter->data)) + list = g_slist_append (list, iter->data); return list; } @@ -1084,25 +1078,19 @@ _enchant_broker_request_dict (EnchantBroker * broker, const char *const tag) GSList * list = enchant_get_ordered_providers (broker, tag); for (GSList *listIter = list; listIter != NULL; listIter = g_slist_next (listIter)) { - EnchantProvider * provider; + EnchantProvider * provider = (EnchantProvider *) listIter->data; - provider = (EnchantProvider *) listIter->data; + dict = (*provider->request_dict) (provider, tag); - if (provider->request_dict) + if (dict) { - dict = (*provider->request_dict) (provider, tag); - - if (dict) - { - - EnchantSession *session = enchant_session_new (provider, tag); - EnchantDictPrivateData *enchant_dict_private_data = g_new0 (EnchantDictPrivateData, 1); - enchant_dict_private_data->reference_count = 1; - enchant_dict_private_data->session = session; - dict->enchant_private_data = (void *)enchant_dict_private_data; - g_hash_table_insert (broker->dict_map, (gpointer)strdup (tag), dict); - break; - } + EnchantSession *session = enchant_session_new (provider, tag); + EnchantDictPrivateData *enchant_dict_private_data = g_new0 (EnchantDictPrivateData, 1); + enchant_dict_private_data->reference_count = 1; + enchant_dict_private_data->session = session; + dict->enchant_private_data = (void *)enchant_dict_private_data; + g_hash_table_insert (broker->dict_map, (gpointer)strdup (tag), dict); + break; } } g_slist_free (list); @@ -1122,9 +1110,7 @@ enchant_broker_request_dict (EnchantBroker * broker, const char *const tag) char * normalized_tag = enchant_normalize_dictionary_tag (tag); if(!enchant_is_valid_dictionary_tag(normalized_tag)) - { - enchant_broker_set_error (broker, "invalid tag character found"); - } + enchant_broker_set_error (broker, "invalid tag character found"); else if ((dict = _enchant_broker_request_dict (broker, normalized_tag)) == NULL) { char * iso_639_only_tag = enchant_iso_639_from_tag (normalized_tag); @@ -1177,31 +1163,28 @@ enchant_broker_list_dicts (EnchantBroker * broker, EnchantDictDescribeFn fn, voi { EnchantProvider *provider = (EnchantProvider *) list->data; - if (provider->list_dicts) - { - size_t n_dicts; - char ** dicts = (*provider->list_dicts) (provider, &n_dicts); + size_t n_dicts; + char ** dicts = (*provider->list_dicts) (provider, &n_dicts); - for (size_t i = 0; i < n_dicts; i++) - { - const char * tag = dicts[i]; - if (enchant_is_valid_dictionary_tag (tag)) { - GSList *providers = enchant_get_ordered_providers (broker, tag); - gint this_priority = g_slist_index (providers, provider); - if (this_priority != -1) { - gint min_priority = this_priority + 1; - gpointer ptr = g_hash_table_lookup (tag_map, tag); - if (ptr != NULL) - min_priority = g_slist_index (providers, ptr); - if (this_priority < min_priority) - g_hash_table_insert (tag_map, strdup (tag), provider); - } - g_slist_free (providers); - } + for (size_t i = 0; i < n_dicts; i++) + { + const char * tag = dicts[i]; + if (enchant_is_valid_dictionary_tag (tag)) { + GSList *providers = enchant_get_ordered_providers (broker, tag); + gint this_priority = g_slist_index (providers, provider); + if (this_priority != -1) { + gint min_priority = this_priority + 1; + gpointer ptr = g_hash_table_lookup (tag_map, tag); + if (ptr != NULL) + min_priority = g_slist_index (providers, ptr); + if (this_priority < min_priority) + g_hash_table_insert (tag_map, strdup (tag), provider); } - - enchant_free_string_list (dicts); + g_slist_free (providers); + } } + + enchant_free_string_list (dicts); } GSList *tags = NULL; @@ -1253,20 +1236,16 @@ enchant_provider_dictionary_exists (EnchantProvider * provider, const char * con int exists = 0; if (provider->dictionary_exists) - { - exists = (*provider->dictionary_exists) (provider, tag); - } - else if (provider->list_dicts) + exists = (*provider->dictionary_exists) (provider, tag); + else { size_t n_dicts; char ** dicts = (*provider->list_dicts) (provider, &n_dicts); for (size_t i = 0; i < n_dicts; i++) - { - if (!strcmp(dicts[i], tag)) { - exists = 1; - break; - } + if (!strcmp(dicts[i], tag)) { + exists = 1; + break; } enchant_free_string_list (dicts); @@ -1286,10 +1265,9 @@ _enchant_broker_dict_exists (EnchantBroker * broker, const char * const tag) if (g_hash_table_lookup (broker->dict_map, (gpointer) tag) != NULL) return 1; - for (GSList *list = broker->provider_list; list != NULL; list = g_slist_next (list)) { + for (GSList *list = broker->provider_list; list != NULL; list = g_slist_next (list)) if (enchant_provider_dictionary_exists ((EnchantProvider *) list->data, tag)) return 1; - } return 0; } @@ -1306,19 +1284,13 @@ enchant_broker_dict_exists (EnchantBroker * broker, const char * const tag) int exists = 0; if(!enchant_is_valid_dictionary_tag(normalized_tag)) - { - enchant_broker_set_error (broker, "invalid tag character found"); - } + enchant_broker_set_error (broker, "invalid tag character found"); else if ((exists = _enchant_broker_dict_exists (broker, normalized_tag)) == 0) { - char * iso_639_only_tag; - - iso_639_only_tag = enchant_iso_639_from_tag (normalized_tag); + char * iso_639_only_tag = enchant_iso_639_from_tag (normalized_tag); if (strcmp (normalized_tag, iso_639_only_tag) != 0) - { - exists = _enchant_broker_dict_exists (broker, iso_639_only_tag); - } + exists = _enchant_broker_dict_exists (broker, iso_639_only_tag); free (iso_639_only_tag); } @@ -1346,9 +1318,8 @@ enchant_dict_is_word_character (EnchantDict * dict, uint32_t uc_in, size_t n) gunichar uc = (gunichar)uc_in; /* Accept quote marks anywhere except at the end of a word */ - if (uc == g_utf8_get_char("'") || uc == g_utf8_get_char("’")) { + if (uc == g_utf8_get_char("'") || uc == g_utf8_get_char("’")) return n < 2; - } GUnicodeType type = g_unichar_type(uc); @@ -1368,9 +1339,8 @@ enchant_dict_is_word_character (EnchantDict * dict, uint32_t uc_in, size_t n) return 1; /* Enchant 1.3.0 defines word chars like this. */ case G_UNICODE_DASH_PUNCTUATION: - if ((n == 1) && (type == G_UNICODE_DASH_PUNCTUATION)) { + if ((n == 1) && (type == G_UNICODE_DASH_PUNCTUATION)) return 1; /* hyphens only accepted within a word. */ - } /* Fallthrough */ case G_UNICODE_CONTROL: |