/*
   * @see org.eclipse.jface.text.ITextStore#replace(int, int, java.lang.String)
   */
  public void replace(int offset, int length, String text) {
    if (text == null) text = ""; // $NON-NLS-1$

    if (fReplaceList.size() == 0) {
      fReplaceList.add(new Replace(offset, offset, length, text));

    } else {
      Replace firstReplace = (Replace) fReplaceList.get(0);
      Replace lastReplace = (Replace) fReplaceList.get(fReplaceList.size() - 1);

      // backward
      if (offset + length <= firstReplace.newOffset) {
        int delta = text.length() - length;
        if (delta != 0) {
          for (Iterator i = fReplaceList.iterator(); i.hasNext(); ) {
            Replace replace = (Replace) i.next();
            replace.newOffset += delta;
          }
        }

        fReplaceList.add(0, new Replace(offset, offset, length, text));

        // forward
      } else if (offset >= lastReplace.newOffset + lastReplace.text.length()) {
        int delta = getDelta(lastReplace);
        fReplaceList.add(new Replace(offset - delta, offset, length, text));

      } else if (ASSERT_SEQUENTIALITY) {
        throw new IllegalArgumentException();

      } else {
        commit();
        fSource.replace(offset, length, text);
      }
    }
  }