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)