def _unpackAERecord(desc, codecs): # Unpack record to dict, converting keys from 4-letter codes to AEType instances and unpacking values. dct = {} for i in range(desc.AECountItems()): key, value = desc.AEGetNthDesc(i + 1, kAE.typeWildCard) if key == 'usrf': lst = _unpackAEList(value, codecs) for i in range(0, len(lst), 2): dct[lst[i]] = lst[i + 1] else: dct[AEType(key)] = codecs.unpack(value) return dct
def unpackaerecord(self, desc): # Unpack record to dict, converting keys from 4-letter codes to AEType instances and unpacking values. dct = {} for i in range(desc.count()): key, value = desc.getitem(i + 1, kae.typeWildCard) if key == 'usrf': lst = self.unpackaelist(value) for i in range(0, len(lst), 2): dct[lst[i]] = lst[i+1] else: dct[AEType(key)] = self.unpack(value) return dct
def unpackunknown(self, desc): """Clients may override this to provide additional unpackers.""" if desc.isrecord(): rec = desc.coerce('reco') rec.setparam('pcls', self.pack(AEType(desc.type))) decoder = self.decoders.get('reco') if decoder: return decoder(rec) else: return rec else: return desc
lambda desc, codecs: macfile.Alias.makewithaedesc(desc), kAE.typeFSS: lambda desc, codecs: macfile.File.makewithaedesc(desc), kAE.typeFSRef: lambda desc, codecs: macfile.File.makewithaedesc(desc), _typeFileURL: lambda desc, codecs: macfile.File.makewithaedesc(desc), kAE.typeQDPoint: _unpackQDPoint, kAE.typeQDRectangle: _unpackQDRect, kAE.typeRGBColor: lambda desc, codecs: struct.unpack('HHH', desc.data), # ensure correct endianness in following kAE.typeType: lambda desc, codecs: AEType( struct.pack("L", *struct.unpack(">L", desc.data))), kAE.typeEnumeration: lambda desc, codecs: AEEnum( struct.pack("L", *struct.unpack(">L", desc.data))), kAE.typeProperty: lambda desc, codecs: AEProp( struct.pack("L", *struct.unpack(">L", desc.data))), kAE.typeKeyword: lambda desc, codecs: AEKey( struct.pack("L", *struct.unpack(">L", desc.data))), 'evnt': lambda desc, codecs: AEEventName( struct.pack("LL", *struct.unpack(">LL", desc.data))), # event name kAE.typeStyledText: lambda desc, codecs: _unpackUnicodeText( desc.AECoerceDesc(kAE.typeUnicodeText), codecs),
def unpacktype(self, desc): return AEType(fourcharcode(desc.data))
kAE.typeAlias: lambda desc, codecs: mactypes.Alias.makewithaedesc(desc), kAE.typeFSS: lambda desc, codecs: mactypes.File.makewithaedesc(desc), kAE.typeFSRef: lambda desc, codecs: mactypes.File.makewithaedesc(desc), _typeFileURL: lambda desc, codecs: mactypes.File.makewithaedesc(desc), kAE.typeQDPoint: _unpackQDPoint, kAE.typeQDRectangle: _unpackQDRect, kAE.typeRGBColor: lambda desc, codecs: struct.unpack('HHH', desc.data), # ensure correct endianness in following kAE.typeType: lambda desc, codecs: AEType(fourCharCode(desc.data)), kAE.typeEnumeration: lambda desc, codecs: AEEnum(fourCharCode(desc.data)), kAE.typeProperty: lambda desc, codecs: AEProp(fourCharCode(desc.data)), kAE.typeKeyword: lambda desc, codecs: AEKey(fourCharCode(desc.data)), kAE.typeStyledText: lambda desc, codecs: _unpackUnicodeText( desc.AECoerceDesc(kAE.typeUnicodeText), codecs), kAE.typeStyledUnicodeText: lambda desc, codecs: _unpackUnicodeText( desc.AECoerceDesc(kAE.typeUnicodeText), codecs), }