chiark / gitweb /
wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Feb 2019 13:06:00 +0000 (13:06 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Feb 2019 13:06:00 +0000 (13:06 +0000)
generate-board

index 3cd5e5288d5142f530deebdd00a1860ebd38c43b..da2581ccd7cb182e6c3512a44b1b8667713fb5c2 100755 (executable)
@@ -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 (<P>) { 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 (<P>) {
-  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 (<P>) { 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 (<P>) {
+    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 (<P>) {
+    if (m/^$sre#/) {
+      my $invertex= $2;
+    } elsif (m/^ \@(.*),(.*)$/) {
+      confess unless $invertex;
+      $v2pos{$invertex} = [ $1,$2 ];
+    } elsif (m/^ \^lface $sre$/) {
+      confess unless $invertex;
     
 
 # Local variables: