diff options
author | Vidhoon Vishwanathan <vidhu2366@gmail.com> | 2013-07-20 13:47:48 +0000 |
---|---|---|
committer | Vidhoon Vishwanathan <vidhu2366@gmail.com> | 2013-07-20 13:47:48 +0000 |
commit | 5842991a23cadeb4f1ebd29113f0cd4a8315a077 (patch) | |
tree | 12d201ed807d3e21ccc4dff8e71188f0e9045ad9 | |
parent | 31abfea4751af6024ad9c703c207ec41508dab48 (diff) | |
download | enchant-5842991a23cadeb4f1ebd29113f0cd4a8315a077.tar.gz |
[COMPDICT] New broker API for composite dictionary
This patch defines and implments a new enchant broker API
for creating composite dictionary:
enchant_broker_request_composite_dict
This API is used from application to create a composite dict
and it internally calls the composite provider public interface
composite_provider_create_dict API to obtain services.
Signed-off-by: Vidhoon Viswanathan <vidhu2366@gmail.com>
git-svn-id: svn+ssh://svn.abisource.com/svnroot/enchant/branches/gsoc2013cdict@33280 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6
-rw-r--r-- | src/enchant.c | 45 | ||||
-rw-r--r-- | src/enchant.h | 4 |
2 files changed, 49 insertions, 0 deletions
diff --git a/src/enchant.c b/src/enchant.c index e1f3245..8d3c8ed 100644 --- a/src/enchant.c +++ b/src/enchant.c @@ -41,6 +41,7 @@ #include "enchant.h" #include "enchant-provider.h" #include "pwl.h" +#include "composite_provider.h" #ifdef XP_TARGET_COCOA #import "enchant_cocoa.h" @@ -1869,6 +1870,50 @@ enchant_broker_request_dict (EnchantBroker * broker, const char *const tag) } /** + * enchant_broker_request_composite_dict + * @broker: A non-null #EnchantBroker + * @tags: The non-null language tags you wish to request a 'composite' dictionary for ("en_US", "de_DE", ...) + * + * Returns: A 'composite' #EnchantDict, or %null if no suitable dictionary could be found. This dictionary is reference counted. + */ +ENCHANT_MODULE_EXPORT (EnchantDict *) +enchant_broker_request_composite_dict (EnchantBroker * broker, const char *const tag_string) +{ + EnchantDict *composite_dict = NULL,*dict=NULL; + char *normalized_tag,*lang_tag; + char delimiter[] = ":"; // the tag_string will have several language tags seperated by ":" used as delimiter + GSList *dict_list = NULL; + + g_return_val_if_fail (broker, NULL); + g_return_val_if_fail (tag_string && strlen(tag_string), NULL); + + enchant_broker_clear_error (broker); + + lang_tag = strtok(tag_string, delimiter); + while(lang_tag != NULL) + { + normalized_tag = enchant_normalize_dictionary_tag (lang_tag); + if(!enchant_is_valid_dictionary_tag(normalized_tag)) + { + enchant_broker_set_error (broker, "invalid tag character found"); + break; + } + else if ((dict = _enchant_broker_request_dict (broker, normalized_tag)) == NULL) + { + char * iso_639_only_tag; + iso_639_only_tag = enchant_iso_639_from_tag (normalized_tag); + dict = _enchant_broker_request_dict (broker, iso_639_only_tag); + dict_list = g_slist_append(dict_list,dict); + g_free (iso_639_only_tag); + } + } + + g_free (normalized_tag); + composite_dict = composite_provider_create_dict(dict_list); + return composite_dict; +} + +/** * enchant_broker_describe * @broker: A non-null #EnchantBroker * @fn: A non-null #EnchantBrokerDescribeFn diff --git a/src/enchant.h b/src/enchant.h index dfc5b4d..b715269 100644 --- a/src/enchant.h +++ b/src/enchant.h @@ -74,6 +74,10 @@ ENCHANT_MODULE_EXPORT (void) enchant_broker_set_ordering (EnchantBroker * broker, const char * const tag, const char * const ordering); + +ENCHANT_MODULE_EXPORT (EnchantDict *) +enchant_broker_request_composite_dict (EnchantBroker * broker, const char *const tag_string); + /* const */ ENCHANT_MODULE_EXPORT(char *) enchant_broker_get_error (EnchantBroker * broker); |