1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
#!/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);
|