chiark / gitweb /
Fix example
[ypp-sc-tools.db-test.git] / yarrg / yppedia-chart-parser
index 44a143b..41ef985 100755 (executable)
@@ -55,7 +55,11 @@ my @msgkinds= qw(change warning error);
 my %msgs;
 my %msgprinted;
 my %msgkindprinted;
-sub pmsg ($$) { push @{ $msgs{$_[0]} }, "$_[0]: $_[1]\n"; }
+sub pmsg ($$) {
+    my $m= "$_[0]: $_[1]\n";
+    print DEBUG "D $m";
+    push @{ $msgs{$_[0]} }, $m;
+}
 sub warning ($) { pmsg("warning",$_[0]); }
 sub error   ($) { pmsg("error",  $_[0]); }
 sub change  ($) { pmsg("change", $_[0]); }
@@ -114,7 +118,7 @@ sub yppedia_chart_parse () {
        s/\<--.*--\>//g;
        s/^\s*//; chomp; s/\s+$//; s/\s+/ /g;
        s/\<\/?(?:b|em)\>//g;
-       s/\{\{Chart\ style\|[^{}]*\}\}//g;
+       s/\{\{chart\ style\|[^{}]*\}\}//gi;
        next unless m/\{\{/; # only interested in chart template stuff
 
        my ($x,$y, $arch,$island,$solid,$dirn);
@@ -122,9 +126,15 @@ sub yppedia_chart_parse () {
     
        if (($x,$y,$arch) =
            m/^\{\{ chart\ label \|(\d+)\|(\d+)\| .*
-                   \'\[\[ [^][\']* \| (\S+)\ archipelago \]\]\'*\}\}$/xi) {
+                   (?: \<(?: big|center )\>)* \'+
+                   (?: \[\[ | \{\{ )
+                   [^][\']* \| ([^][\'|]+)\ archipelago
+                   (?: \]\] | \}\} )
+                   \'+ (?: \<\/(?: big|center )\>)* \}\}$/xi) {
            printf DEBUG "%2d,%-2d arch %s\n", $x,$y,$arch;
            push @wiarchlabels, [ $x,$y,$arch ];
+       } elsif (m/^\{\{ chart\ label \|\d+\|\d+\|
+                \<big\> \'+ \[\[ .* \b ocean \]\]/xi) {
        } elsif (($x,$y,$island) =
            m/^\{\{ chart\ island\ icon \|(\d+)\|(\d+)\|
                    ([^| ][^|]*[^| ]) \| .*\}\}$/xi) {
@@ -234,8 +244,7 @@ sub yppedia_archs_chart_labels () {
     #
     foreach my $label (@wiarchlabels) {
        my ($ax,$ay,$arch) = @$label;
-       my $best_ccmulti= -1;
-       my $best_d2= 0;
+       my $best_d2= 9999999;
        my $best_n;
 #      print DEBUG "$ax,$ay arch-island-search $arch\n";
        $ay += 1;  $ax += 2;  # coords are rather to the top left of label
@@ -243,19 +252,16 @@ sub yppedia_archs_chart_labels () {
            next unless exists $winode2island{$vertex};
            my $ccix= $wiarchs->connected_component_by_vertex($vertex);
            my @cc= $wiarchs->connected_component_by_index($ccix);
-           my $ccmulti= @cc > 1;
            my ($vx,$vy) = split /,/, $vertex;
            my $d2= ($vx-$ax)*($vx-$ax) + ($vy-$ay)*($vy-$ay);
-           my $cmp= $ccmulti <=> $best_ccmulti
-               ||   $best_d2 <=> $d2;
+           my $cmp= $best_d2 <=> $d2;
            printf DEBUG "%2d,%-2d arch-island-search %5s d2=%4d cc%-2d".
-                        " #cc=%2d ccmulti=%d cmp=%2d %s\n",
-               $ax,$ay, $vertex, $d2, $ccix, scalar(@cc), $ccmulti, $cmp,
+                        " #cc=%2d cmp=%2d %s\n",
+               $ax,$ay, $vertex, $d2, $ccix, scalar(@cc), $cmp,
                $winode2island{$vertex};
            next unless $cmp > 0;
            $best_n=       $vertex;
            $best_d2=      $d2;
-           $best_ccmulti= $ccmulti;
        }
        die 'no island vertices?!' unless defined $best_n;
        my $ccix= $wiarchs->connected_component_by_vertex($best_n);
@@ -494,6 +500,7 @@ END
 
     my $result= Graph::Undirected->new();
     foreach my $edge_ac ($g->edges()) {
+        $result->add_vertex($edge_ac->[0]); # just in case
         next if $edge_ac->[0] eq $edge_ac->[1];
        my $edgename_ac= join ' .. ', @$edge_ac;
        printf DEBUG "spr %s edge %s\n", $what, $edgename_ac;