X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=pctb%2Fdatabase-info-fetch;h=2e195c7a01b2d06471b540a3201721a39701aad2;hb=b958771fa67513ba09630953ec91b9d21b3f42f9;hp=0752ae0853d7898707e449e18d98cba33f1378b1;hpb=c60024527fa80e1b572c95d4763350e691f9d4f3;p=ypp-sc-tools.web-live.git diff --git a/pctb/database-info-fetch b/pctb/database-info-fetch index 0752ae0..2e195c7 100755 --- a/pctb/database-info-fetch +++ b/pctb/database-info-fetch @@ -30,6 +30,8 @@ use JSON; #use Data::Dumper; use IO::File; +use Commods; + @ARGV>=1 or die "You probably don't want to run this program directly.\n"; our ($which) = shift @ARGV; @@ -39,71 +41,6 @@ our ($pctb) = $ENV{'YPPSC_PCTB_PCTB'}; our ($ua)= LWP::UserAgent->new; our $jsonresp; -our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources -our %commods; # eg $commods{'Fine black cloth'}= $sources; -# $sources = 's[l]b'; -# 's' = Special Circumstances; 'l' = local ; B = with Bleach - -BEGIN { - my %colours; # eg $colours{'c'}{'black'}= $sources - my @rawcm; # eg $rawcm[0]='fine rum'; $rawcm[1]='fine %c cloth' - - sub parse_master_master1 ($$) { - my ($mmfn,$src)= @_; - my $mm= new IO::File $mmfn, 'r' or die "$mmfn $!"; - my @ctx= (); - while (<$mm>) { - next if m/^\s*\#/; - next unless m/\S/; - s/\s+$//; - if (m/^\%(\w+)$/) { - my $colourkind= $1; - @ctx= (sub { $colours{$colourkind}{lc $_} .= $src; }); - } elsif (m/^commods$/) { - @ctx= (sub { push @rawcm, lc $_; }); - } elsif (m/^ocean (\w+)$/) { - my $ocean= $1; - @ctx= (sub { - $ocean or die; # ref to $ocean needed to work - # around a perl bug - my $arch= $_; - $ctx[1]= sub { - $oceans{$ocean}{$arch}{$_} .= $src; - }; - }); - } elsif (s/^ +//) { - my $indent= length $&; - die "wrong indent $indent" unless defined $ctx[$indent-1]; - &{ $ctx[$indent-1] }(); - } else { - die "bad syntax"; - } - } - $mm->error and die $!; - close $mm or die $!; - -#print Dumper(\%oceans); -#print Dumper(\@rawcm); - - %commods= (); - my $ca; - $ca= sub { - my ($s,$ss) = @_; -#print "ca($s)\n"; - if ($s !~ m/\%(\w+)/) { $commods{ucfirst $s} .= $ss; return; } - die "unknown $&" unless defined $colours{$1}; - foreach my $c (keys %{ $colours{$1} }) { - &$ca($`.$c.$', $ss .'%'. $colours{$1}{$c}); - } - }; - foreach (@rawcm) { &$ca($_,$src); } - } -} - -sub parse_masters () { - parse_master_master1('master-master.txt','s'); -} - sub jparsetable ($$) { my ($jobj,$wh) = @_; my $jtab= $jobj->{$wh}; @@ -194,16 +131,6 @@ sub for_islands ($$$$) { } } -sub get_commodmap_pctb_local () { - my $f= new IO::File '_commodmap.tsv' or die $!; - while (<$f>) { - m/^(\w[^\t]+\w)\t\d+$/ or die; - $commods{$1} .= 'b'; - } - $f->error and die $!; - close $f or die $!; -} - sub for_commods ($) { my ($forcommod) = @_; foreach my $commod (sort keys %commods) { &$forcommod($commod); } @@ -220,7 +147,7 @@ sub main__comparesources () { parse_masters(); get_arches_islands_pctb($ocean); - get_commodmap_pctb_local(); + parse_pctb_commodmap() or die; for_islands($ocean, sub { }, @@ -257,28 +184,6 @@ sub main__island () { }); } -sub main__allowablecommods ($$) { - my ($ocean,$island) = @_; - parse_masters(); - my $arches= $oceans{$ocean}; - if (!$arches) { print "unknown ocean\n"; exit 1; } - my $found= 0; - foreach my $islands (values %$arches) { - my $sources= $islands->{$island}; - next unless $sources; - die if $found; - $found= $sources; - } - if (!$found) { print "unknown island\n"; exit 1; } - - print "\n"; - foreach my $commod (sort keys %commods) { - print "$commod\n"; - } - STDOUT->error and die $!; - close STDOUT or die $!; -} - sub main__sunshinewidget () { print <