code: @Override
      public int mbcCaseFold(int flag, byte[]bytes, IntHolder pp, int end, byte[]fold) {
          int p = pp.value;
          int foldP = 0;
  
          int code = mbcToCode(bytes, p, end);
          int len = length(bytes, p, end);
          pp.value += len;
  
          if (Config.USE_UNICODE_CASE_FOLD_TURKISH_AZERI) {
              if ((flag & Config.CASE_FOLD_TURKISH_AZERI) != 0) {
                  if (code == 'I') {
                      return codeToMbc(DOTLESS_i, fold, foldP);
                  } else if (code == I_WITH_DOT_ABOVE) {
                      return codeToMbc('i', fold, foldP);
                  }
              }
          }
  
          CodeList to = CaseFold.Values.get(code);
          if (to != null) {
              if (to.codes.length == 1) {
                  return codeToMbc(to.codes[0], fold, foldP);
              } else {
                  int rlen = 0;
                  for (int i=0; i<to.codes.length; i++) {
                      len = codeToMbc(to.codes[i], fold, foldP);
                      foldP += len;
                      rlen += len;
                  }
                  return rlen;
              }
          }
  
          for (int i=0; i<len; i++) {
              fold[foldP++] = bytes[p++];
          }
          return len;
      }
docs: onigenc_unicode_mbc_case_fold