html/sana_cmd.pl
1 # /sana command, translates english-finnish-english.
2
3 # BUGS: Doesn't handle UTF-8.
4
5 use warnings;
6 use strict;
7 use HTML::Entities ();
8 use Irssi ();
9 use LWP::Simple ();
10
11 use vars qw($VERSION %IRSSI);
12
13 $VERSION = "0.1";
14 %IRSSI = (
15 authors => 'Johan "Ion" Kiviniemi, idea taken from Riku Voipio\'s sana.pl',
16 contact => 'ion at hassers.org',
17 name => 'sana-cmd',
18 description => '/sana command, translates english-finnish-english.',
19 license => 'Public Domain',
20 url => 'http://ion.amigafin.org/irssi/',
21 changed => 'Sat Mar 16 06:20 EET 2002',
22 );
23
24 Irssi::command_bind(
25 'sana' => sub {
26 my @params = split /\s+/, shift;
27 unless (@params) {
28 Irssi::print("Sana: Usage: "
29 . (substr(Irssi::settings_get_str('cmdchars'), 0, 1) || "/")
30 . "sana word");
31 return;
32 }
33
34 my $word = $params[0];
35 $word =~ s/ /+/g;
36 $word =~ s/(\W)/'%' . unpack "H*", $1/eg;
37
38 if (my $content =
39 LWP::Simple::get(
40 'http://www.tracetech.net:8081/?word=' . $word))
41 {
42 $content = HTML::Entities::decode($content);
43 $content =~ s/\015?\012/ /g;
44 $content =~ s/<[^>]+>/ /g; # Ugly, but it does the trick here.
45
46 my @words = $content =~ /(\S+)\s+(\(\S+?\))/g;
47
48 if (@words) {
49 Irssi::print("Sana: $word: @words");
50 } else {
51 Irssi::print("Sana: $word: No translations.");
52 }
53 } else {
54 Irssi::print("Sana failed.");
55 }
56 }
57 );