| #!/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="http://unicode.org/repos/cldr/trunk/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 XP, namely:" |
| echo "" |
| echo " Armenian Standard Time" |
| echo " Mexico Standard Time" |
| echo " Mexico Standard Time 2" |
| echo "" |
| echo " as well as the still (Windows 8.1) available" |
| 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 " It also doesn't contain some of the deprecated country codes used in older" |
| echo " OSes, namely:" |
| echo "" |
| echo " SP (Serbian, proposed) used in XP" |
| echo " CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista" |
| echo " " |
| echo " While these are apparently old, they are required here to get a complete" |
| echo " mapping on all supported OSes. */" |
| 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"Armenian Standard Time", L"AM", L"Asia/Yerevan" },' |
| echo ' { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" },' |
| echo ' { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" },' |
| 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"Mexico Standard Time", L"", L"America/Mexico_City" },' |
| echo ' { L"Mexico Standard Time 2", L"", L"America/Mazatlan" },' |
| 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" },' |
| } | sort -d |
| echo "};" |