int start = iter.getBeginIndex();
  public int previous ()  {		if (iter.getIndex() == iter.getBeginIndex())			return DONE;    int start = iter.getBeginIndex();    while (iter.getIndex() >= iter.getBeginIndex())      {			char c = iter.previous();			if (c == CharacterIterator.DONE)				break;			int type = Character.getType(c);	if (type != Character.NON_SPACING_MARK	    && ! isLowSurrogate (c)	    && ! isLVT (c))				break;			// Now we need some lookahead.			char ahead = iter.previous();	if (ahead == CharacterIterator.DONE)	  {				iter.next();				break;			}			char ahead2 = iter.previous();			iter.next();			iter.next();			if (ahead2 == CharacterIterator.DONE)				break;			int aheadType = Character.getType(ahead);			if (aheadType == Character.PARAGRAPH_SEPARATOR)				break;	if (isLVT (c) && ! isLVT (ahead))				break;	if (! isLVT (c) && type != Character.NON_SPACING_MARK	    && isL (ahead))				break;	if (! isV (c) && ! isT (c) && type != Character.NON_SPACING_MARK	    && isV (ahead))				break;	if (! isT (c) && type != Character.NON_SPACING_MARK	    && isT (ahead))				break;	if (isLowSurrogate (c) && ! isHighSurrogate (ahead))				break;	if (! isLowSurrogate (c) && isHighSurrogate (ahead))				break;	if (isLowSurrogate (ahead) && ! isHighSurrogate (ahead2))				break;		}		return iter.getIndex();	}