docs: def get_unicode_property(value, prop=None, is_bytes=False):
      """Retrieve the Unicode category from the table."""
  
      if prop is not None:
          prop = unidata.unicode_alias['_'].get(prop, prop)
          try:
              if prop == 'generalcategory':
                  return get_gc_property(value, is_bytes)
              elif prop == 'script':
                  return get_script_property(value, is_bytes)
              elif prop == 'scriptextensions':
                  return get_script_extension_property(value, is_bytes)
              elif prop == 'block':
                  return get_block_property(value, is_bytes)
              elif prop == 'binary':
                  return get_binary_property(value, is_bytes)
              elif prop == 'bidiclass':
                  return get_bidi_property(value, is_bytes)
              elif prop == 'bidipairedbrackettype':
                  return get_bidi_paired_bracket_type_property(value, is_bytes)
              elif prop == 'age':
                  return get_age_property(value, is_bytes)
              elif prop == 'eastasianwidth':
                  return get_east_asian_width_property(value, is_bytes)
              elif PY35 and prop == 'indicpositionalcategory':
                  return get_indic_positional_category_property(value, is_bytes)
              elif not PY35 and prop == 'indicmatracategory':
                  return get_indic_positional_category_property(value, is_bytes)
              elif prop == 'indicsyllabiccategory':
                  return get_indic_syllabic_category_property(value, is_bytes)
              elif prop == 'hangulsyllabletype':
                  return get_hangul_syllable_type_property(value, is_bytes)
              elif prop == 'decompositiontype':
                  return get_decomposition_type_property(value, is_bytes)
              elif prop == 'canonicalcombiningclass':
                  return get_canonical_combining_class_property(value, is_bytes)
              elif prop == 'numerictype':
                  return get_numeric_type_property(value, is_bytes)
              elif prop == 'numericvalue':
                  return get_numeric_value_property(value, is_bytes)
              elif prop == 'joiningtype':
                  return get_joining_type_property(value, is_bytes)
              elif prop == 'joininggroup':
                  return get_joining_group_property(value, is_bytes)
              elif prop == 'graphemeclusterbreak':
                  return get_grapheme_cluster_break_property(value, is_bytes)
              elif prop == 'linebreak':
                  return get_line_break_property(value, is_bytes)
              elif prop == 'sentencebreak':
                  return get_sentence_break_property(value, is_bytes)
              elif prop == 'wordbreak':
                  return get_word_break_property(value, is_bytes)
              elif prop == 'nfcquickcheck':
                  return get_nfc_quick_check_property(value, is_bytes)
              elif prop == 'nfdquickcheck':
                  return get_nfd_quick_check_property(value, is_bytes)
              elif prop == 'nfkcquickcheck':
                  return get_nfkc_quick_check_property(value, is_bytes)
              elif prop == 'nfkdquickcheck':
                  return get_nfkd_quick_check_property(value, is_bytes)
              elif PY37 and prop == 'verticalorientation':
                  return get_vertical_orientation_property(value, is_bytes)
              else:
                  raise ValueError('Invalid Unicode property!')
          except Exception:
              raise ValueError('Invalid Unicode property!')
  
      try:
          return get_gc_property(value, is_bytes)
      except Exception:
          pass
  
      try:
          return get_script_extension_property(value, is_bytes)
      except Exception:
          pass
  
      try:
          return get_block_property(value, is_bytes)
      except Exception:
          pass
  
      try:
          return get_binary_property(value, is_bytes)
      except Exception:
          pass
  
      try:
          return get_is_property(value, is_bytes)
      except Exception:
          pass
  
      try:
          return get_in_property(value, is_bytes)
      except Exception:
          pass
  
      raise ValueError('Invalid Unicode property!')