code: private boolean hasCompBoundaryBefore(int c, int norm16) {
          for(;;) {
              if(isCompYesAndZeroCC(norm16)) {
                  return true;
              } else if(isMaybeOrNonZeroCC(norm16)) {
                  return false;
              } else if(isDecompNoAlgorithmic(norm16)) {
                  c=mapAlgorithmic(c, norm16);
                  norm16=getNorm16(c);
              } else {
                  // c decomposes, get everything from the variable-length extra data
                  int firstUnit=extraData.charAt(norm16);
                  if((firstUnit&MAPPING_LENGTH_MASK)==0) {
                      return false;
                  }
                  if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD)!=0 && (extraData.charAt(norm16-1)&0xff00)!=0) {
                      return false;  // non-zero leadCC
                  }
                  return isCompYesAndZeroCC(getNorm16(Character.codePointAt(extraData, norm16+1)));
              }
          }
      }
docs: Does c have a composition boundary before it?
  True if its decomposition begins with a character that has
  ccc=0 && NFC_QC=Yes (isCompYesAndZeroCC()).
  As a shortcut, this is true if c itself has ccc=0 && NFC_QC=Yes
  (isCompYesAndZeroCC()) so we need not decompose.