use Parse;
-our ($plagf, $facesf, @ARGV) = @ARGV or die;
+our %vxname2pos; # $vxname2pos{VXNAME} = Math::GSL::Vector
-parse_input_graph();
+# ----- region name reverse mapping -----
our %prs2region;
-our %v2pos;
-
foreach my $rn (keys %region) {
my $prs = plag_prs($rn);
die if $prs2region{$prs};
sub prs2r ($) { $prs2region{$_[0]} // die "@_ ?" }
sub prs2rr ($) { $region{prs2r($_[0])} }
+#----- file reader for plag output -----
+
sub read_faces () {
# Sets
- # $region{NAME}{Adj}[]{Ends}[] = $vertexname
+ # $region{NAME}{Adj}[]{Ends}[]{VxName}
+ # $region{NAME}{Adj}[]{Ends}[]{Pos}
+ #
+ # also incidentally
+ # $region{NAME}{Adj}[]{Ends}[]{Adjoins} which should be ignored
open F, "<", $facesf or die $!;
while (<P>) { last if m/^\&faces$/; }
confess unless $adj->{Name} eq $edges[$ei]{Adjoins};
for $endi (0..1) {
- $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ][1];
+ $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ];
}
}
};
if (m/^$sre$/) {
$process_rr->() if $rr;
my $rr= prs2rr($2);
- } elsif (m/^\s+$sre$/) {
- push @edges, { VxName => $2 };
} elsif (m/^\s+$sre$/) {
confess unless $rr;
- push @edges, { VxName => $2 };
+ my $vxname = $2;
+ push @edges, { VxName => $vxname };
} elsif (m/^\s+\^adjoins\s+$sre$/) {
$edges[-1]{Adjoins} = prs2r($2);
+ } elsif (m/^\s+\^\@(\w+)\.(\w+)$/) {
+ my $pos = Math::GSL::Vector->new([$1,$2]);
+ confess unless defined $vxname;
+ $edges[-1]{Pos} = $pos;
+ $vxname2pos{$vxname} = $pos;
}
}
$process_rr->();
}
-sub read_optplag () {
- open P, "<", $plagf or die $!;
- while (<P>) {
- if (m/^$sre#/) {
- my $invertex= $2;
- } elsif (m/^ \@(.*),(.*)$/) {
- confess unless $invertex;
- $v2pos{$invertex} = [ $1,$2 ];
- } elsif (m/^ \^lface $sre$/) {
- confess unless $invertex;
-
+#----- main program -----
+
+our ($facesf, @ARGV) = @ARGV or die;
+parse_input_graph();
+read_faces();
+
+print Dumper(\%regions);
# Local variables:
# cperl-indent-level: 2