code: public final int transliterate(Replaceable text, int start, int limit) {
          if (start < 0 ||
              limit < start ||
              text.length() < limit) {
              return -1;
          }
  
          Position pos = new Position(start, limit, start);
          filteredTransliterate(text, pos, false, true);
          return pos.limit;
      }
docs: Transliterates a segment of a string, with optional filtering.
  
  @param text the string to be transliterated
  @param start the beginning index, inclusive; <code>0 &lt;= start
  &lt;= limit</code>.
  @param limit the ending index, exclusive; <code>start &lt;= limit
  &lt;= text.length()</code>.
  @return The new limit index.  The text previously occupying <code>[start,
  limit)</code> has been transliterated, possibly to a string of a different
  length, at <code>[start, </code><em>new-limit</em><code>)</code>, where
  <em>new-limit</em> is the return value. If the input offsets are out of bounds,
  the returned value is -1 and the input string remains unchanged.