# HG changeset patch # User Matti Hamalainen # Date 1425795969 -7200 # Node ID acb168049adf49cdbf072dcf1cb29b112aa9064f # Parent 09e3f16fbf630b3e1a51655a3acb5dafdd28e9fe Major rework of how the utility works internally. diff -r 09e3f16fbf63 -r acb168049adf materials/parsematerial.pl --- a/materials/parsematerial.pl Sun Mar 08 07:49:37 2015 +0200 +++ b/materials/parsematerial.pl Sun Mar 08 08:26:09 2015 +0200 @@ -379,74 +379,75 @@ } elsif (/^Weight \(g\/l\)\: *\(([a-z. ]+)\) *Sturdyness\: *\(([a-z. ]+)\)/) { - $data{$name}{"weight"} = $1; - $data{$name}{"sturdyness"} = $2; + $data{$name}{2} = mtranslate(2, $1); + $data{$name}{3} = mtranslate(3, $2); } elsif (/^Magic\: *\(([a-z. ]+)\) *Flammability\: *\(([a-z. ]+)\)/) { - $data{$name}{"magic"} = $1; - $data{$name}{"flammability"} = $2; + $data{$name}{4} = mtranslate(4, $1); + $data{$name}{5} = mtranslate(5, $2); } elsif (/^Warmth\: *\(([a-z. ]+ outfit)\) *Toxicity\: *\(([a-z. ]+)\)/) { - $data{$name}{"warmth"} = $1; - $data{$name}{"toxicity"} = $2; - $data{$name}{"warmth"} =~ s/ +outfit$// if ($opt_strip); + my ($tmp1, $tmp2) = ($1, $2); + $tmp1 =~ s/ +outfit$//; + $data{$name}{6} = mtranslate(6, $tmp1); + $data{$name}{7} = mtranslate(7, $tmp2); } elsif (/^Warmth\: *\(([a-z. ]+)\) *Toxicity\: *\(([a-z. ]+)\)/) { - $data{$name}{"warmth"} = $1; - $data{$name}{"toxicity"} = $2; + my ($tmp1, $tmp2) = ($1, $2); + $data{$name}{6} = mtranslate(6, $1); + $data{$name}{7} = mtranslate(7, $2); } elsif (/^Resistivity\: *\(([a-z. ]+ insulator)\) *Malleability\: *\(([a-z. ]+)\)?/) { - $data{$name}{"resistivity"} = $1; - $data{$name}{"malleability"} = $2; - - $data{$name}{"resistivity"} =~ s/ +insulator$// if ($opt_strip); + my ($tmp1, $tmp2) = ($1, $2); + $tmp1 =~ s/ +insulator$//; + $data{$name}{8} = mtranslate(8, $tmp1); + $data{$name}{9} = mtranslate(9, $tmp2); } elsif (/^Resistivity\: *\(([a-z. ]+)\) *Malleability\: *\(([a-z. ]+)\)?/) { - $data{$name}{"resistivity"} = $1; - $data{$name}{"malleability"} = $2; + $data{$name}{8} = mtranslate(8, $1); + $data{$name}{9} = mtranslate(9, $2); } elsif (/^Mentality\: *\(([a-z. ]+)\) *Reactivity\: *\(([a-z. ]+)\)?/) { - $data{$name}{"mentality"} = $1; - $data{$name}{"reactivity"} = $2; + $data{$name}{10} = mtranslate(10, $1); + $data{$name}{11} = mtranslate(11, $2); } elsif (/^Weapon rarity\: *\(([a-z. ]+)\) *Armour rarity\: *\(([a-z. ]+)\)/) { - $data{$name}{"weapon_rarity"} = $1; - $data{$name}{"armour_rarity"} = $2; + $data{$name}{12} = mtranslate(12, $1); + $data{$name}{13} = mtranslate(13, $2); } elsif (/^Value \(gp\/kg\)\: *\(([a-z -]+)\) *Rarity\: *\(([a-z. ]+)\)/) { - $data{$name}{"value"} = $1; - $data{$name}{"rarity"} = $2; + $data{$name}{14} = mtranslate(14, $1); + $data{$name}{15} = mtranslate(15, $2); } elsif (/^Article\: *([a-z. ]+) *Type: *([A-Za-z]+)/) { + $data{$name}{16} = mtranslate(16, $2); + $data{$name}{"article"} = $1; - $data{$name}{"type"} = $2; $data{$name}{"article"} =~ s/ *$//; } elsif (/^Found nature\: *(Yes|No) *Lode name\: *([A-Za-z]+)/) { - $data{$name}{"found_nature"} = $1; - $data{$name}{"lode_name"} = $2; + $data{$name}{17} = mtranslate(17, $1); + $data{$name}{18} = mtranslate(18, $2); } elsif (/^Raw names\: *([a-z, ]+[a-z])/) { my $tmp = $1; - $data{$name}{"raw_names"} = $tmp; - @{$data{$name}{"raw_names_arr"}} = split(/, */, $tmp); + @{$data{$name}{19}} = map { mtranslate(19, $_) } split(/, */, $tmp); } elsif (/^Refined names\: *([a-z, ]+[a-z])/) { my $tmp = $1; - $data{$name}{"refined_names"} = $tmp; - @{$data{$name}{"refined_names_arr"}} = split(/, */, $tmp); + @{$data{$name}{20}} = map { mtranslate(20, $_) } split(/, */, $tmp); } elsif (/^-+$|^\s*$/) { @@ -465,11 +466,11 @@ my %matByType = (); foreach my $name (@entries) { - push(@{$matByType{$data{$name}{"type"}}}, lc($name)); + push(@{$matByType{$data{$name}{16}}}, lc($name)); } -# Create list of known types -my @matTypes = sort { $a cmp $b } keys %matByType; +# List of known types +my %matTypes = %{$transTable{16}}; # Create reverse translation table foreach my $mid (keys %transTable) @@ -481,6 +482,24 @@ } +sub get_datastr($$) +{ + my ($name, $i) = @_; + if ($i == 1) + { + return $name; + } + elsif (ref($data{$name}{$i}) eq "ARRAY") + { + return join(", ", pta($data{$name}, $i)); + } + else + { + return pt($data{$name}, $i); + } +} + + ### ### Output functionality begins here ### @@ -499,20 +518,7 @@ { foreach my $name (@entries) { - my $str = ""; - foreach my $info (@fieldInfo) - { - my $field = $$info{"f"}; - if (defined($data{$name}{$field})) - { - $str .= $data{$name}{$field}.";"; - } - else - { - print STDERR "Field $field not defined for $name.\n"; - } - } - print "$str\n"; + print join(";", map { get_datastr($name, $$_{"i"}) } @fieldInfo)."\n"; } } @@ -531,31 +537,32 @@ "-------------------------------------------------------------------------------\n". "Weight (g/l): %-17s Sturdyness: (%s)\n". "Magic: %-17s Flammability: (%s)\n", - "(".$$mat{"weight"}.")", $$mat{"sturdyness"}, - "(".$$mat{"magic"}.")", $$mat{"flammability"}; + "(".pt($mat, 2).")", pt($mat, 3), + "(".pt($mat, 4).")", pt($mat, 5); printf OUTFILE "Warmth: %-17s Toxicity: (%s)\n". "Resistivity: %-17s Malleability: (%s)\n", - "(".$$mat{"warmth"}.")", $$mat{"toxicity"}, - "(".$$mat{"resistivity"}.")", $$mat{"malleability"}; + "(".pt($mat, 6).")", pt($mat, 7), + "(".pt($mat, 8).")", pt($mat, 9); printf OUTFILE "Mentality: %-17s Reactivity: (%s)\n". "Weapon rarity: %-17s Armour rarity: (%s)\n". "Value (gp/kg): %-17s Rarity: (%s)\n", - "(".$$mat{"mentality"}.")", $$mat{"reactivity"}, - "(".$$mat{"weapon_rarity"}.")", $$mat{"armour_rarity"}, - "(".$$mat{"value"}.")", $$mat{"rarity"}; + "(".pt($mat, 10).")", pt($mat, 11), + "(".pt($mat, 12).")", pt($mat, 13), + "(".pt($mat, 14).")", pt($mat, 15); printf OUTFILE "Article: %-17s Type: %s\n". "Found nature: %-17s Lode name: %s\n". "Raw names: %s\n". "Refined names: %s\n", - $$mat{"article"}, $$mat{"type"}, - $$mat{"found_nature"}, $$mat{"lode_name"}, - $$mat{"raw_names"}, $$mat{"refined_names"}; + $$mat{"article"}, pt($mat, 16), + pt($mat, 17), pt($mat, 18), + join(", ", pta($mat, 19)), + join(", ", pta($mat, 20)); close(OUTFILE); } @@ -565,45 +572,35 @@ elsif ($opt_mode eq "-tf") { print "/set gmat_names=".join(' ', @entries)."\n"; - print "/set gmat_ntypes=".join(' ', map(lc($data{$_}{"type"}), @entries))."\n"; - - print "/set gmat_types=".join(' ', map(lc($_), @matTypes))."\n"; + print "/set gmat_ntypes=".join(' ', map(lc(pt($data{$_},16)), @entries))."\n"; + print "/set gmat_types=".join(' ', map(lc(ptranslate(16,$_)), values %matTypes))."\n"; - foreach my $type (@matTypes) + foreach my $type (values %matTypes) { - print "/set gmat_type_".lc($type)."=".join('|', @{$matByType{$type}})."\n"; + print "/set gmat_type_". + lc(ptranslate(16, $type))."=". + join('|', @{$matByType{$type}})."\n"; } } # Print normal table elsif ($opt_mode eq "-table") { - my $str = ""; - foreach my $info (@fieldInfo) - { - $str .= sprintf("%-".$$info{"w"}."s | ", $$info{"s"}); - } - print "$str\n"; + my $str = join("", + map { + sprintf("%-".$$_{"w"}."s | ", $$_{"s"}) + } @fieldInfo); + + print $str."\n"; $str =~ s/[^|]/-/g; $str =~ s/\|/+/g; print $str."\n"; foreach my $name (@entries) { - my $str = ""; - foreach my $info (@fieldInfo) - { - my $field = $$info{"f"}; - if (defined($data{$name}{$field})) - { - $str .= sprintf("%-".$$info{"w"}."s | ", $data{$name}{$field}); - } - else - { - print STDERR "# Field $field does not exist for $name\n"; - } - } - print "$str\n"; + print join("", map { + sprintf("%-".$$_{"w"}."s | ", get_datastr($name, $$_{"i"})); + } @fieldInfo)."\n"; } } @@ -628,10 +625,13 @@ $dumper = Data::Dumper->new([\%transTable], ["transTable"]); print "our ".$dumper->Dump()."\n\n"; + $dumper = Data::Dumper->new([\%revTransTable], ["revTransTable"]); + print "our ".$dumper->Dump()."\n\n"; + $dumper = Data::Dumper->new([\%matByType], ["matByType"]); print "our ".$dumper->Dump()."\n\n"; - $dumper = Data::Dumper->new([\@matTypes], ["matTypes"]); + $dumper = Data::Dumper->new([\%matTypes], ["matTypes"]); print "our ".$dumper->Dump()."\n\n"; print "1;\n"; @@ -648,7 +648,7 @@ foreach my $i (sort { $a <=> $b } keys %transTable) { print " array("; - foreach my $j (keys %{$transTable{$i}}) + foreach my $j (sort { $transTable{$i}{$a} <=> $transTable{$i}{$b} } keys %{$transTable{$i}}) { print $transTable{$i}{$j}; $j =~ s/very /v./; @@ -663,36 +663,16 @@ foreach my $name (sort { $a cmp $b } keys %data) { print " \"$name\" => array("; - foreach my $info (@fieldInfo) + for (my $qn = 1; $qn < scalar(@fieldInfo); $qn++) { - my $s = $$info{"i"}; - my $f = $$info{"f"}; - my $idx = $data{$name}{$f}; - my $arr = $f."_arr"; - if (defined($data{$name}{$arr})) + my $i = $fieldInfo[$qn]{"i"}; + if (ref($data{$name}{$i}) eq "ARRAY") { - print "array("; - foreach my $q (sort { $a cmp $b } @{$data{$name}{$arr}}) - { - if (defined($transTable{$s}{$q})) - { - print $transTable{$s}{$q}.","; - } - else - { - print STDERR "$0: Unknown transTable type for '$name' : $s :: $q ($idx)\n"; - } - } - print "),"; + print "array(".join(",", @{$data{$name}{$i}})."),"; } - elsif (defined($transTable{$s}{$idx})) + else { - print $transTable{$s}{$idx}.", "; - } - elsif ($s != 1) - { - print STDERR "$0: Unknown transTable type for '$name' : $s == $f ($idx)\n"; - print "-1,"; + print $data{$name}{$i}.", "; } } print "),\n";