summaryrefslogtreecommitdiffstats
path: root/scripts/sana_cmd.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/sana_cmd.pl')
-rw-r--r--scripts/sana_cmd.pl57
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.");
+ }
+ }
+);