#!/usr/bin/python import harfbuzz, optparse buffer = None def tracefn(ft, aType, index) : print aType + "(" + str(index) + "): " + str(buffer.get_info()) usage = '''usage: %prog [options] fontfile "codepoints" Generates output of glyphs and positions. Each entry is of the form: glyphid>cluster@(offsetx,offsety)+(advancex,advancey) codepoints is a space separated list of hex values of Unicode codepoints''' p = optparse.OptionParser(usage=usage) p.add_option('-s', '--size', default=12, type="int", help="point size") p.add_option('-l', '--lang', help="language code") p.add_option('-c', '--script', help="script code") p.add_option('-f', '--feature', action='append', help="define a feature key=val") p.add_option('-d', '--debug', action='store_true', help="Output trace info") (opts, args) = p.parse_args() ft = harfbuzz.ft(args[0], opts.size, trace = tracefn if opts.debug else None) text = "".join(unichr(int(c, 16)) for c in args[1].split(" ")) bytes = text.encode('utf_8') buffer = harfbuzz.buffer(bytes, len(text)) if (opts.lang or opts.script) : buffer.set_scriptlang(opts.script if opts.script else "", opts.lang if opts.lang else "") features = {} if opts.feature : for f in opts.feature : k, v = f.split("=") features[k] = v ft.shape(buffer, features = features) res = buffer.get_info(64) # scale for 26.6 print res