10 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
13 @EXPORT = qw(&parse_masters %oceans %commods %clients
14 &parse_pctb_commodmap %pctb_commodmap @pctb_commodmap);
20 our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources;
21 our %commods; # eg $commods{'Fine black cloth'}= $sources;
22 our %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
24 # 's' = Special Circumstances; 'l' = local ; B = with Bleach
26 our (%pctb_commodmap,@pctb_commodmap);
28 my %colours; # eg $colours{'c'}{'black'}= $sources
29 my @rawcm; # eg $rawcm[0]='fine rum'; $rawcm[1]='fine %c cloth'
31 sub parse_master_master1 ($$) {
33 my $mm= new IO::File $mmfn, 'r' or die "$mmfn $!";
41 @ctx= (sub { $colours{$colourkind}{lc $_} .= $src; });
42 } elsif (m/^commods$/) {
43 @ctx= (sub { push @rawcm, lc $_; });
44 } elsif (m/^ocean (\w+)$/) {
47 $ocean or die; # ref to $ocean needed to work
51 $oceans{$ocean}{$arch}{$_} .= $src;
54 } elsif (m/^client (\S+)$/) {
56 $clients{$client}= [ ];
59 push @{ $clients{$client} }, $bug;
62 my $indent= length $&;
63 die "wrong indent $indent" unless defined $ctx[$indent-1];
64 &{ $ctx[$indent-1] }();
69 $mm->error and die $!;
72 #print Dumper(\%oceans);
73 #print Dumper(\@rawcm);
80 if ($s !~ m/\%(\w+)/) { $commods{ucfirst $s} .= $ss; return; }
81 die "unknown $&" unless defined $colours{$1};
82 foreach my $c (keys %{ $colours{$1} }) {
83 &$ca($`.$c.$', $ss .'%'. $colours{$1}{$c});
86 foreach (@rawcm) { &$ca($_,$src); }
89 sub parse_masters () {
90 parse_master_master1('master-master.txt','s');
93 sub parse_pctb_commodmap () {
94 undef %pctb_commodmap;
95 foreach my $commod (keys %commods) { $commods{$commod} =~ s/b//; }
97 my $c= new IO::File '_commodmap.tsv' or die $!;
98 if (!$c) { $!==&ENOENT or die $!; return 0; }
101 m/^(\S.*\S)\t(\d+)\n$/ or die "$_";
102 die if defined $pctb_commodmap{$1}; $pctb_commodmap{$1}= $2;
103 die if defined $pctb_commodmap[$2]; $pctb_commodmap[$2]= $1;
106 $c->error and die $!;