view libpurple/plugins/tcl/tcl_purple.h @ 17576:d495103dcf88

Two questions: 1. XMPP <status> messages inside <presence> broadcasts should be plaintext and not HTML, right? 2. 'stripped = purple_markup_strip_html(str)' is basically the same as 'purple_markup_html_to_xhtml(str, NULL, &stripped)', right? This fixes a bug Emily found where setting an XMPP status message with an embedded link would drop the link completely. For example, in Pidgin you set your away message and insert a link so that the message body is <a href="http://www.example.com/">Example</a>. When we set this message for an XMPP account it just strips the HTML and sets the message to "Example". This change causes the message to be "Example (http://www.example.com/)". It's the same thing we do when displaying links in tooltips in the blist.
author Mark Doliner <mark@kingant.net>
date Sun, 10 Jun 2007 15:58:23 +0000
parents 32c366eeeb99
children 44b4e8bd759b
line wrap: on
line source

/**
 * @file tcl_purple.h Purple Tcl definitions
 *
 * purple
 *
 * Copyright (C) 2003 Ethan Blanton <eblanton@cs.purdue.edu>
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef _PURPLE_TCL_PURPLE_H_
#define _PURPLE_TCL_PURPLE_H_

#include <tcl.h>

#include "internal.h"
#include "cmds.h"
#include "plugin.h"
#include "value.h"
#include "stringref.h"

struct tcl_signal_handler {
	Tcl_Obj *signal;
	Tcl_Interp *interp;

	void *instance;
	Tcl_Obj *namespace;
	/* These following two are temporary during setup */
	Tcl_Obj *args;
	Tcl_Obj *proc;

	PurpleValue *returntype;
	int nargs;
	PurpleValue **argtypes;
};

struct tcl_cmd_handler {
	int id;
	Tcl_Obj *cmd;
	Tcl_Interp *interp;

	Tcl_Obj *namespace;
	/* These are temporary during setup */
	const char *args;
	int priority;
	int flags;
	const char *prpl_id;
	Tcl_Obj *proc;
	const char *helpstr;

	int nargs;
};

extern PurplePlugin *_tcl_plugin;

/* Capitalized this way because these are "types" */
extern PurpleStringref *PurpleTclRefAccount;
extern PurpleStringref *PurpleTclRefConnection;
extern PurpleStringref *PurpleTclRefConversation;
extern PurpleStringref *PurpleTclRefPointer;
extern PurpleStringref *PurpleTclRefPlugin;
extern PurpleStringref *PurpleTclRefPresence;
extern PurpleStringref *PurpleTclRefStatus;
extern PurpleStringref *PurpleTclRefStatusAttr;
extern PurpleStringref *PurpleTclRefStatusType;
extern PurpleStringref *PurpleTclRefXfer;

PurplePlugin *tcl_interp_get_plugin(Tcl_Interp *interp);

void tcl_signal_init(void);
void tcl_signal_handler_free(struct tcl_signal_handler *handler);
void tcl_signal_cleanup(Tcl_Interp *interp);
gboolean tcl_signal_connect(struct tcl_signal_handler *handler);
void tcl_signal_disconnect(void *instance, const char *signal, Tcl_Interp *interp);

void tcl_cmd_init(void);
void tcl_cmd_handler_free(struct tcl_cmd_handler *handler);
void tcl_cmd_cleanup(Tcl_Interp *interp);
PurpleCmdId tcl_cmd_register(struct tcl_cmd_handler *handler);
void tcl_cmd_unregister(PurpleCmdId id, Tcl_Interp *interp);

void purple_tcl_ref_init(void);
void *purple_tcl_ref_get(Tcl_Interp *interp, Tcl_Obj *obj, PurpleStringref *type);
Tcl_Obj *purple_tcl_ref_new(PurpleStringref *type, void *value);

Tcl_ObjCmdProc tcl_cmd_account;
Tcl_ObjCmdProc tcl_cmd_signal_connect;
Tcl_ObjCmdProc tcl_cmd_buddy;
Tcl_ObjCmdProc tcl_cmd_cmd;
Tcl_ObjCmdProc tcl_cmd_connection;
Tcl_ObjCmdProc tcl_cmd_conversation;
Tcl_ObjCmdProc tcl_cmd_core;
Tcl_ObjCmdProc tcl_cmd_debug;
Tcl_ObjCmdProc tcl_cmd_notify;
Tcl_ObjCmdProc tcl_cmd_plugins;
Tcl_ObjCmdProc tcl_cmd_prefs;
Tcl_ObjCmdProc tcl_cmd_presence;
Tcl_ObjCmdProc tcl_cmd_savedstatus;
Tcl_ObjCmdProc tcl_cmd_send_im;
Tcl_ObjCmdProc tcl_cmd_signal;
Tcl_ObjCmdProc tcl_cmd_status;
Tcl_ObjCmdProc tcl_cmd_status_attr;
Tcl_ObjCmdProc tcl_cmd_status_type;
Tcl_ObjCmdProc tcl_cmd_unload;

#endif /* _PURPLE_TCL_PURPLE_H_ */