1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#!/bin/bash
#
# tzset-from-unicode.org
#
# Fetch XML file containing mapping of Windows timezone keynames and countries
# per ISO 3166-1 to POSIX timezones from unicode.org.
#
# Create the table file as required by tzset.c.
#
ZONES_FILE="https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml"
echo "/*"
echo " This file gets auto-generated by the script tzmap-from-unicode.org via"
echo " a Makefile rule. To regenerate the file, just call 'make tzmap'. It"
echo " fetches the file"
echo ""
echo " ${ZONES_FILE}"
echo ""
echo " using wget and converts it into the tzmap table required by tzget.c."
echo " Regenerating might be necessary on a regular basis..."
echo ""
echo " This table maps Windows timezone keynames and countries per ISO 3166-1 to"
echo " POSIX-compatible timezone IDs."
echo ""
echo " The mapping from unicode.org is just a bit incomplete. It doesn't contain"
echo " a few timezones available on Windows 8.1:"
echo ""
echo " E. Europe Standard Time"
echo " Mid-Atlantic Standard Time"
echo " Kamchatka Standard Time"
echo ""
echo " as well as a few combinations which got a new Windows timezone name"
echo ""
echo " Eastern Standard Time/TC"
echo " Egypt Standard Time/PS"
echo " Greenwich Standard Time/EH"
echo " Hawaiian Standard Time/TK"
echo " Kaliningrad Standard Time/BY"
echo " SA Pacific Standard Time/HT "
echo " South Africa Standard Time/LY"
echo "*/"
echo ""
echo "struct"
echo "{"
echo " PCWSTR win_tzkey;"
echo " PCWSTR country;"
echo " PCWSTR posix_tzid;"
echo "} const tzmap[] ="
echo "{"
wget -O - "${ZONES_FILE}" | \
{
sed -n -e 's#territory="001"#territory=""#
s#Asia/Calcutta#Asia/Kolkata#
s#.*mapZone other=\("[^"]*"\) territory=\("[^"]*"\) type=\("[^"]*"\).*# { L\1, L\2, L\3 },#p'
echo ' { L"E. Europe Standard Time", L"", L"Asia/Nicosia" },'
echo ' { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" },'
echo ' { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" },'
echo ' { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" },'
echo ' { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" },'
echo ' { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" },'
echo ' { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" },'
echo ' { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" },'
echo ' { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" },'
echo ' { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" },'
echo ' { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" },'
} | LC_ALL=C sort -d
echo "};"
|