[otConverters] Support read/write of 32bit VarStore
Part of https://github.com/fonttools/fonttools/issues/2279
This commit is contained in:
parent
a2f34fdf82
commit
802e3636bc
@ -1622,9 +1622,18 @@ class VarDataValue(BaseConverter):
|
|||||||
regionCount = tableDict["VarRegionCount"]
|
regionCount = tableDict["VarRegionCount"]
|
||||||
wordCount = tableDict["NumShorts"]
|
wordCount = tableDict["NumShorts"]
|
||||||
|
|
||||||
|
# https://github.com/fonttools/fonttools/issues/2279
|
||||||
|
longWords = bool(wordCount & 0x8000)
|
||||||
|
wordCount = wordCount & 0x7FFF
|
||||||
|
|
||||||
|
(readBigArray, readSmallArray) = {
|
||||||
|
False: (reader.readShortArray, reader.readInt8Array),
|
||||||
|
True: (reader.readLongArray, reader.readShortArray),
|
||||||
|
}[longWords]
|
||||||
|
|
||||||
n1, n2 = min(regionCount, wordCount), max(regionCount, wordCount)
|
n1, n2 = min(regionCount, wordCount), max(regionCount, wordCount)
|
||||||
values.extend(reader.readShortArray(n1))
|
values.extend(readBigArray(n1))
|
||||||
values.extend(reader.readInt8Array(n2 - n1))
|
values.extend(readSmallArray(n2 - n1))
|
||||||
if n2 > regionCount: # Padding
|
if n2 > regionCount: # Padding
|
||||||
del values[regionCount:]
|
del values[regionCount:]
|
||||||
|
|
||||||
@ -1634,11 +1643,20 @@ class VarDataValue(BaseConverter):
|
|||||||
regionCount = tableDict["VarRegionCount"]
|
regionCount = tableDict["VarRegionCount"]
|
||||||
wordCount = tableDict["NumShorts"]
|
wordCount = tableDict["NumShorts"]
|
||||||
|
|
||||||
|
# https://github.com/fonttools/fonttools/issues/2279
|
||||||
|
longWords = bool(wordCount & 0x8000)
|
||||||
|
wordCount = wordCount & 0x7FFF
|
||||||
|
|
||||||
|
(writeBigArray, writeSmallArray) = {
|
||||||
|
False: (writer.writeShortArray, writer.writeInt8Array),
|
||||||
|
True: (writer.writeLongArray, writer.writeShortArray),
|
||||||
|
}[longWords]
|
||||||
|
|
||||||
n1, n2 = min(regionCount, wordCount), max(regionCount, wordCount)
|
n1, n2 = min(regionCount, wordCount), max(regionCount, wordCount)
|
||||||
writer.writeShortArray(values[:n1])
|
writeBigArray(values[:n1])
|
||||||
writer.writeInt8Array(values[n1:regionCount])
|
writeSmallArray(values[n1:regionCount])
|
||||||
if n2 > regionCount: # Padding
|
if n2 > regionCount: # Padding
|
||||||
writer.writeInt8Array([0] * (n2 - regionCount))
|
writer.writeSmallArray([0] * (n2 - regionCount))
|
||||||
|
|
||||||
def xmlWrite(self, xmlWriter, font, value, name, attrs):
|
def xmlWrite(self, xmlWriter, font, value, name, attrs):
|
||||||
xmlWriter.simpletag(name, attrs + [("value", value)])
|
xmlWriter.simpletag(name, attrs + [("value", value)])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user