movePrevious 方法

bool movePrevious()

将位置移动到上一个代码点。

如果有前一个代码点,则返回 true 并更新 current。否则返回 false,此时没有当前代码点。

实现

bool movePrevious() {
  _nextPosition = _position;
  if (_position == 0) {
    _currentCodePoint = -1;
    return false;
  }
  int position = _position - 1;
  int codeUnit = string.codeUnitAt(position);
  if (_isTrailSurrogate(codeUnit) && position > 0) {
    int prevCodeUnit = string.codeUnitAt(position - 1);
    if (_isLeadSurrogate(prevCodeUnit)) {
      _position = position - 1;
      _currentCodePoint = _combineSurrogatePair(prevCodeUnit, codeUnit);
      return true;
    }
  }
  _position = position;
  _currentCodePoint = codeUnit;
  return true;
}