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;
    }
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 ) { next ( ) ; } } return ch1 ; }
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.