1871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryefrom fontTools.misc.py23 import * 2871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryefrom fontTools.misc import sstruct 3871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryefrom fontTools.misc.textTools import safeEval 4871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryefrom ._h_e_a_d import mac_epoch_diff 5871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryefrom . import DefaultTable 6871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryeimport time 7871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryeimport calendar 8871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 9871495aff5fa8a31949eed240cb1253026f7c0e1Denis JacqueryeFFTMFormat = """ 10871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye > # big endian 11871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye version: I 12871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye FFTimeStamp: Q 13871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye sourceCreated: Q 14871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye sourceModified: Q 15871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye""" 16871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 17871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacqueryeclass table_F_F_T_M_(DefaultTable.DefaultTable): 18871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 19871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye def decompile(self, data, ttFont): 20871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye dummy, rest = sstruct.unpack2(FFTMFormat, data, self) 21871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 22871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye def compile(self, ttFont): 23871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye data = sstruct.pack(FFTMFormat, self) 24871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye return data 25871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 26871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye def toXML(self, writer, ttFont): 27871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye writer.comment("FontForge's timestamp, font source creation and modification dates") 28871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye writer.newline() 29871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye formatstring, names, fixes = sstruct.getformat(FFTMFormat) 30871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye for name in names: 31871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = getattr(self, name) 32871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye if name in ("FFTimeStamp", "sourceCreated", "sourceModified"): 33871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye try: 34871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = time.asctime(time.gmtime(max(0, value + mac_epoch_diff))) 35871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye except ValueError: 36871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = time.asctime(time.gmtime(0)) 37871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye writer.simpletag(name, value=value) 38871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye writer.newline() 39871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye 40871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye def fromXML(self, name, attrs, content, ttFont): 41871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = attrs["value"] 42871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye if name in ("FFTimeStamp", "sourceCreated", "sourceModified"): 43871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = calendar.timegm(time.strptime(value)) - mac_epoch_diff 44871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye else: 45871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye value = safeEval(value) 46871495aff5fa8a31949eed240cb1253026f7c0e1Denis Jacquerye setattr(self, name, value)