view materials/parsematerial.pl @ 0:81f1abadda3e misc

Renamed.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 17 Jul 2008 12:04:43 +0000
parents
children 4ace936a44ec
line wrap: on
line source

#!/usr/bin/perl -w
# Superklunssi by Ggr
use strict;

my ($opt_short, $opt_csv);

if ($#ARGV >= 0) {
  if ($ARGV[0] eq "-head") { $opt_short = 1; }
  elsif ($ARGV[0] eq "-csv") { $opt_csv = 1; }
}   

my @titles = (
  "Name","Weight","Sturdyness","Magic","Flammability",
  "Warmth","Toxicity","Resist","Malleability",
  "Mentality","Reactivity","Weapon rarity","Armour rarity",
  "Value","Rarity","Type","FN?","Lode name","Raw names","Refined names"
);

my @names = (
  "name",          "weight",        "sturdyness",
  "magic",         "flammability",  "warmth",

  "toxicity",      "resistivity",   "malleability",
  "mentality",     "reactivity",    "weapon_rarity",

  "armour_rarity", "value",         "rarity",
  "type",          "found_nature",  "lode_name",
  "raw_names",     "refined_names"
);

my @widths = (
  15, 10, 18,
  15, 18, 11,

  18, 9,  18,
  18, 18, 15,

  15, 15, 12,
  6,  3,  10,
  35, 35
);

my %data = ();

if (!$opt_short) {
  my $name = "";
  while (<STDIN>) {
    chomp;
    if (/MATERIAL STATS \(([a-z ]+)\)\:/) {
      $name = $1;
      $data{$name}{"name"} = $1;
    }
    elsif (/^Weight \(g\/l\)\: *\(([a-z. ]+)\) *Sturdyness\: *\(([a-z. ]+)\)/) {
      $data{$name}{"weight"} = $1;
      $data{$name}{"sturdyness"} = $2;
    }
    elsif (/^Magic\: *\(([a-z. ]+)\) *Flammability\: *\(([a-z. ]+)\)/) {
      $data{$name}{"magic"} = $1;
      $data{$name}{"flammability"} = $2;
    }
    elsif (/^Warmth\: *\(([a-z. ]+) outfit\) *Toxicity\: *\(([a-z. ]+)\)/) {
      $data{$name}{"warmth"} = $1;
      $data{$name}{"toxicity"} = $2;
    }
    elsif (/^Warmth\: *\(([a-z. ]+)\) *Toxicity\: *\(([a-z. ]+)\)/) {
      $data{$name}{"warmth"} = $1;
      $data{$name}{"toxicity"} = $2;
    }
    elsif (/^Resistivity\: *\(([a-z. ]+) insulator\) *Malleability\: *\(([a-z. ]+)\)/) {
      $data{$name}{"resistivity"} = $1;
      $data{$name}{"malleability"} = $2;
    }
    elsif (/^Resistivity\: *\(([a-z. ]+)\) *Malleability\: *\(([a-z. ]+)\)/) {
      $data{$name}{"resistivity"} = $1;
      $data{$name}{"malleability"} = $2;
    }
    elsif (/^Mentality\: *\(([a-z. ]+)\) *Reactivity\: *\(([a-z. ]+)\)/) {
      $data{$name}{"mentality"} = $1;
      $data{$name}{"reactivity"} = $2;
    }
    elsif (/^Weapon rarity\: *\(([a-z. ]+)\) *Armour rarity\: *\(([a-z. ]+)\)/) {
      $data{$name}{"weapon_rarity"} = $1;
      $data{$name}{"armour_rarity"} = $2;
    }
    elsif (/^Value \(gp\/kg\)\: *\(([a-z -]+)\) *Rarity\: *\(([a-z. ]+)\)/) {
      $data{$name}{"value"} = $1;
      $data{$name}{"rarity"} = $2;
    }
    elsif (/^Article\: *([a-z. ]+) *Type: *([A-Za-z]+)/) {
      $data{$name}{"article"} = $1;
      $data{$name}{"type"} = $2;
    }
    elsif (/^Found nature\: *(Yes|No) *Lode name\: *([A-Za-z]+)/) {
      $data{$name}{"found_nature"} = $1;
      $data{$name}{"lode_name"} = $2;
    }
    elsif (/^Raw names\: *([a-z, ]+[a-z])/) {
      $data{$name}{"raw_names"} = $1;
    }
    elsif (/^Refined names\: *([a-z, ]+[a-z])/) {
      $data{$name}{"refined_names"} = $1;
    }
  }
}

my @entries = sort { $a cmp $b } keys %data;

if ($opt_csv) {
  foreach my $name (@entries) {
    my $s = "";
    foreach my $field (@names) { $s .= $data{$name}{$field}.";"; }
    print "$s\n";
  }
} elsif ($opt_short) {
  my $str = "";
  for (my $i = 0; $i < @names; $i++) {
    $str .= sprintf("%-".$widths[$i]."s | ", $titles[$i]);
  }
  print "$str\n";
  $str =~ s/[^|]/-/g;
  $str =~ s/\|/+/g;
  print "$str\n";
} else {
  foreach my $name (@entries) {
    my $str = "";
    for (my $i = 0; $i < @names; $i++) {
      my $field = $names[$i];
      if (defined($data{$name}{$field})) {
        $str .= sprintf("%-".$widths[$i]."s | ", $data{$name}{$field});
      }
    }
    print "$str\n";
  }
}