Esempio n. 1
0
/*< protected >*/
lt_region_t *
lt_region_create(void)
{
	lt_region_t *retval = lt_mem_alloc_object(sizeof (lt_region_t));

	return retval;
}
Esempio n. 2
0
/*< protected >*/
lt_grandfathered_t *
lt_grandfathered_create(void)
{
	lt_grandfathered_t *retval;

	retval = lt_mem_alloc_object(sizeof (lt_grandfathered_t));

	return retval;
}
Esempio n. 3
0
/*< protected >*/
lt_redundant_t *
lt_redundant_create(void)
{
	lt_redundant_t *retval;

	retval = lt_mem_alloc_object(sizeof (lt_redundant_t));

	return retval;
}
Esempio n. 4
0
/**
 * 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;
}
Esempio n. 5
0
/**
 * 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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
/*< protected >*/
lt_list_t *
lt_list_new(void)
{
	return lt_mem_alloc_object(sizeof (lt_list_t));
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
/*< 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;
}