/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.netbeans.editor.text.impl; import org.antlr.netbeans.editor.text.DocumentChange; import org.antlr.netbeans.editor.text.OffsetRegion; import org.netbeans.api.annotations.common.NonNull; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public class NbDocumentChange implements DocumentChange { private final int oldPosition; @NonNull private final String oldText; private final int newPosition; @NonNull private final String newText; private final int lineCountDelta; public NbDocumentChange(int oldPosition, @NonNull String oldText, int newPosition, @NonNull String newText) { this(oldPosition, oldText, newPosition, newText, getLineCount(newText) - getLineCount(oldText)); } public NbDocumentChange(int oldPosition, @NonNull String oldText, int newPosition, @NonNull String newText, int lineCountDelta) { this.oldPosition = oldPosition; this.oldText = oldText; this.newPosition = newPosition; this.newText = newText; this.lineCountDelta = lineCountDelta; } @Override public int getDelta() { return newText.length() - oldText.length(); } @Override public int getLineCountDelta() { return lineCountDelta; } @Override public int getOldOffset() { return oldPosition; } @Override public int getOldLength() { return oldText.length(); } @Override public int getOldEnd() { return oldPosition + oldText.length(); } @Override public OffsetRegion getOldRegion() { return new OffsetRegion(oldPosition, oldText.length()); } @Override public String getOldText() { return oldText; } @Override public int getNewOffset() { return newPosition; } @Override public int getNewLength() { return newText.length(); } @Override public int getNewEnd() { return newPosition + newText.length(); } @Override public OffsetRegion getNewRegion() { return new OffsetRegion(newPosition, newText.length()); } @Override public String getNewText() { return newText; } private static int getLineCount(@NonNull String text) { Parameters.notNull("text", text); int lines = 1; for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == '\n') { lines++; } } return lines; } }