libpurple/protocols/myspace/markup.c

Mon, 13 Jul 2009 05:01:42 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 13 Jul 2009 05:01:42 +0000
changeset 27776
60d79d68cde1
parent 27473
b8614d3960c0
child 31804
847a13d5d3bb
permissions
-rw-r--r--

On MSN, pop up an "invite message" request similar to oscar, and send that
in the add request. We really should try and move this into the add buddy
dialog instead of an extra prompt.

Fixes #8503.

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

mercurial