diff --git a/lib/modules/Calendar.pmod/TZnames.pmod b/lib/modules/Calendar.pmod/TZnames.pmod index 0e36c57f70236f9eaf1afd8a330cf7c3ffa8ab7e..e32c30f972beb394f4d73c9da748ec9671058e10 100644 --- a/lib/modules/Calendar.pmod/TZnames.pmod +++ b/lib/modules/Calendar.pmod/TZnames.pmod @@ -1,11 +1,31 @@ // ---------------------------------------------------------------- // Timezone names // -// NOTE: this file is generated by mkrules.pike; -// please do not edit manually /Mirar +// this file is created half-manually // ---------------------------------------------------------------- -mapping _module_value= +//! module Calendar +//! submodule TZnames +//! This module contains listnings of available timezones, +//! in some different ways +//! +//! constant mapping(string:array(string)) zones +//! This constant is a mapping that can be +//! used to loop over to get all the region-based +//! timezones. +//! +//! It looks like this: +//! <pre> +//! ([ "America": ({ "Los_Angeles", "Chicago", <i>[...]</i> }), +//! "Europe": ({ "Stockholm", <i>[...]</i> }), +//! <i>[...]</i> }), +//! </pre> +//! +//! note: +//! Loading all the timezones can take some time, since +//! they are generated and compiled on the fly. + +mapping zones= ([ "America": ({"Scoresbysund","Godthab","Thule","New_York","Chicago", "Denver","Los_Angeles","Juneau","Yakutat","Anchorage", @@ -84,3 +104,520 @@ mapping _module_value= "Hobart","Melbourne","Sydney","Broken_Hill","Lord_Howe"}), ]); +// this is used to dwim timezone + +//! constant mapping(string:array(string)) abbr2zones +//! This mapping is used to look up abbreviation +//! to the possible regional zones. +//! +//! It looks like this: +//! <pre> +//! ([ "CET": ({ "Europe/Stockholm", <i>[...]</i> }), +//! "CST": ({ "America/Chicago", "Australia/Adelaide", <i>[...]</i> }), +//! <i>[...]</i> }), +//! </pre> +//! +//! note: +//! Just because it's noted "CST" doesn't mean it's a +//! unique timezone. There is about 7 *different* timezones that +//! uses "CST" as abbreviation; not at the same time, +//! though, so the DWIM routines checks this before +//! it's satisfied. Same with some other timezones. +//! +//! For most timezones, there is a number of region timezones that for the +//! given time are equal. This is because region timezones include rules +//! about local summer time shifts and possible historic shifts. + +mapping abbr2zones= +([ + "ACST": ({"America/Porto_Acre"}), + "ACT": ({"America/Porto_Acre"}), + "ADDT": ({"America/Pangnirtung"}), + "ADMT": ({"Africa/Asmera", "Africa/Addis_Ababa"}), + "ADT": ({"Atlantic/Bermuda", "Asia/Baghdad", "America/Thule", + "America/Goose_Bay", "America/Halifax", "America/Glace_Bay", + "America/Pangnirtung", "America/Barbados", "America/Martinique"}), + "AFT": ({"Asia/Kabul"}), + "AHDT": ({"America/Anchorage"}), + "AHST": ({"America/Anchorage"}), + "AHWT": ({"America/Anchorage"}), + "AKDT": ({"America/Juneau", "America/Yakutat", "America/Anchorage", + "America/Nome"}), + "AKST": ({"Asia/Aqtobe", "America/Juneau", "America/Yakutat", + "America/Anchorage", "America/Nome"}), + "AKT": ({"Asia/Aqtobe"}), + "AKTST": ({"Asia/Aqtobe"}), + "AKWT": ({"America/Juneau", "America/Yakutat", "America/Anchorage", + "America/Nome"}), + "ALMST": ({"Asia/Almaty"}), + "ALMT": ({"Asia/Almaty"}), + "AMST": ({"Asia/Yerevan", "America/Cuiaba", "America/Porto_Velho", + "America/Boa_Vista", "America/Manaus"}), + "AMT": ({"Europe/Athens", "Europe/Amsterdam", "Asia/Yerevan", + "Africa/Asmera", "America/Cuiaba", "America/Porto_Velho", + "America/Boa_Vista", "America/Manaus", "America/Asuncion"}), + "ANAMT": ({"Asia/Anadyr"}), + "ANAST": ({"Asia/Anadyr"}), + "ANAT": ({"Asia/Anadyr"}), + "ANT": ({"America/Aruba", "America/Curacao"}), + "AQTST": ({"Asia/Aqtobe", "Asia/Aqtau"}), + "AQTT": ({"Asia/Aqtobe", "Asia/Aqtau"}), + "ARST": ({"Antarctica/Palmer", "America/Buenos_Aires", "America/Rosario", + "America/Cordoba", "America/Jujuy", "America/Catamarca", + "America/Mendoza"}), + "ART": ({"Antarctica/Palmer", "America/Buenos_Aires", "America/Rosario", + "America/Cordoba", "America/Jujuy", "America/Catamarca", + "America/Mendoza"}), + "ASHST": ({"Asia/Ashkhabad"}), + "ASHT": ({"Asia/Ashkhabad"}), + "AST": ({"Atlantic/Bermuda", "Asia/Bahrain", "Asia/Baghdad", "Asia/Kuwait", + "Asia/Qatar", "Asia/Riyadh", "Asia/Aden", "America/Thule", + "America/Goose_Bay", "America/Halifax", "America/Glace_Bay", + "America/Pangnirtung", "America/Anguilla", "America/Antigua", + "America/Barbados", "America/Dominica", "America/Santo_Domingo", + "America/Grenada", "America/Guadeloupe", "America/Martinique", + "America/Montserrat", "America/Puerto_Rico", "America/St_Kitts", + "America/St_Lucia", "America/Miquelon", "America/St_Vincent", + "America/Tortola", "America/St_Thomas", "America/Aruba", + "America/Curacao", "America/Port_of_Spain"}), + "AWT": ({"America/Puerto_Rico"}), + "AZOST": ({"Atlantic/Azores"}), + "AZOT": ({"Atlantic/Azores"}), + "AZST": ({"Asia/Baku"}), + "AZT": ({"Asia/Baku"}), + "BAKST": ({"Asia/Baku"}), + "BAKT": ({"Asia/Baku"}), + "BDT": ({"Asia/Dacca", "America/Nome", "America/Adak"}), + "BEAT": ({"Africa/Nairobi", "Africa/Mogadishu", "Africa/Kampala"}), + "BEAUT": ({"Africa/Nairobi", "Africa/Dar_es_Salaam", "Africa/Kampala"}), + "BMT": ({"Europe/Brussels", "Europe/Chisinau", "Europe/Tiraspol", + "Europe/Bucharest", "Europe/Zurich", "Asia/Baghdad", + "Asia/Bangkok", "Africa/Banjul", "America/Barbados", + "America/Bogota"}), + "BNT": ({"Asia/Brunei"}), + "BORT": ({"Asia/Ujung_Pandang", "Asia/Kuching"}), + "BOST": ({"America/La_Paz"}), + "BOT": ({"America/La_Paz"}), + "BRST": ({"America/Belem", "America/Fortaleza", "America/Araguaina", + "America/Maceio", "America/Sao_Paulo"}), + "BRT": ({"America/Belem", "America/Fortaleza", "America/Araguaina", + "America/Maceio", "America/Sao_Paulo"}), + "BST": ({"Europe/London", "Europe/Belfast", "Europe/Dublin", + "Europe/Gibraltar", "Pacific/Pago_Pago", "Pacific/Midway", + "America/Nome", "America/Adak"}), + "BTT": ({"Asia/Thimbu"}), + "BURT": ({"Asia/Dacca", "Asia/Rangoon", "Asia/Calcutta"}), + "BWT": ({"America/Nome", "America/Adak"}), + "CANT": ({"Atlantic/Canary"}), + "CAST": ({"Africa/Gaborone", "Africa/Khartoum"}), + "CAT": ({"Africa/Gaborone", "Africa/Bujumbura", "Africa/Lubumbashi", + "Africa/Blantyre", "Africa/Maputo", "Africa/Windhoek", + "Africa/Kigali", "Africa/Khartoum", "Africa/Lusaka", + "Africa/Harare", "America/Anchorage"}), + "CCT": ({"Indian/Cocos"}), + "CDDT": ({"America/Rankin_Inlet"}), + "CDT": ({"Asia/Harbin", "Asia/Shanghai", "Asia/Chungking", "Asia/Urumqi", + "Asia/Kashgar", "Asia/Taipei", "Asia/Macao", "America/Chicago", + "America/Indianapolis", "America/Indiana/Marengo", + "America/Indiana/Knox", "America/Indiana/Vevay", + "America/Louisville", "America/Menominee", "America/Rainy_River", + "America/Winnipeg", "America/Pangnirtung", "America/Iqaluit", + "America/Rankin_Inlet", "America/Cambridge_Bay", "America/Cancun", + "America/Mexico_City", "America/Chihuahua", "America/Belize", + "America/Costa_Rica", "America/Havana", "America/El_Salvador", + "America/Guatemala", "America/Tegucigalpa", "America/Managua"}), + "CEST": ({"Europe/Tirane", "Europe/Andorra", "Europe/Vienna", + "Europe/Minsk", "Europe/Brussels", "Europe/Sofia", + "Europe/Prague", "Europe/Copenhagen", "Europe/Tallinn", + "Europe/Berlin", "Europe/Gibraltar", "Europe/Athens", + "Europe/Budapest", "Europe/Rome", "Europe/Riga", "Europe/Vaduz", + "Europe/Vilnius", "Europe/Luxembourg", "Europe/Malta", + "Europe/Chisinau", "Europe/Tiraspol", "Europe/Monaco", + "Europe/Amsterdam", "Europe/Oslo", "Europe/Warsaw", + "Europe/Lisbon", "Europe/Kaliningrad", "Europe/Madrid", + "Europe/Stockholm", "Europe/Zurich", "Europe/Kiev", + "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol", + "Europe/Belgrade", "Africa/Algiers", "Africa/Tripoli", + "Africa/Tunis", "Africa/Ceuta"}), + "CET": ({"Europe/Tirane", "Europe/Andorra", "Europe/Vienna", "Europe/Minsk", + "Europe/Brussels", "Europe/Sofia", "Europe/Prague", + "Europe/Copenhagen", "Europe/Tallinn", "Europe/Berlin", + "Europe/Gibraltar", "Europe/Athens", "Europe/Budapest", + "Europe/Rome", "Europe/Riga", "Europe/Vaduz", "Europe/Vilnius", + "Europe/Luxembourg", "Europe/Malta", "Europe/Chisinau", + "Europe/Tiraspol", "Europe/Monaco", "Europe/Amsterdam", + "Europe/Oslo", "Europe/Warsaw", "Europe/Lisbon", + "Europe/Kaliningrad", "Europe/Madrid", "Europe/Stockholm", + "Europe/Zurich", "Europe/Kiev", "Europe/Uzhgorod", + "Europe/Zaporozhye", "Europe/Simferopol", "Europe/Belgrade", + "Africa/Algiers", "Africa/Tripoli", "Africa/Casablanca", + "Africa/Tunis", "Africa/Ceuta"}), + "CGST": ({"America/Scoresbysund"}), + "CGT": ({"America/Scoresbysund"}), + "CHDT": ({"America/Belize"}), + "CHUT": ({"Asia/Chungking"}), + "CJT": ({"Asia/Tokyo"}), + "CKHST": ({"Pacific/Rarotonga"}), + "CKT": ({"Pacific/Rarotonga"}), + "CLST": ({"Antarctica/Palmer", "America/Santiago"}), + "CLT": ({"Antarctica/Palmer", "America/Santiago"}), + "CMT": ({"Europe/Copenhagen", "Europe/Chisinau", "Europe/Tiraspol", + "America/St_Lucia", "America/Buenos_Aires", "America/Rosario", + "America/Cordoba", "America/Jujuy", "America/Catamarca", + "America/Mendoza", "America/Caracas"}), + "COST": ({"America/Bogota"}), + "COT": ({"America/Bogota"}), + "CST": ({"Asia/Harbin", "Asia/Shanghai", "Asia/Chungking", "Asia/Urumqi", + "Asia/Kashgar", "Asia/Taipei", "Asia/Macao", "Asia/Jayapura", + "Australia/Darwin", "Australia/Adelaide", "Australia/Broken_Hill", + "America/Chicago", "America/Indianapolis", + "America/Indiana/Marengo", "America/Indiana/Knox", + "America/Indiana/Vevay", "America/Louisville", "America/Detroit", + "America/Menominee", "America/Rainy_River", "America/Winnipeg", + "America/Regina", "America/Swift_Current", "America/Pangnirtung", + "America/Iqaluit", "America/Rankin_Inlet", "America/Cambridge_Bay", + "America/Cancun", "America/Mexico_City", "America/Chihuahua", + "America/Hermosillo", "America/Mazatlan", "America/Belize", + "America/Costa_Rica", "America/Havana", "America/El_Salvador", + "America/Guatemala", "America/Tegucigalpa", "America/Managua"}), + "CUT": ({"Europe/Zaporozhye"}), + "CVST": ({"Atlantic/Cape_Verde"}), + "CVT": ({"Atlantic/Cape_Verde"}), + "CWT": ({"America/Chicago", "America/Indianapolis", + "America/Indiana/Marengo", "America/Indiana/Knox", + "America/Indiana/Vevay", "America/Louisville", + "America/Menominee"}), + "CXT": ({"Indian/Christmas"}), + "DACT": ({"Asia/Dacca"}), + "DAVT": ({"Antarctica/Davis"}), + "DDUT": ({"Antarctica/DumontDUrville"}), + "DMT": ({"Europe/Belfast", "Europe/Dublin"}), + "DUSST": ({"Asia/Dushanbe"}), + "DUST": ({"Asia/Dushanbe"}), + "EASST": ({"Pacific/Easter"}), + "EAST": ({"Indian/Antananarivo", "Pacific/Easter"}), + "EAT": ({"Indian/Comoro", "Indian/Antananarivo", "Indian/Mayotte", + "Africa/Djibouti", "Africa/Asmera", "Africa/Addis_Ababa", + "Africa/Nairobi", "Africa/Mogadishu", "Africa/Khartoum", + "Africa/Dar_es_Salaam", "Africa/Kampala"}), + "ECT": ({"Pacific/Galapagos", "America/Guayaquil"}), + "EDDT": ({"America/Iqaluit"}), + "EDT": ({"America/New_York", "America/Indianapolis", + "America/Indiana/Marengo", "America/Indiana/Vevay", + "America/Louisville", "America/Detroit", "America/Montreal", + "America/Thunder_Bay", "America/Nipigon", "America/Pangnirtung", + "America/Iqaluit", "America/Cancun", "America/Nassau", + "America/Santo_Domingo", "America/Port-au-Prince", + "America/Jamaica", "America/Grand_Turk"}), + "EEMT": ({"Europe/Minsk", "Europe/Chisinau", "Europe/Tiraspol", + "Europe/Kaliningrad", "Europe/Moscow"}), + "EEST": ({"Europe/Minsk", "Europe/Sofia", "Europe/Tallinn", + "Europe/Helsinki", "Europe/Athens", "Europe/Riga", + "Europe/Vilnius", "Europe/Chisinau", "Europe/Tiraspol", + "Europe/Warsaw", "Europe/Bucharest", "Europe/Kaliningrad", + "Europe/Moscow", "Europe/Istanbul", "Europe/Kiev", + "Europe/Uzhgorod", "Europe/Zaporozhye", "Asia/Nicosia", + "Asia/Amman", "Asia/Beirut", "Asia/Gaza", "Asia/Damascus", + "Africa/Cairo"}), + "EET": ({"Europe/Minsk", "Europe/Sofia", "Europe/Tallinn", + "Europe/Helsinki", "Europe/Athens", "Europe/Riga", + "Europe/Vilnius", "Europe/Chisinau", "Europe/Tiraspol", + "Europe/Warsaw", "Europe/Bucharest", "Europe/Kaliningrad", + "Europe/Moscow", "Europe/Istanbul", "Europe/Kiev", + "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol", + "Asia/Nicosia", "Asia/Amman", "Asia/Beirut", "Asia/Gaza", + "Asia/Damascus", "Africa/Cairo", "Africa/Tripoli"}), + "EGST": ({"America/Scoresbysund"}), + "EGT": ({"Atlantic/Jan_Mayen", "America/Scoresbysund"}), + "EHDT": ({"America/Santo_Domingo"}), + "EST": ({"Australia/Brisbane", "Australia/Lindeman", "Australia/Hobart", + "Australia/Melbourne", "Australia/Sydney", "Australia/Broken_Hill", + "Australia/Lord_Howe", "America/New_York", "America/Chicago", + "America/Indianapolis", "America/Indiana/Marengo", + "America/Indiana/Knox", "America/Indiana/Vevay", + "America/Louisville", "America/Detroit", "America/Menominee", + "America/Montreal", "America/Thunder_Bay", "America/Nipigon", + "America/Pangnirtung", "America/Iqaluit", "America/Cancun", + "America/Antigua", "America/Nassau", "America/Cayman", + "America/Santo_Domingo", "America/Port-au-Prince", + "America/Jamaica", "America/Managua", "America/Panama", + "America/Grand_Turk"}), + "EWT": ({"America/New_York", "America/Indianapolis", + "America/Indiana/Marengo", "America/Indiana/Vevay", + "America/Louisville", "America/Detroit", "America/Jamaica"}), + "FFMT": ({"America/Martinique"}), + "FJST": ({"Pacific/Fiji"}), + "FJT": ({"Pacific/Fiji"}), + "FKST": ({"Atlantic/Stanley"}), + "FKT": ({"Atlantic/Stanley"}), + "FMT": ({"Atlantic/Madeira", "Africa/Freetown"}), + "FNST": ({"America/Noronha"}), + "FNT": ({"America/Noronha"}), + "FRUST": ({"Asia/Bishkek"}), + "FRUT": ({"Asia/Bishkek"}), + "GALT": ({"Pacific/Galapagos"}), + "GAMT": ({"Pacific/Gambier"}), + "GBGT": ({"America/Guyana"}), + "GEST": ({"Asia/Tbilisi"}), + "GET": ({"Asia/Tbilisi"}), + "GFT": ({"America/Cayenne"}), + "GHST": ({"Africa/Accra"}), + "GILT": ({"Pacific/Tarawa"}), + "GMT": ({"Atlantic/St_Helena", "Atlantic/Reykjavik", "Europe/London", + "Europe/Belfast", "Europe/Dublin", "Europe/Gibraltar", + "Africa/Porto-Novo", "Africa/Ouagadougou", "Africa/Abidjan", + "Africa/Malabo", "Africa/Banjul", "Africa/Accra", "Africa/Conakry", + "Africa/Bissau", "Africa/Monrovia", "Africa/Bamako", + "Africa/Timbuktu", "Africa/Nouakchott", "Africa/Niamey", + "Africa/Sao_Tome", "Africa/Dakar", "Africa/Freetown", + "Africa/Lome"}), + "GST": ({"Atlantic/South_Georgia", "Asia/Bahrain", "Asia/Muscat", + "Asia/Qatar", "Asia/Dubai", "Pacific/Guam"}), + "GYT": ({"America/Guyana"}), + "HADT": ({"America/Adak"}), + "HART": ({"Asia/Harbin"}), + "HAST": ({"America/Adak"}), + "HAWT": ({"America/Adak"}), + "HDT": ({"Pacific/Honolulu"}), + "HKST": ({"Asia/Hong_Kong"}), + "HKT": ({"Asia/Hong_Kong"}), + "HMT": ({"Atlantic/Azores", "Europe/Helsinki", "Asia/Dacca", + "Asia/Calcutta", "America/Havana"}), + "HOVST": ({"Asia/Hovd"}), + "HOVT": ({"Asia/Hovd"}), + "HST": ({"Pacific/Johnston", "Pacific/Honolulu"}), + "HWT": ({"Pacific/Honolulu"}), + "ICT": ({"Asia/Phnom_Penh", "Asia/Vientiane", "Asia/Bangkok", + "Asia/Saigon"}), + "IDDT": ({"Asia/Jerusalem", "Asia/Gaza"}), + "IDT": ({"Asia/Jerusalem", "Asia/Gaza"}), + "IHST": ({"Asia/Colombo"}), + "IMT": ({"Europe/Sofia", "Europe/Istanbul", "Asia/Irkutsk"}), + "IOT": ({"Indian/Chagos"}), + "IRKMT": ({"Asia/Irkutsk"}), + "IRKST": ({"Asia/Irkutsk"}), + "IRKT": ({"Asia/Irkutsk"}), + "IRST": ({"Asia/Tehran"}), + "IRT": ({"Asia/Tehran"}), + "ISST": ({"Atlantic/Reykjavik"}), + "IST": ({"Atlantic/Reykjavik", "Europe/Belfast", "Europe/Dublin", + "Asia/Dacca", "Asia/Thimbu", "Asia/Calcutta", "Asia/Jerusalem", + "Asia/Katmandu", "Asia/Karachi", "Asia/Gaza", "Asia/Colombo"}), + "JAYT": ({"Asia/Jayapura"}), + "JMT": ({"Atlantic/St_Helena", "Asia/Jerusalem"}), + "JST": ({"Asia/Rangoon", "Asia/Dili", "Asia/Ujung_Pandang", "Asia/Tokyo", + "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Manila", + "Asia/Singapore", "Pacific/Nauru"}), + "KART": ({"Asia/Karachi"}), + "KAST": ({"Asia/Kashgar"}), + "KDT": ({"Asia/Seoul"}), + "KGST": ({"Asia/Bishkek"}), + "KGT": ({"Asia/Bishkek"}), + "KMT": ({"Europe/Vilnius", "Europe/Kiev", "America/Cayman", + "America/Jamaica", "America/St_Vincent", "America/Grand_Turk"}), + "KOST": ({"Pacific/Kosrae"}), + "KRAMT": ({"Asia/Krasnoyarsk"}), + "KRAST": ({"Asia/Krasnoyarsk"}), + "KRAT": ({"Asia/Krasnoyarsk"}), + "KST": ({"Asia/Seoul", "Asia/Pyongyang"}), + "KUYMT": ({"Europe/Samara"}), + "KUYST": ({"Europe/Samara"}), + "KUYT": ({"Europe/Samara"}), + "KWAT": ({"Pacific/Kwajalein"}), + "LHST": ({"Australia/Lord_Howe"}), + "LINT": ({"Pacific/Kiritimati"}), + "LKT": ({"Asia/Colombo"}), + "LPMT": ({"America/La_Paz"}), + "LRT": ({"Africa/Monrovia"}), + "LST": ({"Europe/Riga"}), + "M": ({"Europe/Moscow"}), + "MADST": ({"Atlantic/Madeira"}), + "MAGMT": ({"Asia/Magadan"}), + "MAGST": ({"Asia/Magadan"}), + "MAGT": ({"Asia/Magadan"}), + "MALT": ({"Asia/Kuala_Lumpur", "Asia/Singapore"}), + "MART": ({"Pacific/Marquesas"}), + "MAWT": ({"Antarctica/Mawson"}), + "MDDT": ({"America/Cambridge_Bay", "America/Yellowknife", + "America/Inuvik"}), + "MDST": ({"Europe/Moscow"}), + "MDT": ({"America/Denver", "America/Phoenix", "America/Boise", + "America/Regina", "America/Swift_Current", "America/Edmonton", + "America/Cambridge_Bay", "America/Yellowknife", "America/Inuvik", + "America/Chihuahua", "America/Hermosillo", "America/Mazatlan"}), + "MHT": ({"Pacific/Majuro", "Pacific/Kwajalein"}), + "MMT": ({"Indian/Maldives", "Europe/Minsk", "Europe/Moscow", "Asia/Rangoon", + "Asia/Ujung_Pandang", "Asia/Colombo", "Pacific/Easter", + "Africa/Monrovia", "America/Managua", "America/Montevideo"}), + "MOST": ({"Asia/Macao"}), + "MOT": ({"Asia/Macao"}), + "MPT": ({"Pacific/Saipan"}), + "MSK": ({"Europe/Minsk", "Europe/Tallinn", "Europe/Riga", "Europe/Vilnius", + "Europe/Chisinau", "Europe/Kiev", "Europe/Uzhgorod", + "Europe/Zaporozhye", "Europe/Simferopol"}), + "MST": ({"Europe/Moscow", "America/Denver", "America/Phoenix", + "America/Boise", "America/Regina", "America/Swift_Current", + "America/Edmonton", "America/Dawson_Creek", + "America/Cambridge_Bay", "America/Yellowknife", "America/Inuvik", + "America/Mexico_City", "America/Chihuahua", "America/Hermosillo", + "America/Mazatlan", "America/Tijuana"}), + "MUT": ({"Indian/Mauritius"}), + "MVT": ({"Indian/Maldives"}), + "MWT": ({"America/Denver", "America/Phoenix", "America/Boise"}), + "MYT": ({"Asia/Kuala_Lumpur", "Asia/Kuching"}), + "NCST": ({"Pacific/Noumea"}), + "NCT": ({"Pacific/Noumea"}), + "NDT": ({"America/Nome", "America/Adak", "America/St_Johns", + "America/Goose_Bay"}), + "NEGT": ({"America/Paramaribo"}), + "NFT": ({"Pacific/Norfolk"}), + "NMT": ({"Pacific/Norfolk"}), + "NOVMT": ({"Asia/Novosibirsk"}), + "NOVST": ({"Asia/Novosibirsk"}), + "NOVT": ({"Asia/Novosibirsk"}), + "NPT": ({"Asia/Katmandu"}), + "NRT": ({"Pacific/Nauru"}), + "NST": ({"Europe/Amsterdam", "Pacific/Pago_Pago", "Pacific/Midway", + "America/Nome", "America/Adak", "America/St_Johns", + "America/Goose_Bay"}), + "NUT": ({"Pacific/Niue"}), + "NWT": ({"America/Nome", "America/Adak"}), + "NZDT": ({"Antarctica/McMurdo"}), + "NZHDT": ({"Pacific/Auckland"}), + "NZST": ({"Antarctica/McMurdo", "Pacific/Auckland"}), + "OMSMT": ({"Asia/Omsk"}), + "OMSST": ({"Asia/Omsk"}), + "OMST": ({"Asia/Omsk"}), + "PDDT": ({"America/Inuvik", "America/Whitehorse", "America/Dawson"}), + "PDT": ({"America/Los_Angeles", "America/Juneau", "America/Boise", + "America/Vancouver", "America/Dawson_Creek", "America/Inuvik", + "America/Whitehorse", "America/Dawson", "America/Tijuana"}), + "PEST": ({"America/Lima"}), + "PET": ({"America/Lima"}), + "PETMT": ({"Asia/Kamchatka"}), + "PETST": ({"Asia/Kamchatka"}), + "PETT": ({"Asia/Kamchatka"}), + "PGT": ({"Pacific/Port_Moresby"}), + "PHOT": ({"Pacific/Enderbury"}), + "PHST": ({"Asia/Manila"}), + "PHT": ({"Asia/Manila"}), + "PKT": ({"Asia/Karachi"}), + "PMDT": ({"America/Miquelon"}), + "PMMT": ({"Pacific/Port_Moresby"}), + "PMST": ({"America/Miquelon"}), + "PMT": ({"Antarctica/DumontDUrville", "Europe/Prague", "Europe/Paris", + "Europe/Monaco", "Africa/Algiers", "Africa/Tunis", + "America/Panama", "America/Paramaribo"}), + "PNT": ({"Pacific/Pitcairn"}), + "PONT": ({"Pacific/Ponape"}), + "PPMT": ({"America/Port-au-Prince"}), + "PST": ({"Pacific/Pitcairn", "America/Los_Angeles", "America/Juneau", + "America/Boise", "America/Vancouver", "America/Dawson_Creek", + "America/Inuvik", "America/Whitehorse", "America/Dawson", + "America/Hermosillo", "America/Mazatlan", "America/Tijuana"}), + "PWT": ({"Pacific/Palau", "America/Los_Angeles", "America/Juneau", + "America/Boise", "America/Tijuana"}), + "PYST": ({"America/Asuncion"}), + "PYT": ({"America/Asuncion"}), + "QMT": ({"America/Guayaquil"}), + "RET": ({"Indian/Reunion"}), + "RMT": ({"Atlantic/Reykjavik", "Europe/Rome", "Europe/Riga", + "Asia/Rangoon"}), + "S": ({"Europe/Moscow"}), + "SAMMT": ({"Europe/Samara"}), + "SAMST": ({"Europe/Samara", "Asia/Samarkand"}), + "SAMT": ({"Europe/Samara", "Asia/Samarkand", "Pacific/Pago_Pago", + "Pacific/Apia"}), + "SAST": ({"Africa/Maseru", "Africa/Windhoek", "Africa/Johannesburg", + "Africa/Mbabane"}), + "SBT": ({"Pacific/Guadalcanal"}), + "SCT": ({"Indian/Mahe"}), + "SDMT": ({"America/Santo_Domingo"}), + "SGT": ({"Asia/Singapore"}), + "SHEST": ({"Asia/Aqtau"}), + "SHET": ({"Asia/Aqtau"}), + "SJMT": ({"America/Costa_Rica"}), + "SLST": ({"Africa/Freetown"}), + "SMT": ({"Atlantic/Stanley", "Europe/Stockholm", "Europe/Simferopol", + "Asia/Phnom_Penh", "Asia/Vientiane", "Asia/Kuala_Lumpur", + "Asia/Singapore", "Asia/Saigon", "America/Santiago"}), + "SRT": ({"America/Paramaribo"}), + "SST": ({"Pacific/Pago_Pago", "Pacific/Midway"}), + "SVEMT": ({"Asia/Yekaterinburg"}), + "SVEST": ({"Asia/Yekaterinburg"}), + "SVET": ({"Asia/Yekaterinburg"}), + "SWAT": ({"Africa/Windhoek"}), + "SYOT": ({"Antarctica/Syowa"}), + "TAHT": ({"Pacific/Tahiti"}), + "TASST": ({"Asia/Samarkand", "Asia/Tashkent"}), + "TAST": ({"Asia/Samarkand", "Asia/Tashkent"}), + "TBIST": ({"Asia/Tbilisi"}), + "TBIT": ({"Asia/Tbilisi"}), + "TBMT": ({"Asia/Tbilisi"}), + "TFT": ({"Indian/Kerguelen"}), + "TJT": ({"Asia/Dushanbe"}), + "TKT": ({"Pacific/Fakaofo"}), + "TMST": ({"Asia/Ashkhabad"}), + "TMT": ({"Europe/Tallinn", "Asia/Tehran", "Asia/Ashkhabad"}), + "TOST": ({"Pacific/Tongatapu"}), + "TOT": ({"Pacific/Tongatapu"}), + "TPT": ({"Asia/Dili"}), + "TRST": ({"Europe/Istanbul"}), + "TRT": ({"Europe/Istanbul"}), + "TRUT": ({"Pacific/Truk"}), + "TVT": ({"Pacific/Funafuti"}), + "ULAST": ({"Asia/Ulaanbaatar"}), + "ULAT": ({"Asia/Ulaanbaatar"}), + "URUT": ({"Asia/Urumqi"}), + "UYHST": ({"America/Montevideo"}), + "UYT": ({"America/Montevideo"}), + "UZST": ({"Asia/Samarkand", "Asia/Tashkent"}), + "UZT": ({"Asia/Samarkand", "Asia/Tashkent"}), + "VET": ({"America/Caracas"}), + "VLAMT": ({"Asia/Vladivostok"}), + "VLAST": ({"Asia/Vladivostok"}), + "VLAT": ({"Asia/Vladivostok"}), + "VUST": ({"Pacific/Efate"}), + "VUT": ({"Pacific/Efate"}), + "WAKT": ({"Pacific/Wake"}), + "WARST": ({"America/Jujuy", "America/Mendoza"}), + "WART": ({"America/Jujuy", "America/Mendoza"}), + "WAST": ({"Africa/Ndjamena", "Africa/Windhoek"}), + "WAT": ({"Africa/Luanda", "Africa/Porto-Novo", "Africa/Douala", + "Africa/Bangui", "Africa/Ndjamena", "Africa/Kinshasa", + "Africa/Brazzaville", "Africa/Malabo", "Africa/Libreville", + "Africa/Banjul", "Africa/Conakry", "Africa/Bissau", + "Africa/Bamako", "Africa/Nouakchott", "Africa/El_Aaiun", + "Africa/Windhoek", "Africa/Niamey", "Africa/Lagos", "Africa/Dakar", + "Africa/Freetown"}), + "WEST": ({"Atlantic/Faeroe", "Atlantic/Azores", "Atlantic/Madeira", + "Atlantic/Canary", "Europe/Brussels", "Europe/Luxembourg", + "Europe/Monaco", "Europe/Lisbon", "Europe/Madrid", + "Africa/Algiers", "Africa/Casablanca", "Africa/Ceuta"}), + "WET": ({"Atlantic/Faeroe", "Atlantic/Azores", "Atlantic/Madeira", + "Atlantic/Canary", "Europe/Andorra", "Europe/Brussels", + "Europe/Luxembourg", "Europe/Monaco", "Europe/Lisbon", + "Europe/Madrid", "Africa/Algiers", "Africa/Casablanca", + "Africa/El_Aaiun", "Africa/Ceuta"}), + "WFT": ({"Pacific/Wallis"}), + "WGST": ({"America/Godthab"}), + "WGT": ({"America/Godthab"}), + "WMT": ({"Europe/Vilnius", "Europe/Warsaw"}), + "WST": ({"Antarctica/Casey", "Pacific/Apia", "Australia/Perth"}), + "YAKMT": ({"Asia/Yakutsk"}), + "YAKST": ({"Asia/Yakutsk"}), + "YAKT": ({"Asia/Yakutsk"}), + "YAPT": ({"Pacific/Yap"}), + "YDDT": ({"America/Whitehorse", "America/Dawson"}), + "YDT": ({"America/Yakutat", "America/Whitehorse", "America/Dawson"}), + "YEKMT": ({"Asia/Yekaterinburg"}), + "YEKST": ({"Asia/Yekaterinburg"}), + "YEKT": ({"Asia/Yekaterinburg"}), + "YERST": ({"Asia/Yerevan"}), + "YERT": ({"Asia/Yerevan"}), + "YST": ({"America/Yakutat", "America/Whitehorse", "America/Dawson"}), + "YWT": ({"America/Yakutat"}), + "___": ({"Antarctica/Casey", "Antarctica/Davis", "Antarctica/Mawson", + "Antarctica/DumontDUrville", "Antarctica/Syowa", + "Antarctica/Palmer", "Antarctica/McMurdo", "Indian/Kerguelen"}), +]); diff --git a/lib/modules/Calendar.pmod/Timezone.pmod b/lib/modules/Calendar.pmod/Timezone.pmod index fa1735b8ec9a0beee1987e7ceaa3f56660a45c5c..9084742eff7d878a6bd4696d453c2dcc8b91a321 100644 --- a/lib/modules/Calendar.pmod/Timezone.pmod +++ b/lib/modules/Calendar.pmod/Timezone.pmod @@ -201,11 +201,12 @@ static private Ruleset.Timezone _magic_timezone(string tz) if (!runtime_timezone_compiler) runtime_timezone_compiler=Runtime_timezone_compiler(); - int t=time(1); - float t1=time(t); +// int t=time(1); +// float t1=time(t); +// runtime_timezone_compiler->find_rule("EU"); object p=runtime_timezone_compiler->find_zone(tz); - float t2=time(t); - werror("%O\n",t2-t1); +// float t2=time(t); +// werror("%O\n",t2-t1); if (p) return p; if (sscanf(tz,"%s+%f",z,d)==2) @@ -543,7 +544,7 @@ class Runtime_timezone_compiler mapping r2=([]); Shift last=Shift(({"0","?",0,"u",0,"?"})); Shift first=last; - string res=""; + array res=({}); if (!r2[NUL_YEAR]) r2[NUL_YEAR]=({last}); @@ -551,19 +552,17 @@ class Runtime_timezone_compiler for (;y<=INF_YEAR; y++) [r2[y],last]=mkperiods(rules[y],last,first); - werror("%O\n",last); - res+= - TZrules_init+ - "import __Calendar_mkzone;\n" - " inherit TZRules;\n" - " array(array(string|int)) jd_year_periods(int jd)\n" - " {\n" - " [int y,int yjd,int leap]=gregorian_yjd(jd);\n" - " switch (y)\n" - " {\n"; + ({TZrules_init+ + "import __Calendar_mkzone;\n" + " inherit TZRules;\n" + " array(array(string|int)) jd_year_periods(int jd)\n" + " {\n" + " [int y,int yjd,int leap]=gregorian_yjd(jd);\n" + " switch (y)\n" + " {\n"}); - string s="",t; + array sr=({}); int y,mn=min(@indices(rules-(<NUL_YEAR>))); @@ -579,7 +578,7 @@ class Runtime_timezone_compiler foreach ((array)my,int y2) m_delete(r2,y2); - string t=""; + array tr=({}); int y0=min(@(array)my); int y2=max(@(array)my); @@ -594,54 +593,54 @@ class Runtime_timezone_compiler if (y0==NUL_YEAR) { if (my[INF_YEAR]) - t+=" default: // .."+max(y1,mn-1)+ - " and ���..\n"; + tr+=({" default: // .."+max(y1,mn-1), + " and ���..\n"}); else - t+=" default: // .."+max(y1,mn-1)+":\n"; + tr+=({" default: // .."+max(y1,mn-1), + ":\n"}); } else if (y0==y1) - t+=" case "+y0+":\n"; + tr+=({" case "+y0+":\n"}); else if (y1==2050) { - if (!my[NUL_YEAR]) t+=" case "+y0+"..:\n"; - else t=replace(t,"���",(string)y0); + if (!my[NUL_YEAR]) + tr+=({" case "+y0,"..:\n"}); + else + tr[0]=replace(tr[0],"���",(string)y0); } else - t+=" case "+y0+".."+y1+":\n"; + tr+=({" case "+y0,".."+y1+":\n"}); y0=y1; } int lastoffset=0; - string res=" "*12+"return ({"; + tr+=({" "*12,"return ({"}); foreach (z,Shift s) { - res+=s->dump(lastoffset,my)+("\n"+" "*21); + tr+=({s->dump(lastoffset,my),"\n"," "*21}); lastoffset=s->offset; } - array resa=res/"\n"; - resa[-2]=replace(resa[-2],", ","});"); - - t+=resa[..sizeof(resa)-2]*"\n"+"\n"; - s=t+s; + tr[-3]=replace(tr[-3],", ","});"); + sr=tr[..sizeof(tr)-2]+sr; } - res+=(s+ - " }\n" - " }\n"); - - res+=("\n" - "array(string) rule_s=\n"); + res+=sr+ + ({" }\n" + " }\n" + "\n" + "array(string) rule_s=\n"}); multiset tzname=(<>); foreach (values(rules),array(Shift)|object(Shift) s) if (arrayp(s)) foreach (s,Shift s) tzname[s->s]=1; else tzname[s->s]=1; - res+=("({"+map((array)tzname, - lambda(string s) { return sprintf("%O",s); })*"," - +"});\n"); + res+=({"({",map((array)tzname, + lambda(string s) { return sprintf("%O",s); })*",", + "});\n", + sprintf("string name=%O;\n",id)}); - return res; + return res*""; } int join_periods(array s,array t,int y0,int y1) @@ -796,20 +795,17 @@ class Runtime_timezone_compiler string dump() { - string res=""; + array(string) res=({}); if (!sizeof(rules)) - { - res+=("// skipped %O due to errors\n",id); - return res; - } + error("no rules for %O\n",id); - res+="import __Calendar_mkzone;\n"; + res+=({"import __Calendar_mkzone;\n"}); if (sizeof(rules)==1) // simple zone { - res+=("object thezone="+rules[0][4]+";\n"); - return res; + res+=({"object thezone=",rules[0][4],";\n"}); + return res*""; } mapping rname=([]); @@ -819,11 +815,11 @@ class Runtime_timezone_compiler if (rname[a[4]]) a[6]=rname[a[4]]; else a[6]=rname[a[4]]="tz"+n++; - res+=( "inherit TZHistory;\n" - "Ruleset.Timezone "+ - sort(values(rname))*","+";\n" - "Ruleset.Timezone whatrule(int ux)\n" - "{\n" ); + res+=({ "inherit TZHistory;\n" + "Ruleset.Timezone ", + sort(values(rname))*",",";\n" + "Ruleset.Timezone whatrule(int ux)\n" + "{\n" }); foreach (rules,array a) { @@ -838,17 +834,16 @@ class Runtime_timezone_compiler array last=rules[-1]; foreach (reverse(rules)[1..],array a) { - res+=sprintf(" if (ux>=%s) // %s %s\n" - " return %s || (%s=%s);\n", - a[5],a[3],last[7],last[6],last[6],last[4]); + res+=({sprintf(" if (ux>=%s) // %s %s\n" + " return %s || (%s=%s);\n", + a[5],a[3],last[7],last[6],last[6],last[4])}); last=a; } if (last[7]!="") - res+=sprintf(" // %s\n",last[7]); - res+=sprintf(" return %s || (%s=%s);\n", - last[6],last[6],last[4]); - - res+=("}\n"); + res+=({sprintf(" // %s\n",last[7])}); + res+=({sprintf(" return %s || (%s=%s);\n", + last[6],last[6],last[4])+ + "}\n"}); multiset tzname=(<>); foreach (rules,array a) @@ -861,19 +856,16 @@ class Runtime_timezone_compiler tzname[sprintf(a[2],s)]=1; } - res+=("array(string) zone_s=({"+map((array)tzname, - lambda(string s) { return sprintf("%O",s); })*"," - +"});\n"); - - res+="array(int) shifts=({"; + res+=({"array(string) zone_s=({"+ + map((array)tzname, + lambda(string s) { return sprintf("%O",s); })*",", + "});\n", + "array(int) shifts=({"}); foreach (rules[..sizeof(rules)-2],array a) - { - res+=a[5]+","; - } - res+="});\n"; - + res+=({a[5]+","}); + res+=({"});\n"}); - return res; + return res*""; } } @@ -888,6 +880,7 @@ class Runtime_timezone_compiler "etcetera", "europe", "northamerica", + "southamerica", "pacificnew", "systemv", }); @@ -921,7 +914,8 @@ class Runtime_timezone_compiler "Ruleset":Ruleset, "ZEROSHIFT":({0,0,0,""})]); -#define RTTZC_DEBUG +// #define RTTZC_DEBUG +// #define RTTZC_TIMING object find_zone(string s) { @@ -932,7 +926,7 @@ class Runtime_timezone_compiler if (!all_rules) all_rules=get_all_rules(); -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING int t=time(1); float t1=time(t); #endif @@ -972,13 +966,19 @@ class Runtime_timezone_compiler return find_zone(a); n++; } - string c=z->dump(); - -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float t2=time(t); werror("find %O: %O\n",s,t2-t1); #endif + string c=z->dump(); + +#ifdef RTTZC_TIMING + float td=time(t); + werror("dump %O: %O\n",s,td-t2); + float td=time(t); +#endif + #ifdef RTTZC_DEBUG werror("%s\n",c); #endif @@ -989,14 +989,16 @@ class Runtime_timezone_compiler object zo=p(); if (zo->thezone) zo=zo->thezone; -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float t3=time(t); - werror("compile %O: %O\n",s,t3-t2); + werror("compile %O: %O\n",s,t3-td); #endif return zone_cache[s]=zo; } +// #define RTTZC_TIMING + program find_rule(string s) { s=UNFIXID(s); @@ -1007,7 +1009,7 @@ class Runtime_timezone_compiler if (!all_rules) all_rules=get_all_rules(); -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING int t=time(1); float t1=time(t); #endif @@ -1031,19 +1033,20 @@ class Runtime_timezone_compiler string a,string b,string q)==5 && a==s) { r->add(b); -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float tf=time(t); werror("find %O at: %O\n",s,tf-t1); + float tq=time(t); #endif foreach (q/"\n",string line) if (sscanf(line,"Rule%*[ \t]%[^ \t]%*[ \t]%s",a,b)==4 && a==s) - r->add(b); + r->add(b); else break; // end of zone -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float tf=time(t); - werror("done %O at: %O\n",s,tf-t1); + werror("load %O: %O\n",s,tf-tq); #endif break; } @@ -1054,16 +1057,17 @@ class Runtime_timezone_compiler #ifdef RTTZC_DEBUG werror("%s\n",c); #endif -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float t2=time(t); werror("find %O: %O\n",s,t2-t1); + float t2=time(t); #endif add_constant("__Calendar_mkzone",mkzonemod); program p=compile_string(c); -#ifdef RTTZC_DEBUG +#ifdef RTTZC_TIMING float t3=time(t); werror("compile %O: %O\n",s,t3-t2); #endif