#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Authoritative source for Chromium OS region/locale configuration.

Run this module to display all known regions (use --help to see options).
"""

from __future__ import print_function

import argparse
import collections
import json
import re
import sys

import yaml


# The regular expression to check values in Region.keyboards and Region.locales.
# Keyboards should come with xkb: protocol, or the input methods (ime:, m17n:).
# Examples: xkb:us:intl:eng, ime:ime:zh-t:cangjie, xkb:us:altgr-intl:eng
KEYBOARD_PATTERN = re.compile(r'^xkb:\w+:[\w-]*:\w+$|'
                              r'^(ime|m17n|t13n):[\w:-]+$')
# Locale should be a combination of language and location.
# Examples: en-US, ja.
LOCALE_PATTERN = re.compile(r'^(\w+)(-[A-Z0-9]+)?$')


class Enum(frozenset):
  """An enumeration type.

  Usage:
    To create a enum object:
      dummy_enum = Enum(['A', 'B', 'C'])

    To access a enum object, use:
      dummy_enum.A
      dummy_enum.B
  """

  def __getattr__(self, name):
    if name in self:
      return name
    raise AttributeError


class RegionException(Exception):
  """Exception in Region handling."""
  pass


def MakeList(value):
  """Converts the given value to a list.

  Returns:
    A list of elements from "value" if it is iterable (except string);
    otherwise, a list contains only one element.
  """
  if (isinstance(value, collections.Iterable) and
      not isinstance(value, basestring)):
    return list(value)
  return [value]


class Region(object):
  """Comprehensive, standard locale configuration per country/region.

  See :ref:`regions-values` for detailed information on how to set these values.
  """
  # pylint gets confused by some of the docstrings.
  # pylint: disable=C0322

  # ANSI = US-like
  # ISO = UK-like
  # JIS = Japanese
  # KS = Korean (see http://crosbug.com/p/50753 for why this is not used yet)
  # ABNT2 = Brazilian (like ISO but with an extra key to the left of the
  #   right shift key)
  KeyboardMechanicalLayout = Enum(['ANSI', 'ISO', 'JIS', 'KS', 'ABNT2'])

  region_code = None
  """A unique identifier for the region.  This may be a lower-case
  `ISO 3166-1 alpha-2 code
  <http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ (e.g., ``us``),
  a variant within an alpha-2 entity (e.g., ``ca.fr``), or an
  identifier for a collection of countries or entities (e.g.,
  ``latam-es-419`` or ``nordic``).  See :ref:`region-codes`.

  Note that ``uk`` is not a valid identifier; ``gb`` is used as it is
  the real alpha-2 code for the UK."""

  keyboards = None
  """A list of keyboard layout identifiers (e.g., ``xkb:us:intl:eng``
  or ``m17n:ar``). This field was designed to be the physical keyboard layout
  in the beginning, and then becomes a list of OOBE keyboard selection, which
  then includes non-physical layout elements like input methods (``ime:``).
  To avoid confusion, physical layout is now defined by
  :py:attr:`keyboard_mechanical_layout`, and this is reserved for logical
  layouts.

  This is identical to the legacy VPD ``keyboard_layout`` value."""

  time_zones = None
  """A list of default `tz database time zone
  <http://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`_
  identifiers (e.g., ``America/Los_Angeles``). See
  `timezone_settings.cc <http://goo.gl/WSVUeE>`_ for supported time
  zones.

  This is identical to the legacy VPD ``initial_timezone`` value."""

  locales = None
  """A list of default locale codes (e.g., ``en-US``); see
  `l10n_util.cc <http://goo.gl/kVkht>`_ for supported locales.

  This is identital to the legacy VPD ``initial_locale`` field."""

  keyboard_mechanical_layout = None
  """The keyboard's mechanical layout (``ANSI`` [US-like], ``ISO``
  [UK-like], ``JIS`` [Japanese], ``ABNT2`` [Brazilian] or ``KS`` [Korean])."""

  description = None
  """A human-readable description of the region.
  This defaults to :py:attr:`region_code` if not set."""

  notes = None
  """Implementation notes about the region.  This may be None."""

  regulatory_domain = None
  """An ISO 3166-1 alpha 2 upper-cased two-letter region code for setting
  Wireless regulatory. See crosbug.com/p/38745 for more details.

  When omitted, this will derive from region_code."""

  confirmed = None
  """An optional boolean flag to indicate if the region data is confirmed."""

  FIELDS = ['region_code', 'description', 'keyboards',
            'time_zones', 'locales', 'keyboard_mechanical_layout',
            'regulatory_domain']
  """Names of fields that define the region."""

  def __init__(self, region_code, keyboards, time_zones, locales,
               keyboard_mechanical_layout, description=None, notes=None,
               regdomain=None):
    """Constructor.

    Args:
      region_code: See :py:attr:`region_code`.
      keyboards: See :py:attr:`keyboards`.  A single string is accepted for
        backward compatibility.
      time_zones: See :py:attr:`time_zones`.
      locales: See :py:attr:`locales`.  A single string is accepted
        for backward compatibility.
      keyboard_mechanical_layout: See :py:attr:`keyboard_mechanical_layout`.
      description: See :py:attr:`description`.
      notes: See :py:attr:`notes`.
      regdomain: See :py:attr:`regulatory_domain`.
    """

    def regdomain_from_region(region):
      if region.find('.') >= 0:
        region = region[:region.index('.')]
      if len(region) == 2:
        return region.upper()
      return None

    # Quick check: should be 'gb', not 'uk'
    if region_code == 'uk':
      raise RegionException("'uk' is not a valid region code (use 'gb')")

    self.region_code = region_code
    self.keyboards = MakeList(keyboards)
    self.time_zones = MakeList(time_zones)
    self.locales = MakeList(locales)
    self.keyboard_mechanical_layout = keyboard_mechanical_layout
    self.description = description or region_code
    self.notes = notes
    self.regulatory_domain = (regdomain or regdomain_from_region(region_code))
    self.confirmed = None

    for f in (self.keyboards, self.locales):
      assert all(isinstance(x, str) for x in f), (
          'Expected a list of strings, not %r' % f)
    for f in self.keyboards:
      assert KEYBOARD_PATTERN.match(f), (
          'Keyboard pattern %r does not match %r' % (
              f, KEYBOARD_PATTERN.pattern))
    for f in self.locales:
      assert LOCALE_PATTERN.match(f), (
          'Locale %r does not match %r' % (
              f, LOCALE_PATTERN.pattern))
    assert (self.regulatory_domain and
            len(self.regulatory_domain) == 2 and
            self.regulatory_domain.upper() == self.regulatory_domain), (
                'Regulatory domain settings error for region %s' % region_code)

  def __repr__(self):
    return 'Region(%s)' % (', '.join([getattr(self, x) for x in self.FIELDS]))

  def GetFieldsDict(self):
    """Returns a dict of all substantive fields.

    notes and description are excluded.
    """
    return dict((k, getattr(self, k)) for k in self.FIELDS)

KML = Region.KeyboardMechanicalLayout
REGIONS_LIST = [
    Region(
        'au', 'xkb:us::eng', 'Australia/Sydney', 'en-AU', KML.ANSI,
        'Australia'),
    Region(
        'be', 'xkb:be::nld', 'Europe/Brussels', 'en-GB', KML.ISO,
        'Belgium', (
            'Flemish (Belgian Dutch) keyboard; British English language for '
            'neutrality')),
    Region(
        'br', 'xkb:br::por', 'America/Sao_Paulo', 'pt-BR', KML.ABNT2,
        'Brazil (ABNT2)', (
            'ABNT2 = ABNT NBR 10346 variant 2. This is the preferred layout '
            'for Brazil. ABNT2 is mostly an ISO layout, but it 12 keys between '
            'the shift keys; see http://goo.gl/twA5tq')),
    Region(
        'br.abnt', 'xkb:br::por', 'America/Sao_Paulo', 'pt-BR', KML.ISO,
        'Brazil (ABNT)', (
            'Like ABNT2, but lacking the extra key to the left of the right '
            'shift key found in that layout. ABNT2 (the "br" region) is '
            'preferred to this layout')),
    Region(
        'br.usintl', 'xkb:us:intl:eng', 'America/Sao_Paulo', 'pt-BR', KML.ANSI,
        'Brazil (US Intl)', (
            'Brazil with US International keyboard layout. ABNT2 ("br") and '
            'ABNT1 ("br.abnt1 ") are both preferred to this.')),
    Region(
        'ca.ansi', 'xkb:us::eng', 'America/Toronto', 'en-CA', KML.ANSI,
        'Canada (US keyboard)', (
            'Canada with US (ANSI) keyboard. Only allowed if there are '
            'separate US English, Canadian English, and French SKUs. '
            'Not for en/fr hybrid ANSI keyboards; for that you would want '
            'ca.hybridansi. See http://goto/cros-canada')),
    Region(
        'ca.fr', 'xkb:ca::fra', 'America/Toronto', 'fr-CA', KML.ISO,
        'Canada (French keyboard)', (
            'Canadian French (ISO) keyboard. The most common configuration for '
            'Canadian French SKUs.  See http://goto/cros-canada')),
    Region(
        'ca.hybrid', 'xkb:ca:eng:eng', 'America/Toronto', 'en-CA', KML.ISO,
        'Canada (hybrid ISO)', (
            'Canada with hybrid (ISO) xkb:ca:eng:eng + xkb:ca::fra keyboard, '
            'defaulting to English language and keyboard.  Used only if there '
            'needs to be a single SKU for all of Canada.  See '
            'http://goto/cros-canada')),
    Region(
        'ca.hybridansi', 'xkb:ca:eng:eng', 'America/Toronto', 'en-CA', KML.ANSI,
        'Canada (hybrid ANSI)', (
            'Canada with hybrid (ANSI) xkb:ca:eng:eng + xkb:ca::fra keyboard, '
            'defaulting to English language and keyboard.  Used only if there '
            'needs to be a single SKU for all of Canada.  See '
            'http://goto/cros-canada')),
    Region(
        'ca.multix', 'xkb:ca:multix:fra', 'America/Toronto', 'fr-CA', KML.ISO,
        'Canada (multilingual)', (
            "Canadian Multilingual keyboard; you probably don't want this. See "
            'http://goto/cros-canada')),
    Region(
        'ch', 'xkb:ch::ger', 'Europe/Zurich', 'de-CH', KML.ISO,
        'Switzerland', (
            'German keyboard')),
    Region(
        'de', 'xkb:de::ger', 'Europe/Berlin', 'de', KML.ISO,
        'Germany'),
    Region(
        'es', 'xkb:es::spa', 'Europe/Madrid', 'es', KML.ISO,
        'Spain'),
    Region(
        'fi', 'xkb:fi::fin', 'Europe/Helsinki', 'fi', KML.ISO,
        'Finland'),
    Region(
        'fr', 'xkb:fr::fra', 'Europe/Paris', 'fr', KML.ISO,
        'France'),
    Region(
        'gb', 'xkb:gb:extd:eng', 'Europe/London', 'en-GB', KML.ISO,
        'UK'),
    Region(
        'ie', 'xkb:gb:extd:eng', 'Europe/Dublin', 'en-GB', KML.ISO,
        'Ireland'),
    Region(
        'in', 'xkb:us::eng', 'Asia/Calcutta', 'en-US', KML.ANSI,
        'India'),
    Region(
        'it', 'xkb:it::ita', 'Europe/Rome', 'it', KML.ISO,
        'Italy'),
    Region(
        'latam-es-419', 'xkb:es::spa', 'America/Mexico_City', 'es-419', KML.ISO,
        'Hispanophone Latin America', (
            'Spanish-speaking countries in Latin America, using the Iberian '
            '(Spain) Spanish keyboard, which is increasingly dominant in '
            'Latin America. Known to be correct for '
            'Chile, Colombia, Mexico, Peru; '
            'still unconfirmed for other es-419 countries. The old Latin '
            'American layout (xkb:latam::spa) has not been approved; before '
            'using that you must seek review through http://goto/vpdsettings. '
            'See also http://goo.gl/Iffuqh. Note that 419 is the UN M.49 '
            'region code for Latin America'), 'MX'),
    Region(
        'my', 'xkb:us::eng', 'Asia/Kuala_Lumpur', 'ms', KML.ANSI,
        'Malaysia'),
    Region(
        'nl', 'xkb:us:intl:eng', 'Europe/Amsterdam', 'nl', KML.ANSI,
        'Netherlands'),
    Region(
        'nordic', 'xkb:se::swe', 'Europe/Stockholm', 'en-US', KML.ISO,
        'Nordics', (
            'Unified SKU for Sweden, Norway, and Denmark.  This defaults '
            'to Swedish keyboard layout, but starts with US English language '
            'for neutrality.  Use if there is a single combined SKU for Nordic '
            'countries.'), 'SE'),
    Region(
        'nz', 'xkb:us::eng', 'Pacific/Auckland', 'en-NZ', KML.ANSI,
        'New Zealand'),
    Region(
        'ph', 'xkb:us::eng', 'Asia/Manila', 'en-US', KML.ANSI,
        'Philippines'),
    Region(
        'ru', ['xkb:us::eng', 'xkb:ru::rus'], 'Europe/Moscow', 'ru', KML.ANSI,
        'Russia', (
            'For R31+ only; R30 and earlier must use US keyboard for login')),
    Region(
        'se', 'xkb:se::swe', 'Europe/Stockholm', 'sv', KML.ISO,
        'Sweden', (
            'Use this if there separate SKUs for Nordic countries (Sweden, '
            'Norway, and Denmark), or the device is only shipping to Sweden. '
            "If there is a single unified SKU, use 'nordic' instead.")),
    Region(
        'sg', 'xkb:us::eng', 'Asia/Singapore', 'en-GB', KML.ANSI,
        'Singapore'),
    Region(
        'us', 'xkb:us::eng', 'America/Los_Angeles', 'en-US', KML.ANSI,
        'United States'),
    Region(
        'jp', 'xkb:jp::jpn', 'Asia/Tokyo', 'ja', KML.JIS,
        'Japan'),
    Region(
        'za', 'xkb:gb:extd:eng', 'Africa/Johannesburg', 'en-ZA', KML.ISO,
        'South Africa'),
    Region(
        'ng', 'xkb:us:intl:eng', 'Africa/Lagos', 'en-GB', KML.ANSI,
        'Nigeria'),
    Region(
        'hk', ['xkb:us::eng', 'ime:zh-t:cangjie', 'ime:zh-t:quick',
               'ime:zh-t:array', 'ime:zh-t:dayi', 'ime:zh-t:zhuyin',
               'ime:zh-t:pinyin'], 'Asia/Hong_Kong', ['zh-TW', 'en-GB',
                                                      'zh-CN'], KML.ANSI,
        'Hong Kong'),
    Region(
        'gcc', ['xkb:us::eng', 'm17n:ar', 't13n:ar'], 'Asia/Riyadh', [
            'ar', 'en-GB'],
        KML.ANSI,
        'Gulf Cooperation Council (GCC)', (
            'GCC is a regional intergovernmental political and economic '
            'union consisting of all Arab states of the Persian Gulf except '
            'for Iraq. Its member states are the Islamic monarchies of '
            'Bahrain, Kuwait, Oman, Qatar, Saudi Arabia, and the United Arab '
            'Emirates.'), 'SA'),
    Region(
        'cz', ['xkb:cz::cze', 'xkb:cz:qwerty:cze'], 'Europe/Prague', [
            'cs', 'en-GB'], KML.ISO,
        'Czech Republic'),
    Region(
        'th', ['xkb:us::eng', 'm17n:th', 'm17n:th_pattajoti',
               'm17n:th_tis'], 'Asia/Bangkok', ['th', 'en-GB'], KML.ANSI,
        'Thailand'),
    Region(
        'id', 'xkb:us::ind', 'Asia/Jakarta', ['id', 'en-GB'], KML.ANSI,
        'Indonesia'),
    Region(
        'tw', ['xkb:us::eng', 'ime:zh-t:zhuyin', 'ime:zh-t:array',
               'ime:zh-t:dayi', 'ime:zh-t:cangjie', 'ime:zh-t:quick',
               'ime:zh-t:pinyin'], 'Asia/Taipei', ['zh-TW', 'en-US'], KML.ANSI,
        'Taiwan'),
    Region(
        'pl', 'xkb:pl::pol', 'Europe/Warsaw', ['pl', 'en-GB'], KML.ANSI,
        'Poland'),
    Region(
        'gr', ['xkb:us::eng', 'xkb:gr::gre', 't13n:el'], 'Europe/Athens', [
            'el', 'en-GB'], KML.ANSI,
        'Greece'),
    Region(
        'il', ['xkb:us::eng', 'xkb:il::heb', 't13n:he'], 'Asia/Jerusalem', [
            'he', 'en-US', 'ar'], KML.ANSI,
        'Israel'),
    Region(
        'pt', 'xkb:pt::por', 'Europe/Lisbon', ['pt-PT', 'en-GB'], KML.ISO,
        'Portugal'),
    Region(
        'ro', ['xkb:us::eng', 'xkb:ro::rum'], 'Europe/Bucharest', [
            'ro', 'hu', 'de', 'en-GB'], KML.ISO,
        'Romania'),
    Region(
        'kr', ['xkb:us::eng', 'ime:ko:hangul'], 'Asia/Seoul', [
            'ko', 'en-US'], KML.ANSI,
        'South Korea'),
    Region(
        'ae', 'xkb:us::eng', 'Asia/Dubai', 'ar', KML.ANSI,
        'UAE'),
    Region(
        'za.us', 'xkb:us::eng', 'Africa/Johannesburg', 'en-ZA', KML.ANSI,
        'South Africa'),
    Region(
        'vn', ['xkb:us::eng', 'm17n:vi_telex', 'm17n:vi_vni', 'm17n:vi_viqr',
               'm17n:vi_tcvn'], 'Asia/Ho_Chi_Minh', ['vi', 'en-GB', 'en-US',
                                                     'fr', 'zh-TW'], KML.ANSI,
        'Vietnam'),
    Region(
        'at', ['xkb:de::ger', 'xkb:de:neo:ger'], 'Europe/Vienna', [
            'de', 'en-GB'], KML.ISO,
        'Austria'),
    Region(
        'sk', ['xkb:us::eng', 'xkb:sk::slo'], 'Europe/Bratislava', [
            'sk', 'hu', 'cs', 'en-GB'], KML.ISO,
        'Slovakia'),
    Region(
        'ch.usintl', 'xkb:us:intl:eng', 'Europe/Zurich', 'en-US', KML.ANSI,
        'Switzerland (US Intl)', (
            'Switzerland with US International keyboard layout.')),
    Region(
        'pe', 'xkb:latam::spa', 'America/Lima', 'es-419', KML.ANSI,
        'Peru'),
    Region(
        'sa', 'xkb:us::eng', 'Asia/Riyadh', ['ar', 'en'], KML.ANSI,
        'Saudi Arabia'),
    Region(
        'mx', 'xkb:latam::spa', 'America/Mexico_City', 'es-MX', KML.ANSI,
        'Mexico'),
    Region(
        'cl', 'xkb:latam::spa', 'America/Santiago', 'es-419', KML.ANSI,
        'Chile'),
    Region(
        'kw', ['xkb:us::eng', 'm17n:ar', 't13n:ar'], 'Asia/Kuwait', [
            'ar', 'en'], KML.ANSI,
        'Kuwait'),
    Region(
        'uy', 'xkb:latam::spa', 'America/Montevideo', 'es-419', KML.ANSI,
        'Uruguay'),
    Region(
        'tr', ['xkb:tr::tur', 'xkb:tr:f:tur'], 'Europe/Istanbul', [
            'tr', 'en-GB'], KML.ISO,
        'Turkey'),
    Region(
        'ar', 'xkb:latam::spa', 'America/Argentina/Buenos_Aires', [
            'es-AR', ], KML.ISO,
        'Argentina'),
    Region(
        'gb.usext', 'xkb:us:altgr-intl:eng', 'Europe/London', 'en-GB', KML.ISO,
        'UK (US extended keyboard)', (
            'GB with US extended keyboard')),
    Region(
        'bg', ['xkb:bg::bul', 'xkb:bg:phonetic:bul'], 'Europe/Sofia', [
            'bg', 'tr', 'en-US'], KML.ANSI,
        'Bulgaria'),
    Region(
        'jp.us', 'xkb:us::eng', 'Asia/Tokyo', 'ja', KML.ANSI,
        'Japan with US keyboard'),
    Region(
        'is', 'xkb:is::ice', 'Atlantic/Reykjavik', ['is', 'en-GB'], KML.ISO,
        'Iceland'),
    ]

"""A list of :py:class:`regions.Region` objects for
all **confirmed** regions.  A confirmed region is a region whose
properties are known to be correct and valid: all contents (locale / timezone /
keyboards) are supported by Chrome."""


UNCONFIRMED_REGIONS_LIST = [
    Region(
        'bd', 'xkb:bd::ben', 'Asia/Dhaka', ['bn-BD', 'en'], KML.ANSI,
        'Bangladesh'),
    Region(
        'bf', 'xkb:bf::fra', 'Africa/Ouagadougou', 'fr-BF', KML.ANSI,
        'Burkina Faso'),
    Region(
        'ba', 'xkb:ba::bos', 'Europe/Sarajevo', 'bs', KML.ANSI,
        'Bosnia and Herzegovina'),
    Region(
        'bb', 'xkb:bb::eng', 'America/Barbados', 'en-BB', KML.ANSI,
        'Barbados'),
    Region(
        'wf', 'xkb:us::eng', 'Pacific/Wallis', ['wls', 'fud'], KML.ANSI,
        'Wallis and Futuna'),
    Region(
        'bl', 'xkb:bl::fra', 'America/St_Barthelemy', 'fr', KML.ANSI,
        'Saint Barthelemy'),
    Region(
        'bm', 'xkb:bm::eng', 'Atlantic/Bermuda', ['en-BM', 'pt'], KML.ANSI,
        'Bermuda'),
    Region(
        'bn', 'xkb:bn::msa', 'Asia/Brunei', ['ms-BN', 'en-BN'], KML.ANSI,
        'Brunei'),
    Region(
        'bo', 'xkb:latam::spa', 'America/La_Paz', ['es-419', 'qu'], KML.ANSI,
        'Bolivia'),
    Region(
        'bh', 'xkb:bh::ara', 'Asia/Bahrain', ['ar', 'en', 'fa', 'ru'], KML.ANSI,
        'Bahrain'),
    Region(
        'bi', 'xkb:bi::fra', 'Africa/Bujumbura', ['fr-BI', 'rn'], KML.ANSI,
        'Burundi'),
    Region(
        'bj', 'xkb:bj::fra', 'Africa/Porto-Novo', 'fr-BJ', KML.ANSI,
        'Benin'),
    Region(
        'bt', 'xkb:bt::dzo', 'Asia/Thimphu', 'dz', KML.ANSI,
        'Bhutan'),
    Region(
        'jm', 'xkb:jm::eng', 'America/Jamaica', 'en-JM', KML.ANSI,
        'Jamaica'),
    Region(
        'bw', 'xkb:bw::eng', 'Africa/Gaborone', ['en-BW', 'tn-BW'], KML.ANSI,
        'Botswana'),
    Region(
        'ws', 'xkb:ws::smo', 'Pacific/Apia', ['sm', 'en-WS'], KML.ANSI,
        'Samoa'),
    Region(
        'bq', 'xkb:bq::nld', 'America/Kralendijk', ['nl', 'en'], KML.ANSI,
        'Bonaire, Saint Eustatius and Saba '),
    Region(
        'bs', 'xkb:bs::eng', 'America/Nassau', 'en-BS', KML.ANSI,
        'Bahamas'),
    Region(
        'je', 'xkb:je::eng', 'Europe/Jersey', ['en', 'pt'], KML.ANSI,
        'Jersey'),
    Region(
        'by', 'xkb:by::bel', 'Europe/Minsk', ['be', 'ru'], KML.ANSI,
        'Belarus'),
    Region(
        'bz', 'xkb:bz::eng', 'America/Belize', ['en-BZ', 'es'], KML.ANSI,
        'Belize'),
    Region(
        'rw', 'xkb:rw::kin', 'Africa/Kigali', ['rw', 'en-RW'], KML.ANSI,
        'Rwanda'),
    Region(
        'rs', 'xkb:rs::srp', 'Europe/Belgrade', ['sr', 'hu', 'bs'], KML.ANSI,
        'Serbia'),
    Region(
        'tl', 'xkb:us::eng', 'Asia/Dili', ['tet', 'pt-TL', 'en'], KML.ANSI,
        'East Timor'),
    Region(
        're', 'xkb:re::fra', 'Indian/Reunion', 'fr-RE', KML.ANSI,
        'Reunion'),
    Region(
        'tm', 'xkb:tm::tuk', 'Asia/Ashgabat', ['tk', 'ru', 'uz'], KML.ANSI,
        'Turkmenistan'),
    Region(
        'tj', 'xkb:tj::tgk', 'Asia/Dushanbe', ['tg', 'ru'], KML.ANSI,
        'Tajikistan'),
    Region(
        'tk', 'xkb:us::eng', 'Pacific/Fakaofo', ['tkl', 'en-TK'], KML.ANSI,
        'Tokelau'),
    Region(
        'gw', 'xkb:gw::por', 'Africa/Bissau', ['pt-GW', 'pov'], KML.ANSI,
        'Guinea-Bissau'),
    Region(
        'gu', 'xkb:gu::eng', 'Pacific/Guam', ['en-GU', 'ch-GU'], KML.ANSI,
        'Guam'),
    Region(
        'gt', 'xkb:latam::spa', 'America/Guatemala', 'es-419', KML.ANSI,
        'Guatemala'),
    Region(
        'gs', 'xkb:gs::eng', 'Atlantic/South_Georgia', 'en', KML.ANSI,
        'South Georgia and the South Sandwich Islands'),
    Region(
        'gq', 'xkb:gq::spa', 'Africa/Malabo', ['es-419', 'fr'], KML.ANSI,
        'Equatorial Guinea'),
    Region(
        'gp', 'xkb:gp::fra', 'America/Guadeloupe', 'fr-GP', KML.ANSI,
        'Guadeloupe'),
    Region(
        'gy', 'xkb:gy::eng', 'America/Guyana', 'en-GY', KML.ANSI,
        'Guyana'),
    Region(
        'gg', 'xkb:gg::eng', 'Europe/Guernsey', ['en', 'fr'], KML.ANSI,
        'Guernsey'),
    Region(
        'gf', 'xkb:gf::fra', 'America/Cayenne', 'fr-GF', KML.ANSI,
        'French Guiana'),
    Region(
        'ge', 'xkb:ge::geo', 'Asia/Tbilisi', 'ka', KML.ANSI,
        'Georgia'),
    Region(
        'gd', 'xkb:gd::eng', 'America/Grenada', 'en-GD', KML.ANSI,
        'Grenada'),
    Region(
        'ga', 'xkb:ga::fra', 'Africa/Libreville', 'fr-GA', KML.ANSI,
        'Gabon'),
    Region(
        'sv', 'xkb:latam::spa', 'America/El_Salvador', 'es-419', KML.ANSI,
        'El Salvador'),
    Region(
        'gn', 'xkb:gn::fra', 'Africa/Conakry', 'fr-GN', KML.ANSI,
        'Guinea'),
    Region(
        'gm', 'xkb:gm::eng', 'Africa/Banjul', ['en-GM', 'mnk', 'wof'], KML.ANSI,
        'Gambia'),
    Region(
        'gl', 'xkb:gl::kal', ['America/Godthab', 'America/Danmarkshavn',
                              'America/Scoresbysund', 'America/Thule'], [
                                  'kl', 'da-GL', 'en'], KML.ANSI,
        'Greenland'),
    Region(
        'gi', 'xkb:gi::eng', 'Europe/Gibraltar', ['en-GI', 'es'], KML.ANSI,
        'Gibraltar'),
    Region(
        'gh', 'xkb:gh::eng', 'Africa/Accra', ['en-GH', 'ak', 'ee'], KML.ANSI,
        'Ghana'),
    Region(
        'om', 'xkb:om::ara', 'Asia/Muscat', ['ar', 'en', 'bal'], KML.ANSI,
        'Oman'),
    Region(
        'tn', 'xkb:tn::ara', 'Africa/Tunis', ['ar', 'fr'], KML.ANSI,
        'Tunisia'),
    Region(
        'jo', 'xkb:jo::ara', 'Asia/Amman', ['ar', 'en'], KML.ANSI,
        'Jordan'),
    Region(
        'hn', 'xkb:latam::spa', 'America/Tegucigalpa', 'es-HN', KML.ANSI,
        'Honduras'),
    Region(
        'hr', 'xkb:hr::scr', 'Europe/Zagreb', ['hr', 'en-GB'], KML.ISO,
        'Croatia'),
    Region(
        'ht', 'xkb:ht::hat', 'America/Port-au-Prince', ['ht'], KML.ANSI,
        'Haiti'),
    Region(
        'hu', ['xkb:us::eng', 'xkb:hu::hun'], 'Europe/Budapest', [
            'hu', 'en-GB'], KML.ISO,
        'Hungary'),
    Region(
        've', 'xkb:latam::spa', 'America/Caracas', 'es-419', KML.ANSI,
        'Venezuela'),
    Region(
        'pr', 'xkb:pr::eng', 'America/Puerto_Rico', ['en-PR'], KML.ANSI,
        'Puerto Rico'),
    Region(
        'ps', 'xkb:ps::ara', ['Asia/Gaza', 'Asia/Hebron'], 'ar', KML.ANSI,
        'Palestinian Territory'),
    Region(
        'pw', 'xkb:us::eng', 'Pacific/Palau', ['pau', 'sov', 'en-PW', 'tox',
                                               'ja', 'fil', 'zh'], KML.ANSI,
        'Palau'),
    Region(
        'sj', 'xkb:sj::nor', 'Arctic/Longyearbyen', ['no', 'ru'], KML.ANSI,
        'Svalbard and Jan Mayen'),
    Region(
        'py', 'xkb:latam::spa', 'America/Asuncion', ['es-419', 'gn'], KML.ANSI,
        'Paraguay'),
    Region(
        'iq', 'xkb:iq::ara', 'Asia/Baghdad', ['ar', 'ku', 'hy'], KML.ANSI,
        'Iraq'),
    Region(
        'pa', 'xkb:latam::spa', 'America/Panama', ['es-419', 'en'], KML.ANSI,
        'Panama'),
    Region(
        'pf', 'xkb:pf::fra', ['Pacific/Tahiti', 'Pacific/Marquesas',
                              'Pacific/Gambier'], ['fr-PF', 'ty'], KML.ANSI,
        'French Polynesia'),
    Region(
        'pg', 'xkb:pg::eng', ['Pacific/Port_Moresby',
                              'Pacific/Bougainville'], ['en-PG', 'ho', 'meu',
                                                        'tpi'], KML.ANSI,
        'Papua New Guinea'),
    Region(
        'pk', 'xkb:pk::urd', 'Asia/Karachi', ['ur-PK', 'en-PK', 'pa', 'sd',
                                              'ps', 'brh'], KML.ANSI,
        'Pakistan'),
    Region(
        'pn', 'xkb:pn::eng', 'Pacific/Pitcairn', 'en-PN', KML.ANSI,
        'Pitcairn'),
    Region(
        'pm', 'xkb:pm::fra', 'America/Miquelon', 'fr-PM', KML.ANSI,
        'Saint Pierre and Miquelon'),
    Region(
        'zm', 'xkb:zm::eng', 'Africa/Lusaka', ['en-ZM', 'bem', 'loz', 'lun',
                                               'lue', 'ny', 'toi'], KML.ANSI,
        'Zambia'),
    Region(
        'eh', 'xkb:eh::ara', 'Africa/El_Aaiun', ['ar', 'mey'], KML.ANSI,
        'Western Sahara'),
    Region(
        'ee', 'xkb:ee::est', 'Europe/Tallinn', ['et', 'ru', 'en-GB'], KML.ISO,
        'Estonia'),
    Region(
        'eg', 'xkb:eg::ara', 'Africa/Cairo', ['ar', 'en', 'fr'],
        KML.ANSI, 'Egypt'),
    Region(
        'ec', 'xkb:latam::spa', ['America/Guayaquil'], 'es-419', KML.ANSI,
        'Ecuador'),
    Region(
        'sb', 'xkb:sb::eng', 'Pacific/Guadalcanal', ['en-SB', 'tpi'], KML.ANSI,
        'Solomon Islands'),
    Region(
        'et', 'xkb:et::amh', 'Africa/Addis_Ababa', ['am', 'en-ET', 'om-ET',
                                                    'ti-ET'], KML.ANSI,
        'Ethiopia'),
    Region(
        'so', 'xkb:so::som', 'Africa/Mogadishu', ['so-SO', 'ar'], KML.ANSI,
        'Somalia'),
    Region(
        'zw', 'xkb:zw::eng', 'Africa/Harare', ['en-ZW', 'sn', 'nr'], KML.ANSI,
        'Zimbabwe'),
    Region(
        'er', 'xkb:er::aar', 'Africa/Asmara', ['aa-ER', 'ar', 'tig', 'kun',
                                               'ti-ER'], KML.ANSI,
        'Eritrea'),
    Region(
        'me', 'xkb:me::srp', 'Europe/Podgorica', ['sr', 'hu', 'bs', 'sq', 'hr',
                                                  'rom'], KML.ANSI,
        'Montenegro'),
    Region(
        'md', 'xkb:md::ron', 'Europe/Chisinau', ['ro', 'ru', 'gag'], KML.ANSI,
        'Moldova'),
    Region(
        'mg', 'xkb:mg::fra', 'Indian/Antananarivo', ['fr-MG', 'mg'], KML.ANSI,
        'Madagascar'),
    Region(
        'mf', 'xkb:mf::fra', 'America/Marigot', 'fr', KML.ANSI, 'Saint Martin'),
    Region(
        'ma', 'xkb:ma::ara', 'Africa/Casablanca', ['ar', 'fr'], KML.ANSI,
        'Morocco'),
    Region(
        'mc', 'xkb:mc::fra', 'Europe/Monaco', ['fr-MC', 'en', 'it'], KML.ANSI,
        'Monaco'),
    Region(
        'uz', 'xkb:uz::uzb', ['Asia/Samarkand', 'Asia/Tashkent'],
        ['uz', 'ru', 'tg'], KML.ANSI, 'Uzbekistan'),
    Region(
        'mm', 'xkb:mm::mya', 'Asia/Rangoon', 'my', KML.ANSI, 'Myanmar',
        None),
    Region(
        'ml', 'xkb:ml::fra', 'Africa/Bamako', ['fr-ML', 'bm'], KML.ANSI,
        'Mali'),
    Region(
        'mo', 'xkb:mo::zho', 'Asia/Macau', ['zh', 'zh-MO', 'pt'], KML.ANSI,
        'Macao'),
    Region(
        'mn', 'xkb:mn::mon', ['Asia/Ulaanbaatar', 'Asia/Hovd',
                              'Asia/Choibalsan'], ['mn', 'ru'], KML.ANSI,
        'Mongolia'),
    Region(
        'mh', 'xkb:mh::mah', ['Pacific/Majuro'], ['mh' 'en-MH'], KML.ANSI,
        'Marshall Islands'),
    Region(
        'mk', 'xkb:mk::mkd', 'Europe/Skopje', ['mk', 'sq', 'tr'], KML.ANSI,
        'Macedonia'),
    Region(
        'mu', 'xkb:mu::eng', 'Indian/Mauritius', ['en-MU', 'bho'], KML.ANSI,
        'Mauritius'),
    Region(
        'mt', ['xkb:us::eng'], 'Europe/Malta', ['mt', 'en-GB'], KML.ISO,
        'Malta'),
    Region(
        'mw', 'xkb:mw::nya', 'Africa/Blantyre', ['ny', 'yao', 'tum'], KML.ANSI,
        'Malawi'),
    Region(
        'mv', 'xkb:mv::div', 'Indian/Maldives', ['dv', 'en'], KML.ANSI,
        'Maldives'),
    Region(
        'mq', 'xkb:mq::fra', 'America/Martinique', 'fr-MQ', KML.ANSI,
        'Martinique'),
    Region(
        'mp', 'xkb:us::eng', 'Pacific/Saipan', ['fil', 'tl', 'zh', 'ch-MP',
                                                'en-MP'], KML.ANSI,
        'Northern Mariana Islands'),
    Region(
        'ms', 'xkb:ms::eng', 'America/Montserrat', 'en-MS', KML.ANSI,
        'Montserrat'),
    Region(
        'mr', 'xkb:mr::ara', 'Africa/Nouakchott', ['ar', 'fuc', 'snk', 'fr',
                                                   'mey', 'wo'], KML.ANSI,
        'Mauritania'),
    Region(
        'im', 'xkb:im::eng', 'Europe/Isle_of_Man', ['en', 'gv'], KML.ANSI,
        'Isle of Man'),
    Region(
        'ug', 'xkb:ug::eng', 'Africa/Kampala', ['en-UG', 'lg', 'ar'], KML.ANSI,
        'Uganda'),
    Region(
        'tz', 'xkb:tz::swa', 'Africa/Dar_es_Salaam', ['sw-TZ', 'en'], KML.ANSI,
        'Tanzania'),
    Region(
        'io', 'xkb:io::eng', 'Indian/Chagos', 'en-IO', KML.ANSI,
        'British Indian Ocean Territory'),
    Region(
        'sh', 'xkb:sh::eng', 'Atlantic/St_Helena', 'en-SH', KML.ANSI,
        'Saint Helena'),
    Region(
        'fj', 'xkb:fj::eng', 'Pacific/Fiji', ['en-FJ', 'fj'], KML.ANSI,
        'Fiji'),
    Region(
        'fk', 'xkb:fk::eng', 'Atlantic/Stanley', 'en-FK', KML.ANSI,
        'Falkland Islands'),
    Region(
        'fm', 'xkb:fm::eng', [
            'Pacific/Chuuk', 'Pacific/Pohnpei', 'Pacific/Kosrae'], [
                'en-FM', 'chk', 'pon', 'yap', 'kos', 'uli', 'woe', 'nkr',
                'kpg'], KML.ANSI,
        'Micronesia'),
    Region(
        'fo', 'xkb:fo::fao', 'Atlantic/Faroe', ['fo', 'da-FO'], KML.ANSI,
        'Faroe Islands'),
    Region(
        'ni', 'xkb:latam::spa', 'America/Managua', ['es-419', 'en'], KML.ANSI,
        'Nicaragua'),
    Region(
        'no', 'xkb:no::nor', 'Europe/Oslo', ['no', 'nb', 'nn', 'se'], KML.ISO,
        'Norway'),
    Region(
        'na', 'xkb:na::eng', 'Africa/Windhoek', ['en-NA', 'af', 'de', 'hz',
                                                 'naq'], KML.ANSI,
        'Namibia'),
    Region(
        'vu', 'xkb:vu::bis', 'Pacific/Efate', ['bi', 'en-VU'], KML.ANSI,
        'Vanuatu'),
    Region(
        'nc', 'xkb:nc::fra', 'Pacific/Noumea', 'fr-NC', KML.ANSI,
        'New Caledonia'),
    Region(
        'ne', 'xkb:ne::fra', 'Africa/Niamey', ['fr-NE', 'ha', 'kr'], KML.ANSI,
        'Niger'),
    Region(
        'nf', 'xkb:nf::eng', 'Pacific/Norfolk', 'en-NF', KML.ANSI,
        'Norfolk Island'),
    Region(
        'np', 'xkb:np::nep', 'Asia/Kathmandu', ['ne', 'en'], KML.ANSI,
        'Nepal'),
    Region(
        'nr', 'xkb:nr::nau', 'Pacific/Nauru', ['na', 'en-NR'], KML.ANSI,
        'Nauru'),
    Region(
        'nu', 'xkb:us::eng', 'Pacific/Niue', ['niu', 'en-NU'], KML.ANSI,
        'Niue'),
    Region(
        'ck', 'xkb:ck::eng', 'Pacific/Rarotonga', ['en-CK', 'mi'], KML.ANSI,
        'Cook Islands'),
    Region(
        'ci', 'xkb:ci::fra', 'Africa/Abidjan', 'fr-CI', KML.ANSI,
        'Ivory Coast'),
    Region(
        'co', 'xkb:latam::spa', 'America/Bogota', 'es-419', KML.ANSI,
        'Colombia'),
    Region(
        'cn', 'xkb:us::eng', 'Asia/Shanghai', 'zh-CN', KML.ANSI,
        'China'),
    Region(
        'cm', 'xkb:cm::eng', 'Africa/Douala', ['en-CM', 'fr-CM'], KML.ANSI,
        'Cameroon'),
    Region(
        'cc', 'xkb:cc::msa', 'Indian/Cocos', ['ms-CC', 'en'], KML.ANSI,
        'Cocos Islands'),
    Region(
        'cg', 'xkb:cg::fra', 'Africa/Brazzaville', ['fr-CG', 'kg'], KML.ANSI,
        'Republic of the Congo'),
    Region(
        'cf', 'xkb:cf::fra', 'Africa/Bangui', ['fr-CF', 'sg', 'ln'], KML.ANSI,
        'Central African Republic'),
    Region(
        'cd', 'xkb:cd::fra', ['Africa/Kinshasa', 'Africa/Lubumbashi'], [
            'fr-CD', 'ln', 'kg'], KML.ANSI,
        'Democratic Republic of the Congo'),
    Region(
        'cy', 'xkb:cy::ell', 'Asia/Nicosia', ['el-CY', 'tr-CY'], KML.ANSI,
        'Cyprus'),
    Region(
        'cx', 'xkb:cx::eng', 'Indian/Christmas', ['en', 'zh'], KML.ANSI,
        'Christmas Island'),
    Region(
        'cr', 'xkb:latam::spa', 'America/Costa_Rica', ['es-419'], KML.ANSI,
        'Costa Rica'),
    Region(
        'cw', 'xkb:cw::nld', 'America/Curacao', ['nl'], KML.ANSI, 'Curacao'),
    Region(
        'cv', 'xkb:cv::por', 'Atlantic/Cape_Verde', 'pt-CV', KML.ANSI,
        'Cape Verde'),
    Region(
        'cu', 'xkb:latam::spa', 'America/Havana', 'es-419', KML.ANSI,
        'Cuba'),
    Region(
        'sz', 'xkb:sz::eng', 'Africa/Mbabane', ['en-SZ', 'ss-SZ'], KML.ANSI,
        'Swaziland'),
    Region(
        'sy', 'xkb:sy::ara', 'Asia/Damascus', ['ar', 'ku', 'hy', 'arc', 'fr',
                                               'en'], KML.ANSI,
        'Syria'),
    Region(
        'sx', 'xkb:sx::nld', 'America/Lower_Princes', ['nl', 'en'], KML.ANSI,
        'Sint Maarten'),
    Region(
        'kg', 'xkb:kg::kir', 'Asia/Bishkek', ['ky', 'uz', 'ru'], KML.ANSI,
        'Kyrgyzstan'),
    Region(
        'ke', 'xkb:ke::eng', 'Africa/Nairobi', ['en-KE', 'sw-KE'], KML.ANSI,
        'Kenya'),
    Region(
        'ss', 'xkb:ss::eng', 'Africa/Juba', 'en', KML.ANSI,
        'South Sudan'),
    Region(
        'sr', 'xkb:sr::nld', 'America/Paramaribo', ['nl-SR', 'en', 'srn', 'hns',
                                                    'jv'], KML.ANSI,
        'Suriname'),
    Region(
        'ki', 'xkb:ki::eng', ['Pacific/Tarawa', 'Pacific/Enderbury',
                              'Pacific/Kiritimati'], ['en-KI', 'gil'], KML.ANSI,
        'Kiribati'),
    Region(
        'kh', 'xkb:kh::khm', 'Asia/Phnom_Penh', ['km', 'fr', 'en'], KML.ANSI,
        'Cambodia'),
    Region(
        'kn', 'xkb:kn::eng', 'America/St_Kitts', 'en-KN', KML.ANSI,
        'Saint Kitts and Nevis'),
    Region(
        'km', 'xkb:km::ara', 'Indian/Comoro', ['ar', 'fr-KM'], KML.ANSI,
        'Comoros'),
    Region(
        'st', 'xkb:st::por', 'Africa/Sao_Tome', 'pt-ST', KML.ANSI,
        'Sao Tome and Principe'),
    Region(
        'si', 'xkb:si::slv', 'Europe/Ljubljana', ['sl', 'hu', 'it', 'sr', 'de',
                                                  'hr', 'en-GB'], KML.ISO,
        'Slovenia'),
    Region(
        'kp', 'xkb:kp::kor', 'Asia/Pyongyang', 'ko-KP', KML.ANSI,
        'North Korea'),
    Region(
        'sn', 'xkb:sn::fra', 'Africa/Dakar', ['fr-SN', 'wo', 'fuc'], KML.ANSI,
        'Senegal'),
    Region(
        'sm', 'xkb:sm::ita', 'Europe/San_Marino', 'it-SM', KML.ANSI,
        'San Marino'),
    Region(
        'sl', 'xkb:sl::eng', 'Africa/Freetown', ['en-SL', 'men'], KML.ANSI,
        'Sierra Leone'),
    Region(
        'sc', 'xkb:sc::eng', 'Indian/Mahe', ['en-SC', 'fr-SC'], KML.ANSI,
        'Seychelles'),
    Region(
        'kz', 'xkb:kz::kaz', ['Asia/Almaty', 'Asia/Qyzylorda', 'Asia/Aqtobe',
                              'Asia/Aqtau'], ['kk', 'ru'], KML.ANSI,
        'Kazakhstan'),
    Region(
        'ky', 'xkb:ky::eng', 'America/Cayman', 'en-KY', KML.ANSI,
        'Cayman Islands'),
    Region(
        'sd', 'xkb:sd::ara', 'Africa/Khartoum', ['ar', 'en', 'fia'], KML.ANSI,
        'Sudan'),
    Region(
        'do', 'xkb:latam::spa', 'America/Santo_Domingo', 'es-419', KML.ANSI,
        'Dominican Republic'),
    Region(
        'dm', 'xkb:dm::eng', 'America/Dominica', 'en-DM', KML.ANSI,
        'Dominica'),
    Region(
        'dj', 'xkb:dj::fra', 'Africa/Djibouti', ['fr-DJ', 'ar'], KML.ANSI,
        'Djibouti'),
    Region(
        'dk', 'xkb:dk::dan', 'Europe/Copenhagen', ['da-DK', 'en', 'fo',
                                                   'de-DK'], KML.ISO,
        'Denmark'),
    Region(
        'vg', 'xkb:vg::eng', 'America/Tortola', 'en-VG', KML.ANSI,
        'British Virgin Islands'),
    Region(
        'ye', 'xkb:ye::ara', 'Asia/Aden', 'ar', KML.ANSI,
        'Yemen'),
    Region(
        'dz', 'xkb:dz::ara', 'Africa/Algiers', 'ar', KML.ANSI,
        'Algeria'),
    Region(
        'yt', 'xkb:yt::fra', 'Indian/Mayotte', 'fr-YT', KML.ANSI,
        'Mayotte'),
    Region(
        'um', 'xkb:um::eng', ['Pacific/Johnston', 'Pacific/Midway',
                              'Pacific/Wake'], 'en-UM', KML.ANSI,
        'United States Minor Outlying Islands'),
    Region(
        'lb', 'xkb:lb::ara', 'Asia/Beirut', ['ar', 'fr-LB', 'en'], KML.ANSI,
        'Lebanon'),
    Region(
        'lc', 'xkb:lc::eng', 'America/St_Lucia', 'en-LC', KML.ANSI,
        'Saint Lucia'),
    Region(
        'la', 'xkb:la::lao', 'Asia/Vientiane', ['lo', 'fr', 'en'], KML.ANSI,
        'Laos'),
    Region(
        'tv', 'xkb:us::eng', 'Pacific/Funafuti', ['tvl', 'en', 'sm'], KML.ANSI,
        'Tuvalu'),
    Region(
        'tt', 'xkb:tt::eng', 'America/Port_of_Spain', ['en-TT', 'hns', 'fr',
                                                       'es', 'zh'], KML.ANSI,
        'Trinidad and Tobago'),
    Region(
        'lk', 'xkb:lk::sin', 'Asia/Colombo', ['si', 'ta', 'en'], KML.ANSI,
        'Sri Lanka'),
    Region(
        'li', 'xkb:ch::ger', 'Europe/Vaduz', ['de', 'en-GB'], KML.ISO,
        'Liechtenstein'),
    Region(
        'lv', 'xkb:lv:apostrophe:lav', 'Europe/Riga', ['lv', 'lt', 'ru',
                                                       'en-GB'], KML.ISO,
        'Latvia'),
    Region(
        'to', 'xkb:to::ton', 'Pacific/Tongatapu', ['to', 'en-TO'], KML.ANSI,
        'Tonga'),
    Region(
        'lt', 'xkb:lt::lit', 'Europe/Vilnius', ['lt', 'ru', 'pl'], KML.ISO,
        'Lithuania'),
    Region(
        'lu', 'xkb:lu::ltz', 'Europe/Luxembourg', ['lb', 'de-LU'], KML.ANSI,
        'Luxembourg'),
    Region(
        'lr', 'xkb:lr::eng', 'Africa/Monrovia', 'en-LR', KML.ANSI,
        'Liberia'),
    Region(
        'ls', 'xkb:ls::eng', 'Africa/Maseru', ['en-LS', 'st', 'zu'], KML.ANSI,
        'Lesotho'),
    Region(
        'tf', 'xkb:tf::fra', 'Indian/Kerguelen', 'fr', KML.ANSI,
        'French Southern Territories'),
    Region(
        'tg', 'xkb:tg::fra', 'Africa/Lome', ['fr-TG', 'ee', 'hna'], KML.ANSI,
        'Togo'),
    Region(
        'td', 'xkb:td::fra', 'Africa/Ndjamena', ['fr-TD', 'ar'], KML.ANSI,
        'Chad'),
    Region(
        'tc', 'xkb:tc::eng', 'America/Grand_Turk', 'en-TC', KML.ANSI,
        'Turks and Caicos Islands'),
    Region(
        'ly', 'xkb:ly::ara', 'Africa/Tripoli', ['ar', 'it', 'en'], KML.ANSI,
        'Libya'),
    Region(
        'va', 'xkb:va::lat', 'Europe/Vatican', ['la', 'it', 'fr'], KML.ANSI,
        'Vatican'),
    Region(
        'vc', 'xkb:vc::eng', 'America/St_Vincent', ['en-VC', 'fr'], KML.ANSI,
        'Saint Vincent and the Grenadines'),
    Region(
        'ad', 'xkb:ad::cat', 'Europe/Andorra', 'ca', KML.ANSI,
        'Andorra'),
    Region(
        'ag', 'xkb:ag::eng', 'America/Antigua', 'en-AG', KML.ANSI,
        'Antigua and Barbuda'),
    Region(
        'af', 'xkb:af::fas', 'Asia/Kabul', ['fa-AF', 'ps'], KML.ANSI,
        'Afghanistan'),
    Region(
        'ai', 'xkb:ai::eng', 'America/Anguilla', 'en-AI', KML.ANSI,
        'Anguilla'),
    Region(
        'vi', 'xkb:vi::eng', 'America/St_Thomas', 'en-VI', KML.ANSI,
        'U.S. Virgin Islands'),
    Region(
        'ir', 'xkb:ir::fas', 'Asia/Tehran', ['fa-IR', 'ku'], KML.ANSI,
        'Iran'),
    Region(
        'am', 'xkb:am::hye', 'Asia/Yerevan', 'hy', KML.ANSI,
        'Armenia'),
    Region(
        'al', 'xkb:al::sqi', 'Europe/Tirane', ['sq', 'el'], KML.ANSI,
        'Albania'),
    Region(
        'ao', 'xkb:ao::por', 'Africa/Luanda', 'pt-AO', KML.ANSI,
        'Angola'),
    Region(
        'as', 'xkb:as::eng', 'Pacific/Pago_Pago', ['en-AS', 'sm'], KML.ANSI,
        'American Samoa'),
    Region(
        'aw', 'xkb:aw::nld', 'America/Aruba', ['nl-AW', 'es', 'en'], KML.ANSI,
        'Aruba'),
    Region(
        'ax', 'xkb:ax::swe', 'Europe/Mariehamn', 'sv-AX', KML.ANSI,
        'Aland Islands'),
    Region(
        'az', 'xkb:az::aze', 'Asia/Baku', ['az', 'ru', 'hy'], KML.ANSI,
        'Azerbaijan'),
    Region(
        'ua', 'xkb:ua::ukr', [
            'Europe/Kiev', 'Europe/Uzhgorod', 'Europe/Zaporozhye'], [
                'uk', 'ru-UA', 'rom', 'pl', 'hu'], KML.ANSI,
        'Ukraine'),
    Region(
        'qa', 'xkb:qa::ara', 'Asia/Bahrain', ['ar', 'en'], KML.ANSI,
        'Qatar'),
    Region(
        'mz', 'xkb:mz::por', 'Africa/Maputo', ['pt-MZ', 'vmw'], KML.ANSI,
        'Mozambique'),
    ]
"""A list of :py:class:`regions.Region` objects for
**unconfirmed** regions. These may contain incorrect information (or not
supported by Chrome browser yet), and all fields must be reviewed before launch.
See http://goto/vpdsettings.

Currently, non-Latin keyboards must use an underlying Latin keyboard
for VPD. (This assumption should be revisited when moving items to
:py:data:`regions.Region.REGIONS_LIST`.)  This is
currently being discussed on <http://crbug.com/325389>.

Some timezones or locales may be missing from ``timezone_settings.cc`` (see
http://crosbug.com/p/23902).  This must be rectified before moving
items to :py:data:`regions.Region.REGIONS_LIST`.
"""


def ConsolidateRegions(regions):
  """Consolidates a list of regions into a dict.

  Args:
    regions: A list of Region objects.  All objects for any given
      region code must be identical or we will throw an exception.
      (We allow duplicates in case identical region objects are
      defined in both regions.py and the overlay, e.g., when moving
      items to the public overlay.)

  Returns:
    A dict from region code to Region.

  Raises:
    RegionException: If there are multiple regions defined for a given
      region, and the values for those regions differ.
  """
  # Build a dict from region_code to the first Region with that code.
  region_dict = {}
  for r in regions:
    existing_region = region_dict.get(r.region_code)
    if existing_region:
      if existing_region.GetFieldsDict() != r.GetFieldsDict():
        raise RegionException(
            'Conflicting definitions for region %r: %r, %r' %
            (r.region_code, existing_region.GetFieldsDict(),
             r.GetFieldsDict()))
    else:
      region_dict[r.region_code] = r

  return region_dict


def BuildRegionsDict(include_all=False):
  """Builds a dictionary mapping from code to :py:class:`regions.Region` object.

  The regions include:

  * :py:data:`regions.REGIONS_LIST`
  * :py:data:`regions_overlay.REGIONS_LIST`
  * Only if ``include_all`` is true:

    * :py:data:`regions.UNCONFIRMED_REGIONS_LIST`
    * :py:data:`regions.INCOMPLETE_REGIONS_LIST`

  A region may only appear in one of the above lists, or this function
  will (deliberately) fail.
  """
  regions = list(REGIONS_LIST)
  if include_all:
    known_codes = [r.region_code for r in regions]
    regions += [r for r in UNCONFIRMED_REGIONS_LIST if r.region_code not in
                known_codes]

  # Build dictionary of region code to list of regions with that
  # region code.  Check manually for duplicates, since the region may
  # be present both in the overlay and the public repo.
  return ConsolidateRegions(regions)


REGIONS = BuildRegionsDict()


def main(args=sys.argv[1:], out=None):
  parser = argparse.ArgumentParser(description=(
      'Display all known regions and their parameters. '))
  parser.add_argument('--format',
                      choices=('human-readable', 'csv', 'json', 'yaml'),
                      default='human-readable',
                      help='Output format (default=%(default)s)')
  parser.add_argument('--all', action='store_true',
                      help='Include unconfirmed and incomplete regions')
  parser.add_argument('--notes', action='store_true',
                      help='Include notes in output')
  parser.add_argument('--output', default=None,
                      help='Specify output file')
  parser.add_argument('--overlay', default=None,
                      help='Specify a Python file to overlay extra data')
  args = parser.parse_args(args)

  if args.overlay is not None:
    execfile(args.overlay)

  if args.all:
    # Add an additional 'confirmed' property to help identifying region status,
    # for autotests, unit tests and factory module.
    Region.FIELDS.insert(1, 'confirmed')
    for r in REGIONS_LIST:
      r.confirmed = True
    for r in UNCONFIRMED_REGIONS_LIST:
      r.confirmed = False

  regions_dict = BuildRegionsDict(args.all)

  if out is None:
    if args.output is None:
      out = sys.stdout
    else:
      out = open(args.output, 'w')

  if args.notes or args.format == 'csv':
    Region.FIELDS += ['notes']

  # Handle YAML and JSON output.
  if args.format == 'yaml' or args.format == 'json':
    data = {}
    for region in regions_dict.values():
      item = {}
      for field in Region.FIELDS:
        item[field] = getattr(region, field)
      data[region.region_code] = item
    if args.format == 'yaml':
      yaml.dump(data, out)
    else:
      json.dump(data, out)
    return

  # Handle CSV or plain-text output: build a list of lines to print.
  lines = [Region.FIELDS]

  def CoerceToString(value):
    """Returns the arguments in simple string type.

    If value is a list, concatenate its values with commas.  Otherwise, just
    return value.
    """
    if isinstance(value, list):
      return ','.join(value)
    else:
      return str(value)

  for region in sorted(regions_dict.values(), key=lambda v: v.region_code):
    lines.append([CoerceToString(getattr(region, field))
                  for field in Region.FIELDS])

  if args.format == 'csv':
    # Just print the lines in CSV format. Note the values may include ',' so the
    # separator must be tab.
    for l in lines:
      print('\t'.join(l))
  elif args.format == 'human-readable':
    num_columns = len(lines[0])

    # Calculate maximum length of each column.
    max_lengths = []
    for column_no in xrange(num_columns):
      max_lengths.append(max(len(line[column_no]) for line in lines))

    # Print each line, padding as necessary to the max column length.
    for line in lines:
      for column_no in xrange(num_columns):
        out.write(line[column_no].ljust(max_lengths[column_no] + 2))
      out.write('\n')
  else:
    sys.exit('Sorry, unknown format specified: %s' % args.format)


if __name__ == '__main__':
  main()
