#!/usr/bin/perl

$_ = <>; s/\s+$//;
while (1)
{
	if (/^\[(.*)\]$/)
	{
		push @znaki, $1;
	}
	elsif (/^$/)
	{
		if (@znaki)
		{
			if (@znak)
			{
				if (@font)
				{
					die "Different character heights in line $.\n"
						if @znak != $wysokosc
				}
				else
				{
					$wysokosc = @znak;
				}
				push @font,
				{
					ZNAKI => [@znaki],
					ZNAK => [@znak],
				};
				@znak = ();
			}
			@znaki = ();
		}
	}
	else
	{
		if (@znaki)
		{
			if (/^[.0]+$/)
			{
				@linia = split //;
				die "Character width must be 8 or 9 in line $.\n"
					if @linia != 8 && @linia != 9;
				$linia = 0;
				for (0 .. 7) {$linia <<= 1; $linia++ if $linia[$_] eq "0"}
				push @znak, $linia;
			}
		}
	}
	last unless defined;
	$_ = <>; s/\s+$//;
}

if (@font == 0)
{
	die "No characters found\n";
}
if (@font <= 256)
{
	$typpsf = "\2";
	$znakow = 256;
}
elsif (@font <= 512)
{
	$typpsf = "\3";
	$znakow = 512;
}
else
{
	die "Too many characters (", scalar @font, " > 512)\n";
}

print "6\4$typpsf", chr $wysokosc;

foreach (@font)
{
	foreach (@{$$_{ZNAK}}) {print chr $_}
}

print "\0" x (($znakow - @font) * $wysokosc);

foreach (@font)
{
	foreach (@{$$_{ZNAKI}})
	{
		s/^U\+// and print pack "S", hex;
	}
	print pack "s", -1;
}

print +(pack "s", -1) x ($znakow - @font);
