Package: stardict Severity: normal Hi, Andrew Lee and Anthony Fok! I use stardict, I like this dictionary very much, but there is a great discomfort: at every new installation it is necessary to download the dictionaries from the site http://stardict.sourceforge.net by hand and to install them. It would be nice if the deb-package included the dictionaries from this site, however it is most likely impossible because mostly they will not correspond to DFSG. I have a proposal to you: to modify the package thus it has configure and template scripts for debconf, which would allow users to choose and install the dictionaries automatically (dpkg-reconfigure). I've written a small script (it is attached) which creates a list of what to download and where from: according to the results of the work of this script one may generate the menu for choosing). Some time later I would be able to complete the work on this system [1]. However now I have to choose whether to make a fake package only for automatisation of downloading the dictionaries for stardict or to work further on the stardict package. Here I need your agreement or disagreement about working on the stardict package: in the first case you'll include the results of my work into package and add me to the Uploaders group and in the second one I'll make a retitle of this bug in ITP: staridct-dicts [1]. Please inform me what is your opinion on this subject. Sincerely yours, Dmitry PS: notes: [1] _example_ of staridct-dicts.deb uploaded to: http://uvw.ru/debian/unstable/stardict/
#!/usr/bin/perl use warnings; use strict; package MechUTF8; use base qw(WWW::Mechanize); use Encode qw(encode decode); sub content { my $self=shift; my $content=$self->SUPER::content(@_); $self->response->header('Content-Type')=~/charset=([\w\d\-]+)/ and $content=encode(utf8=>decode($1=>$content)); return $content; } package main; use URI; use File::Basename qw(basename); use Getopt::Std qw(getopts); my $server="http://stardict.sourceforge.net"; my $durl="$server/Dictionaries.php"; sub die_if_error($$) { my ($browser, $errtxt)=@_; $browser->success and return; die sprintf "$errtxt, server status: %s\n", $browser->status; } sub usage() { print <<endusage; usage: $0 [OPTIONS] OPTIONS: -h - this helpscreen -v - print verbose messages -o file - save list to file endusage exit -1; } getopts('o:hv', \my %opts) or usage; $opts{h} and usage; if ($opts{o}) { open STDOUT, '>', $opts{o} or die "Can not create file $opts{o}: $!\n"; $|=1; } $|=1; select STDERR; $|=1; select STDOUT; my $browser=new MechUTF8; $opts{v} and print STDERR "Getting $durl ...\n"; $browser->get($durl); die_if_error $browser, "Can not get categories list from $server"; my %ans= map { m{href="(.*?)".*?>\s*(.*?)\s*<}s; ($2, "$server/$1") } $browser->content=~m{(<a.*?/a>)}sgi; for (sort keys %ans) { unless ($ans{$_}=~m{$server/Dictionaries_}) { delete $ans{$_}; next; } $opts{v} and print STDERR "\tGetting $ans{$_} ...\n"; $browser->get($ans{$_}); die_if_error $browser, "Can not get category `$_'"; my $content=$browser->content; for ($content) { s[<t([rd]).*?>][<t$1>]sig; s[<\s*(?:/)?\s*(?:font|span|strong|b|b|br).*?>][ ]sig; } my %dlist= map { $$_[0]=~s[<td.*?>\s*(.*?)\s*<.*][$1]; ($$_[0], $$_[1]) } grep { $$_[1] !~ /rpm$/i } map { $$_[1]=~s/\?.*//s; $_ } map { ($$_[1]=~m[.*<a\s*href="(.*?)"\s*>\s*tarbal]si)?[$$_[0], $1]:() } map { [ $$_[0], "$$_[1] $$_[2]" ] } grep { @$_ == 4 or @$_ == 3 } map { [ m[(<td.*?/td>)]sig ] } $content=~m{(<tr.*?/tr>)}sig; for my $url (values %dlist) { my $basename=basename(URI->new($url)->path); $url={file=>$basename, url=>$url, section=>$_}; } $opts{v} and printf STDERR "\t\tfound %d tarbal-links for download\n", scalar keys %dlist; unless (%dlist) { delete $ans{$_}; next; } printf "%s\n", join "\t", $dlist{$_}{section}, $_, $dlist{$_}{file}, $dlist{$_}{url} for sort keys %dlist; } keys %ans or die "Can not find categories list in $durl\n"; exit 0;
Attachment:
signature.asc
Description: Digital signature