-MATCH: foreach $key (keys %DB) {
- $parent=$PARENT{$key};
- $parent=$key if (!defined $parent);
- $ref=$DB{$key}{"Notes"};
- next MATCH if (!defined $ref);
- $ref=~tr/()//d;
- $ref=~s/^=//;
- $ref=~s/^O\. *//i;
- $ref=~s/^Orchidaceae *//i;
- $ref=~s/\. *(.*)$//;
- $note_rest=$1;
- next MATCH if &try_reparent();
- $ref=$DB{$key}{"Rank"}." $ref" if exists $DB{$key}{"Rank"};
- next MATCH if &try_reparent();
- $ref=$DB{$key}{"Genus"}." $ref" if exists $DB{$key}{"Genus"};
- next MATCH if &try_reparent();
+%OWNS=();
+
+foreach (@ARGV)
+ { process_entry($_); }
+
+my($id);
+for $id (keys %DB) {
+ my($refid);
+ my(@refs);
+ for $refid (@{$DB{$id}{"refs"}}) {
+ if (!exists $DB{$refid}) {
+ warn "Undefined ref id \"$refid\" from id \"$id\"" if $D;
+ next;
+ }
+ next if $id eq $refid; # self-ref
+# push(@refs,$DB{$refid});
+ push(@refs,$refid);
+ }
+ $DB{$id}{"refs"}=\@refs;
+ }
+
+print Data::Dumper->Dump([\%DB],["%DB"]) if $D;
+
+%OWNS=map { $_=>[] } keys(%DB);
+
+for $id (keys %OWNS) {
+ my($refid);
+ for $refid (@{$DB{$id}{"refs"}}) {
+ next if !exists $OWNS{$refid};
+ push(@{$OWNS{$id}},$refid,@{$OWNS{$refid}});
+ delete $OWNS{$refid};
+ }
+ }
+
+print Data::Dumper->Dump([\%OWNS],["%OWNS"]) if $D;
+
+#foreach $key (keys %DB) {
+# $DB{$key}{"Publication"}=extract_year($DB{$key}{"Publication"})." ::: ".$DB{$key}{"Publication"}
+# if (exists($DB{$key}{"Publication"}));
+# }
+
+foreach $key (keys %OWNS) {
+ my(@keys)=@{$OWNS{$key}};
+ delete($OWNS{$key});
+ unshift(@keys,$key);
+ @keys=sort { extract_year($DB{$b}{"Publication"}) <=> extract_year($DB{$a}{"Publication"}); } @keys;
+ my($pkey)=shift(@keys);
+ $OWNS{$pkey}=\@keys;