X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.main.git;a=blobdiff_plain;f=yarrg%2FCommods.pm;fp=yarrg%2FCommods.pm;h=a405f75d640348a900ac320076d51c1b8567a095;hp=f74571ddd39c6c5093902c51aae03969cb780532;hb=a7ea2fcf98297e6e9e631082f778d11b17b13620;hpb=7135d15a2b4db9ac5caedd4730ccbf29fa55d15d diff --git a/yarrg/Commods.pm b/yarrg/Commods.pm index f74571d..a405f75 100644 --- a/yarrg/Commods.pm +++ b/yarrg/Commods.pm @@ -98,6 +98,9 @@ our (%pctb_commodmap,@pctb_commodmap); my %colours; # eg $colours{'c'}{'black'}= $sources my (@rawcm, @nocm); # eg $rawcm[0]='fine rum'; $rawcm[1]='fine %c cloth' +my %colour_ordvals; # $colour_ordvals{'green'}= '30'; +my %commodclasses; # $commodclasses{'dye'}= '3'; + # IMPORTANT # when extending the format of source-info in a non-backward # compatible way, be sure to update update-master-info too. @@ -116,11 +119,22 @@ sub parse_info1 ($$$) { s/\s+$//; if (m/^\%(\w+)$/) { my $colourkind= $1; - @ctx= (sub { $colours{$colourkind}{lc $_} .= $src; }); + @ctx= (sub { + m/^(\S[^\t@]+\S)(?:\t+\@(\d+))?$/ or die; + my ($colour,$order)=$1; + $colours{$colourkind}{$colour} .= $src; + $colour_ordvals{$colourkind}{$colour}= $order + if defined $order; + }); } elsif (m/^commods$/) { @ctx= (sub { push @rawcm, lc $_; }); } elsif (m/^nocommods$/) { @ctx= (sub { push @nocm, lc $_; }); + } elsif (m/^commodclasses$/) { + @ctx= (sub { + die unless m/^\*([-a-z]+)$/; + $commodclasses{$1}= scalar keys %commodclasses; + }); } elsif (m/^ocean (\w+)$/) { my $ocean= $1; keys %{ $oceans{$ocean} }; @@ -176,35 +190,53 @@ sub parse_info1 ($$$) { %commods= (); my $ca; $ca= sub { - my ($s,$ss) = @_; + my ($s,$ss,$ordbase) = @_; #print "ca($s)\n"; if ($s !~ m/\%(\w+)/) { my ($name, $props) = $s =~ - /^(\S[^\t]*\S)(?:\t+(\S[^\t]*\S))?$/ + /^(\S[^\t]*\S)(?:\t+(\S.*\S))?$/ or die "bad commodspec $s"; return if grep { $name eq $_ } @nocm; my $ucname= ucfirst $name; $commods{$ucname}{Srcs} .= $ss; my $c= $commods{$ucname}; $c->{Volume}= 1000; + my ($ordval, $ordclassval); foreach my $prop (defined $props ? split /\s+/, $props : ()) { if ($prop =~ m/^([1-9]\d*)(k?)g$/) { $c->{Mass}= $1 * ($2 ? 1000 : 1); - } elsif ($prop =~m/^([1-9]\d*)l$/) { + } elsif ($prop =~ m/^([1-9]\d*)l$/) { $c->{Volume}= $1 * 1000; + } elsif ($prop =~ m/^\*([-a-z]+)$/) { + $c->{Class}= $1; + die "$1" unless exists $commodclasses{$1}; + $ordclassval= $commodclasses{$1} * 10000; + } elsif ($prop =~ m/^\@(\d+)$/) { + $ordval= $1; } else { die "unknown property $prop for $ucname"; } } + if (defined $ordbase && defined $ordval && defined $ordclassval) { + $ordval += $ordbase + $ordval + $ordclassval; + $c->{Ordval}= $ordval; +#print STDERR "ordval $name $ordval\n"; + } else { +#print STDERR "ordval $name NONE\n"; + } return; } die "unknown $&" unless defined $colours{$1}; my ($lhs,$pctlet,$rhs)= ($`,$1,$'); foreach my $c (keys %{ $colours{$pctlet} }) { - &$ca($lhs.$c.$rhs, $ss .'%'. $colours{$pctlet}{$c}); + my $ordcolour= $colour_ordvals{$c}; + &$ca($lhs.$c.$rhs, + $ss .'%'. $colours{$pctlet}{$c}, + defined($ordbase) && defined($ordcolour) + ? $ordbase+$ordcolour : undef); } }; - foreach (@rawcm) { &$ca($_,$src); } + foreach (@rawcm) { &$ca($_,$src,0); } } sub parse_info_clientside () {