summaryrefslogtreecommitdiffstats
path: root/scripts/sana_cmd.pl
blob: 5278871111e1341a08354c6f3ea5a4d389caa150 (plain)
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.");
        }
    }
);