Fri, 13 Mar 2020 22:11:34 -0500
Remove stringref from the docs.
|
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 | } |