|
14 | 14 | from fontTools.misc.py23 import *
|
15 | 15 | from fontTools.misc.py23 import PY2, PY3
|
16 | 16 |
|
| 17 | +import os |
17 | 18 | import time
|
| 19 | +import calendar |
18 | 20 | import unicodedata
|
19 | 21 | from fontTools.misc.textTools import binary2num
|
20 | 22 | from fontTools.misc.arrayTools import unionRect
|
@@ -60,21 +62,19 @@ def styleMapFamilyNameFallback(info):
|
60 | 62 | # head
|
61 | 63 |
|
62 | 64 | def dateStringForNow():
|
63 |
| - year, month, day, hour, minute, second, weekDay, yearDay, isDST = time.localtime() |
64 |
| - year = str(year) |
65 |
| - month = str(month).zfill(2) |
66 |
| - day = str(day).zfill(2) |
67 |
| - hour = str(hour).zfill(2) |
68 |
| - minute = str(minute).zfill(2) |
69 |
| - second = str(second).zfill(2) |
70 |
| - return "%s/%s/%s %s:%s:%s" % (year, month, day, hour, minute, second) |
| 65 | + return time.strftime("%Y/%m/%d %H:%M:%S", time.gmtime()) |
71 | 66 |
|
72 | 67 |
|
73 | 68 | def openTypeHeadCreatedFallback(info):
|
74 | 69 | """
|
75 |
| - Fallback to now. |
| 70 | + Fallback to the environment variable SOURCE_DATE_EPOCH if set, otherwise |
| 71 | + now. |
76 | 72 | """
|
77 |
| - return dateStringForNow() |
| 73 | + if "SOURCE_DATE_EPOCH" in os.environ: |
| 74 | + t = datetime.utcfromtimestamp(int(os.environ["SOURCE_DATE_EPOCH"])) |
| 75 | + return t.strftime("%Y/%m/%d %H:%M:%S") |
| 76 | + else: |
| 77 | + return dateStringForNow() |
78 | 78 |
|
79 | 79 |
|
80 | 80 | # hhea
|
@@ -622,9 +622,9 @@ def intListToNum(intList, start, length):
|
622 | 622 |
|
623 | 623 | def dateStringToTimeValue(date):
|
624 | 624 | try:
|
625 |
| - t = calendar.timegm(date, "%Y/%m/%d %H:%M:%S") |
626 |
| - return long(time.mktime(t)) |
627 |
| - except OverflowError: |
| 625 | + t = time.strptime(date, "%Y/%m/%d %H:%M:%S") |
| 626 | + return long(calendar.timegm(t)) |
| 627 | + except ValueError: |
628 | 628 | return long(0)
|
629 | 629 |
|
630 | 630 |
|
|
0 commit comments