#!python
from fontFeatures.shaperLib.Buffer import Buffer
from fontFeatures.ttLib import unparse
from fontTools.ttLib import TTFont
from fontFeatures.shaperLib.Shaper import Shaper
import sys
from babelfont import Babelfont
from fontTools.ttLib import TTFont
import argparse
import logging
import re


parser = argparse.ArgumentParser(description='Shape text')
parser.add_argument('font', metavar='OTF',
                    help='Font file')
parser.add_argument('--verbose', '-V', dest='logging', action='store_true',
                    help='Output interim shaping results')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-u', help='Unicodes')
group.add_argument('string', metavar='STRING',
                    help='Text to shape', nargs="?")

args = parser.parse_args()

if args.logging:
    logging.basicConfig(format='%(message)s')
    logging.getLogger("fontFeatures.shaperLib").setLevel(logging.DEBUG)

font = Babelfont.open(args.font)
if args.font.endswith(".ttf") or args.font.endswith(".otf"):
    ff = unparse(TTFont(args.font))
if args.u:
    args.u = re.sub("[uU]+|0x", "", args.u)
    splitup = re.split(r"[\s,]", args.u)
    args.string = "".join([chr(int(x,16)) for x in splitup])

buf = Buffer(font, unicodes=args.string)
shaper = Shaper(ff, font)
shaper.execute(buf)
if buf.direction == "RTL":
    buf.items = list(reversed(buf.items))
print(buf.serialize())
