docs: def download_unicodedata(version, output=HOME, no_zip=False):
      """Download Unicode data scripts and blocks."""
      files = [
          'UnicodeData.txt',
          'Scripts.txt',
          'Blocks.txt',
          'PropList.txt',
          'DerivedCoreProperties.txt',
          'DerivedNormalizationProps.txt',
          'CompositionExclusions.txt',
          'PropertyValueAliases.txt',
          'PropertyAliases.txt',
          'EastAsianWidth.txt',
          'LineBreak.txt',
          'HangulSyllableType.txt',
          'DerivedAge.txt',
          'auxiliary/WordBreakProperty.txt',
          'auxiliary/SentenceBreakProperty.txt',
          'auxiliary/GraphemeBreakProperty.txt',
          'extracted/DerivedDecompositionType.txt',
          'extracted/DerivedNumericType.txt',
          'extracted/DerivedNumericValues.txt',
          'extracted/DerivedJoiningType.txt',
          'extracted/DerivedJoiningGroup.txt',
          'extracted/DerivedCombiningClass.txt'
      ]
  
      files.append('ScriptExtensions.txt')
      if PY35:
          files.append('IndicPositionalCategory.txt')
      else:
          files.append('IndicMatraCategory.txt')
      files.append('IndicSyllabicCategory.txt')
  
      if PY34:
          files.append('BidiBrackets.txt')
  
      if PY37:
          files.append('VerticalOrientation.txt')
  
      http_url = 'http://www.unicode.org/Public/%s/ucd/' % version
      ftp_url = 'ftp://ftp.unicode.org/Public/%s/ucd/' % version
  
      destination = os.path.join(output, 'unicodedata', version)
      if not os.path.exists(destination):
          os.makedirs(destination)
  
      zip_data = not no_zip
  
      for f in files:
          file_location = os.path.join(destination, os.path.basename(f))
          retrieved = False
          if not os.path.exists(file_location):
              for url in (ftp_url, http_url):
                  furl = url + f
                  try:
                      print('Downloading: %s --> %s' % (furl, file_location))
                      response = urlopen(furl, timeout=30)
                      data = response.read()
                  except Exception:
                      print('Failed: %s' % url)
                      continue
                  with open(file_location, 'w') as uf:
                      uf.write(data.decode('utf-8'))
                  retrieved = True
                  break
              if not retrieved:
                  print('Failed to acquire all needed Unicode files!')
                  break
          else:
              retrieved = True
              print('Skipping: found %s' % file_location)
  
          if not retrieved:
              zip_data = False
              break
  
      if zip_data and not os.path.exists(os.path.join(output, 'unicodedata', '%s.zip' % version)):
          zip_unicode(output, version)