#!/usr/bin/perl %suff_flat = ( V => [ [ 'e', 'e', 'ive' ], [ '[^e]', '', 'ive' ] ], N => [ [ 'e', 'e', 'ion' ], [ 'y', 'y', 'ication' ], [ '[^ey]', '', 'en' ] ], X => [ [ 'e', 'e', 'ions' ], [ 'y', 'y', 'ications' ], [ '[^ey]', '', 'ens' ] ], H => [ [ 'y', 'y', 'ieth' ], [ '[^y]', '', 'th' ] ], Y => [ [ '.', '', 'ly' ] ], G => [ [ 'e', 'e', 'ing' ], [ '[^e]', '', 'ing' ] ], J => [ [ 'e', 'e', 'ing' ], [ '[^e]', '', 'ing' ] ], D => [ [ 'e', '', 'd' ], [ '[^aeiou]y', 'y', 'ied' ], [ '[^ey]', '', 'ed' ], [ '[aeiou]y', '', 'ed' ] ], T => [ [ 'e', '', 'st' ], [ '[^aeiou]y', 'y', 'iest' ], [ '[aeiou]y', '', 'est' ], [ '[ey]', '', 'est' ] ], R => [ [ 'e', '', 'r' ], [ '[^aeiou]y', 'y', 'ier' ], [ '[aeiou]y', '', 'er' ], [ '[^ey]', '', 'er' ] ], Z => [ [ 'e', '', 'rs' ], [ '[^aeiou]y', 'y', 'iers' ], [ '[aeiou]y', '', 'ers' ], [ '[^ey]', '', 'ers' ] ], S => [ [ '[^aeiou]y', 'y', 'ies' ], [ '[aeiou]y', '', 's' ], [ '[sxzh]', '', 'es' ], [ '[^sxzhy]', '', 's' ] ], P => [ [ '[^aeiou]y', 'y', 'iness' ], [ '[aeiouy]', '', 'ness' ], [ '[^y]', '', 'ness' ] ] ); # Flattens an ISPELL dict file while( <> ) { chomp; $_ .= '/' unless m#/#; ( $root, $aff ) = split( m|/| ); print "$root\n"; for( split( //, $aff ) ) { # prefixes if( $_ eq 'A' ) { out( "re$root" ); }elsif( $_ eq 'I' ) { out( "in$root" ); }elsif( $_ eq 'U' ) { out( "un$root" ); }elsif( $suff_flat{ $_ } ) { # Suffixes out( do_suffix( $root, @{ $suff_flat{ $_ } } ) ); }else{ print STDERR "UKNOWN: $_\n"; } } } sub do_suffix { my $word = shift; my @modifiers = @_; my( $match, $remove, $end ); for( @modifiers ) { ( $match, $remove, $end ) = @{ $_ }; if( $word =~ /$match$/ ) { $word =~ s/$remove$// if $remove; return( "$word$end" ); } } return( $word ); } sub out { print shift() . "\n"; }