#!/usr/bin/perl use warnings; no warnings 'utf8'; use utf8; @block4x4s = split "", " ▗▖▄▝▐▞▟▘▚▌▙▀▜▛█"; for($i = 0; $i < 95; $i++) { ; # skip comment for($j = 0; $j < 6; $j++) { my $row = ; chomp($row); $row =~ s/X/1/g; $row =~ s/\./0/g; #warn @s; $font[$i + 32][$j] = $row; } ; # skip blank } if(!@ARGV) { @ARGV = ( " !\"#\$%&'()*+,-./", "0123456789:;<=>?", "\@ABCDEFGHIJKLMNO", "PQRSTUVWXYZ[\\]^_", "\`abcdefghijklmno", "pqrstuvwxyz{|}~"); } for $input (@ARGV) { my @lines = (); for(split "", $input) { my $o = ord($_); next if $o < 32 || $o > 126; for(0..5) { $lines[$_] .= $font[$o][$_]; } } # always want an even number of columns if(length($lines[0]) % 1) { $lines[$_] .= "0" for 0..5; } #print "$_\n" for @lines; my @output = (); for($y = 0; $y < 6; $y += 2) { my $out = ""; for($x = 0; $x < length($lines[0]); $x += 2) { my $index = 0; $index |= 8 if substr($lines[$y], $x, 1) eq '1'; $index |= 4 if substr($lines[$y], $x + 1, 1) eq '1'; $index |= 2 if substr($lines[$y + 1], $x, 1) eq '1'; $index |= 1 if substr($lines[$y + 1], $x + 1, 1) eq '1'; $out .= $block4x4s[$index]; } push @output, $out; } print "$_\n" for @output; } =for reference # __DATA__ section originally made thus: open my $f, ") { chomp; if(/^ENCODING\s+(\d+)/) { $encoding = $1; next; } if($in_bitmap) { if(/^ENDCHAR/) { $in_bitmap = 0; $bitmaps{$encoding} = [ @bitmap ]; } else { push @bitmap, $_; #warn "encoding $encoding, byte $_"; } } else { if(/^BITMAP/) { $in_bitmap = 1; @bitmap = (); } } } ## for(sort { $a <=> $b } keys %bitmaps) { ## print $_ . " => " . join(" ", @{$bitmaps{$_}}) . "\n"; ## } for($i = 32; $i < 127; $i++) { print "# $i " . chr($i) . "\n"; for(@{$bitmaps{$i}}) { my $byte = hex($_); my $bin = sprintf("%08b", $byte); $bin =~ s/000$//; $bin =~ s/0/./g; $bin =~ s/1/X/g; print $bin . "\n"; } print "\n"; } =cut # This stuff was taken from 5x7.bdf, but hand-edited to make it 6 rows # high, proportional, and fix some of the uglier glyphs. __DATA__ # 32 ... ... ... ... ... ... # 33 ! X. X. X. .. X. .. # 34 " X.X. X.X. .... .... .... .... # 35 # .X.X.. XXXXX. .X.X.. XXXXX. .X.X.. ...... # 36 $ .XXXX. X.X... .XXX.. ..X.X. XXXX.. ...... # 37 % ..... X..X. ..X.. .X... X..X. ..... # 38 & .X... X.X.. .X... X.X.. .X.X. ..... # 39 ' X. X. .. .. .. .. # 40 ( .X. X.. X.. X.. .X. ... # 41 ) X.. .X. .X. .X. X.. ... # 42 * ...... X.X.X. .XXX.. X.X.X. ...... ...... # 43 + .... .X.. XXX. .X.. .... .... # 44 , ... ... ... ... .X. X.. # 45 - .... .... XXX. .... .... .... # 46 . .. .. .. .. X. .. # 47 / ..... ...X. ..X.. .X... X.... ..... # 48 0 .XX.. X..X. X.XX. X..X. .XX.. ..... # 49 1 .X.. XX.. .X.. .X.. XXX. .... # 50 2 .XX.. X..X. ..X.. .X... XXXX. ..... # 51 3 .XX.. X..X. . X.. X..X. .XX.. ..... # 52 4 ..X.. .XX.. X.X.. XXXX. ..X.. ..... # 53 5 XXXX. X.... XXX.. ...X. XXX.. ..... # 54 6 .XX.. X.... XXX.. X..X. .XX.. ..... # 55 7 XXXX. ...X. ..X.. .X... .X... ..... # 56 8 .XX.. X..X. .XX.. X..X. .XX.. ..... # 57 9 .XX.. X..X. .XXX. ...X. .XX.. ..... # 58 : .. X. .. X. .. .. # 59 ; ... .X. ... .X. X.. ... # 60 < ..X. .X.. X... .X.. ..X. .... # 61 = .... XXX. .... XXX. .... .... # 62 > X... .X.. ..X. .X.. X... .... # 63 ? .XX.. X..X. ..X.. ..... ..X.. ..... # 64 @ .XX.. X..X. X.XX. X.... .XX.. ..... # 65 A .XX.. X..X. XXXX. X..X. X..X. ..... # 66 B XXX.. X..X. XXX.. X..X. XXX.. ..... # 67 C .XX.. X..X. X.... X..X. .XX.. ..... # 68 D XXX.. X..X. X..X. X..X. XXX.. ..... # 69 E XXXX. X.... XXX.. X.... XXXX. ..... # 70 F XXXX. X.... XXX.. X.... X.... ..... # 71 G .XXX. X.... X.XX. X..X. .XXX. ..... # 72 H X..X. X..X. XXXX. X..X. X..X. ..... # 73 I XXX. .X.. .X.. .X.. XXX. .... # 74 J ...X. ...X. ...X. X..X. .XX.. ..... # 75 K X..X. X.X.. XX... X.X.. X..X. ..... # 76 L X.... X.... X.... X.... XXXX. ..... # 77 M X...X. XX.XX. X.X.X. X.X.X. X...X. ...... # 78 N X..X. XX.X. X.XX. X.XX. X..X. ..... # 79 O .XX.. X..X. X..X. X..X. .XX.. ..... # 80 P XXX.. X..X. XXX.. X.... X.... ..... # 81 Q .XX.. X..X. X..X. X..X. .XX.. ..XX. # 82 R XXX.. X..X. XXX.. X.X.. X..X. ..... # 83 S .XXX. X.... .XX.. ...X. XXX.. ..... # 84 T XXXXX. ..X... ..X... ..X... ..X... ...... # 85 U X..X. X..X. X..X. X..X. .XX.. ..... # 86 V X...X. X...X. X...X. .X.X.. ..X... ...... # 87 W X...X. X...X. X.X.X. XX.XX. X...X. ...... # 88 X X..X. X..X. .XX.. X..X. X..X. ..... # 89 Y X...X. X...X. .XXX.. ..X... ..X... ...... # 90 Z XXXX. ...X. .XX.. X.... XXXX. ..... # 91 [ XX. X.. X.. X.. XX. ... # 92 \ ..... X.... .X... ..X.. ...X. ..... # 93 ] XX. .X. .X. .X. XX. .... # 94 ^ .X.. X.X. .... .... .... .... # 95 _ ..... ..... ..... ..... XXXX. ..... # 96 ` X.. .X. ... ... ... ... # 97 a ..... ..... .XXX. X..X. .XXX. ..... # 98 b X.... X.... XXX.. X..X. XXX.. ..... # 99 c .... .... .XX. X... .XX. .... # 100 d ...X. ...X. .XXX. X..X. .XXX. ..... # 101 e ..... .XX.. X..X. X.X.. .XXX. ..... # 102 f ..XX. .X... XXX.. .X... .X... ..... # 103 g ..... .XXX. X..X. .XXX. ...X. .XX.. # 104 h X.... X.... XXX.. X..X. X..X. ..... # 105 i .X.. .... XX.. .X.. XXX. .... # 106 j ..X. .... ..X. ..X. X.X. .X.. # 107 k X... X... X.X. XX.. X.X. .... # 108 l XX.. .X.. .X.. .X.. XXX. .... # 109 m ...... ...... X.XX.. XXXXX. X.X.X. ...... # 110 n ..... ..... XXX.. X..X. X..X. ..... # 111 o ..... ..... .XX.. X..X. .XX.. ..... # 112 p ..... ..... XXX.. X..X. XXX.. X.... # 113 q ..... ..... .XXX. X..X. .XXX. ...X. # 114 r ..... ..... XXX.. X..X. X.... ..... # 115 s ..... .XXX. XX... ..XX. XXX.. ..... # 116 t .X... .X... XXX.. .X... ..XX. ..... # 117 u ..... ..... X..X. X..X. .XXX. ..... # 118 v .... .... X.X. X.X. .X.. .... # 119 w ...... ...... X...X. X.X.X. XX.XX. ...... # 120 x ..... ..... X..X. .XX.. X..X. ..... # 121 y ..... ..... X..X. .X.X. ..X.. .X... # 122 z ..... XXXX. ..X.. .X... XXXX. ..... # 123 { ..X. .X.. XX.. .X.. ..X. .... # 124 | X. X. X. X. X. .. # 125 } X... .X.. .XX. .X.. X... .... # 126 ~ .X.X. X.X.. ..... ..... ..... .....