2 # pattern_enumerate - enumerate distinct pattern features
4 # This makes it suitable e.g. to feed them to the MM tool.
7 # (border:0 s:1234) (border:8 s:4343) (border:0 s:4343)
9 # (0:0 1:0) (0:1 1:1) (0:0 1:1)
11 # Auxiliary patterns.fdict file is created, containing the mapping
12 # back to features, and assignment of unique number ids suitable
15 # Spatial feature is treated specially, each diameter being considered
16 # as a separate 's.N' feature. You need to post-process the mapping
17 # file if you want the original names.
25 my @patterns = split(/\) \(/, $_);
27 foreach my $pat (@patterns) {
28 my @feats = split(/ /, $pat);
30 foreach my $feat (@feats) {
31 my ($fname, $fpay) = split(/:/, $feat);
33 my $d = ((hex $fpay) >> 24);
36 if (not defined $fi{$fname}) {
39 if (not defined $f{$fname}->{$fpay}) {
40 $f{$fname}->{$fpay} = scalar keys %{$f{$fname}}
42 push @ofeats, $fi{$fname}.':'.$f{$fname}->{$fpay};
44 push @opatterns, join(' ', @ofeats);
46 print "(".join(') (', @opatterns).")\n"
50 my $df = "patterns.fdict";
51 open D
, ">$df" or die "$df: $!";
52 foreach my $fname (sort { $fi{$a} <=> $fi{$b} } keys %f) {
53 foreach my $fpay (sort { $f{$fname}->{$a} <=> $f{$fname}->{$b} } keys %{$f{$fname}}) {
54 print D
$pi++." ".$fi{$fname}.':'.$f{$fname}->{$fpay}." $fname:$fpay\n";