libpurple/smiley-parser.c

Mon, 11 Nov 2019 20:43:31 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 11 Nov 2019 20:43:31 -0600
branch
iterate-on-receiving-data-in-jabber-callback
changeset 40178
5b3f596d1947
parent 35795
61b755f852a7
permissions
-rw-r--r--

closing merged branch

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