From 988350586f607c7a46bbb658a2abecfd004f41fb Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Sat, 18 Jun 2016 21:12:19 +0200 Subject: [PATCH] =?UTF-8?q?[tests]=20Workaround=20Python=202=20=E2=80=9Cna?= =?UTF-8?q?rrow=E2=80=9D=20builds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The so-called Python 2 “narrow” builds support UCS2 only, this is a workaround to allow unichr to work with any Unicode character in such builds. This fixes Travis-CI failure as it has narrow Python 2 builds. Copied from: https://github.com/behdad/fonttools/blob/master/Lib/fontTools/misc/py23.py --- test/shaping/hb_test_tools.py | 38 ++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/test/shaping/hb_test_tools.py b/test/shaping/hb_test_tools.py index 747699b87..747398299 100644 --- a/test/shaping/hb_test_tools.py +++ b/test/shaping/hb_test_tools.py @@ -7,7 +7,43 @@ from itertools import * diff_symbols = "-+=*&^%$#@!~/" diff_colors = ['red', 'green', 'blue'] -if sys.version_info[0] >= 3: +try: + unichr = unichr + + if sys.maxunicode < 0x10FFFF: + # workarounds for Python 2 "narrow" builds with UCS2-only support. + + _narrow_unichr = unichr + + def unichr(i): + """ + Return the unicode character whose Unicode code is the integer 'i'. + The valid range is 0 to 0x10FFFF inclusive. + + >>> _narrow_unichr(0xFFFF + 1) + Traceback (most recent call last): + File "", line 1, in ? + ValueError: unichr() arg not in range(0x10000) (narrow Python build) + >>> unichr(0xFFFF + 1) == u'\U00010000' + True + >>> unichr(1114111) == u'\U0010FFFF' + True + >>> unichr(0x10FFFF + 1) + Traceback (most recent call last): + File "", line 1, in ? + ValueError: unichr() arg not in range(0x110000) + """ + try: + return _narrow_unichr(i) + except ValueError: + try: + padded_hex_str = hex(i)[2:].zfill(8) + escape_str = "\\U" + padded_hex_str + return escape_str.decode("unicode-escape") + except UnicodeDecodeError: + raise ValueError('unichr() arg not in range(0x110000)') + +except NameError: unichr = chr class ColorFormatter: