#!/usr/bin/perl

my $kozu = { 1  => { name => "桐壺",
		     code => [ "     ",
			       "     " ] },
	     2  => { name => "帚木",
		     code => [ "|||||",
			       "|||||" ] },
	     3  => { name => "空蝉",
		     code => [ "|||[]",
			       '|||||' ] },
	     4  => { name => "夕顔",
		     code => [ "||[]|",
			       "|||||" ] },
	     5  => { name => "若紫",
		     code => [ "|[][]",
			       "|||||" ] },
	     6  => { name => "末摘花",
		     code => [ "[++]|",
			       "|||||" ] },
	     7  => { name => "紅葉賀",
		     code => [ "|[+-]",
			       "|||||" ] },
	     8  => { name => "花宴",
		     code => [ "||[-]",
			       "|||||" ] },
	     9  => { name => "葵",
		     code => [ "[]|||",
			       "|||||" ] },
	     10 => { name => "賢木",
		     code => [ "[+][]",
			       "|||||" ] },
	     11 => { name => "花散里",
		     code => [ "|[-] ",
			       "||[+]" ] },
	     12 => { name => "須磨",
		     code => [ " [--]",
			       "[++]|" ] },
	     13 => { name => "明石",
		     code => [ "|[]||",
			       "|||||" ] },
	     14 => { name => "澪標",
		     code => [ "|[-+]",
			       "|||||" ] },
	     15 => { name => "蓬生",
		     code => [ "[+]||",
			       "|||||" ] },
	     16 => { name => "関屋",
		     code => [ "|[+]|",
			       "|||||" ] },
	     17 => { name => "絵合",
		     code => [ " [--]",
			       "[+]||" ] },
	     18 => { name => "松風",
		     code => [ "[][]|",
			       "|||||" ] },
	     19 => { name => "薄雲",
		     code => [ "|[++]",
			       "|||||" ] },
	     20 => { name => "朝顔",
		     code => [ "[-+]|",
			       "|||||" ] },
	     21 => { name => "少女",
		     code => [ "[-]||",
			       "|||||" ] },
	     22 => { name => "玉鬘",
		     code => [ "[][+]",
			       "|||||" ] },
	     23 => { name => "初音",
		     code => [ " [-]|",
			       "[+]||" ] },
	     24 => { name => "胡蝶",
		     code => [ "[--] ",
			       "|[++]" ] },
	     25 => { name => "蛍",
		     code => [ "[+-]|",
			       "|||||" ] },
	     26 => { name => "常夏",
		     code => [ "||[+]",
			       "|||||" ] },
	     27 => { name => "篝火",
		     code => [ "|[-]|",
			       "|||||" ] },
	     28 => { name => "野分",
		     code => [ "[]|[]",
			       "|||||" ] },
	     29 => { name => "行幸",
		     code => [ "[-]  ",
			       "|[++]" ] },
	     30 => { name => "藤袴",
		     code => [ "[--]|",
			       "|||||" ] },
	     31 => { name => "真木柱",
		     code => [ "[---]",
			       "|[-]|" ] },
	     32 => { name => "梅枝",
		     code => [ "[++-]",
			       "|||||" ] },
	     33 => { name => "藤裏葉",
		     code => [ "|[--]",
			       "||[]|" ] },
	     34 => { name => "若菜上",
		     code => [ "[+--]",
			       "||[]|" ] },
	     35 => { name => "若菜下",
		     code => [ "[-][]",
			       "|||||" ] },
	     36 => { name => "柏木",
		     code => [ "[-+-]",
			       "|||||" ] },
	     37 => { name => "横笛",
		     code => [ "[--+]",
			       "|||||" ] },
	     38 => { name => "鈴虫",
		     code => [ "[---]",
			       "||[]|" ] },
	     39 => { name => "夕霧",
		     code => [ "  [-]",
			       "[-+]|" ] },
	     40 => { name => "御法",
		     code => [ "[--] ",
			       "|[-+]" ] },
	     41 => { name => "幻",
		     code => [ "[---]",
			       "|||||" ] },
	     42 => { name => "匂宮",
		     code => [ "  [-]",
			       "[++]|" ] },
	     43 => { name => "紅梅",
		     code => [ "|[--]",
			       "|||||" ] },
	     44 => { name => "竹河",
		     code => [ "[---]",
			       "|[+]|" ] },
	     45 => { name => "橋姫",
		     code => [ "[-++]",
			       "|||||" ] },
	     46 => { name => "椎本",
		     code => [ "[--]|",
			       "|[]||" ] },
	     47 => { name => "総角",
		     code => [ "[--+]",
			       "|[]||" ] },
	     48 => { name => "早蕨",
		     code => [ "[][-]",
			       "|||||" ] },
	     49 => { name => "宿木",
		     code => [ "[+-+]",
			       "|||||" ] },
	     50 => { name => "東屋",
		     code => [ "[+--]",
			       "|||||" ] },
	     51 => { name => "浮舟",
		     code => [ "[---]",
			       "|[]||" ] },
	     52 => { name => "蜻蛉",
		     code => [ "[-+-]",
			       "|[+]|" ] },
	     53 => { name => "手習",
		     code => [ "[+++]",
			       "|||||" ] },
	     54 => { name => "夢浮橋",
		     code => [ "     ",
			       "     " ] } };

my $base = shift(@ARGV) || 40;
my $line = shift(@ARGV) || 8;
my $space = shift(@ARGV) || 8;
my $foreground = shift(@ARGV) || "0,0,0";
my $background = shift(@ARGV) || "255,255,255";

kozu($base, $line, $space, $foreground, $background);

exit(0);

use GD;

sub kozu {
    my ($base, $line, $space, $foreground, $background) = @_;
    my $unit = $line + $space;
    my $width = $line * 5 + $space * 4;
    my $height = $line * 2 + $space * 2 + $base;

    my $im = new GD::Image($width, $height);

    my $black = $im->colorAllocate(split /,/, $foreground);
    my $white = $im->colorAllocate(split /,/, $background);
    #$im->transparent($white);

    foreach $no (sort keys %$kozu) {
	my $name = $kozu->{$no}->{name};
	my $code = $kozu->{$no}->{code};
	my $pixel = [ map [ (split //) ], @$code ];

	next if (1 == $no || 54 == $no);

	$im->filledRectangle(0, 0, $width - 1, $height - 1, $white);

	for (my $y = 0; $y < 2; $y++) {
	    for (my $x = 0; $x < 5; $x++) {
		$im->filledRectangle($x * $unit, $y * $unit,
				     $x * $unit + $line - 1,
				     $y * $unit + $unit - 1,
				     $black)
		    if ($pixel->[$y]->[$x] =~ /^\+|\[|\]|\|$/);
		$im->filledRectangle($x * $unit , $y * $unit,
				     $x * $unit + $line - 1,
				     $y * $unit + $line - 1,
				     $black)
		    if ($pixel->[$y]->[$x] =~ /^\-$/);
		$im->filledRectangle($x * $unit - $space, $y * $unit,
				     $x * $unit - 1,
				     $y * $unit + $line - 1,
				     $black)
		    if ($pixel->[$y]->[$x] =~ /^\-|\+|\]$/);
		$im->filledRectangle($x * $unit + $line, $y * $unit,
				     $x * $unit + $unit - 1,
				     $y * $unit + $line - 1,
				     $black)
		    if ($pixel->[$y]->[$x] =~ /^\-|\+|\[$/);
	    }
	}
	for (my $x = 0; $x < 5; $x++) {
	    $im->filledRectangle($x * $unit, 2 * $unit,
				 $x * $unit + $line - 1,
				 2 * $unit + $base - 1,
				 $black)
	}

	open F, "> kozu$no.png" or die "$!";
	print F $im->png;
	close F;
    }
}
