about summary refs log tree commit diff
path: root/scripts
diff options
context:
space:
mode:
authorJakob Fries <jakob.fries@gmail.com>2007-12-22 02:55:19 +0000
committerJakob Fries <jakob.fries@gmail.com>2007-12-22 02:55:19 +0000
commit1ddfbba3666a835b59fc79b59aaae367ee93a6ea (patch)
treee5304209e6a0ab62c083aee01bc46d68333cd2cd /scripts
parent87b89138f42bbc1a276c4e92429ce651500e871c (diff)
downloadzcatch-1ddfbba3666a835b59fc79b59aaae367ee93a6ea.tar.gz
zcatch-1ddfbba3666a835b59fc79b59aaae367ee93a6ea.zip
add new font stuff
Diffstat (limited to 'scripts')
-rw-r--r--scripts/font_converter.py121
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!"