From b9151b0d42f2d0c40aa66ab2ada474d17bc0964f Mon Sep 17 00:00:00 2001 From: alec Date: Thu, 11 Nov 2010 08:18:53 +0000 Subject: - Handle propely HTML entities. Don't replace ";)" in e.g. "")" git-svn-id: https://svn.roundcube.net/trunk@4213 208e9e7b-5314-0410-a742-e7e81cd9613c --- plugins/emoticons/emoticons.php | 66 +++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 15 deletions(-) (limited to 'plugins') diff --git a/plugins/emoticons/emoticons.php b/plugins/emoticons/emoticons.php index afd299c8e..e929c9f9d 100644 --- a/plugins/emoticons/emoticons.php +++ b/plugins/emoticons/emoticons.php @@ -5,7 +5,7 @@ * * Sample plugin to replace emoticons in plain text message body with real icons * - * @version 1.1.0 + * @version 1.2.0 * @author Thomas Bruederli * @author Aleksander Machniak * @website http://roundcube.net @@ -13,31 +13,67 @@ class emoticons extends rcube_plugin { public $task = 'mail'; - private $map; function init() { - $this->task = 'mail'; $this->add_hook('message_part_after', array($this, 'replace')); - - $this->map = array( - '/:\)/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', 'title' => ':)')), - '/:-\)/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', 'title' => ':-)')), - '/(? html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif', 'title' => ':D')), - '/:-D/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif', 'title' => ':-D')), - '/;\)/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif', 'title' => ';)')), - '/;-\)/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif', 'title' => ';-)')), - '/:\(/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif', 'title' => ':(')), - '/:-\(/' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif', 'title' => ':-(')), - ); } function replace($args) { + // This is a lookbehind assertion which will exclude html entities + // E.g. situation when ";)" in "")" shouldn't be replaced by the icon + // It's so long because of assertion format restrictions + $entity = '(? html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', + 'title' => ':)' + )), + '/:-\)/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', + 'title' => ':-)' + )), + '/(? html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif', + 'title' => ':D' + )), + '/:-D/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif', + 'title' => ':-D' + )), + '/:\(/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif', + 'title' => ':(' + )), + '/:-\(/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif', + 'title' => ':-(' + )), + '/'.$entity.';\)/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif', + 'title' => ';)' + )), + '/'.$entity.';-\)/' => html::img(array( + 'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif', + 'title' => ';-)' + )), + ); + if ($args['type'] == 'plain') { $args['body'] = preg_replace( - array_keys($this->map), array_values($this->map), $args['body']); + array_keys($map), array_values($map), $args['body']); } + return $args; } -- cgit v1.2.3