From 61c3e7a44d6c6a5e8483cec716999c098244646d Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 28 Feb 2019 13:06:00 +0000 Subject: [PATCH] wip --- generate-board | 69 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 12 deletions(-) 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: -- 2.30.2