scripts/transform.py (61 lines of code) (raw):
#!/usr/bin/env python
# Creates from windowsZones.xml (http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml)
# header file with mapping which can be used to map Windows Standard Times to olsen database
# timezones names and/or territory abbreviations
#
# Tryes to get windowsZones.xml by internet, another case tryes to get it by local file which must be
# pointed as first argument of script, if argument not setted, tryes to find it by relative path
# '../resources/windowsZones.xml'
import sys
import os
import string
import urllib2
from xml.dom.minidom import *
def getXmlFromFile():
strXmlFile = '../resources/windowsZones.xml'
if len(sys.argv) > 2 :
strXmlFile = sys.argv[2]
xml = parse(strXmlFile)
print '//Obtained from local file'
return xml
def getXmlFromWeb():
strUrl = 'http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml'
try:
response = urllib2.urlopen(strUrl)
xml = parseString(response.read())
print '//Obtained by internet from ', strUrl
except urllib2.URLError:
xml = getXmlFromFile()
return xml
def getXml():
print '//Generated from windowsZones.xml'
if len(sys.argv) > 1 :
if sys.argv[1] == "--remote":
return getXmlFromWeb()
return getXmlFromFile()
def parseMapZone(mapZone):
strType = mapZone._attrs['type'].value
strOther = mapZone._attrs['other'].value
strTerritory = mapZone._attrs['territory'].value
strTypes = string.split(strType, ' ')
strMapZones = []
for strZoneType in strTypes :
strMapZones.append('{"' + strOther + '", "' + strTerritory + '", "' +\
strZoneType + '"}')
strTypes
strMapZone = string.join(strMapZones, ',\n')
return strMapZone
def parseMapZones(xml):
strMapZones = []
mapZones = xml.getElementsByTagName('mapZone')
for mapZone in mapZones :
strMapZones.append(parseMapZone(mapZone))
mapZones
strMapZonesJoined = string.join(strMapZones, ',\n')
return strMapZonesJoined, len(mapZones)
def help():
print 'usage: ', sys.argv[0], ' [--remote| --local [local xml file]]'
print '// --- do not edit it manualy! File generated by scripts/transform.py!'
print 'struct tz_unicode_mapping {const char *other; const char* territory; const char* type;};'
print 'const struct tz_unicode_mapping tz_unicode_map[] = {'
zonesCount = 0
try:
zonesStr, zonesCount = parseMapZones(getXml())
print zonesStr
except :
print '#error Cant generate timezones mapping watch the script ' +\
os.path.abspath(sys.argv[0])
print '};'
print 'const size_t tz_unicode_map_size = ', zonesCount, ';\n'