docs: def PrintGroup(name, codes):
    """Print the data structures for the group of codes.
    Return a UGroup literal for the group."""
  
    # See unicode_groups.h for a description of the data structure.
  
    # Split codes into 16-bit ranges and 32-bit ranges.
    range16 = MakeRanges([c for c in codes if c < 65536])
    range32 = MakeRanges([c for c in codes if c >= 65536])
  
    # Pull singleton ranges out of range16.
    # code16 = [lo for lo, hi in range16 if lo == hi]
    # range16 = [[lo, hi] for lo, hi in range16 if lo != hi]
  
    global n16
    global n32
    n16 += len(range16)
    n32 += len(range32)
  
    ugroup = "{ \"%s\", +1" % (name,)
    # if len(code16) > 0:
    #   PrintCodes("uint16", name+"_code16", code16)
    #   ugroup += ", %s_code16, %d" % (name, len(code16))
    # else:
    #   ugroup += ", 0, 0"
    if len(range16) > 0:
      PrintRanges("URange16", name+"_range16", range16)
      ugroup += ", %s_range16, %d" % (name, len(range16))
    else:
      ugroup += ", 0, 0"
    if len(range32) > 0:
      PrintRanges("URange32", name+"_range32", range32)
      ugroup += ", %s_range32, %d" % (name, len(range32))
    else:
      ugroup += ", 0, 0"
    ugroup += " }"
    return ugroup