aboutsummaryrefslogtreecommitdiff
path: root/dillo-install-hyphenation
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2013-03-08 14:36:09 +0100
committerSebastian Geerken <devnull@localhost>2013-03-08 14:36:09 +0100
commit786be3b985a2f97c9d970f8e9acdbf1981584ae1 (patch)
tree8cd1ad4a3705dcab47a49a07b5fb06bc5d0b5581 /dillo-install-hyphenation
parent325b089a23086039743861b33ebc4a3e69be2551 (diff)
Renamed install-hyphen to dillo-install-hyphen and made it installable.
Diffstat (limited to 'dillo-install-hyphenation')
-rwxr-xr-xdillo-install-hyphenation163
1 files changed, 163 insertions, 0 deletions
diff --git a/dillo-install-hyphenation b/dillo-install-hyphenation
new file mode 100755
index 00000000..2a37f86a
--- /dev/null
+++ b/dillo-install-hyphenation
@@ -0,0 +1,163 @@
+#!/usr/bin/env perl
+use POSIX;
+use File::Basename;
+use Net::FTP;
+use Getopt::Long;
+
+$host = "mirrors.dotsrc.org";
+$basesourcedir = "/ctan";
+$sourcedir = "";
+
+# 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/dillo/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 dillo)
+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: $!";
+ $ftp->cwd($sourcedir) or die "Cannot change to directory $sourcedir: $!";
+ @files = $ftp->ls or die "Cannot read directory: $!";
+
+ # 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, donwload 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\": $!\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\": $!\n";
+ if ($lang eq $arg) {
+ print "Try one of these:\n";
+ foreach(@files) {
+ if (/^hyph-($lang-.*)\.pat\.txt$/) {
+ print " $1\n";
+ }
+ }
+ }
+ }
+ }
+
+ $ftp->quit;
+}