Creates a map between Windows and Olson timezone names.

  Args:
    windows_zones_xml: The CLDR XML mapping.

  Yields:
    (win32_name, olson_name, comment)

def create_win32tz_map(windows_zones_xml):
  """Creates a map between Windows and Olson timezone names.

  Args:
    windows_zones_xml: The CLDR XML mapping.

  Yields:
    (win32_name, olson_name, comment)
  """
  coming_comment = None
  win32_name = None
  territory = None
  parser = genshi.input.XMLParser(StringIO(windows_zones_xml))
  map_zones = {}
  zone_comments = {}

  for kind, data, _ in parser:
    if kind == genshi.core.START and str(data[0]) == "mapZone":
      attrs = data[1]
      win32_name, territory, olson_name = (
          attrs.get("other"), attrs.get("territory"), attrs.get("type").split(" ")[0])

      map_zones[(win32_name, territory)] = olson_name
    elif kind == genshi.core.END and str(data) == "mapZone" and win32_name:
      if coming_comment:
        zone_comments[(win32_name, territory)] = coming_comment
        coming_comment = None
      win32_name = None
    elif kind == genshi.core.COMMENT:
      coming_comment = data.strip()
    elif kind in (genshi.core.START, genshi.core.END, genshi.core.COMMENT):
      coming_comment = None

  for win32_name, territory in sorted(map_zones):
    yield (win32_name, territory, map_zones[(win32_name, territory)],
           zone_comments.get((win32_name, territory), None))