From: Ian Jackson Date: Thu, 28 Feb 2019 13:18:06 +0000 (+0000) Subject: wip X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=a7cc811f440de814fdabec22ba8cc380184db486;p=pandemic-rising-tide.git wip --- diff --git a/generate-board b/generate-board index da2581c..8ce82b6 100755 --- a/generate-board +++ b/generate-board @@ -7,13 +7,11 @@ BEGIN { unshift @INC, qw(.); } 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}; @@ -25,9 +23,15 @@ my $sre = qr{(:?(\")|(?=\w))(.*)\1$}; # 2 captures, $2 is the name 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 (

) { last if m/^\&faces$/; } @@ -50,7 +54,7 @@ sub read_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 ]; } } }; @@ -58,29 +62,29 @@ sub read_faces () { 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 (

) { - 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