/** {@inheritDoc} */ @Override public void apply(final Document document) { cursorOffset = document.getCursorOffset(); for (final Change change : changes) { document.replace(change.getOffset(), change.getLength(), change.getText()); } if (linkedEditor != null && linkedModeModel != null) { LinkedMode mode = linkedEditor.getLinkedMode(); LinkedModel model = linkedEditor.createLinkedModel(); if (linkedModeModel.getEscapePosition() != 0) { model.setEscapePosition(linkedModeModel.getEscapePosition()); } else { model.setEscapePosition(cursorOffset); } List<LinkedModelGroup> groups = new ArrayList<>(); for (LinkedPositionGroup positionGroup : linkedModeModel.getGroups()) { LinkedModelGroup group = linkedEditor.createLinkedGroup(); LinkedData data = positionGroup.getData(); if (data != null) { LinkedModelData modelData = linkedEditor.createLinkedModelData(); modelData.setType("link"); modelData.setValues(data.getValues()); group.setData(modelData); } List<Position> positions = new ArrayList<>(); for (Region region : positionGroup.getPositions()) { positions.add(new Position(region.getOffset(), region.getLength())); } group.setPositions(positions); groups.add(group); } model.setGroups(groups); mode.enterLinkedMode(model); } }