Example #1
0
    /**
     * Deletes from offset in this to endOffset in delTo. Uses ModelList.collapse to perform quick
     * deletion.
     *
     * @param delTo iterator whose endpoint is the last character to delete
     * @return new offset
     */
    int deleteRight(Iterator delTo) {
      collapse(delTo);

      // if both pointing to same item, and it's a gap
      if (eq(delTo) && current().isGap()) {
        // inside gap
        current().shrink(delTo.getBlockOffset() - getBlockOffset());
        return getBlockOffset();
      }

      // if brace is multiple char it must be a comment because the above if
      // test guarrantees it can't be a gap.
      if (!eq(delTo)) clipLeft();
      delTo.clipRight();

      if (!atStart()) prev();
      int delToSizeCurr;
      String delToTypeCurr;
      if (delTo.atEnd()) {
        setTo(delTo);
        return 0;
      } else {
        delToSizeCurr = delTo.current().getSize();
        delToTypeCurr = delTo.current().getType();
      }

      // get info on previous item.
      delTo.prev(); // get stats on previous item

      int delToSizePrev;
      String delToTypePrev;
      if (delTo.atStart()) { // no previous item, can't be at end
        delTo.next();
        setTo(delTo);
        return 0;
      } else {
        delToSizePrev = delTo.current().getSize();
        delToTypePrev = delTo.current().getType();
      }
      delTo.next(); // put delTo back on original node

      int temp =
          _calculateOffset(delToSizePrev, delToTypePrev, delToSizeCurr, delToTypeCurr, delTo);
      this.setTo(delTo);
      return temp;
    }