#!/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
