#!/usr/bin/env python3

import sys
import xml.etree.ElementTree as ET

# Can we extract this from HTML element itself? I couldn't.
namespaces = {
	'ft': 'https://github.com/OpenType/fonttest',
	'xlink': 'http://www.w3.org/1999/xlink',
}
def ns(s):
	ns,s = s.split(':')
	return '{%s}%s' % (namespaces[ns], s)

def unistr(s):
	return ','.join('U+%04X' % ord(c) for c in s)

def glyphstr(glyphs):
	out = []
	for glyphname,x,y in glyphs:
		if x or y:
			out.append('%s@%d,%d' % (glyphname, x, y))
		else:
			out.append(glyphname)
	return '['+'|'.join(out)+']'

html = ET.fromstring(sys.stdin.read())
found = False

for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
	found = True
	name = elt.get(ns('ft:id'))
	text = elt.get(ns('ft:render'))
	font = elt.get(ns('ft:font'))
	variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', ',')
	glyphs = []
	for use in elt.findall(".//use"):
		x = int(use.get('x'))
		y = int(use.get('y'))
		href = use.get(ns('xlink:href'))
		assert href[0] == '#'
		glyphname = '.'.join(href[1:].split('/')[1].split('.')[1:])
		glyphs.append((glyphname, x, y))
	opts = '--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft'
	if variations:
		opts = opts + ' --variations=%s' % variations
	print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), glyphstr(glyphs)))

for elt in html.findall(".//*[@class='expected-no-crash'][@ft:id]", namespaces):
	found = True
	name = elt.get(ns('ft:id'))
	text = elt.get(ns('ft:render'))
	font = elt.get(ns('ft:font'))
	variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', ',')
	opts = ''
	if variations:
		opts = '--variations=%s' % variations
	print ("../fonts/%s:%s:%s:*" % (font, opts, unistr(text)))

sys.exit(0 if found else 1)
