diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/font_converter.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/scripts/font_converter.py b/scripts/font_converter.py new file mode 100644 index 00000000..f2ba0e49 --- /dev/null +++ b/scripts/font_converter.py @@ -0,0 +1,121 @@ +from __future__ import with_statement +import struct +import sys + +def convert(input, output): + with open(input, "r") as in_file: + with open(output, "w") as out_file: + def build_dic(parts): + dic = {} + + for part in parts: + key, value = part.split('=') + + try: + dic[key] = int(value) + except: + dic[key] = value + + return dic + + def get_entry(line): + + parts = line.split() + type = parts[0] + + dic = build_dic(parts[1:]) + + return type, dic + + def write_int16(val): + out_file.write(struct.pack('<h', val)) + + def write_info(dic): + write_int16(dic["size"]) + + def write_common(dic): + write_int16(dic["scaleW"]) + write_int16(dic["scaleH"]) + write_int16(dic["lineHeight"]) + write_int16(dic["base"]) + + def write_page(dic): + pass + + def write_chars(dic): + pass + + def write_char(dic): + write_int16(dic["x"]) + write_int16(dic["y"]) + write_int16(dic["width"]) + write_int16(dic["height"]) + write_int16(dic["xoffset"]) + write_int16(dic["yoffset"]) + write_int16(dic["xadvance"]) + + def write_default_char(): + write_int16(0) + write_int16(0) + write_int16(0) + write_int16(0) + write_int16(0) + write_int16(0) + write_int16(0) + + def write_kernings(dic): + pass + + def write_kerning(dic): + write_int16(dic["amount"]) + + def write_default_kerning(): + write_int16(0) + + chars = [] + kernings = [] + for i in range(256): + chars.append(None) + for i in range(256*256): + kernings.append(None) + + def save_char(dic): + chars[dic["id"]] = dic + + def save_kerning(dic): + kernings[dic["first"] + dic["second"]*256] = dic + + write_table = { + "info": write_info, + "common": write_common, + "page": write_page, + "chars": write_chars, + "char": save_char, + "kernings": write_kernings, + "kerning": save_kerning + } + + for line in in_file: + type, dic = get_entry(line) + + write_table[type](dic) + + for i in range(256): + if chars[i]: + write_char(chars[i]) + else: + write_default_char() + + for i in range(256*256): + if kernings[i]: + write_kerning(kernings[i]) + else: + write_default_kerning() + +if len(sys.argv) != 3: + print "font converter! converts .fnt files to teewars .tfnt" + print "usage: font_converter <input> <output>" +else: + print "converting..." + convert(sys.argv[1], sys.argv[2]) + print "done!" |