Rename user-facing bits of Dillo to Flenser.
I dunno if I got them all. This is also now version 0.0.0
This commit is contained in:
175
flenser-install-hyphenation
Executable file
175
flenser-install-hyphenation
Executable file
@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env perl
|
||||
use POSIX;
|
||||
use File::Basename;
|
||||
use Net::FTP;
|
||||
use Getopt::Long;
|
||||
|
||||
$host = "mirrors.dotsrc.org";
|
||||
$basesourcedir = "/ctan";
|
||||
$sourcedir = "";
|
||||
|
||||
sub ftpmessage {
|
||||
# I'm not sure whether $ftp->message is supposed to end with "\n"
|
||||
# or not. To be sure (and have nicer output on the screen), it is
|
||||
# removed here.
|
||||
my $x = $ftp->message;
|
||||
chomp $x;
|
||||
return $x;
|
||||
}
|
||||
|
||||
# Determine ${prefix}, for the default target directory for pattern
|
||||
# files. Two different strategies ...
|
||||
$makefile = (dirname $0) . "/Makefile";
|
||||
if (-e $makefile) {
|
||||
# 1. Makefile exists in the same directory, so it can be assumed
|
||||
# that this script is not yet installed, but called from the source
|
||||
# directory. Search Makefile for prexix.
|
||||
open MF, $makefile or die "Cannot open $makefile: $!";
|
||||
while (<MF>) {
|
||||
if (/^\s*prefix\s*=\s*(.*)\s*$/) {
|
||||
$prefix = $1;
|
||||
}
|
||||
}
|
||||
close MF;
|
||||
|
||||
if ($prefix eq "") {
|
||||
die "Prefix not defined in $makefile.";
|
||||
}
|
||||
} else {
|
||||
# 2. Assume that this is script is installed, so its path contains
|
||||
# the prefix.
|
||||
if ($0 =~ /(.*)\/bin\/[^\/]+$/) {
|
||||
$prefix = $1;
|
||||
} else {
|
||||
die "Failed to determine prefix from $0.";
|
||||
}
|
||||
}
|
||||
|
||||
$targetdir = "$prefix/lib/flenser/hyphenation";
|
||||
|
||||
if (!GetOptions ("host=s" => \$host,
|
||||
"basesourcedir=s" => \$basesourcedir,
|
||||
"sourcedir=s" => \$sourcedir,
|
||||
"targetdir=s" => \$targetdir)
|
||||
|| @ARGV == 0) {
|
||||
print "Usage: $0 [OPTIONS] LANG [LANG ...]\n\n";
|
||||
print <<EOT;
|
||||
Download and install hyphenation patterns from CTAN for different languages,
|
||||
via FTP. Languages are specified as defined by ISO 639-1 ("en" for English
|
||||
etc.).
|
||||
|
||||
If there are multiple pattern files for a language (and so the filename is not
|
||||
"hyph-LANG.pat.txt"), you must specify the respective part of the filename,
|
||||
e. g. "en-gb" or "en-us". In this case, the extra part ("-gb" or "-us") is
|
||||
automatically removed.
|
||||
|
||||
If you are not sure, simply specify the language code ("en" in this example);
|
||||
you will then given a list of existing pattern files.
|
||||
|
||||
Options:
|
||||
-h, --host=HOST the host to connect to (default:
|
||||
mirrors.dotrc.org)
|
||||
-s, --sourcedir=DIR the directory on the FTP server
|
||||
-b, --basesourcedir=DIR alternatively, the base directory, after which
|
||||
/language/hyph-utf8/tex/generic/hyph-utf8...
|
||||
.../patterns/txt is added (default: /ctan/)
|
||||
-t, --targetdir=DIR where to install the hyphenation patterns
|
||||
(default: where they are read by flenser)
|
||||
EOT
|
||||
} else {
|
||||
if ($sourcedir eq "") {
|
||||
$sourcedir =
|
||||
"$basesourcedir/language/hyph-utf8/tex/generic/hyph-utf8/patterns/txt";
|
||||
}
|
||||
|
||||
if (!-e $targetdir) {
|
||||
mkdir $targetdir or die "Cannot create directory $targetdir: $!";
|
||||
print "Created $targetdir.\n";
|
||||
}
|
||||
|
||||
# Connect to CTAN FTP server, change to the directory where the
|
||||
# patterns lie, and read files list (which may be useful later).
|
||||
$ftp = Net::FTP->new($host,Timeout=>240)
|
||||
or die "Cannot connect to $host: $@";
|
||||
$ftp->login() or die "Cannot login: ", ftpmessage;
|
||||
$ftp->cwd($sourcedir)
|
||||
or die "Cannot change to directory $sourcedir: ", ftpmessage;
|
||||
@files = $ftp->ls or die "Cannot read directory: ", ftpmessage;
|
||||
|
||||
# Finally, read pattern files.
|
||||
foreach $arg (@ARGV) {
|
||||
if ($arg =~ /^([a-z]+)-.*$/) {
|
||||
# More files per language, e. g. "en-gb".
|
||||
$lang = $1;
|
||||
} else {
|
||||
# One file per language, e. g. "ru".
|
||||
$lang = $arg;
|
||||
}
|
||||
|
||||
# First, download the pattern file to a temporary file.
|
||||
$tmppat = tmpnam();
|
||||
if ($ftp->get ("hyph-$arg.pat.txt", $tmppat)) {
|
||||
printf ("Successfully downloaded pattern file for \"$arg\".\n");
|
||||
|
||||
# Search for a licence file. (Only a warning, when it does
|
||||
# not exist.)
|
||||
$tmplic = tmpnam();
|
||||
$licfound = 0;
|
||||
if ($ftp->get ("hyph-$arg.lic.txt", $tmplic)) {
|
||||
$licfound = 1;
|
||||
} else {
|
||||
print "Warning: Cannot download license file for \"$arg\": ",
|
||||
ftpmessage, "\n";
|
||||
}
|
||||
|
||||
# Combine both, licence and pattern, to the final pattern
|
||||
# file.
|
||||
$outfile = "$targetdir/$lang.pat";
|
||||
open OUT, "> $outfile" or die "Cannot open $outfile: $!";
|
||||
|
||||
if ($licfound) {
|
||||
print OUT
|
||||
"% Licence from ftp://$host$sourcedir/hyph-$arg.lic.txt\n";
|
||||
print OUT "%\n";
|
||||
open IN, $tmplic or die "Cannot open $tmplic: $!";
|
||||
while (<IN>) {
|
||||
# Each line from the licence file must be a comment.
|
||||
if (!/^%/) {
|
||||
print OUT "% ";
|
||||
}
|
||||
print OUT;
|
||||
}
|
||||
close IN;
|
||||
unlink $tmplic;
|
||||
|
||||
print OUT "%\n";
|
||||
}
|
||||
|
||||
print OUT "% Patterns from ftp://$host$sourcedir/hyph-$arg.pat.txt\n";
|
||||
print OUT "%\n";
|
||||
open IN, $tmppat or die "Cannot open $tmppat: $!";
|
||||
while (<IN>) {
|
||||
print OUT;
|
||||
}
|
||||
close IN;
|
||||
unlink $tmppat;
|
||||
|
||||
close OUT;
|
||||
} else {
|
||||
# Not found. If a single language was specified (e. g. "en"),
|
||||
# search for possibilities.
|
||||
print "Error: Cannot download pattern file for \"$arg\": ",
|
||||
ftpmessage, "\n";
|
||||
if ($lang eq $arg) {
|
||||
print "Try one of these:\n";
|
||||
foreach(@files) {
|
||||
if (/^hyph-($lang-.*)\.pat\.txt$/) {
|
||||
print " $1\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ftp->quit;
|
||||
}
|
Reference in New Issue
Block a user