/*< protected >*/ lt_region_t * lt_region_create(void) { lt_region_t *retval = lt_mem_alloc_object(sizeof (lt_region_t)); return retval; }
/*< protected >*/ lt_grandfathered_t * lt_grandfathered_create(void) { lt_grandfathered_t *retval; retval = lt_mem_alloc_object(sizeof (lt_grandfathered_t)); return retval; }
/*< protected >*/ lt_redundant_t * lt_redundant_create(void) { lt_redundant_t *retval; retval = lt_mem_alloc_object(sizeof (lt_redundant_t)); return retval; }
/** * lt_script_db_new: * * Create a new instance of a #lt_script_db_t. * * Returns: (transfer full): a new instance of #lt_script_db_t. */ lt_script_db_t * lt_script_db_new(void) { lt_script_db_t *retval = lt_mem_alloc_object(sizeof (lt_script_db_t)); if (retval) { lt_error_t *err = NULL; lt_script_t *le; LT_ITER_TMPL_INIT (&retval->parent, _lt_script_db); retval->script_entries = lt_trie_new(); lt_mem_add_ref((lt_mem_t *)retval, retval->script_entries, (lt_destroy_func_t)lt_trie_unref); le = lt_script_create(); lt_script_set_tag(le, "*"); lt_script_set_name(le, "Wildcard entry"); lt_trie_replace(retval->script_entries, lt_script_get_tag(le), le, (lt_destroy_func_t)lt_script_unref); le = lt_script_create(); lt_script_set_tag(le, ""); lt_script_set_name(le, "Empty entry"); lt_trie_replace(retval->script_entries, lt_script_get_tag(le), le, (lt_destroy_func_t)lt_script_unref); retval->xml = lt_xml_new(); if (!retval->xml) { lt_script_db_unref(retval); retval = NULL; goto bail; } lt_mem_add_ref((lt_mem_t *)retval, retval->xml, (lt_destroy_func_t)lt_xml_unref); lt_script_db_parse(retval, &err); if (lt_error_is_set(err, LT_ERR_ANY)) { lt_error_print(err, LT_ERR_ANY); lt_script_db_unref(retval); retval = NULL; lt_error_unref(err); } } bail: return retval; }
/** * lt_region_db_new: * * Create a new instance of a #lt_region_db_t. * * Returns: (transfer full): a new instance of #lt_region_db_t. */ lt_region_db_t * lt_region_db_new(void) { lt_region_db_t *retval = lt_mem_alloc_object(sizeof (lt_region_db_t)); if (retval) { GError *err = NULL; lt_region_t *le; retval->region_entries = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)lt_region_unref); lt_mem_add_ref(&retval->parent, retval->region_entries, (lt_destroy_func_t)g_hash_table_destroy); le = lt_region_create(); lt_region_set_tag(le, "*"); lt_region_set_name(le, "Wildcard entry"); g_hash_table_replace(retval->region_entries, g_strdup(lt_region_get_tag(le)), le); le = lt_region_create(); lt_region_set_tag(le, ""); lt_region_set_name(le, "Empty entry"); g_hash_table_replace(retval->region_entries, g_strdup(lt_region_get_tag(le)), le); retval->xml = lt_xml_new(); if (!retval->xml) { lt_region_db_unref(retval); retval = NULL; goto bail; } lt_mem_add_ref(&retval->parent, retval->xml, (lt_destroy_func_t)lt_xml_unref); lt_region_db_parse(retval, &err); if (err) { g_printerr(err->message); lt_region_db_unref(retval); retval = NULL; g_error_free(err); } } bail: return retval; }
static lt_ext_module_t * lt_ext_module_new_with_data(const char *name, const lt_ext_module_funcs_t *funcs) { lt_ext_module_t *retval; lt_return_val_if_fail (name != NULL, NULL); lt_return_val_if_fail (funcs != NULL, NULL); retval = lt_mem_alloc_object(sizeof (lt_ext_module_t)); if (retval) { retval->name = strdup(name); lt_mem_add_ref(&retval->parent, retval->name, (lt_destroy_func_t)free); retval->funcs = funcs; lt_debug(LT_MSGCAT_MODULE, "Loading the internal extension handler: %s", name); } return retval; }
static lt_ext_module_t * lt_ext_module_new_with_data(const gchar *name, const lt_ext_module_funcs_t *funcs) { lt_ext_module_t *retval; g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (funcs != NULL, NULL); retval = lt_mem_alloc_object(sizeof (lt_ext_module_t)); if (retval) { retval->name = g_strdup(name); lt_mem_add_ref(&retval->parent, retval->name, (lt_destroy_func_t)g_free); retval->funcs = funcs; g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading the internal extension handler: %s", name); } return retval; }
/*< protected >*/ lt_list_t * lt_list_new(void) { return lt_mem_alloc_object(sizeof (lt_list_t)); }
lt_ext_module_t * lt_ext_module_new(const gchar *name) { lt_ext_module_t *retval; g_return_val_if_fail (name != NULL, NULL); retval = lt_mem_alloc_object(sizeof (lt_ext_module_t)); if (retval) { gchar *filename = g_path_get_basename(name), *module = NULL; static const gchar *prefix = "liblangtag-ext-"; static gsize prefix_len = 0; gchar singleton_c; gint singleton; if (prefix_len == 0) prefix_len = strlen(prefix); if (strncmp(filename, prefix, prefix_len) == 0) { gsize len = strlen(&filename[prefix_len]); gsize suffix_len = strlen(G_MODULE_SUFFIX) + 1; if (len > suffix_len && g_strcmp0(&filename[prefix_len + len - suffix_len], "." G_MODULE_SUFFIX) == 0) { module = g_strndup(&filename[prefix_len], len - suffix_len); module[len - suffix_len] = 0; } } if (!module) module = g_strdup(filename); retval->name = module; lt_mem_add_ref(&retval->parent, retval->name, (lt_destroy_func_t)g_free); g_free(filename); if (!lt_ext_module_load(retval)) { lt_ext_module_unref(retval); return NULL; } singleton_c = lt_ext_module_get_singleton(retval); if (singleton_c == ' ' || singleton_c == '*') { g_warning("Not allowed to override the internal handlers for special singleton."); lt_ext_module_unref(retval); return NULL; } singleton = lt_ext_module_singleton_char_to_int(singleton_c); if (singleton < 0) { g_warning("Invalid singleton: `%c' - `%s'", singleton_c, retval->name); lt_ext_module_unref(retval); return NULL; } if (__lt_ext_modules[singleton]) { g_warning("Duplicate extension module: %s", retval->name); lt_ext_module_unref(retval); return NULL; } __lt_ext_modules[singleton] = retval; lt_mem_add_weak_pointer(&retval->parent, (gpointer *)&__lt_ext_modules[singleton]); } return retval; }
/*< public >*/ lt_xml_t * lt_xml_new(void) { GError *err = NULL; G_LOCK (lt_xml); if (__xml) { G_UNLOCK (lt_xml); return lt_xml_ref(__xml); } __xml = lt_mem_alloc_object(sizeof (lt_xml_t)); if (__xml) { lt_mem_add_weak_pointer(&__xml->parent, (gpointer *)&__xml); if (!lt_xml_read_subtag_registry(__xml, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "calendar.xml", &__xml->cldr_bcp47_calendar, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "collation.xml", &__xml->cldr_bcp47_collation, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "currency.xml", &__xml->cldr_bcp47_currency, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "number.xml", &__xml->cldr_bcp47_number, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "timezone.xml", &__xml->cldr_bcp47_timezone, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "transform.xml", &__xml->cldr_bcp47_transform, &err)) goto bail; if (!lt_xml_read_cldr_bcp47(__xml, "variant.xml", &__xml->cldr_bcp47_variant, &err)) goto bail; if (!lt_xml_read_cldr_supplemental(__xml, "likelySubtags.xml", &__xml->cldr_supplemental_likelysubtags, &err)) goto bail; } bail: if (err) { g_warning(err->message); g_error_free(err); lt_xml_unref(__xml); } G_UNLOCK (lt_xml); return __xml; }