8 # $region{NAME}{Colour}
11 # $region{NAME}{Adj}[]{Name}
12 # $region{NAME}{Adj}[]{Pattern}
13 # $region{NAME}{Adj}[]{Regexp}
14 # $region{NAME}{Adj}[]{Dikes}
15 # $region{NAME}{Adj}[]{L}
29 if (my ($name, $water) = m{^\t(\S.*\w)(?: \[(\d+)\])?$}) {
30 confess unless defined $ccolour;
31 confess "$name ?" if $region{$name};
32 $region{$name}{Colour} = $ccolour;
33 $region{$name}{Water} = $water;
34 $region{$name}{L} = $.;
38 if (my ($aref, $adykes) = m{^\t\t(\S.*[A-Za-z.])(?: (\+\+?))?$}) {
39 my $adj = { Dykes => length $adykes, L => $. };
41 $adj->{Pattern} = $aref;
42 $aref =~ s{\-}{[^- ]*-}g;
43 $aref =~ s{\.}{[^- ]* ?}g;
44 $adj->{Regexp} = $aref;
48 push @{ $region{$cregion}{Adj} }, $adj;
55 sub unique_aref ($$) {
57 my $re = $adja->{Regexp};
58 return $adja->{Name} unless defined $re;
60 foreach my $rb (sort keys %region) {
61 #print STDERR "?? $ra -> $re $rb ?\n";
62 foreach my $adjb (@{ $region{$rb}{Adj} }) {
63 my $adjbn = $adjb->{Name};
64 next unless defined $adjbn;
65 #print STDERR "?? $ra -> $re $rb ?? $adjbn\n";
66 next unless $adjbn eq $ra;
70 my @found = grep { m{^$re$} } @cands;
72 confess "$adja->{L} $adja->{Pattern} /$re/ | @cands | @found | ?"
74 print "resolve $ra -> $adja->{Pattern} = @found\n";
78 sub resolve_arefs () {
79 #print Dumper(\%region);
80 foreach my $ra (sort keys %region) {
81 foreach my $adj (@{ $region{$ra}{Adj} }) {
82 next if defined $adj->{Name};
83 $adj->{ProspectiveName} = unique_aref $ra, $adj;
86 foreach my $ra (sort keys %region) {
87 foreach my $adj (@{ $region{$ra}{Adj} }) {
88 $adj->{Name} //= $adj->{ProspectiveName};
91 foreach my $ra (sort keys %region) {
92 foreach my $adj (@{ $region{$ra}{Adj} }) {
93 confess unless $adj->{Name} eq unique_aref $ra, $adj;
102 # cperl-indent-level: 2