8bitworkshop/tools/parsebdf4bit.py

66 lines
2.0 KiB
Python
Executable File

#!/usr/bin/python
import sys,string,argparse
#lochar = 0x20 #48
#hichar = 0x5e #57
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--start', type=int, default=0, help="index of first character")
parser.add_argument('-e', '--end', type=int, default=255, help="index of last character")
parser.add_argument('bdffile', help="BDF bitmap file")
args = parser.parse_args()
lochar = args.start
hichar = args.end
def tohex(v):
return '%02x'%v
def tohex2(v):
return '0x%02x'%v
chars = {}
inbitmap = 0
with open(args.bdffile,'r') as f:
lines = f.readlines()
for l in lines:
l = l.strip()
toks = l.split()
#print l,toks
if toks[0] == 'ENCODING':
chord = int(toks[1])
elif toks[0] == 'BITMAP':
inbitmap = True
bytes = []
elif toks[0] == 'BBX':
bbx = [int(x) for x in toks[1:]]
elif toks[0] == 'ENDCHAR':
inbitmap = False
if chord >= lochar and chord <= hichar:
#bytes.reverse()
#print chord,bytes,bbx
width = bbx[0]+1
height = bbx[1]
output = [(width+1)//2 + (width)*16, height + (height+bbx[3])*16]
for y in range(0,height):
for x in range(0,width,2):
b = 0
if bytes[y] & (0x80 >> x):
b |= 0xf0
if bytes[y] & (0x40 >> x):
b |= 0x0f
output.append(b)
print('const char CH_%d[] = { %s };' % ( chord, ','.join([tohex2(x) for x in output]) ))
chars[chord] = 'CH_%d' % chord
elif inbitmap and len(toks) == 1:
byte = int(toks[0],16)
bytes.append(byte)
print('const char* const FONT_TABLE[%d] = {' % (hichar-lochar+1), end=' ')
for ch in range(lochar, hichar+1):
if chars.get(ch):
print('%s,' % chars[ch], end=' ')
else:
print('0,', end=' ')
print("};")