[python] Use utf-32 / utf-16 based on build of Python
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 30 Jun 2016 18:01:22 +0000 (11:01 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 30 Jun 2016 18:01:22 +0000 (11:01 -0700)
Fixes https://github.com/behdad/harfbuzz/pull/271

src/sample.py

index 19a4fdc..c2cb94d 100755 (executable)
@@ -3,6 +3,7 @@
 
 from __future__ import print_function
 import sys
+import array
 from gi.repository import HarfBuzz as hb
 from gi.repository import GLib
 
@@ -39,7 +40,26 @@ class Debugger(object):
                return True
 debugger = Debugger()
 hb.buffer_set_message_func (buf, debugger.message, 1, 0)
-hb.buffer_add_utf8 (buf, text.encode('utf-8'), 0, -1)
+
+##
+## Add text to buffer
+##
+#
+# See https://github.com/behdad/harfbuzz/pull/271
+#
+if False:
+       # If you do not care about cluster values reflecting Python
+       # string indices, then this is quickest way to add text to
+       # buffer:
+       hb.buffer_add_utf8 (buf, text.encode('utf-8'), 0, -1)
+       # Otherwise, then following handles both narrow and wide
+       # Python builds:
+elif sys.maxunicode == 0x10FFFF:
+       hb.buffer_add_utf32 (buf, array.array('I', text.encode('utf-32')), 0, -1)
+else:
+       hb.buffer_add_utf16 (buf, array.array('H', text.encode('utf-16')), 0, -1)
+
+
 hb.buffer_guess_segment_properties (buf)
 
 hb.shape (font, buf, [])