annotate libpurple/protocols/myspace/markup.c @ 25396:06a802d32d71

I incorrectly assumed that the FindMembership and ABFindAll SOAP requests on MSN would not require token updates. However, these two requests may be made when it discovers that someone is requesting to be on your buddy list. Change these SOAP requests so that they will auto-update tokens. References #7921, only because I saw it in the log there, but probably doesn't fix it.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sun, 01 Feb 2009 08:04:41 +0000
parents e12788365764
children c51fc4daf81b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
1 /* MySpaceIM Protocol Plugin - markup
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
2 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
3 * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
4 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
5 * This program is free software; you can redistribute it and/or modify
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
6 * it under the terms of the GNU General Public License as published by
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
7 * the Free Software Foundation; either version 2 of the License, or
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
8 * (at your option) any later version.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
9 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
10 * This program is distributed in the hope that it will be useful,
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
13 * GNU General Public License for more details.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
14 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
15 * You should have received a copy of the GNU General Public License
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
16 * along with this program; if not, write to the Free Software
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
18 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
19
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
20 #include "myspace.h"
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
21
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
22 typedef int (*MSIM_XMLNODE_CONVERT)(MsimSession *, xmlnode *, gchar **, gchar **);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
23
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
24 /* Globals */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
25
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
26 /* The names in in emoticon_names (for <i n=whatever>) map to corresponding
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
27 * entries in emoticon_symbols (for the ASCII representation of the emoticon).
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
28 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
29 * Multiple emoticon symbols in Pidgin can map to one name. List the
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
30 * canonical form, as inserted by the "Smile!" dialog, first. For example,
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
31 * :) comes before :-), because although both are recognized as 'happy',
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
32 * the first is inserted by the smiley button (first symbol in theme).
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
33 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
34 * Note that symbols are case-sensitive in Pidgin -- :-X is not :-x. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
35 static struct MSIM_EMOTICON
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
36 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
37 gchar *name;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
38 gchar *symbol;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
39 } msim_emoticons[] = {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
40 /* Unfortunately, this list duplicates much of the file
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
41 * pidgin/pidgin/pixmaps/emotes/default/22/default.theme.in, because
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
42 * that file is part of Pidgin, but we're part of libpurple.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
43 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
44 { "bigsmile", ":D" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
45 { "bigsmile", ":-D" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
46 { "devil", "}:)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
47 { "frazzled", ":Z" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
48 { "geek", "B)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
49 { "googles", "%)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
50 { "growl", ":E" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
51 { "laugh", ":))" }, /* Must be before ':)' */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
52 { "happy", ":)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
53 { "happy", ":-)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
54 { "happi", ":)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
55 { "heart", ":X" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
56 { "mohawk", "-:" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
57 { "mad", "X(" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
58 { "messed", "X)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
59 { "nerd", "Q)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
60 { "oops", ":G" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
61 { "pirate", "P)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
62 { "scared", ":O" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
63 { "sidefrown", ":{" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
64 { "sinister", ":B" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
65 { "smirk", ":," },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
66 { "straight", ":|" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
67 { "tongue", ":P" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
68 { "tongue", ":p" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
69 { "tongy", ":P" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
70 { "upset", "B|" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
71 { "wink", ";-)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
72 { "wink", ";)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
73 { "winc", ";)" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
74 { "worried", ":[" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
75 { "kiss", ":x" },
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
76 { NULL, NULL }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
77 };
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
78
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
79 /* Indexes of this array + 1 map HTML font size to scale of normal font size. *
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
80 * Based on _point_sizes from libpurple/gtkimhtml.c
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
81 * 1 2 3 4 5 6 7 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
82 static gdouble _font_scale[] = { .85, .95, 1, 1.2, 1.44, 1.728, 2.0736 };
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
83
24725
959d7fa3038b Simplify a little bit
Mark Doliner <mark@kingant.net>
parents: 24716
diff changeset
84 /* Purple maximum font size. Equivalent to sizeof(_font_scale) / sizeof(_font_scale[0]) */
959d7fa3038b Simplify a little bit
Mark Doliner <mark@kingant.net>
parents: 24716
diff changeset
85 #define MAX_FONT_SIZE 7
959d7fa3038b Simplify a little bit
Mark Doliner <mark@kingant.net>
parents: 24716
diff changeset
86
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
87 #define POINTS_PER_INCH 72 /* How many pt's in an inch */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
88
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
89 /* Text formatting bits for <f s=#> */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
90 #define MSIM_TEXT_BOLD 1
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
91 #define MSIM_TEXT_ITALIC 2
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
92 #define MSIM_TEXT_UNDERLINE 4
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
93
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
94 /* Default baseline size of purple's fonts, in points. What is size 3 in points.
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
95 * _font_scale specifies scaling factor relative to this point size. Note this
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
96 * is only the default; it is configurable in account options. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
97 #define MSIM_BASE_FONT_POINT_SIZE 8
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
98
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
99 /* Default display's DPI. 96 is common but it can differ. Also configurable
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
100 * in account options. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
101 #define MSIM_DEFAULT_DPI 96
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
102
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
103 /* round is part of C99, but sometimes is unavailable before then.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
104 * Based on http://forums.belution.com/en/cpp/000/050/13.shtml
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
105 */
24713
85efcade4caa Remove unneeded forward declarations. I guess my philosophy is to only
Mark Doliner <mark@kingant.net>
parents: 22516
diff changeset
106 static double msim_round(double value)
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
107 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
108 if (value < 0) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
109 return -(floor(-value + 0.5));
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
110 } else {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
111 return floor( value + 0.5);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
112 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
113 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
114
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
115 /** Convert typographical font point size to HTML font size.
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
116 * Based on libpurple/gtkimhtml.c */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
117 static guint
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
118 msim_point_to_purple_size(MsimSession *session, guint point)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
119 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
120 guint size, this_point, base;
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
121
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
122 base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE);
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
123
24725
959d7fa3038b Simplify a little bit
Mark Doliner <mark@kingant.net>
parents: 24716
diff changeset
124 for (size = 0; size < MAX_FONT_SIZE; ++size) {
959d7fa3038b Simplify a little bit
Mark Doliner <mark@kingant.net>
parents: 24716
diff changeset
125 this_point = (guint)msim_round(base * _font_scale[size]);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
126
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
127 if (this_point >= point) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
128 purple_debug_info("msim", "msim_point_to_purple_size: %d pt -> size=%d\n",
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
129 point, size);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
130 return size;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
131 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
132 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
133
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
134 /* No HTML font size was this big; return largest possible. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
135 return this_point;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
136 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
137
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
138 /** Convert HTML font size to point size. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
139 static guint
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
140 msim_purple_size_to_point(MsimSession *session, guint size)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
141 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
142 gdouble scale;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
143 guint point;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
144 guint base;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
145
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
146 scale = _font_scale[CLAMP(size, 1, MAX_FONT_SIZE) - 1];
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
147
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
148 base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
149
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
150 point = (guint)msim_round(scale * base);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
151
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
152 purple_debug_info("msim", "msim_purple_size_to_point: size=%d -> %d pt\n",
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
153 size, point);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
154
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
155 return point;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
156 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
157
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
158 /** Convert a msim markup font pixel height to the more usual point size, for incoming messages. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
159 static guint
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
160 msim_height_to_point(MsimSession *session, guint height)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
161 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
162 guint dpi;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
163
22516
01dcbd5333ca In msimprpl, when converting point size and MySpaceIM-markup font size,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22400
diff changeset
164 dpi = purple_account_get_int(session->account, "dpi", MSIM_DEFAULT_DPI);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
165
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
166 return (guint)msim_round((POINTS_PER_INCH * 1. / dpi) * height);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
167
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
168 /* See also: libpurple/protocols/bonjour/jabber.c
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
169 * _font_size_ichat_to_purple */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
170 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
171
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
172 /** Convert point size to msim pixel height font size specification, for outgoing messages. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
173 static guint
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
174 msim_point_to_height(MsimSession *session, guint point)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
175 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
176 guint dpi;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
177
22516
01dcbd5333ca In msimprpl, when converting point size and MySpaceIM-markup font size,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22400
diff changeset
178 dpi = purple_account_get_int(session->account, "dpi", MSIM_DEFAULT_DPI);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
179
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
180 return (guint)msim_round((dpi * 1. / POINTS_PER_INCH) * point);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
181 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
182
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
183 /** Convert the msim markup <f> (font) tag into HTML. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
184 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
185 msim_markup_f_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
186 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
187 const gchar *face, *height_str, *decor_str;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
188 GString *gs_end, *gs_begin;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
189 guint decor, height;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
190
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
191 face = xmlnode_get_attrib(root, "f");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
192 height_str = xmlnode_get_attrib(root, "h");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
193 decor_str = xmlnode_get_attrib(root, "s");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
194
24738
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
195 /* Validate the font face, to avoid constructing invalid HTML later */
24769
b0b3952aae27 Only validate the font face if it's non-null
Mark Doliner <mark@kingant.net>
parents: 24738
diff changeset
196 if (face != NULL && strchr(face, '\'') != NULL)
24738
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
197 face = NULL;
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
198
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
199 height = height_str != NULL ? atol(height_str) : 12;
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
200 decor = decor_str != NULL ? atol(decor_str) : 0;
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
201
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
202 /*
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
203 * The HTML we're constructing here is a bit redudant. Ideally we
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
204 * would use only the font-family and font-size CSS span, but Pidgin
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
205 * doesn't support it (it's included for other UIs). For Pidgin we
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
206 * wrap the whole thing in an ugly font tag, and Pidgin will happily
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
207 * ignore the <span>.
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
208 */
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
209 gs_begin = g_string_new("");
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
210 if (height && !face) {
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
211 guint point_size = msim_height_to_point(session, height);
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
212 g_string_printf(gs_begin,
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
213 "<font size='%d'><span style='font-size: %dpt'>",
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
214 msim_point_to_purple_size(session, point_size),
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
215 point_size);
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
216 } else if (height && face) {
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
217 guint point_size = msim_height_to_point(session, height);
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
218 g_string_printf(gs_begin,
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
219 "<font face='%s' size='%d'><span style='font-family: %s; font-size: %dpt'>",
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
220 face, msim_point_to_purple_size(session, point_size),
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
221 face, point_size);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
222 } else {
24738
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
223 g_string_printf(gs_begin, "<font><span>");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
224 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
225
24738
e268ad14e693 Change MySpace to wrap incoming messages in <span style="font-size: Npt;">
Mark Doliner <mark@kingant.net>
parents: 24725
diff changeset
226 gs_end = g_string_new("</span></font>");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
227
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
228 if (decor & MSIM_TEXT_BOLD) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
229 g_string_append(gs_begin, "<b>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
230 g_string_prepend(gs_end, "</b>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
231 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
232
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
233 if (decor & MSIM_TEXT_ITALIC) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
234 g_string_append(gs_begin, "<i>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
235 g_string_append(gs_end, "</i>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
236 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
237
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
238 if (decor & MSIM_TEXT_UNDERLINE) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
239 g_string_append(gs_begin, "<u>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
240 g_string_append(gs_end, "</u>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
241 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
242
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
243 *begin = g_string_free(gs_begin, FALSE);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
244 *end = g_string_free(gs_end, FALSE);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
245 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
246
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
247 /** Convert a msim markup color to a color suitable for libpurple.
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
248 *
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
249 * @param msim Either a color name, or an rgb(x,y,z) code.
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
250 *
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
251 * @return A new string, either a color name or #rrggbb code. Must g_free().
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
252 */
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
253 static char *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
254 msim_color_to_purple(const char *msim)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
255 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
256 guint red, green, blue;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
257
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
258 if (!msim) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
259 return g_strdup("black");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
260 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
261
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
262 if (sscanf(msim, "rgb(%d,%d,%d)", &red, &green, &blue) != 3) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
263 /* Color name. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
264 return g_strdup(msim);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
265 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
266 /* TODO: rgba (alpha). */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
267
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
268 return g_strdup_printf("#%.2x%.2x%.2x", red, green, blue);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
269 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
270
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
271 /** Convert the msim markup <a> (anchor) tag into HTML. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
272 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
273 msim_markup_a_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
274 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
275 const gchar *href;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
276
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
277 href = xmlnode_get_attrib(root, "h");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
278 if (!href) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
279 href = "";
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
280 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
281
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
282 *begin = g_strdup_printf("<a href=\"%s\">%s", href, href);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
283 *end = g_strdup("</a>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
284 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
285
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
286 /** Convert the msim markup <p> (paragraph) tag into HTML. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
287 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
288 msim_markup_p_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
289 {
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
290 /* Just pass through unchanged.
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
291 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
292 * Note: attributes currently aren't passed, if there are any. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
293 *begin = g_strdup("<p>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
294 *end = g_strdup("</p>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
295 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
296
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
297 /**
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
298 * Convert the msim markup <c> tag (text color) into HTML.
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
299 */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
300 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
301 msim_markup_c_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
302 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
303 const gchar *color;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
304 gchar *purple_color;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
305
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
306 color = xmlnode_get_attrib(root, "v");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
307 if (!color) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
308 purple_debug_info("msim", "msim_markup_c_to_html: <c> tag w/o v attr\n");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
309 *begin = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
310 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
311 /* TODO: log as unrecognized */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
312 return;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
313 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
314
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
315 purple_color = msim_color_to_purple(color);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
316
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
317 #ifdef USE_CSS_FORMATTING
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
318 *begin = g_strdup_printf("<span style='color: %s'>", purple_color);
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
319 *end = g_strdup("</span>");
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
320 #else
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
321 *begin = g_strdup_printf("<font color='%s'>", purple_color);
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
322 *end = g_strdup("</font>");
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
323 #endif
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
324
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
325 g_free(purple_color);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
326 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
327
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
328 /**
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
329 * Convert the msim markup <b> tag (background color) into HTML.
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
330 */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
331 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
332 msim_markup_b_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
333 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
334 const gchar *color;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
335 gchar *purple_color;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
336
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
337 color = xmlnode_get_attrib(root, "v");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
338 if (!color) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
339 *begin = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
340 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
341 purple_debug_info("msim", "msim_markup_b_to_html: <b> w/o v attr\n");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
342 /* TODO: log as unrecognized. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
343 return;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
344 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
345
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
346 purple_color = msim_color_to_purple(color);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
347
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
348 #ifdef USE_CSS_FORMATTING
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
349 *begin = g_strdup_printf("<span style='background-color: %s'>", purple_color);
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
350 *end = g_strdup("</span>");
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
351 #else
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
352 *begin = g_strdup_printf("<body bgcolor='%s'>", purple_color);
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
353 *end = g_strdup("</body>");
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
354 #endif
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
355
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
356 g_free(purple_color);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
357 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
358
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
359 /** Convert the msim markup <i> tag (emoticon image) into HTML. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
360 static void
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
361 msim_markup_i_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
362 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
363 const gchar *name;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
364 guint i;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
365 struct MSIM_EMOTICON *emote;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
366
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
367 name = xmlnode_get_attrib(root, "n");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
368 if (!name) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
369 purple_debug_info("msim", "msim_markup_i_to_html: <i> w/o n\n");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
370 *begin = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
371 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
372 /* TODO: log as unrecognized */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
373 return;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
374 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
375
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
376 /* Find and use canonical form of smiley symbol. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
377 for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
378 if (g_str_equal(name, emote->name)) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
379 *begin = g_strdup(emote->symbol);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
380 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
381 return;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
382 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
383 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
384
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
385 /* Couldn't find it, sorry. Try to degrade gracefully. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
386 *begin = g_strdup_printf("**%s**", name);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
387 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
388 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
389
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
390 /** Convert an individual msim markup tag to HTML. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
391 static int
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
392 msim_markup_tag_to_html(MsimSession *session, xmlnode *root, gchar **begin,
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
393 gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
394 {
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
395 g_return_val_if_fail(root != NULL, 0);
20860
2447efa8c93b Move NULL check earlier to prevent confusion when it is checked after being derefed. Fixes CID 350
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20753
diff changeset
396
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
397 if (g_str_equal(root->name, "f")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
398 msim_markup_f_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
399 } else if (g_str_equal(root->name, "a")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
400 msim_markup_a_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
401 } else if (g_str_equal(root->name, "p")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
402 msim_markup_p_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
403 } else if (g_str_equal(root->name, "c")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
404 msim_markup_c_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
405 } else if (g_str_equal(root->name, "b")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
406 msim_markup_b_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
407 } else if (g_str_equal(root->name, "i")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
408 msim_markup_i_to_html(session, root, begin, end);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
409 } else {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
410 purple_debug_info("msim", "msim_markup_tag_to_html: "
24792
cd0071208174 Add a newline to the end of a debug messages
Mark Doliner <mark@kingant.net>
parents: 24791
diff changeset
411 "unknown tag name=%s, ignoring\n",
20860
2447efa8c93b Move NULL check earlier to prevent confusion when it is checked after being derefed. Fixes CID 350
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20753
diff changeset
412 root->name ? root->name : "(NULL)");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
413 *begin = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
414 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
415 }
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
416 return 0;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
417 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
418
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
419 /** Convert an individual HTML tag to msim markup. */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
420 static int
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
421 html_tag_to_msim_markup(MsimSession *session, xmlnode *root, gchar **begin,
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
422 gchar **end)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
423 {
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
424 int ret = 0;
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
425
20273
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
426 if (!purple_utf8_strcasecmp(root->name, "root") ||
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
427 !purple_utf8_strcasecmp(root->name, "html")) {
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
428 *begin = g_strdup("");
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
429 *end = g_strdup("");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
430 /* TODO: Coalesce nested tags into one <f> tag!
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
431 * Currently, the 's' value will be overwritten when b/i/u is nested
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
432 * within another one, and only the inner-most formatting will be
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
433 * applied to the text. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
434 } else if (!purple_utf8_strcasecmp(root->name, "b")) {
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
435 if (root->child->type == XMLNODE_TYPE_DATA) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
436 *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_BOLD);
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
437 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
438 } else {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
439 if (!purple_utf8_strcasecmp(root->child->name,"i")) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
440 ret++;
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
441 if (root->child->child->type == XMLNODE_TYPE_DATA) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
442 *begin = g_strdup_printf("<f s='%d'>", (MSIM_TEXT_BOLD + MSIM_TEXT_ITALIC));
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
443 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
444 } else {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
445 if (!purple_utf8_strcasecmp(root->child->child->name,"u")) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
446 ret++;
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
447 *begin = g_strdup_printf("<f s='%d'>", (MSIM_TEXT_BOLD + MSIM_TEXT_ITALIC + MSIM_TEXT_UNDERLINE));
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
448 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
449 }
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
450 }
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
451 } else if (!purple_utf8_strcasecmp(root->child->name,"u")) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
452 ret++;
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
453 *begin = g_strdup_printf("<f s='%d'>", (MSIM_TEXT_BOLD + MSIM_TEXT_UNDERLINE));
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
454 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
455 }
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
456 }
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
457 } else if (!purple_utf8_strcasecmp(root->name, "i")) {
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
458 if (root->child->type == XMLNODE_TYPE_DATA) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
459 *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_ITALIC);
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
460 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
461 } else {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
462 if (!purple_utf8_strcasecmp(root->child->name,"u")) {
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
463 ret++;
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
464 *begin = g_strdup_printf("<f s='%d'>", (MSIM_TEXT_ITALIC + MSIM_TEXT_UNDERLINE));
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
465 *end = g_strdup("</f>");
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
466 }
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
467 }
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
468 } else if (!purple_utf8_strcasecmp(root->name, "u")) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
469 *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_UNDERLINE);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
470 *end = g_strdup("</f>");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
471 } else if (!purple_utf8_strcasecmp(root->name, "a")) {
20752
e92c9987ba0d A small memory leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20740
diff changeset
472 const gchar *href;
e92c9987ba0d A small memory leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20740
diff changeset
473 gchar *link_text;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
474
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
475 href = xmlnode_get_attrib(root, "href");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
476
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
477 if (!href) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
478 href = xmlnode_get_attrib(root, "HREF");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
479 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
480
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
481 link_text = xmlnode_get_data(root);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
482
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
483 if (href) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
484 if (g_str_equal(link_text, href)) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
485 /* Purple gives us: <a href="URL">URL</a>
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
486 * Translate to <a h='URL' />
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
487 * Displayed as text of URL with link to URL
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
488 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
489 *begin = g_strdup_printf("<a h='%s' />", href);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
490 } else {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
491 /* But if we get: <a href="URL">text</a>
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
492 * Translate to: text: <a h='URL' />
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
493 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
494 * Because official client only supports self-closed <a>
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
495 * tags; you can't change the link text.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
496 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
497 *begin = g_strdup_printf("%s: <a h='%s' />", link_text, href);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
498 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
499 } else {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
500 *begin = g_strdup("<a />");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
501 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
502
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
503 /* Sorry, kid. MySpace doesn't support you within <a> tags. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
504 xmlnode_free(root->child);
20752
e92c9987ba0d A small memory leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20740
diff changeset
505 g_free(link_text);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
506 root->child = NULL;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
507
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
508 *end = g_strdup("");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
509 } else if (!purple_utf8_strcasecmp(root->name, "font")) {
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
510 GString *tmpbegin, *tmpend;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
511 const gchar *size;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
512 const gchar *face;
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
513 const gchar *color;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
514
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
515 size = xmlnode_get_attrib(root, "size");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
516 face = xmlnode_get_attrib(root, "face");
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
517 color = xmlnode_get_attrib(root, "color");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
518
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
519 tmpbegin = g_string_new("<f");
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
520 tmpend = g_string_new("</f>");
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
521
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
522 if (face != NULL)
24794
41f5dff0059f Remove a stray > when a font face is specified
Mark Doliner <mark@kingant.net>
parents: 24793
diff changeset
523 g_string_append_printf(tmpbegin, "f='%s'", face);
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
524
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
525 if (size != NULL)
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
526 g_string_append_printf(tmpbegin, "h='%d'",
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
527 msim_point_to_height(session,
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
528 msim_purple_size_to_point(session, atoi(size))));
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
529
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
530 /* Close the <f> tag */
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
531 g_string_append(tmpbegin, ">");
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
532
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
533 if (color != NULL) {
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
534 g_string_append_printf(tmpbegin, "<c v='%s'>", color);
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
535 g_string_prepend(tmpend, "</c>");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
536 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
537
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
538 *begin = g_string_free(tmpbegin, FALSE);
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
539 *end = g_string_free(tmpend, FALSE);
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
540
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
541 } else if (!purple_utf8_strcasecmp(root->name, "body")) {
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
542 const gchar *bgcolor;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
543
24793
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
544 bgcolor = xmlnode_get_attrib(root, "bgcolor");
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
545
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
546 if (bgcolor != NULL) {
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
547 *begin = g_strdup_printf("<b v='%s'>", bgcolor);
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
548 *end = g_strdup("</b>");
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
549 }
9a5a201e69a3 Add support for foreground and background font colors in MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24792
diff changeset
550
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
551 } else {
20273
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
552 gchar *err;
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
553
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
554 #ifdef MSIM_MARKUP_SHOW_UNKNOWN_TAGS
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
555 *begin = g_strdup_printf("[%s]", root->name);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
556 *end = g_strdup_printf("[/%s]", root->name);
20273
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
557 #else
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
558 *begin = g_strdup("");
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
559 *end = g_strdup("");
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
560 #endif
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
561
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
562 err = g_strdup_printf("html_tag_to_msim_markup: unrecognized "
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
563 "HTML tag %s was sent by the IM client; ignoring",
20150
52dce2882c03 Fix a few memory leaks in #3281 (details in ticket).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20148
diff changeset
564 root->name ? root->name : "(NULL)");
20273
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
565 msim_unrecognized(NULL, NULL, err);
187fa336c1b0 Plucked mysapce tag parsing fixes
Evan Schoenberg <evan.s@dreskin.net>
parents: 20243
diff changeset
566 g_free(err);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
567 }
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
568 return ret;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
569 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
570
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
571 /** Convert an xmlnode of msim markup or HTML to an HTML string or msim markup.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
572 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
573 * @param f Function to convert tags.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
574 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
575 * @return An HTML string. Caller frees.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
576 */
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
577 static void
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
578 msim_convert_xmlnode(MsimSession *session, GString *out, xmlnode *root, MSIM_XMLNODE_CONVERT f, int nodes_processed)
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
579 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
580 xmlnode *node;
24791
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
581 gchar *begin, *inner, *end, *tmp;
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
582 int descended = nodes_processed;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
583
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
584 if (!root || !root->name)
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
585 return;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
586
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
587 purple_debug_info("msim", "msim_convert_xmlnode: got root=%s\n",
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
588 root->name);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
589
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
590 begin = inner = end = NULL;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
591
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
592 if (descended == 0) /* We've not formatted this yet.. :) */
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
593 descended = f(session, root, &begin, &end); /* Get the value that our format function has already descended for us */
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
594
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
595 g_string_append(out, begin);
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
596 g_free(begin);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
597
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
598 /* Loop over all child nodes. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
599 for (node = root->child; node != NULL; node = node->next) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
600 switch (node->type) {
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
601 case XMLNODE_TYPE_ATTRIB:
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
602 /* Attributes handled above. */
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
603 break;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
604
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
605 case XMLNODE_TYPE_TAG:
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
606 /* A tag or tag with attributes. Recursively descend. */
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
607 msim_convert_xmlnode(session, out, node, f, descended);
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
608
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
609 purple_debug_info("msim", " ** node name=%s\n",
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
610 node->name ? node->name : "(NULL)");
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
611 break;
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
612
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
613 case XMLNODE_TYPE_DATA:
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
614 /* Literal text. */
24791
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
615 /*
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
616 * TODO: Why is it necessary to escape here? I thought
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
617 * node->data was already escaped?
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
618 */
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
619 tmp = g_markup_escape_text(node->data, node->data_sz);
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
620 g_string_append(out, tmp);
ced7ff727a97 Fix bugs sending and receiving myspace IMs related to not escaping
Mark Doliner <mark@kingant.net>
parents: 24769
diff changeset
621 g_free(tmp);
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
622 break;
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
623
22400
89e0d994f010 In msimprpl, allow some levels of nested bold/italic/underline formatting.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 21284
diff changeset
624 default:
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
625 purple_debug_warning("msim",
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
626 "msim_convert_xmlnode: unknown node type\n");
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
627 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
628 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
629
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
630 /* TODO: Note that msim counts each piece of text enclosed by <f> as
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
631 * a paragraph and will display each on its own line. You actually have
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
632 * to _nest_ <f> tags to intersperse different text in one paragraph!
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
633 * Comment out this line below to see. */
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
634 g_string_append(out, end);
20753
61045691aa72 Fix a few more memory leaks. Someone who has a myspace account should stare
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20752
diff changeset
635 g_free(end);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
636 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
637
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
638 /** Convert XML to something based on MSIM_XMLNODE_CONVERT. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
639 static gchar *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
640 msim_convert_xml(MsimSession *session, const gchar *raw, MSIM_XMLNODE_CONVERT f)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
641 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
642 xmlnode *root;
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
643 GString *str;
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
644 gchar *enclosed_raw;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
645
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
646 g_return_val_if_fail(raw != NULL, NULL);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
647
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
648 /* Enclose text in one root tag, to try to make it valid XML for parsing. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
649 enclosed_raw = g_strconcat("<root>", raw, "</root>", NULL);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
650
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
651 root = xmlnode_from_str(enclosed_raw, -1);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
652
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
653 if (!root) {
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
654 purple_debug_warning("msim", "msim_markup_to_html: couldn't parse "
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
655 "%s as XML, returning raw: %s\n", enclosed_raw, raw);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
656 /* TODO: msim_unrecognized */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
657 g_free(enclosed_raw);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
658 return g_strdup(raw);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
659 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
660
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
661 g_free(enclosed_raw);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
662
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
663 str = g_string_new(NULL);
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
664 msim_convert_xmlnode(session, str, root, f, 0);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
665 xmlnode_free(root);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
666
24716
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
667 purple_debug_info("msim", "msim_markup_to_html: returning %s\n", str->str);
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
668
19f18fc9caed Use one GString and pass it around instead of allocating and freeing a
Mark Doliner <mark@kingant.net>
parents: 24715
diff changeset
669 return g_string_free(str, FALSE);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
670 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
671
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
672 /** Convert plaintext smileys to <i> markup tags.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
673 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
674 * @param before Original text with ASCII smileys. Will be freed.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
675 * @return A new string with <i> tags, if applicable. Must be g_free()'d.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
676 */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
677 static gchar *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
678 msim_convert_smileys_to_markup(gchar *before)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
679 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
680 gchar *old, *new, *replacement;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
681 guint i;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
682 struct MSIM_EMOTICON *emote;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
683
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
684 old = before;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
685 new = NULL;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
686
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
687 for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
688 gchar *name, *symbol;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
689
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
690 name = emote->name;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
691 symbol = emote->symbol;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
692
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
693 replacement = g_strdup_printf("<i n=\"%s\"/>", name);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
694
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
695 purple_debug_info("msim", "msim_convert_smileys_to_markup: %s->%s\n",
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
696 symbol ? symbol : "(NULL)",
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
697 replacement ? replacement : "(NULL)");
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
698 new = purple_strreplace(old, symbol, replacement);
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
699
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
700 g_free(replacement);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
701 g_free(old);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
702
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
703 old = new;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
704 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
705
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
706 return new;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
707 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
708
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
709 /**
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
710 * High-level function to convert MySpaceIM markup to Purple (HTML) markup.
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
711 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
712 * @return Purple markup string, must be g_free()'d. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
713 gchar *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
714 msim_markup_to_html(MsimSession *session, const gchar *raw)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
715 {
24715
b25abc303e5a Remove unnecessary casting
Mark Doliner <mark@kingant.net>
parents: 24714
diff changeset
716 return msim_convert_xml(session, raw, msim_markup_tag_to_html);
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
717 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
718
24795
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
719 /**
e12788365764 Support for background font colors in incoming MySpace IMs
Mark Doliner <mark@kingant.net>
parents: 24794
diff changeset
720 * High-level function to convert Purple (HTML) to MySpaceIM markup.
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
721 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
722 * TODO: consider using purple_markup_html_to_xhtml() to make valid XML.
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
723 *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
724 * @return HTML markup string, must be g_free()'d. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
725 gchar *
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
726 html_to_msim_markup(MsimSession *session, const gchar *raw)
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
727 {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
728 gchar *markup;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
729
24715
b25abc303e5a Remove unnecessary casting
Mark Doliner <mark@kingant.net>
parents: 24714
diff changeset
730 markup = msim_convert_xml(session, raw, html_tag_to_msim_markup);
24714
c298043466c7 Remove stray whitespace
Mark Doliner <mark@kingant.net>
parents: 24713
diff changeset
731
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
732 if (purple_account_get_bool(session->account, "emoticons", TRUE)) {
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
733 /* Frees markup and allocates a new one. */
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
734 markup = msim_convert_smileys_to_markup(markup);
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
735 }
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
736
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
737 return markup;
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
738 }