1e478ebe4d3f74dc271ffe88680fd29f6b1924c93Behdad Esfahbod#!/usr/bin/python
2b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod# -*- coding: utf-8 -*-
3e478ebe4d3f74dc271ffe88680fd29f6b1924c93Behdad Esfahbod
4b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodfrom __future__ import print_function
5e478ebe4d3f74dc271ffe88680fd29f6b1924c93Behdad Esfahbodimport sys
6e478ebe4d3f74dc271ffe88680fd29f6b1924c93Behdad Esfahbodfrom gi.repository import HarfBuzz as hb
72cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahbodfrom gi.repository import GLib
8e478ebe4d3f74dc271ffe88680fd29f6b1924c93Behdad Esfahbod
981a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod# Python 2/3 compatibility
1081a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbodtry:
1181a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod	unicode
1281a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbodexcept NameError:
1381a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod	unicode = str
1481a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod
1581a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahboddef tounicode(s, encoding='utf-8'):
1681a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod	if not isinstance(s, unicode):
1781a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod		return s.decode(encoding)
1881a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod	else:
1981a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod		return s
2081a31f3eff44a85bb2160d51156a01a18f0a97dfBehdad Esfahbod
21b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodfontdata = open (sys.argv[1], 'rb').read ()
22238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbodtext = tounicode(sys.argv[2])
23e9f5c65be027eb7759ab819e267e24dff3b017b6Behdad Esfahbod# Need to create GLib.Bytes explicitly until this bug is fixed:
24e9f5c65be027eb7759ab819e267e24dff3b017b6Behdad Esfahbod# https://bugzilla.gnome.org/show_bug.cgi?id=729541
252cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahbodblob = hb.glib_blob_create (GLib.Bytes.new (fontdata))
26b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodface = hb.face_create (blob, 0)
272cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahboddel blob
28b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodfont = hb.font_create (face)
29b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodupem = hb.face_get_upem (face)
302cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahboddel face
31b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodhb.font_set_scale (font, upem, upem)
32b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod#hb.ft_font_set_funcs (font)
33b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodhb.ot_font_set_funcs (font)
34b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod
352cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahbodbuf = hb.buffer_create ()
36238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbodhb.buffer_add_utf8 (buf, text.encode('utf-8'), 0, -1)
372cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahbodhb.buffer_guess_segment_properties (buf)
382cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahbod
39b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodhb.shape (font, buf, [])
402cd5323531dcd800549b2cb1cb51d708e72ab2d8Behdad Esfahboddel font
41b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod
42b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodinfos = hb.buffer_get_glyph_infos (buf)
43b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodpositions = hb.buffer_get_glyph_positions (buf)
44b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod
45b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbodfor info,pos in zip(infos, positions):
46b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod	gid = info.codepoint
47b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod	cluster = info.cluster
48238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbod	x_advance = pos.x_advance
49238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbod	x_offset = pos.x_offset
50238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbod	y_offset = pos.y_offset
51b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0Behdad Esfahbod
52238d6a38f2ceb7d8dceec9365a823f032b3b9f7dBehdad Esfahbod	print("gid%d=%d@%d,%d+%d" % (gid, cluster, x_advance, x_offset, y_offset))
53