comparison pidgin-twitter.c @ 42:68db38b5b401

fixed changeset 41:0a81ccfa1941
author mikanbako <maoutwo@gmail.com>
date Tue, 13 May 2008 02:06:32 +0900
parents 0a81ccfa1941
children caa42301f520
comparison
equal deleted inserted replaced
41:0a81ccfa1941 42:68db38b5b401
34 #define RECIPIENT 0 34 #define RECIPIENT 0
35 #define SENDER 1 35 #define SENDER 1
36 #define COMMAND 2 36 #define COMMAND 2
37 #define PSEUDO 3 37 #define PSEUDO 3
38 #define EXCESS_MARKUP 4 38 #define EXCESS_MARKUP 4
39 #define FONT_MARKUP 5
40 #define ATMARK_AFTER_A 6
39 41
40 #define PLUGIN_ID "gtk-honeyplanet-pidgin_twitter" 42 #define PLUGIN_ID "gtk-honeyplanet-pidgin_twitter"
41 #define PLUGIN_NAME "pidgin-twitter" 43 #define PLUGIN_NAME "pidgin-twitter"
42 44
43 #define OPT_PIDGINTWITTER "/plugins/pidgin_twitter" 45 #define OPT_PIDGINTWITTER "/plugins/pidgin_twitter"
60 62
61 #define twitter_debug(fmt, ...) purple_debug(PURPLE_DEBUG_INFO, PLUGIN_NAME, "%s():%4d: " fmt, __FUNCTION__, (int)__LINE__, ## __VA_ARGS__); 63 #define twitter_debug(fmt, ...) purple_debug(PURPLE_DEBUG_INFO, PLUGIN_NAME, "%s():%4d: " fmt, __FUNCTION__, (int)__LINE__, ## __VA_ARGS__);
62 #define twitter_error(fmt, ...) purple_debug(PURPLE_DEBUG_ERROR, PLUGIN_NAME, "%s():%4d: " fmt, __FUCTION__, (int)__LINE__, ## __VA_ARGS__); 64 #define twitter_error(fmt, ...) purple_debug(PURPLE_DEBUG_ERROR, PLUGIN_NAME, "%s():%4d: " fmt, __FUCTION__, (int)__LINE__, ## __VA_ARGS__);
63 65
64 /* globals */ 66 /* globals */
65 static GRegex *regp[5]; 67 static GRegex *regp[7];
66 static gboolean suppress_oops = FALSE; 68 static gboolean suppress_oops = FALSE;
67 69
68 /* prototypes */ 70 /* prototypes */
69 static void strip_excess_markup(gchar **str); 71 static void strip_excess_markup(gchar **str);
70 static void escape(gchar **str); 72 static void escape(gchar **str);
93 static void 95 static void
94 strip_excess_markup(gchar **str) 96 strip_excess_markup(gchar **str)
95 { 97 {
96 gchar *newstr = NULL; 98 gchar *newstr = NULL;
97 99
98 /* replace senders with link */ 100 /* strip font */
101 newstr = g_regex_replace(regp[FONT_MARKUP], *str, -1, 0, "\\1", 0, NULL);
102 twitter_debug("*str = %s newstr = %s\n", *str, newstr);
103 g_free(*str);
104 *str = newstr;
105
106 /* change from atmark after a to atmark before a */
107 newstr = g_regex_replace(regp[ATMARK_AFTER_A], *str, -1, 0, "@\\1", 0, NULL);
108 twitter_debug("*str = %s newstr = %s\n", *str, newstr);
109 g_free(*str);
110 *str = newstr;
111
112 /* strip link */
99 newstr = 113 newstr =
100 g_regex_replace(regp[EXCESS_MARKUP], *str, -1, 0, "\\1\\2\\3", 0, NULL); 114 g_regex_replace(regp[EXCESS_MARKUP], *str, -1, 0, "\\1", 0, NULL);
101 115
102 twitter_debug("*str = %s newstr = %s\n", *str, newstr); 116 twitter_debug("*str = %s newstr = %s\n", *str, newstr);
103 117
104 g_free(*str); 118 g_free(*str);
105 *str = newstr; 119 *str = newstr;
515 g_regex_new 529 g_regex_new
516 ("^\\s*(?:[\"#$%&'()*+,\\-./:;<=>?\\[\\\\\\]_`{|}~]|[^\\s\\x21-\\x7E])*([dDfFgGlLmMnNtTwW]{1})(?:\\Z|\\s+|[^\\x21-\\x7E]+\\Z)", 530 ("^\\s*(?:[\"#$%&'()*+,\\-./:;<=>?\\[\\\\\\]_`{|}~]|[^\\s\\x21-\\x7E])*([dDfFgGlLmMnNtTwW]{1})(?:\\Z|\\s+|[^\\x21-\\x7E]+\\Z)",
517 G_REGEX_RAW, 0, NULL); 531 G_REGEX_RAW, 0, NULL);
518 regp[EXCESS_MARKUP] = 532 regp[EXCESS_MARKUP] =
519 g_regex_new 533 g_regex_new
520 ("([@dDfFgGlLmMnNtTwW]{1})(\\s?)(?:<font .+>)?<a href=.+>(?:<font .+>)?([A-Za-z0-9_]+)(?:</font>)?</a>(?:</font>)?", 0, 0, 534 ("<a href=\"http://twitter.com/([A-Za-z0-9_]+)\">\\1</a>", 0, 0,
521 NULL); 535 NULL);
536 regp[FONT_MARKUP] = g_regex_new("<font .+?>(.+?)</font>", 0, 0, NULL);
537 regp[ATMARK_AFTER_A] = g_regex_new("(<a href=.+?>)@", 0, 0, NULL);
522 538
523 /* attach counter to the existing twitter window */ 539 /* attach counter to the existing twitter window */
524 gboolean enabled = purple_prefs_get_bool(OPT_COUNTER); 540 gboolean enabled = purple_prefs_get_bool(OPT_COUNTER);
525 if(enabled) { 541 if(enabled) {
526 attach_to_window(); 542 attach_to_window();
552 g_regex_unref(regp[RECIPIENT]); 568 g_regex_unref(regp[RECIPIENT]);
553 g_regex_unref(regp[SENDER]); 569 g_regex_unref(regp[SENDER]);
554 g_regex_unref(regp[COMMAND]); 570 g_regex_unref(regp[COMMAND]);
555 g_regex_unref(regp[PSEUDO]); 571 g_regex_unref(regp[PSEUDO]);
556 g_regex_unref(regp[EXCESS_MARKUP]); 572 g_regex_unref(regp[EXCESS_MARKUP]);
573 g_regex_unref(regp[FONT_MARKUP]);
574 g_regex_unref(regp[ATMARK_AFTER_A]);
557 575
558 /* detach from twitter window */ 576 /* detach from twitter window */
559 detach_from_window(); 577 detach_from_window();
560 578
561 return TRUE; 579 return TRUE;