summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVidhoon Vishwanathan <vidhu2366@gmail.com>2013-07-20 13:47:48 +0000
committerVidhoon Vishwanathan <vidhu2366@gmail.com>2013-07-20 13:47:48 +0000
commit5842991a23cadeb4f1ebd29113f0cd4a8315a077 (patch)
tree12d201ed807d3e21ccc4dff8e71188f0e9045ad9
parent31abfea4751af6024ad9c703c207ec41508dab48 (diff)
downloadenchant-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.c45
-rw-r--r--src/enchant.h4
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);