diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/sana_cmd.pl | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/scripts/sana_cmd.pl b/scripts/sana_cmd.pl new file mode 100644 index 0000000..5278871 --- /dev/null +++ b/scripts/sana_cmd.pl @@ -0,0 +1,57 @@ +# /sana command, translates english-finnish-english. + +# BUGS: Doesn't handle UTF-8. + +use warnings; +use strict; +use HTML::Entities (); +use Irssi (); +use LWP::Simple (); + +use vars qw($VERSION %IRSSI); + +$VERSION = "0.1"; +%IRSSI = ( + authors => 'Johan "Ion" Kiviniemi, idea taken from Riku Voipio\'s sana.pl', + contact => 'ion at hassers.org', + name => 'sana-cmd', + description => '/sana command, translates english-finnish-english.', + license => 'Public Domain', + url => 'http://ion.amigafin.org/irssi/', + changed => 'Sat Mar 16 06:20 EET 2002', +); + +Irssi::command_bind( + 'sana' => sub { + my @params = split /\s+/, shift; + unless (@params) { + Irssi::print("Sana: Usage: " + . (substr(Irssi::settings_get_str('cmdchars'), 0, 1) || "/") + . "sana word"); + return; + } + + my $word = $params[0]; + $word =~ s/ /+/g; + $word =~ s/(\W)/'%' . unpack "H*", $1/eg; + + if (my $content = + LWP::Simple::get( + 'http://www.tracetech.net:8081/?word=' . $word)) + { + $content = HTML::Entities::decode($content); + $content =~ s/\015?\012/ /g; + $content =~ s/<[^>]+>/ /g; # Ugly, but it does the trick here. + + my @words = $content =~ /(\S+)\s+(\(\S+?\))/g; + + if (@words) { + Irssi::print("Sana: $word: @words"); + } else { + Irssi::print("Sana: $word: No translations."); + } + } else { + Irssi::print("Sana failed."); + } + } +); |