]> git.donarmstrong.com Git - deb_pkgs/scowl.git/blobdiff - 7.1/mk-list
[svn-upgrade] Tagging scowl (7.1)
[deb_pkgs/scowl.git] / 7.1 / mk-list
diff --git a/7.1/mk-list b/7.1/mk-list
new file mode 100755 (executable)
index 0000000..77750af
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use Getopt::Long;
+
+Getopt::Long::Configure ("bundling");
+
+my $with_variants;
+my $file_names_only;
+my $dir;
+my $no_implied;
+my $variants_str;
+
+sub usage() {
+    print STDERR "$0 [-v#] [<options>] <spelling categories> <size>\n";
+    exit 1;
+}
+
+GetOptions ("dir|d=s", \$dir,
+            "with-variants|v=i", => \$with_variants,
+            "variants=s", \$variants_str,
+            "file-names-only|f", \$file_names_only,
+            "no-implied", \$no_implied) or usage();
+$dir = "final" unless defined $dir;
+
+my %spelling_map = qw(en-us american en-gb british? en-gb-ise british
+                      en-gb-ize british_z en-gb-oed british_z en-ca canadian);
+$spelling_map{$_} = $_
+    foreach (qw(english special american british canadian
+                variant_0 variant_1 variant_2 
+                british_variant_0 british_variant_1
+                canadian_variant_0 canadian_variant_1));
+
+die "Cannot specify both --with-variants and --variants" if $with_variants && $variants_str;
+$variants_str = "non" unless defined $variants_str || defined $with_variants;
+$variants_str = join(',', 'non', 0..$with_variants) if defined $with_variants;
+my %use_variant_level;
+foreach (split ',', $variants_str) {
+    die "Invalid variant num: $_" unless /^(non|[012])$/;
+    $use_variant_level{$_} = 1;
+}
+
+$no_implied = 1 unless $use_variant_level{non};
+
+usage unless @ARGV >= 2;
+
+my $SIZE = pop @ARGV;
+die "Invalid size: $SIZE\n" unless $SIZE =~ /^\d\d$/;
+
+my @SPS = map {my $sp = $_;
+               $sp =~ tr/_/-/;
+               $sp = $spelling_map{lc $sp};
+               die "Must specify en_GB-ise or en_GB-ize\n" 
+                   if $sp eq 'british?' && $use_variant_level{non};
+               $sp = 'british' if $sp eq 'british?';
+               die "Unknown spelling category: $_\n" unless defined $sp;
+               $sp;} @ARGV;
+my %SPS;
+$SPS{$_} = 1 foreach (@SPS);
+
+$SPS{english} = 1 unless $no_implied;
+$SPS{special} = 1 unless $no_implied;
+
+$SPS{variant_0} = 1 if $SPS{american} && $use_variant_level{0}; 
+$SPS{variant_1} = 1 if $SPS{american} && $use_variant_level{1};
+$SPS{british_variant_0} = 1 if ($SPS{british} || $SPS{british_z}) && $use_variant_level{0};
+$SPS{british_variant_1} = 1 if ($SPS{british} || $SPS{british_z}) && $use_variant_level{1};
+$SPS{canadian_variant_0} = 1 if $SPS{canadian} && $use_variant_level{0};
+$SPS{canadian_variant_1} = 1 if $SPS{canadian} && $use_variant_level{1};
+$SPS{variant_2} = 1 if $use_variant_level{2};
+
+unless ($use_variant_level{non}) {
+    delete $SPS{$_} foreach (@SPS);
+}
+
+opendir D, $dir or die "Unable to open dir $dir\n";
+
+my @files = readdir(D);
+
+my @words;
+
+foreach (sort @files) {
+    my ($sp, $type, $size) = /^(\w+)-([^.]+)\.(\d\d)/ or next;
+    next unless $SPS{$sp};
+    next unless $size <= $SIZE;
+    if ($file_names_only) {
+        print "$_\n";
+    } else {
+        open F, "$dir/$_" or die "Unable to open $dir/$_ for reading";
+        while (<F>) {
+            chop;
+            push @words, $_;
+        }
+    }
+}
+
+my $prev = '';
+foreach (sort @words) {
+    next if $_ eq $prev;
+    print "$_\n";
+    $prev = $_;
+}
+
+
+                
+
+
+