Imported Upstream version 2.6.4
[platform/upstream/harfbuzz.git] / test / shaping / data / text-rendering-tests / extract-tests.py
1 #!/usr/bin/env python
2
3 from __future__ import print_function, division, absolute_import
4
5 import sys
6 import xml.etree.ElementTree as ET
7
8 # Can we extract this from HTML element itself? I couldn't.
9 namespaces = {
10         'ft': 'https://github.com/OpenType/fonttest',
11         'xlink': 'http://www.w3.org/1999/xlink',
12 }
13 def ns(s):
14         ns,s = s.split(':')
15         return '{%s}%s' % (namespaces[ns], s)
16
17 def unistr(s):
18         return ','.join('U+%04X' % ord(c) for c in s)
19
20 def glyphstr(glyphs):
21         out = []
22         for glyphname,x,y in glyphs:
23                 if x or y:
24                         out.append('%s@%d,%d' % (glyphname, x, y))
25                 else:
26                         out.append(glyphname)
27         return '['+'|'.join(out)+']'
28
29 html = ET.fromstring(sys.stdin.read())
30 found = False
31
32 for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
33         found = True
34         name = elt.get(ns('ft:id'))
35         text = elt.get(ns('ft:render'))
36         font = elt.get(ns('ft:font'))
37         variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', ',')
38         glyphs = []
39         for use in elt.findall(".//use"):
40                 x = int(use.get('x'))
41                 y = int(use.get('y'))
42                 href = use.get(ns('xlink:href'))
43                 assert href[0] == '#'
44                 glyphname = '.'.join(href[1:].split('/')[1].split('.')[1:])
45                 glyphs.append((glyphname, x, y))
46         opts = '--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft'
47         if variations:
48                 opts = opts + ' --variations=%s' % variations
49         print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), glyphstr(glyphs)))
50
51 for elt in html.findall(".//*[@class='expected-no-crash'][@ft:id]", namespaces):
52         found = True
53         name = elt.get(ns('ft:id'))
54         text = elt.get(ns('ft:render'))
55         font = elt.get(ns('ft:font'))
56         variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', ',')
57         opts = ''
58         if variations:
59                 opts = '--variations=%s' % variations
60         print ("../fonts/%s:%s:%s:*" % (font, opts, unistr(text)))
61
62 sys.exit(0 if found else 1)