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

index da2581ccd7cb182e6c3512a44b1b8667713fb5c2..8ce82b6d6af8eba954448f9fb41414212d9e8e40 100755 (executable)
@@ -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 (<P>) { 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 (<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