1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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.");
}
}
);
|