code: public String getDecomposition(int c) {
          int decomp=-1;
          int norm16;
          for(;;) {
              if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
                  // c does not decompose
              } else if(isHangul(norm16)) {
                  // Hangul syllable: decompose algorithmically
                  StringBuilder buffer=new StringBuilder();
                  Hangul.decompose(c, buffer);
                  return buffer.toString();
              } else if(isDecompNoAlgorithmic(norm16)) {
                  decomp=c=mapAlgorithmic(c, norm16);
                  continue;
              } else {
                  // c decomposes, get everything from the variable-length extra data
                  int length=extraData.charAt(norm16++)&MAPPING_LENGTH_MASK;
                  return extraData.substring(norm16, norm16+length);
              }
              if(decomp<0) {
                  return null;
              } else {
                  return UTF16.valueOf(decomp);
              }
          }
      }
docs: Gets the decomposition for one code point.
  @param c code point
  @return c's decomposition, if it has one; returns null if it does not have a decomposition