blob: 9e23fe2f28ffee30b476643cf88e7be12f3bfd60 [file] [log] [blame]
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.editor.ex;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public interface DocumentEx extends Document {
void setStripTrailingSpacesEnabled(boolean isEnabled);
@NotNull LineIterator createLineIterator();
void setModificationStamp(long modificationStamp);
void addEditReadOnlyListener(@NotNull EditReadOnlyListener listener);
void removeEditReadOnlyListener(@NotNull EditReadOnlyListener listener);
void replaceText(@NotNull CharSequence chars, long newModificationStamp);
/**
* Moves text from the <code>[src start; src end)</code> range to the <code>dstOffset</code> offset.
* <p/>
* The benefit to use this method over usual {@link #deleteString(int, int)} and {@link #replaceString(int, int, CharSequence)}
* is that {@link #createRangeMarker(int, int, boolean) range markers} from the <code>[srcStart; srcEnd)</code> range have
* a chance to be preserved.
*
* @param srcStart start offset of the text to move (inclusive)
* @param srcEnd end offset of the text to move (exclusive)
* @param dstOffset the offset to insert the text to. Must be outside of the (srcStart, srcEnd) range.
*/
void moveText(int srcStart, int srcEnd, int dstOffset);
int getListenersCount();
void suppressGuardedExceptions();
void unSuppressGuardedExceptions();
boolean isInEventsHandling();
void clearLineModificationFlags();
boolean removeRangeMarker(@NotNull RangeMarkerEx rangeMarker);
void registerRangeMarker(@NotNull RangeMarkerEx rangeMarker,
int start,
int end,
boolean greedyToLeft,
boolean greedyToRight,
int layer);
boolean isInBulkUpdate();
void setInBulkUpdate(boolean value);
@NotNull
List<RangeMarker> getGuardedBlocks();
boolean processRangeMarkers(@NotNull Processor<RangeMarker> processor);
boolean processRangeMarkersOverlappingWith(int start, int end, @NotNull Processor<RangeMarker> processor);
}