diff options
| author | Jakob Fries <jakob.fries@gmail.com> | 2007-12-22 02:55:19 +0000 |
|---|---|---|
| committer | Jakob Fries <jakob.fries@gmail.com> | 2007-12-22 02:55:19 +0000 |
| commit | 1ddfbba3666a835b59fc79b59aaae367ee93a6ea (patch) | |
| tree | e5304209e6a0ab62c083aee01bc46d68333cd2cd /scripts | |
| parent | 87b89138f42bbc1a276c4e92429ce651500e871c (diff) | |
| download | zcatch-1ddfbba3666a835b59fc79b59aaae367ee93a6ea.tar.gz zcatch-1ddfbba3666a835b59fc79b59aaae367ee93a6ea.zip | |
add new font stuff
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!" |