#!/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 "};"