Wed, 20 Jun 2018 02:13:44 -0400
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 | } |