libpurple/smiley-parser.c

Wed, 20 Jun 2018 02:13:44 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Wed, 20 Jun 2018 02:13:44 -0400
changeset 39181
f0cd633d86d4
parent 35795
61b755f852a7
permissions
-rw-r--r--

prefs: Add binding versions of pref widget functions.

These just bind settings to existing widgets and copy the saved value to
the widget, except for combos which are produced from runtime lists.
Those are populated in a similar way as before.

There are some extra _bind_ words that will probably be dropped once the
other functions are unused.

35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /* purple
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
2 *
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * source distribution.
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
6 *
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
11 *
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
16 *
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
20 */
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
21
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
22 #include "smiley-parser.h"
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23
35716
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
24 #include "smiley-custom.h"
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
25 #include "smiley-theme.h"
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
26
35761
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
27 #define DISPLAY_OUR_CUSTOM_SMILEYS_FOR_INCOMING_MESSAGES 1
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
28
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
29 typedef struct
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
30 {
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
31 union {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
32 struct {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
33 PurpleConversation *conv;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
34 PurpleSmileyParseCb cb;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
35 gpointer ui_data;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
36 } replace;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
37 struct {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
38 GHashTable *found_smileys;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
39 } find;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
40 } job;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
41
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
42 gboolean in_html_tag;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
43 } PurpleSmileyParseData;
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
44
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
45 static PurpleTrie *html_sentry;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
46
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
47 static inline void
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
48 purple_smiley_parse_check_html(const gchar *word,
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
49 PurpleSmileyParseData *parse_data)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
50 {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
51 if (G_LIKELY(word[0] == '<'))
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
52 parse_data->in_html_tag = TRUE;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
53 else if (G_LIKELY(word[0] == '>'))
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
54 parse_data->in_html_tag = FALSE;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
55 else
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
56 g_return_if_reached();
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
57 g_warn_if_fail(word[1] == '\0');
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
58 }
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
59
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
60 static gboolean
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
61 purple_smiley_parse_cb(GString *out, const gchar *word, gpointer _smiley,
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
62 gpointer _parse_data)
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
63 {
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
64 PurpleSmileyParseData *parse_data = _parse_data;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
65 PurpleSmiley *smiley = _smiley;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
66
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
67 /* a special-case for html_sentry */
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
68 if (smiley == NULL) {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
69 purple_smiley_parse_check_html(word, parse_data);
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
70 return FALSE;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
71 }
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
72
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
73 if (parse_data->in_html_tag)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
74 return FALSE;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
75
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
76 return parse_data->job.replace.cb(out, smiley,
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
77 parse_data->job.replace.conv, parse_data->job.replace.ui_data);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
78 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
79
35779
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
80 /* XXX: this shouldn't be a conv for incoming messages - see
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
81 * PurpleConversationPrivate.remote_smileys.
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
82 * For outgoing messages, we could pass conv in ui_data (or something).
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
83 * Or maybe we should use two distinct functions?
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
84 * To be reconsidered when we had PurpleDude-like objects.
d971ab073228 Comments: smiley parser
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
85 */
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
86 gchar *
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
87 purple_smiley_parser_smileify(PurpleConversation *conv, const gchar *html_message,
35761
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
88 gboolean use_remote_smileys, PurpleSmileyParseCb cb, gpointer ui_data)
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
89 {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
90 PurpleSmileyTheme *theme;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
91 PurpleSmileyList *theme_smileys = NULL, *remote_smileys = NULL;
35748
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
92 PurpleTrie *theme_trie = NULL, *custom_trie = NULL, *remote_trie = NULL;
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
93 GSList *tries = NULL;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
94 GSList tries_sentry, tries_theme, tries_custom, tries_remote;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
95 PurpleSmileyParseData parse_data;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
96
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
97 if (html_message == NULL || html_message[0] == '\0')
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
98 return g_strdup(html_message);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
99
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
100 /* get remote smileys */
35761
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
101 if (use_remote_smileys)
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
102 remote_smileys = purple_conversation_get_remote_smileys(conv);
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
103 if (remote_smileys)
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
104 remote_trie = purple_smiley_list_get_trie(remote_smileys);
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
105 if (remote_trie && purple_trie_get_size(remote_trie) == 0)
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
106 remote_trie = NULL;
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
107
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
108 /* get custom smileys */
35748
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
109 if (purple_conversation_get_features(conv) &
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
110 PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY)
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
111 {
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
112 custom_trie = purple_smiley_list_get_trie(
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
113 purple_smiley_custom_get_list());
35761
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
114 #if !DISPLAY_OUR_CUSTOM_SMILEYS_FOR_INCOMING_MESSAGES
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
115 if (use_remote_smileys)
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
116 custom_trie = NULL;
dfbba8ed898d Smileys: better control over smiley lists priority
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35760
diff changeset
117 #endif
35748
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
118 }
6c4993b737a4 Smileys: get rid of old implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35747
diff changeset
119 if (custom_trie && purple_trie_get_size(custom_trie) == 0)
35717
45bde03f86a6 Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35716
diff changeset
120 custom_trie = NULL;
35716
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
121
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
122 /* get theme smileys */
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
123 theme = purple_smiley_theme_get_current();
35716
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
124 if (theme != NULL)
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
125 theme_smileys = purple_smiley_theme_get_smileys(theme, ui_data);
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
126 if (theme_smileys != NULL)
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
127 theme_trie = purple_smiley_list_get_trie(theme_smileys);
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
128
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
129 /* we have absolutely no smileys */
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
130 if (theme_trie == NULL && custom_trie == NULL && remote_trie == NULL)
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
131 return g_strdup(html_message);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
132
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
133 /* Create a tries list on the stack. */
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
134 tries_sentry.data = html_sentry;
35716
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
135 tries_theme.data = theme_trie;
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
136 tries_custom.data = custom_trie;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
137 tries_remote.data = remote_trie;
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
138 tries_sentry.next = NULL;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
139 tries_theme.next = tries_custom.next = tries_remote.next = NULL;
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
140 tries = &tries_sentry;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
141 if (remote_trie != NULL)
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
142 g_slist_last(tries)->next = &tries_remote;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
143 if (custom_trie != NULL)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
144 g_slist_last(tries)->next = &tries_custom;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
145 if (theme_trie != NULL)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
146 g_slist_last(tries)->next = &tries_theme;
35716
80bedd712883 Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
147
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
148 parse_data.job.replace.conv = conv;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
149 parse_data.job.replace.cb = cb;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
150 parse_data.job.replace.ui_data = ui_data;
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
151 parse_data.in_html_tag = FALSE;
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
152
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35717
diff changeset
153 /* TODO: parse greedily (as much as possible) when PurpleTrie
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35717
diff changeset
154 * provides support for it. */
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
155 return purple_trie_multi_replace(tries, html_message,
35747
25085b485441 Remote smileys: parse them too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
156 purple_smiley_parse_cb, &parse_data);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
157 }
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
158
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
159 gchar *
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
160 purple_smiley_parser_replace(PurpleSmileyList *smileys,
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
161 const gchar *html_message, PurpleSmileyParseCb cb, gpointer ui_data)
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
162 {
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
163 PurpleTrie *smileys_trie = NULL;
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
164 GSList trie_1, trie_2;
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
165 PurpleSmileyParseData parse_data;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
166
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
167 if (html_message == NULL || html_message[0] == '\0')
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
168 return g_strdup(html_message);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
169
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
170 if (smileys == NULL || purple_smiley_list_is_empty(smileys))
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
171 return g_strdup(html_message);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
172
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
173 smileys_trie = purple_smiley_list_get_trie(smileys);
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
174 g_return_val_if_fail(smileys_trie != NULL, NULL);
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
175
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
176 trie_1.data = html_sentry;
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
177 trie_2.data = smileys_trie;
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
178 trie_1.next = &trie_2;
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
179 trie_2.next = NULL;
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
180
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
181 parse_data.job.replace.conv = NULL;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
182 parse_data.job.replace.cb = cb;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
183 parse_data.job.replace.ui_data = ui_data;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
184 parse_data.in_html_tag = FALSE;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
185
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
186 return purple_trie_multi_replace(&trie_1, html_message,
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
187 purple_smiley_parse_cb, &parse_data);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
188 }
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
189
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
190 static gboolean
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
191 smiley_find_cb(const gchar *word, gpointer _smiley, gpointer _parse_data)
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
192 {
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
193 PurpleSmiley *smiley = _smiley;
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
194 PurpleSmileyParseData *parse_data = _parse_data;
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
195
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
196 /* a special-case for html_sentry */
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
197 if (smiley == NULL) {
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
198 purple_smiley_parse_check_html(word, parse_data);
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
199 return FALSE;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
200 }
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
201
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
202 if (parse_data->in_html_tag)
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
203 return FALSE;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
204
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
205 g_hash_table_insert(parse_data->job.find.found_smileys, smiley, smiley);
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
206
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
207 return TRUE;
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
208 }
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
209
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
210 GList *
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35791
diff changeset
211 purple_smiley_parser_find(PurpleSmileyList *smileys, const gchar *message,
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
212 gboolean is_html)
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
213 {
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
214 PurpleTrie *smileys_trie;
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
215 GList *found_list;
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
216 gchar *escaped_message = NULL;
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
217 PurpleSmileyParseData parse_data;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
218 GSList trie_1, trie_2;
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
219
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
220 if (message == NULL || message[0] == '\0')
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
221 return NULL;
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
222
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
223 if (smileys == NULL || purple_smiley_list_is_empty(smileys))
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
224 return NULL;
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
225
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
226 smileys_trie = purple_smiley_list_get_trie(smileys);
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
227 g_return_val_if_fail(smileys_trie != NULL, NULL);
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
228
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
229 if (!is_html)
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
230 message = escaped_message = g_markup_escape_text(message, -1);
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
231
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
232 parse_data.job.find.found_smileys =
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
233 g_hash_table_new(g_direct_hash, g_direct_equal);
35795
61b755f852a7 Smiley parser: fix purple_smiley_parser_find
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
234 parse_data.in_html_tag = FALSE;
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
235
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
236 trie_1.data = html_sentry;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
237 trie_2.data = smileys_trie;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
238 trie_1.next = &trie_2;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
239 trie_2.next = NULL;
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
240 purple_trie_multi_find(&trie_1, message, smiley_find_cb, &parse_data);
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
241
35764
066c0f932b33 Smileys: MSN: reimplement msn_msg_grab_emoticons to use new API
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35761
diff changeset
242 g_free(escaped_message);
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
243
35791
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
244 found_list = g_hash_table_get_values(parse_data.job.find.found_smileys);
a304796f1c09 Smiley parser: upgrade purple_smiley_find for html sentry
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
245 g_hash_table_destroy(parse_data.job.find.found_smileys);
35756
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
246
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
247 return found_list;
fe6aba70046e Custom smileys: make it possible to find them by prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35752
diff changeset
248 }
35787
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
249
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
250 void
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
251 _purple_smiley_parser_init(void)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
252 {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
253 html_sentry = purple_trie_new();
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
254 purple_trie_add(html_sentry, "<", NULL);
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
255 purple_trie_add(html_sentry, ">", NULL);
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
256 }
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
257
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
258 void
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
259 _purple_smiley_parser_uninit(void)
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
260 {
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
261 g_object_unref(html_sentry);
8738f1797803 Smiley parser: don't replace smileys inside HTML tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35779
diff changeset
262 }

mercurial