changeset 265:acb168049adf misc

Major rework of how the utility works internally.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 08 Mar 2015 08:26:09 +0200
parents 09e3f16fbf63
children 37c071cbb0ed
files materials/parsematerial.pl
diffstat 1 files changed, 88 insertions(+), 108 deletions(-) [+]
line wrap: on
line diff
--- 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";