3 use vars qw/%DB %OWNS %PARENT %CURR $last_field $debugmatch $debugparse $key $owner $parent $ref/;
23 my( @list )=("Rank","Infrafam.","Genus","Species");
27 while ($item=shift @list)
28 { $r.=" ".$rec{$item} if exists $rec{$item}; }
37 $key=&name_to_key(&rec_to_name(%CURR));
38 return if (!defined $key);
40 { print STDERR "Key \"$key\" is duplicated!\n" if $printdupl; }
42 print STDERR "ADDKEY: $key\n" if $debugparse;
50 if (/^ *\304\301\304/) {
52 print STDERR "---\n" if $debugparse;
54 elsif (/^([^³]*[^ ]) *³ *(.*)$/) {
55 print STDERR "FIELD: $1, VALUE: $2\n" if $debugparse;
59 elsif (/^ *³ *(.*)$/) {
60 print STDERR "APPEND: $1\n" if $debugparse;
61 $CURR{$last_field}.=" ".$1;
64 print STDERR "DISCARD: $_\n" if $debugparse;
75 my( $reparent,$refkey );
77 $refkey=&name_to_key($ref);
78 return 0 if ($refkey eq "");
79 return 0 if ($parent eq $refkey);
80 return 0 if !exists $DB{$refkey};
81 print STDERR "try_reparent: SUCCESS: key=\"$key\", refkey=\"$refkey\"\n" if $debugmatch;
83 foreach $reparent (@{$OWNS{$parent}}) {
84 $PARENT{$reparent}=$refkey;
86 @{$OWNS{$parent}}=() if (!defined $OWNS{$parent});
87 @{$OWNS{$refkey}}=() if (!defined $OWNS{$refkey});
88 @{$OWNS{$refkey}}=(@{$OWNS{$refkey}},$parent,@{$OWNS{$parent}});
89 delete $OWNS{$parent};
94 MATCH: foreach $key (keys %DB) {
95 $parent=$PARENT{$key};
96 $parent=$key if (!defined $parent);
97 $ref=$DB{$key}{"Notes"};
98 next MATCH if (!defined $ref);
102 $ref=~s/^Orchidaceae *//i;
104 next MATCH if &try_reparent();
105 $ref=$DB{$key}{"Rank"}." $ref" if exists $DB{$key}{"Rank"};
106 next MATCH if &try_reparent();
107 $ref=$DB{$key}{"Genus"}." $ref" if exists $DB{$key}{"Genus"};
108 next MATCH if &try_reparent();
112 foreach $owner (keys %OWNS) {
116 print STDERR "($owner):";
117 foreach $child (@{$OWNS{$owner}})
118 { print STDERR " ($child)"; }
121 print "(".&rec_to_name(%{$DB{$owner}}).")";
122 foreach $child (@{$OWNS{$owner}})
123 { print " (".&rec_to_name(%{$DB{$child}}).")"; }