Port glyf flags from numpy to array module
diff --git a/Lib/fontTools/ttLib/tables/_g_l_y_f.py b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
index c74da25..6bc105c 100644
--- a/Lib/fontTools/ttLib/tables/_g_l_y_f.py
+++ b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
@@ -293,14 +293,14 @@
coordinates.append([safeEval(attrs["x"]), safeEval(attrs["y"])])
flags.append(not not safeEval(attrs["on"]))
coordinates = numpy.array(coordinates, numpy.int16)
- flags = numpy.array(flags, numpy.int8)
+ flags = array.array("B", flags)
if not hasattr(self, "coordinates"):
self.coordinates = coordinates
self.flags = flags
self.endPtsOfContours = [len(coordinates)-1]
else:
self.coordinates = numpy.concatenate((self.coordinates, coordinates))
- self.flags = numpy.concatenate((self.flags, flags))
+ self.flags.extend(flags)
self.endPtsOfContours.append(len(self.coordinates)-1)
elif name == "component":
if self.numberOfContours > 0:
@@ -410,11 +410,11 @@
# convert relative to absolute coordinates
self.coordinates = numpy.add.accumulate(coordinates)
# discard all flags but for "flagOnCurve"
- self.flags = numpy.bitwise_and(flags, flagOnCurve).astype(numpy.int8)
+ self.flags = array.array("B", (f & flagOnCurve for f in flags))
def decompileCoordinatesRaw(self, nCoordinates, data):
# unpack flags and prepare unpacking of coordinates
- flags = numpy.array([0] * nCoordinates, numpy.int8)
+ flags = array.array("B", [0] * nCoordinates)
# Warning: deep Python trickery going on. We use the struct module to unpack
# the coordinates. We build a format string based on the flags, so we can
# unpack the coordinates in one struct.unpack() call.
@@ -494,7 +494,7 @@
repeat = 0
for i in range(len(coordinates)):
# Oh, the horrors of TrueType
- flag = self.flags[i]
+ flag = flags[i]
x, y = coordinates[i]
# do x
if x == 0:
@@ -608,10 +608,10 @@
allEndPts = allEndPts + (numpy.array(endPts) + len(allCoords)).tolist()
if len(coordinates) > 0:
allCoords = numpy.concatenate((allCoords, coordinates))
- allFlags = numpy.concatenate((allFlags, flags))
+ allFlags.extend(flags)
return allCoords, allEndPts, allFlags
else:
- return numpy.array([], numpy.int16), [], numpy.array([], numpy.int8)
+ return numpy.array([], numpy.int16), [], array.array("B")
def __cmp__(self, other):
if self.numberOfContours <= 0:
@@ -620,7 +620,7 @@
if cmp(len(self.coordinates), len(other.coordinates)):
return 1
ctest = numpy.alltrue(numpy.alltrue(numpy.equal(self.coordinates, other.coordinates)))
- ftest = numpy.alltrue(numpy.equal(self.flags, other.flags))
+ ftest = cmp(self.flags, other.flags)
if not ctest or not ftest:
return 1
return (