diff options
Diffstat (limited to 'scripts/sana_cmd.pl')
| -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."); +        } +    } +); | 
