docs: def gen_nf_quick_check(output, ascii_props=False, append=False, prefix=""):
      """Generate quick check properties."""
  
      categories = []
      nf = {}
      all_chars = ALL_ASCII if ascii_props else ALL_CHARS
      file_name = os.path.join(HOME, 'unicodedata', UNIVERSION, 'DerivedNormalizationProps.txt')
      with codecs.open(file_name, 'r', 'utf-8') as uf:
          for line in uf:
              if not line.startswith('#'):
                  data = line.split('#')[0].split(';')
                  if len(data) < 2:
                      continue
                  if not data[1].strip().lower().endswith('_qc'):
                      continue
                  span = create_span([int(i, 16) for i in data[0].strip().split('..')], is_bytes=ascii_props)
                  if span is None:
                      continue
                  name = format_name(data[1][:-3] + 'quickcheck')
                  subvalue = format_name(data[2])
  
                  if name not in nf:
                      nf[name] = {}
                      categories.append(name)
                  if subvalue not in nf[name]:
                      nf[name][subvalue] = []
                  nf[name][subvalue].extend(span)
  
      for k1, v1 in nf.items():
          temp = set()
          for k2 in list(v1.keys()):
              temp |= set(v1[k2])
          v1['y'] = list(all_chars - temp)
  
      for k1, v1 in nf.items():
          for name in list(v1.keys()):
              s = set(nf[k1][name])
              nf[k1][name] = sorted(s)
  
      # Convert characters values to ranges
      char2range(nf, is_bytes=ascii_props)
  
      with codecs.open(output, 'a' if append else 'w', 'utf-8') as f:
          if not append:
              f.write(HEADER)
          for key, value in sorted(nf.items()):
              # Write out the Unicode properties
              f.write('%s_%s = {\n' % (prefix, key.replace('quickcheck', '_quick_check')))
              count = len(value) - 1
              i = 0
              for k1, v1 in sorted(value.items()):
                  f.write('    "%s": "%s"' % (k1, v1))
                  if i == count:
                      f.write('\n}\n')
                  else:
                      f.write(',\n')
                  i += 1
  
      return categories