code: void printRangeGroups() {
          RangeDescriptor       rlRange;
          RangeDescriptor       tRange;
          int                    i;
          int                    lastPrintedGroupNum = 0;
  
          System.out.print("\nRanges grouped by Unicode Set Membership...\n");
          for (rlRange = fRangeList; rlRange!=null; rlRange=rlRange.fNext) {
              int groupNum = rlRange.fNum & 0xbfff;
              if (groupNum > lastPrintedGroupNum) {
                  lastPrintedGroupNum = groupNum;
                  if (groupNum<10) {System.out.print(" ");}
                  System.out.print(groupNum + " ");
  
                  if ((rlRange.fNum & 0x4000) != 0) { System.out.print(" <DICT> ");}
  
                  for (i=0; i<rlRange.fIncludesSets.size(); i++) {
                      RBBINode       usetNode    = rlRange.fIncludesSets.get(i);
                      String         setName = "anon";
                      RBBINode       setRef = usetNode.fParent;
                      if (setRef != null) {
                          RBBINode varRef = setRef.fParent;
                          if (varRef != null  &&  varRef.fType == RBBINode.varRef) {
                              setName = varRef.fText;
                          }
                      }
                      System.out.print(setName); System.out.print(" ");
                  }
  
                  i = 0;
                  for (tRange = rlRange; tRange != null; tRange = tRange.fNext) {
                      if (tRange.fNum == rlRange.fNum) {
                          if (i++ % 5 == 0) {
                              System.out.print("\n    ");
                          }
                          RBBINode.printHex(tRange.fStartChar, -1);
                          System.out.print("-");
                          RBBINode.printHex(tRange.fEndChar, 0);
                      }
                  }
                  System.out.print("\n");
              }
          }
          System.out.print("\n");
      }
docs: /CLOVER:OFF