incb_property_group.py 818 B

12345678910111213141516171819202122232425262728293031323334353637
  1. from enum import Enum
  2. from functools import lru_cache
  3. from grapheme.grapheme_property_group import ContainerNode, LeafNode, load_file
  4. class InCBPropertyGroup(Enum):
  5. CONSONANT = "InCBConsonant"
  6. EXTEND = "InCBExtend"
  7. LINKER = "InCBLinker"
  8. OTHER = "Other"
  9. SINGLE_CHAR_MAPPINGS = {}
  10. RANGE_TREE = ContainerNode([LeafNode(0, 0, None)])
  11. def get_group(char):
  12. if char in COMMON_OTHER_GROUP_CHARS:
  13. return InCBPropertyGroup.OTHER
  14. return get_group_ord(ord(char))
  15. @lru_cache(128)
  16. def get_group_ord(char):
  17. group = SINGLE_CHAR_MAPPINGS.get(char, None)
  18. if group:
  19. return group
  20. return RANGE_TREE.get_value(char) or InCBPropertyGroup.OTHER
  21. SINGLE_CHAR_MAPPINGS, RANGE_TREE, COMMON_OTHER_GROUP_CHARS = load_file(
  22. "data/derived_core_property.json", InCBPropertyGroup
  23. )