diff options
Diffstat (limited to 'Lib/fontTools/misc/textTools.py')
-rw-r--r-- | Lib/fontTools/misc/textTools.py | 135 |
1 files changed, 68 insertions, 67 deletions
diff --git a/Lib/fontTools/misc/textTools.py b/Lib/fontTools/misc/textTools.py index bf75bcbd..f7ca1acc 100644 --- a/Lib/fontTools/misc/textTools.py +++ b/Lib/fontTools/misc/textTools.py @@ -33,90 +33,90 @@ class Tag(str): def readHex(content): - """Convert a list of hex strings to binary data.""" - return deHexStr(strjoin(chunk for chunk in content if isinstance(chunk, str))) + """Convert a list of hex strings to binary data.""" + return deHexStr(strjoin(chunk for chunk in content if isinstance(chunk, str))) def deHexStr(hexdata): - """Convert a hex string to binary data.""" - hexdata = strjoin(hexdata.split()) - if len(hexdata) % 2: - hexdata = hexdata + "0" - data = [] - for i in range(0, len(hexdata), 2): - data.append(bytechr(int(hexdata[i:i+2], 16))) - return bytesjoin(data) + """Convert a hex string to binary data.""" + hexdata = strjoin(hexdata.split()) + if len(hexdata) % 2: + hexdata = hexdata + "0" + data = [] + for i in range(0, len(hexdata), 2): + data.append(bytechr(int(hexdata[i : i + 2], 16))) + return bytesjoin(data) def hexStr(data): - """Convert binary data to a hex string.""" - h = string.hexdigits - r = '' - for c in data: - i = byteord(c) - r = r + h[(i >> 4) & 0xF] + h[i & 0xF] - return r + """Convert binary data to a hex string.""" + h = string.hexdigits + r = "" + for c in data: + i = byteord(c) + r = r + h[(i >> 4) & 0xF] + h[i & 0xF] + return r def num2binary(l, bits=32): - items = [] - binary = "" - for i in range(bits): - if l & 0x1: - binary = "1" + binary - else: - binary = "0" + binary - l = l >> 1 - if not ((i+1) % 8): - items.append(binary) - binary = "" - if binary: - items.append(binary) - items.reverse() - assert l in (0, -1), "number doesn't fit in number of bits" - return ' '.join(items) + items = [] + binary = "" + for i in range(bits): + if l & 0x1: + binary = "1" + binary + else: + binary = "0" + binary + l = l >> 1 + if not ((i + 1) % 8): + items.append(binary) + binary = "" + if binary: + items.append(binary) + items.reverse() + assert l in (0, -1), "number doesn't fit in number of bits" + return " ".join(items) def binary2num(bin): - bin = strjoin(bin.split()) - l = 0 - for digit in bin: - l = l << 1 - if digit != "0": - l = l | 0x1 - return l + bin = strjoin(bin.split()) + l = 0 + for digit in bin: + l = l << 1 + if digit != "0": + l = l | 0x1 + return l def caselessSort(alist): - """Return a sorted copy of a list. If there are only strings - in the list, it will not consider case. - """ + """Return a sorted copy of a list. If there are only strings + in the list, it will not consider case. + """ - try: - return sorted(alist, key=lambda a: (a.lower(), a)) - except TypeError: - return sorted(alist) + try: + return sorted(alist, key=lambda a: (a.lower(), a)) + except TypeError: + return sorted(alist) def pad(data, size): - r""" Pad byte string 'data' with null bytes until its length is a - multiple of 'size'. - - >>> len(pad(b'abcd', 4)) - 4 - >>> len(pad(b'abcde', 2)) - 6 - >>> len(pad(b'abcde', 4)) - 8 - >>> pad(b'abcdef', 4) == b'abcdef\x00\x00' - True - """ - data = tobytes(data) - if size > 1: - remainder = len(data) % size - if remainder: - data += b"\0" * (size - remainder) - return data + r"""Pad byte string 'data' with null bytes until its length is a + multiple of 'size'. + + >>> len(pad(b'abcd', 4)) + 4 + >>> len(pad(b'abcde', 2)) + 6 + >>> len(pad(b'abcde', 4)) + 8 + >>> pad(b'abcdef', 4) == b'abcdef\x00\x00' + True + """ + data = tobytes(data) + if size > 1: + remainder = len(data) % size + if remainder: + data += b"\0" * (size - remainder) + return data def tostr(s, encoding="ascii", errors="strict"): @@ -150,5 +150,6 @@ def bytesjoin(iterable, joiner=b""): if __name__ == "__main__": - import doctest, sys - sys.exit(doctest.testmod().failed) + import doctest, sys + + sys.exit(doctest.testmod().failed) |