diff --git a/Utils/cardInfo.tmpl b/Utils/cardInfo.tmpl index 86fbce55c19..5b04c6a01b1 100644 --- a/Utils/cardInfo.tmpl +++ b/Utils/cardInfo.tmpl @@ -1,7 +1,7 @@ -/* - [=$cardName=] - [=$manaCost=] - [=$typeLine=] - [=$abilities=][= $powerToughness ? "\n $powerToughness" : "" =] -*/ -private static final String [=$classNameLower=] = "[=$cardName=]"; \ No newline at end of file + /* + [=$cardName=] + [=$manaCost=] + [=$typeLine=] + [=$abilities=][= $powerToughness ? "\n $powerToughness" : "" =] + */ + private static final String [=$classNameLower=] = "[=$cardName=]"; \ No newline at end of file diff --git a/Utils/gen-card-test.pl b/Utils/gen-card-test.pl index 505a7f6d9c3..1817ed3a63f 100644 --- a/Utils/gen-card-test.pl +++ b/Utils/gen-card-test.pl @@ -63,7 +63,7 @@ sub generateCardInfo { my $cardAbilities = $card[8]; my @abilities = split(/\$/, $cardAbilities); - my $abilitiesFormatted = join("\n ", @abilities); + my $abilitiesFormatted = join("\n ", @abilities); $vars{'abilities'} = $abilitiesFormatted; if ($card[6]) { $vars{'powerToughness'} = "$card[6]/$card[7]" @@ -151,7 +151,6 @@ my %vars; $vars{'className'} = toCamelCase($mainCardName); $vars{'classNameLower'} = lcfirst(toCamelCase($mainCardName)); $vars{'cardNameFirstLetter'} = lc substr($mainCardName, 0, 1); -my @card; foreach my $setName (keys %{$cards{$originalName}}) { $setCode = lc($sets{$setName}); @@ -181,7 +180,7 @@ my $allCardInfo = generateCardInfo($mainCardName, $infoTemplate); # Generate additional card info templates foreach my $additionalCard (@additionalCards) { my $additionalInfo = generateCardInfo($additionalCard, $infoTemplate); - if ($additionalInfo) { + if (defined $additionalInfo) { $allCardInfo .= "\n\n" . $additionalInfo; } } diff --git a/Utils/print-card-info.pl b/Utils/print-card-info.pl new file mode 100644 index 00000000000..1c79be89324 --- /dev/null +++ b/Utils/print-card-info.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w + +#author: Jmlundeen + +use Text::Template; +use strict; +use utf8; +use open ':std', ':encoding(UTF-8)'; + +my $dataFile = 'mtg-cards-data.txt'; +my $setsFile = 'mtg-sets-data.txt'; +my $cardInfoTemplate = 'cardInfo.tmpl'; + +my %cards; +my %sets; + +sub toCamelCase { + my $string = $_[0]; + $string =~ s/\b([\w']+)\b/ucfirst($1)/ge; + $string =~ s/[-,\s\':.!\/]//g; + $string; +} + +sub printCardInfo { + my ($cardName, $infoTemplate) = @_; + + if (!exists $cards{$cardName}) { + print "Card name doesn't exist: $cardName\n\n"; + return; + } + + my %vars; + $vars{'classNameLower'} = lcfirst(toCamelCase($cardName)); + my @card; + + foreach my $setName (keys %{$cards{$cardName}}) { + @card = @{(values(%{$cards{$cardName}{$setName}}))[0]}; + last; # Just get the first one + } + + $vars{'cardName'} = $card[0]; + $vars{'manaCost'} = $card[4]; + $vars{'typeLine'} = $card[5]; + + # Combine power and toughness if they exist + my $powerToughness = ""; + if ($card[6] && $card[7] && $card[6] ne "" && $card[7] ne "") { + $powerToughness = "$card[6]/$card[7]"; + } + $vars{'powerToughness'} = $powerToughness; + + my $cardAbilities = $card[8]; + my @abilities = split(/\$/, $cardAbilities); + my $abilitiesFormatted = join("\n ", @abilities); + $vars{'abilities'} = $abilitiesFormatted; + + my $result = $infoTemplate->fill_in(HASH => \%vars); + print "$result\n\n"; +} + +# Load data files +open(DATA, $dataFile) || die "can't open $dataFile : $!"; +while (my $line = ) { + my @data = split('\\|', $line); + $cards{$data[0]}{$data[1]}{$data[2]} = \@data; +} +close(DATA); + +open(DATA, $setsFile) || die "can't open $setsFile : $!"; +while (my $line = ) { + my @data = split('\\|', $line); + $sets{$data[0]} = $data[1]; +} +close(DATA); + +# Get card names from arguments +my @cardNames = @ARGV; +if (@cardNames == 0) { + print 'Enter card names (one per line, empty line to finish): '; + while (my $input = ) { + chomp $input; + last if $input eq ''; + push @cardNames, $input; + } +} + +if (@cardNames == 0) { + die "No card names provided.\n"; +} + +# Load template +my $infoTemplate = Text::Template->new(TYPE => 'FILE', SOURCE => $cardInfoTemplate, DELIMITERS => [ '[=', '=]' ]); + +# Print card info for each card +foreach my $cardName (@cardNames) { + printCardInfo($cardName, $infoTemplate); +} \ No newline at end of file