package Text::Emoticon::MSN; use strict; our $VERSION = '0.04'; use Text::Emoticon 0.03; use base qw(Text::Emoticon); sub default_config { return { imgbase => "http://messenger.msn.com/Resource/emoticons", xhtml => 1, strict => 0, class => undef, }; } # Table autogernerated from Emoticons.aspx using # $_ = join "", <>; # while (m@(|(.*?))@g) { # $icon = $2 if $2; # ($t = $2) =~ s/'/\\'/; # $print qq('$t' => "$icon",\n) if $3; # } __PACKAGE__->register_subclass({ ':-)' => "regular_smile.gif", ':)' => "regular_smile.gif", ':-D' => "teeth_smile.gif", ':d' => "teeth_smile.gif", ':-O' => "omg_smile.gif", ':o' => "omg_smile.gif", ':-P' => "tongue_smile.gif", ':p' => "tongue_smile.gif", ';-)' => "wink_smile.gif", ';)' => "wink_smile.gif", ':-(' => "sad_smile.gif", ':(' => "sad_smile.gif", ':-S' => "confused_smile.gif", ':s' => "confused_smile.gif", ':-|' => "what_smile.gif", ':|' => "what_smile.gif", ':\'(' => "cry_smile.gif", ':-$' => "red_smile.gif", ':$' => "red_smile.gif", '(H)' => "shades_smile.gif", '(h)' => "shades_smile.gif", ':-@' => "angry_smile.gif", ':@' => "angry_smile.gif", '(A)' => "angel_smile.gif", '(a)' => "angel_smile.gif", '(6)' => "devil_smile.gif", ':-#' => "47_47.gif", '8o|' => "48_48.gif", '8-|' => "49_49.gif", '^o)' => "50_50.gif", ':-*' => "51_51.gif", '+o(' => "52_52.gif", ':^)' => "71_71.gif", '*-)' => "72_72.gif", '<:o)' => "74_74.gif", '8-)' => "75_75.gif", '|-)' => "77_77.gif", '(C)' => "coffee.gif", '(c)' => "coffee.gif", '(Y)' => "thumbs_up.gif", '(y)' => "thumbs_up.gif", '(N)' => "thumbs_down.gif", '(n)' => "thumbs_down.gif", '(B)' => "beer_mug.gif", '(b)' => "beer_mug.gif", '(D)' => "martini.gif", '(d)' => "martini.gif", '(X)' => "girl.gif", '(x)' => "girl.gif", '(Z)' => "guy.gif", '(z)' => "guy.gif", '({)' => "guy_hug.gif", '(})' => "girl_hug.gif", ':-[' => "bat.gif", ':[' => "bat.gif", '(^)' => "cake.gif", '(L)' => "heart.gif", '(l)' => "heart.gif", '(U)' => "broken_heart.gif", '(u)' => "broken_heart.gif", '(K)' => "kiss.gif", '(k)' => "kiss.gif", '(G)' => "present.gif", '(g)' => "present.gif", '(F)' => "rose.gif", '(f)' => "rose.gif", '(W)' => "wilted_rose.gif", '(w)' => "wilted_rose.gif", '(P)' => "camera.gif", '(p)' => "camera.gif", '(~)' => "film.gif", '(@)' => "cat.gif", '(&)' => "dog.gif", '(T)' => "phone.gif", '(t)' => "phone.gif", '(I)' => "lightbulb.gif", '(i)' => "lightbulb.gif", '(8)' => "note.gif", '(S)' => "moon.gif", '(*)' => "star.gif", '(E)' => "envelope.gif", '(e)' => "envelope.gif", '(O)' => "clock.gif", '(o)' => "clock.gif", '(M)' => "messenger.gif", '(m)' => "messenger.gif", '(sn)' => "53_53.gif", '(bah)' => "70_70.gif", '(pl)' => "55_55.gif", '(||)' => "56_56.gif", '(pi)' => "57_57.gif", '(so)' => "58_58.gif", '(au)' => "59_59.gif", '(ap)' => "60_60.gif", '(um)' => "61_61.gif", '(ip)' => "62_62.gif", '(co)' => "63_63.gif", '(mp)' => "64_64.gif", '(st)' => "66_66.gif", '(li)' => "73_73.gif", '(mo)' => "69_69.gif", }); 1; __END__ =head1 NAME Text::Emoticon::MSN - Emoticon filter of MSN Messenger =head1 SYNOPSIS use Text::Emoticon::MSN; my $emoticon = Text::Emoticon::MSN->new( imgbase => "http://example.com/emo", ); my $text = "Yet Another Perl Hacker ;-)"; print $emoticon->filter($text); # it prints # Yet Another Perl Hacker =head1 DESCRIPTION Text::Emoticon::MSN is a text filter that replaces text emoticons like ":-)", ";-P", etc. to the icons of MSN Messenger, detailed in http://messenger.msn.com/Resource/Emoticons.aspx =head1 METHODS =over 4 =item new $emoticon = Text::Emoticon::MSN->new( imgbase => "http://yourhost.example.com/images/emoticons", xhtml => 1, class => "emoticon", ); Constructs new Text::Emoticon::MSN object. It accepts two options: =over 6 =item imgbase Base URL where icon gif files are located. It defaults to "http://messenger.msn.com/Resource/emoticons" (the MSN site) but I don't recommend that, as there's a possibility MSN will ban your site. =item xhtml Whether it uses XHTML style img tags. It defaults to 1. =item class CSS class used in C tags. It defaults to nothing. $emoticon = Text::Emoticon::MSN->new(class => "emo"); will print: =item strict Whether it will disable smileys with space in them. defaults to 0. =back =item filter $filtered_text = $emoticon->filter($text); Filters emoticons in text and returns C tagged text (HTML). =back =head1 TODO =over 4 =item * Handling original emoticons. (Patches welcome) =item * Common API for other Emoticons like Yahoo! (maybe Text::Emoticons) =back =head1 AUTHOR Tatsuhiko Miyagawa Emiyagawa@bulknews.netE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO http://messenger.msn.com/Resource/Emoticons.aspx =cut