ports/73063: New port: misc/translator, a GTK+ frontend to the Babelfish translation service
Jean-Yves Lefort
jylefort at brutele.be
Sun Oct 24 06:20:11 UTC 2004
>Number: 73063
>Category: ports
>Synopsis: New port: misc/translator, a GTK+ frontend to the Babelfish translation service
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Oct 24 06:20:10 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator: Jean-Yves Lefort
>Release: FreeBSD 5.3-BETA6 i386
>Organization:
>Environment:
System: FreeBSD jsite.lefort.net 5.3-BETA6 FreeBSD 5.3-BETA6 #0: Tue Sep 28 00:10:28 CEST 2004 jylefort at jsite.lefort.net:/usr/obj/usr/src/sys/JSITE i386
>Description:
Depends on 73062.
>How-To-Repeat:
>Fix:
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# translator
# translator/pkg-plist
# translator/pkg-descr
# translator/distinfo
# translator/Makefile
# translator/files
# translator/files/patch-translator.pl
#
echo c - translator
mkdir -p translator > /dev/null 2>&1
echo x - translator/pkg-plist
sed 's/^X//' >translator/pkg-plist << 'END-of-translator/pkg-plist'
Xbin/translator
Xshare/gnome/pixmaps/translator.png
Xshare/translator/translator.glade
X at dirrm share/translator
END-of-translator/pkg-plist
echo x - translator/pkg-descr
sed 's/^X//' >translator/pkg-descr << 'END-of-translator/pkg-descr'
XTranslator is a simple front-end to AltaVista's excellent
XBabelfish. It is designed to integrate into the GNOME desktop, and as
Xsuch features an (almost) HIG compliant interface, and support for
XGNOME's HTTP proxy settings.
X
XWWW: http://jodrell.net/projects/translator/
X
X- Jean-Yves Lefort
Xjylefort at brutele.be
END-of-translator/pkg-descr
echo x - translator/distinfo
sed 's/^X//' >translator/distinfo << 'END-of-translator/distinfo'
XMD5 (translator-0.1.0.tar.gz) = abaae4506a2ea366b35423289034eeaf
XSIZE (translator-0.1.0.tar.gz) = 17214
END-of-translator/distinfo
echo x - translator/Makefile
sed 's/^X//' >translator/Makefile << 'END-of-translator/Makefile'
X# New ports collection makefile for: translator
X# Date created: 24 Oct 2004
X# Whom: Jean-Yves Lefort <jylefort at brutele.be>
X#
X# $FreeBSD$
X#
X
XPORTNAME= translator
XPORTVERSION= 0.1.0
XCATEGORIES= misc
XMASTER_SITES= http://jodrell.net/files/translator/
X
XMAINTAINER= jylefort at brutele.be
XCOMMENT= A GTK+ frontend to the Babelfish translation service
X
XRUN_DEPENDS= ${SITE_PERL}/${PERL_ARCH}/Gtk2.pm:${PORTSDIR}/x11-toolkits/p5-Gtk2 \
X ${SITE_PERL}/${PERL_ARCH}/Gtk2/GladeXML.pm:${PORTSDIR}/x11-toolkits/p5-Glade2 \
X ${SITE_PERL}/${PERL_ARCH}/Gnome2/GConf.pm:${PORTSDIR}/devel/p5-Gnome2-GConf \
X ${SITE_PERL}/WWW/Babelfish.pm:${PORTSDIR}/www/p5-WWW-Babelfish
X
XUSE_X_PREFIX= yes
XUSE_PERL5= yes
XNO_BUILD= yes
X
X.include <bsd.port.pre.mk>
X
X.if ${PERL_LEVEL} < 500800
XIGNORE= requires Perl 5.8.0 or superior
X.endif
X
Xpre-everything::
X @if ! ${PERL} -mthreads -e '' >/dev/null 2>&1; then \
X ${ECHO_CMD} "Your installation of Perl does not support threads. The most straightforward "; \
X ${ECHO_CMD} "way to have a threads-enabled Perl is to install the lang/perl5.8 port, "; \
X ${ECHO_CMD} "enabling the WITH_THREADS knob."; \
X exit 1; \
X fi
X
Xpost-patch:
X @${SED} -e \
X 's|share/pixmaps|share/gnome/pixmaps| ; \
X s|@PREFIX@|${PREFIX}|' \
X ${WRKSRC}/translator.pl > ${WRKSRC}/translator
X
Xdo-install:
X ${MKDIR} ${PREFIX}/bin
X ${INSTALL_SCRIPT} ${WRKSRC}/translator ${PREFIX}/bin
X ${MKDIR} ${PREFIX}/share/gnome/pixmaps
X ${INSTALL_DATA} ${WRKSRC}/translator.png ${PREFIX}/share/gnome/pixmaps
X ${MKDIR} ${PREFIX}/share/translator
X ${INSTALL_DATA} ${WRKSRC}/translator.glade ${PREFIX}/share/translator
X
X.include <bsd.port.post.mk>
END-of-translator/Makefile
echo c - translator/files
mkdir -p translator/files > /dev/null 2>&1
echo x - translator/files/patch-translator.pl
sed 's/^X//' >translator/files/patch-translator.pl << 'END-of-translator/files/patch-translator.pl'
X--- translator.pl.orig Fri Dec 19 12:50:02 2003
X+++ translator.pl Sun Oct 24 08:08:53 2004
X@@ -2,24 +2,22 @@
X # nifty front-end to Altavista's Babel Fish.
X # $Id: translator.pl,v 1.13 2003/12/19 11:50:02 jodrell Exp $
X use WWW::Babelfish;
X-use IO::Scalar;
X use threads;
X use threads::shared;
X+use Thread::Queue;
X use File::Basename qw(basename);
X-use Data::Dumper;
X use strict;
X
X #
X # these are shared between the main thread and the worker:
X #
X-my @queue : shared;
X+my $input_queue = new Thread::Queue;
X+my $output_queue = new Thread::Queue;
X+
X my @errors : shared;
X-my $finished : shared;
X-my $output : shared;
X my $source : shared;
X my $dest : shared;
X my $running : shared;
X-my $pending : shared;
X my $proxy : shared;
X
X #
X@@ -30,9 +28,6 @@
X #
X # set up the application:
X #
X-$finished = 0;
X-$pending = 0;
X-
X my $NAME = 'Translator';
X my $VERSION = '0.1.0';
X my $RCFILE = sprintf('%s/.%src', $ENV{HOME}, lc($NAME));
X@@ -80,24 +75,25 @@
X # places output into the $output array, and we need to keep the entry up to date:
X #
X Glib::Timeout->add(50, sub {
X- if ($pending == 1) {
X- $app->get_widget('output')->get_buffer->set_text($output) ;
X- $pending = 0;
X+ if (defined(my $output = $output_queue->dequeue_nb)) {
X+ $app->get_widget('output')->get_buffer->set_text($output);
X }
X- if ($running == 1) {
X- $app->get_widget('main_window')->get_root_window->set_cursor($busy);
X- $app->get_widget('translate_button')->set_sensitive(0);
X- $app->get_widget('input')->set_editable(0);
X- } else {
X- $app->get_widget('main_window')->get_root_window->set_cursor($normal);
X- $app->get_widget('translate_button')->set_sensitive(1);
X- $app->get_widget('input')->set_editable(1);
X+
X+ {
X+ lock($running);
X+ $app->get_widget('main_window')->get_root_window->set_cursor($running ? $busy: $normal);
X+ $app->get_widget('translate_button')->set_sensitive(! $running);
X+ $app->get_widget('input')->set_editable(! $running);
X }
X- if (scalar(@errors) > 0) {
X- my $error_dialog = Gtk2::MessageDialog->new($app->get_widget('main_window'), 'modal', 'error', 'ok', shift(@errors));
X- $error_dialog->set_icon($app->get_widget('main_window')->get_icon);
X- $error_dialog->signal_connect('response', sub { $error_dialog->destroy });
X- $error_dialog->show_all;
X+
X+ {
X+ lock(@errors);
X+ if (scalar(@errors) > 0) {
X+ my $error_dialog = Gtk2::MessageDialog->new($app->get_widget('main_window'), 'modal', 'error', 'ok', shift(@errors));
X+ $error_dialog->set_icon($app->get_widget('main_window')->get_icon);
X+ $error_dialog->signal_connect('response', sub { $error_dialog->destroy });
X+ $error_dialog->show_all;
X+ }
X }
X return 1;
X });
X@@ -107,46 +103,60 @@
X Gtk2->main;
X
X sub worker {
X- my $fish = WWW::Babelfish->new;
X+ my $fish = WWW::Babelfish->new(agent => 'Mozilla/8.0');
X $fish->{ua}->timeout(10);
X- while ($finished == 0) {
X- if (scalar(@queue) > 0) {
X+ while (my $input = $input_queue->dequeue) {
X+ my $output = '';
X+ {
X+ lock($running);
X $running = 1;
X- $output = '';
X- my $input = shift(@queue);
X- my $fh = IO::Scalar->new(\$output);
X+ }
X+ open my $fh, ">", \$output or die;
X+ {
X+ lock($proxy);
X if ($proxy ne '') {
X $fish->{proxy} = $proxy;
X $fish->{ua}->proxy('http', 'http://'.$proxy.'/');
X }
X+ }
X+ {
X+ lock($source);
X+ lock($dest);
X if (!$fish->translate(
X source => $source,
X destination => $dest,
X ofh => $fh,
X text => $input,
X )) {
X+ lock(@errors);
X push(@errors, "Error: $!");
X }
X- $pending = 1;
X- } else {
X+ }
X+ {
X+ lock($running);
X $running = 0;
X- threads->yield;
X }
X+ $output_queue->enqueue($output);
X }
X- return 1;
X }
X
X sub close_program {
X save_options();
X- $finished = 1;
X+ $input_queue->enqueue(undef); # terminate the worker thread
X Gtk2->main_quit;
X $worker->join;
X exit;
X }
X
X sub translate {
X- $source = $app->get_widget('from_combo')->entry->get_text;
X- $dest = $app->get_widget('to_combo')->entry->get_text;
X+ {
X+ lock($source);
X+ $source = $app->get_widget('from_combo')->entry->get_text;
X+ }
X+ {
X+ lock($dest);
X+ $dest = $app->get_widget('to_combo')->entry->get_text;
X+ }
X my $input = $app->get_widget('input')->get_buffer->get_text(
X $app->get_widget('input')->get_buffer->get_start_iter,
X $app->get_widget('input')->get_buffer->get_end_iter,
X@@ -159,9 +169,12 @@
X } else {
X $message = 'Please enter some text to translate.';
X }
X- push(@errors, $message);
X+ {
X+ lock(@errors);
X+ push(@errors, $message);
X+ }
X } else {
X- push(@queue, $input);
X+ $input_queue->enqueue($input);
X }
X return 1;
X }
X@@ -284,6 +297,7 @@
X }
X
X sub source_changed {
X+ lock($source);
X $source = $app->get_widget('from_combo')->entry->get_text;
X return undef if ($source eq '');
X $app->get_widget('to_combo')->set_popdown_strings(sort(keys(%{$pairs->{$source}})));
X@@ -292,6 +306,7 @@
X
X sub set_proxy {
X if ($client->get_bool($use_proxy_key) == 1) {
X+ lock($proxy);
X $proxy = sprintf(
X '%s:%d',
X $client->get_string($proxy_host),
END-of-translator/files/patch-translator.pl
exit
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list