GSList *
empathy_smiley_manager_parse (EmpathySmileyManager *manager,
			      const gchar          *text)
{
	EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
	EmpathySmiley            *smiley;
	SmileyManagerTree        *cur_tree = priv->tree;
	const gchar              *t;
	const gchar              *cur_str = text;
	GSList                   *smileys = NULL;

	g_return_val_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager), NULL);
	g_return_val_if_fail (text != NULL, NULL);

	for (t = text; *t; t = g_utf8_next_char (t)) {
		SmileyManagerTree *child;
		gunichar           c;
		
		c = g_utf8_get_char (t);
		child = smiley_manager_tree_find_child (cur_tree, c);

		if (cur_tree == priv->tree) {
			if (child) {
				if (t > cur_str) {
					smiley = smiley_new (NULL, g_strndup (cur_str, t - cur_str));
					smileys = g_slist_prepend (smileys, smiley);
				}
				cur_str = t;
				cur_tree = child;
			}

			continue;
		}

		if (child) {
			cur_tree = child;
			continue;
		}

		smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
		smileys = g_slist_prepend (smileys, smiley);
		if (cur_tree->pixbuf) {
			cur_str = t;
			cur_tree = smiley_manager_tree_find_child (priv->tree, c);

			if (!cur_tree) {
				cur_tree = priv->tree;
			}
		} else {
			cur_str = t;
			cur_tree = priv->tree;
		}
	}

	smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
	smileys = g_slist_prepend (smileys, smiley);

	return g_slist_reverse (smileys);
}
static void
smiley_manager_add_valist (EmpathySmileyManager *manager,
			   GdkPixbuf            *smiley,
			   const gchar          *first_str,
			   va_list               var_args)
{
	EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
	const gchar              *str;

	for (str = first_str; str; str = va_arg (var_args, gchar*)) {
		smiley_manager_tree_insert (priv->tree, smiley, str);
	}

	priv->smileys = g_slist_prepend (priv->smileys, smiley_new (smiley, first_str));
}
Esempio n. 3
0
static void
smiley_manager_add_valist (EmpathySmileyManager *manager,
			   GdkPixbuf            *pixbuf,
			   gchar                *path,
			   const gchar          *first_str,
			   va_list               var_args)
{
	EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
	const gchar              *str;
	EmpathySmiley            *smiley;

	for (str = first_str; str; str = va_arg (var_args, gchar*)) {
		smiley_manager_tree_insert (priv->tree, pixbuf, str, path);
	}

	/* We give the ownership of path to the smiley */
	smiley = smiley_new (pixbuf, g_strdup (first_str), path);
	priv->smileys = g_slist_prepend (priv->smileys, smiley);
}
Esempio n. 4
0
static void
smiley_manager_add_valist (EmpathySmileyManager *manager,
			   GdkPixbuf            *pixbuf,
			   const gchar          *path,
			   const gchar          *first_str,
			   va_list               var_args)
{
	EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
	const gchar              *str;
	EmpathySmiley            *smiley;

	for (str = first_str; str; str = va_arg (var_args, gchar*)) {
		smiley_manager_tree_insert (priv->tree, pixbuf, str, path);
	}

	g_object_set_data_full (G_OBJECT (pixbuf), "smiley_str",
				g_strdup (first_str), g_free);
	smiley = smiley_new (pixbuf, first_str);
	priv->smileys = g_slist_prepend (priv->smileys, smiley);
}