code: public Tuple3<
              ReadOnlyStyledDocument<PS, SEG, S>,
              List<RichTextChange<PS, SEG, S>>,
              List<MaterializedListModification<Paragraph<PS, SEG, S>>>> replaceMulti(List<Replacement<PS, SEG, S>> replacements) {
          ReadOnlyStyledDocument<PS, SEG, S> updatedDoc = this;
          List<RichTextChange<PS, SEG, S>> richChangeList = new ArrayList<>(replacements.size());
          List<MaterializedListModification<Paragraph<PS, SEG, S>>> parChangeList = new ArrayList<>(replacements.size());
          for (Replacement<PS, SEG, S> r : replacements) {
              Tuple3<
                  ReadOnlyStyledDocument<PS, SEG, S>,
                  RichTextChange<PS, SEG, S>,
                  MaterializedListModification<Paragraph<PS, SEG, S>>
              > postReplacement = updatedDoc.replace(r);
              updatedDoc = postReplacement.get1();
              richChangeList.add(postReplacement.get2());
              parChangeList.add(postReplacement.get3());
          }
          return Tuples.t(updatedDoc, richChangeList, parChangeList);
      }
docs: Replaces multiple portions of this document in an efficient manner and returns
  <ol>
  <li>
  the updated version of this document that includes all of the replacements,
  </li>
  <li>
  the List of {@link RichTextChange} that represent all the changes from this document
  to the returned one, and
  </li>
  <li>
  the List of modifications used to update an area's list of paragraphs for each change.
  </li>
  </ol>