code: @Override
      protected synchronized void handleTransliterate(Replaceable text,
                  Position offsets, boolean isIncremental) {
          if(csp==null) {
              return;
          }
  
          if(offsets.start >= offsets.limit) {
              return;
          }
  
          iter.setText(text);
          result.setLength(0);
          int c, delta;
  
          // Walk through original string
          // If there is a case change, modify corresponding position in replaceable
  
          iter.setIndex(offsets.start);
          iter.setLimit(offsets.limit);
          iter.setContextLimits(offsets.contextStart, offsets.contextLimit);
          while((c=iter.nextCaseMapCP())>=0) {
              c=csp.toFullUpper(c, iter, result, caseLocale);
  
              if(iter.didReachLimit() && isIncremental) {
                  // the case mapping function tried to look beyond the context limit
                  // wait for more input
                  offsets.start=iter.getCaseMapCPStart();
                  return;
              }
  
              /* decode the result */
              if(c<0) {
                  /* c mapped to itself, no change */
                  continue;
              } else if(c<=UCaseProps.MAX_STRING_LENGTH) {
                  /* replace by the mapping string */
                  delta=iter.replace(result.toString());
                  result.setLength(0);
              } else {
                  /* replace by single-code point mapping */
                  delta=iter.replace(UTF16.valueOf(c));
              }
  
              if(delta!=0) {
                  offsets.limit += delta;
                  offsets.contextLimit += delta;
              }
          }
          offsets.start = offsets.limit;
      }
docs: Implements {@link Transliterator#handleTransliterate}.