code: public int previousCodePoint() {
          int ch1 = previous();
          if (UTF16.isTrailSurrogate((char) ch1)) {
              int ch2 = previous();
              if (UTF16.isLeadSurrogate((char) ch2)) {
                  return Character.toCodePoint((char) ch2, (char) ch1);
              } else if (ch2 != DONE) {
                  // unmatched trail surrogate so back out
                  next();
              }
          }
          return ch1;
      }
docs: Retreat to the start of the previous code point in the text, and return it (pre-decrement semantics). If the
  index is not preceeded by a valid surrogate pair, the behavior is the same as <code>previous()</code>. Otherwise
  the iterator is decremented to the start of the surrogate pair, and the code point represented by the pair is
  returned.
  
  @return the previous code point in the text, or DONE if the new index is before the start of the text.