From: Ian Jackson Date: Thu, 28 Feb 2019 13:06:00 +0000 (+0000) Subject: wip X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=61c3e7a44d6c6a5e8483cec716999c098244646d;p=pandemic-rising-tide.git wip --- diff --git a/generate-board b/generate-board index 3cd5e52..da2581c 100755 --- a/generate-board +++ b/generate-board @@ -20,21 +20,66 @@ foreach my $rn (keys %region) { $prs2region{$prs} = $rn; } -my $sre = qr{(\")(.*)\1$}; # 2 captures, $2 is the name +my $sre = qr{(:?(\")|(?=\w))(.*)\1$}; # 2 captures, $2 is the name -open F, "<", $facesf or die $!; -while (

) { last if m/^\&faces$/; } +sub prs2r ($) { $prs2region{$_[0]} // die "@_ ?" } +sub prs2rr ($) { $region{prs2r($_[0])} } +sub read_faces () { + # Sets + # $region{NAME}{Adj}[]{Ends}[] = $vertexname -open P, "<", $plagf or die $!; -while (

) { - if (m/^$sre#/) { - my $invertex= $2; - } elsif (m/^ \@(.*),(.*)$/) { - die unless $invertex; - $v2pos{$invertex} = [ $1,$2 ]; - } elsif (m/^ \^lface $sre$/) { - die unless $invertex; + open F, "<", $facesf or die $!; + while (

) { last if m/^\&faces$/; } + my $rr; + my @edges; + my $process_rr = sub { + my $last_ai; + for my $ei (0..@edges) { + my $ej = $ei % @edges; + if (!defined $last_ai) { + my $ai; + for my $ai (0..@{ $rr->{Adj} }) { + next unless $rr->{Adj}[$ai]{Name} eq $edges[$ei]{Adjoins}; + $last_ai = $ai+1; + } + confess unless defined $last_ai; + } + my $ai = ($last_ai-1+@edges) % @edges; + my $adj = $rr->{Adj}[$ai]; + confess unless $adj->{Name} eq $edges[$ei]{Adjoins}; + + for $endi (0..1) { + $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ][1]; + } + } + }; + while (

) { + 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 }; + } elsif (m/^\s+\^adjoins\s+$sre$/) { + $edges[-1]{Adjoins} = prs2r($2); + } + } + $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; # Local variables: