Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed_nicovideo_search_api mbed_recent_nicovideo_display_pub
misaki2cpp
美咲フォントからC++コードの作成プログラム。
/media/uploads/va009039/misaki2cpp.py
misaki2cpp.py
#coding: UTF-8
# misaki2cpp.py 2014/8/5
def r90(bitmap): # 右に90度回転
bitmap2 = [0x00] * 8
mask2 = 0x01
for bit in bitmap:
mask = 0x80
for n in range(8):
if bit & (mask>>n):
bitmap2[n] |= mask2
mask2 <<= 1
return bitmap2
def cpp_bitmap(encoding, bitmap):
bitmap_r90 = r90(bitmap)
s = "{0x%04x,{" % encoding
for i in range(7):
s += "0x%02x" % bitmap[i]
if i <= 5:
s += ","
s += "}},"
utf8_str = unichr(encoding).encode('utf-8')
s += " // "
for b in utf8_str:
s += "\\x%02x" % ord(b)
return s
def view_bitmap(bitmap):
s = ""
for bit in bitmap:
s += "// "
for x in range(8):
if (bit<<x) & 0x80:
s += u"■"
else:
s += u"□"
s += "\n"
return s
def get_bdf(f):
bitmap_start = False
chars_count = 0
while 1:
line = f.readline()
if line == None:
break
if chars_count == 0: print "// " + line,
s = line.split()
if s[0] == "CHARS":
chars = int(s[1])
elif s[0] == "ENDFONT":
assert chars == chars_count
break
elif s[0] == "ENCODING":
encoding = int(s[1])
elif s[0] == "BITMAP":
bitmap_start = True
bitmap = []
elif s[0] == "ENDCHAR":
chars_count += 1
assert len(bitmap) == 8
yield (encoding, bitmap)
bitmap_start = False
elif bitmap_start:
bitmap.append(int(s[0], 16))
return
def hexstr(str):
s = "len=%d " % len(str)
for c in str:
s += "[%02x]" % ord(c)
return s
if __name__ == "__main__":
import argparse
import tarfile
parser = argparse.ArgumentParser()
parser.add_argument('-f', dest='filename', nargs=1, default="misaki_bdf_2012-06-03.tar.gz")
parser.add_argument('-e', dest='extract', nargs=1, default="misaki_gothic.bdf")
parser.add_argument('-l', dest='list', action='store_true')
args = parser.parse_args()
fh = tarfile.open(args.filename, 'r')
if args.list:
fh.list()
f = fh.extractfile(args.extract)
bitmap_by_unicode = {}
for (encoding,bitmap) in get_bdf(f):
jis_str = "\x1b$B" + chr(encoding>>8) + chr(encoding & 255) + "\x1b(B"
try:
uni_str = unicode(jis_str, 'iso2022_jp')
except UnicodeDecodeError: # 機種依存コード
pass
else:
assert uni_str.encode('iso2022_jp') == jis_str
utf8_str = uni_str.encode('utf-8')
assert not ord(uni_str) in bitmap_by_unicode
bitmap_by_unicode[ord(uni_str)] = bitmap
unicode_lists = sorted(bitmap_by_unicode)
print """\
#include "GraphicOLED.h"
struct stfont {
uint16_t unicode;
uint8_t bitmap[8];
};
static struct stfont misaki_gothic[] = {"""
for k in unicode_lists:
bitmap = bitmap_by_unicode[k]
print cpp_bitmap(k, r90(bitmap))
print """\
};"""