]> git.donarmstrong.com Git - deb_pkgs/scowl.git/blobdiff - src/add-affixes
fix numbering of variants to be 1 and 2 (closes: #867586)
[deb_pkgs/scowl.git] / src / add-affixes
index a84a8155c993fe8354e452d777340ab90e2808ff..814e35f8e76086ab54a3e5ebb0716ec0e84e02d3 100755 (executable)
@@ -30,17 +30,21 @@ open F, "r/alt12dicts/2of12id.txt" or die;
 my %lookup;
 my %remove;
 my %possessive;
+# possessive_cross = additional forms that should be looked up in the
+#   possessive hash
+my %possessive_cross;
 
 while (<F>) {
   s/\r?\n$// or die;
   # (flags, base word, part of speach, infl forms)
-  my ($d,$w,$p,$a) = /^([-@]?)(\w+) (.).*: ?(.*)$/ or die;
+  my ($d,$w,$p,$a) = /^([-@\+]?)(\w+) (.).*: ?(.*)$/ or die "Bad line: >$_<";
+  $d =~ tr/+//d;
   $possessive{$w} = "$w\'s\n" if $p eq 'N' && ($d eq '' || $use_all);
   next if $use_all;
-  my @a = $a =~ /([-~@\w]+)/g;
+  my @a = $a =~ /([-~@!\w]+)/g;
   @a = map {"$d$_"} @a if ($d);
   my (@a0,@a1);
-  foreach (@a) {if (s/^[~-]//) {push @a0, $_} else {push @a1, $_}}
+  foreach (@a) {if (s/^[~!-]//) {push @a0, $_} else {push @a1, $_}}
   $remove{"$w:$p"} = 1 unless @a1;
   foreach (@a0) {$remove{"$w:$p:$_"} = 1}
 }
@@ -62,18 +66,28 @@ while (<F>) {
   #  AGID things it is a noun and "use-some" or Uppercase 
   #    (since 2of12id doesn't include uppercase)
   #  AGIG is guessing it is a noun and "use-all"
-  $possessive{$w} = "$w\'s\n" if $p eq 'N' && (($q eq '' && ($use_all || $w =~ /^[A-Z]/)) 
-                                               || $use_all >= 2);
+  my $add_possessive = $p eq 'N' && (($q eq '' && ($use_all || $w =~ /^[A-Z]/)) 
+                                     || $use_all >= 2);
+  $possessive{$w} = "$w\'s\n" if $add_possessive;
   next if $remove{"$w:$p"};
   next unless $q eq '' || $use_all >= 2;
   my @a = split /, | \| /, $a;
-  @a = grep {my ($word,$tags,$level) 
+  @a = grep {my ($word,$tags,$level)
                 = /^([A-Za-z\']+)([~<!?]*)(| [\d.]+)(| {\S+})$/ or die $_;
             $_ = $word;
             $tags !~ /~|\?|!</ && $level <= $inc_level} @a;
   @a = grep {not $remove{"$w:$p:$_"}} @a;
   next unless @a;
   $lookup{$w} .= join("\n",@a)."\n";
+
+  # For irregular nouns that have plurals that do not end in s
+  # then add the possessive form of the plural as well
+  next unless $add_possessive;
+  foreach (@a) {
+    next if /s$/;
+    $possessive{$_} .= "$_\'s\n";
+    push @{$possessive_cross{$w}}, $_
+  }
 }
 
 unless ($no_possessive) {
@@ -96,6 +110,12 @@ unless ($no_possessive) {
 while (<STDIN>) {
   print;
   chop;
-  print $lookup{$_} unless $just_possessive;
-  print $possessive{$_} unless $no_possessive;
+  my $w = $_;
+  print $lookup{$w} unless $just_possessive;
+  print $possessive{$w} unless $no_possessive;
+  unless ($just_possessive || $no_possessive) {
+    foreach (@{$possessive_cross{$w}}) {
+      print $possessive{$_}
+    }
+  }
 }