blob: 97d4ef68a30bfb006dcd920916e779df173c4e79 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.core.internal.provisional.text;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.text.IDocumentExtension;
import org.eclipse.wst.sse.core.internal.encoding.EncodingMemento;
import org.eclipse.wst.sse.core.internal.ltk.parser.RegionParser;
import org.eclipse.wst.sse.core.internal.provisional.document.IEncodedDocument;
import org.eclipse.wst.sse.core.internal.provisional.events.IModelAboutToBeChangedListener;
import org.eclipse.wst.sse.core.internal.provisional.events.IStructuredDocumentListener;
import org.eclipse.wst.sse.core.internal.provisional.events.StructuredDocumentEvent;
import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager;
/**
* A IStructuredDocument is a collection of StructuredDocumentRegions. It's
* often called "flat" because its contents by design do not contain much
* structural information beyond containment. Clients should not implement.
*/
public interface IStructuredDocument extends IEncodedDocument, IDocumentExtension, IAdaptable {
void addDocumentAboutToChangeListener(IModelAboutToBeChangedListener listener);
/**
* The StructuredDocumentListeners and ModelChangedListeners are very
* similar. They both receive identical events. The difference is the
* timing. The "pure" StructuredDocumentListeners are notified after the
* structuredDocument has been changed, but before other, related models
* may have been changed such as the Structural Model. The Structural
* model is in fact itself a "pure" StructuredDocumentListner. The
* ModelChangedListeners can rest assured that all models and data have
* been updated from the change by the tiem they are notified. This is
* especially important for the text widget, for example, which may rely
* on both structuredDocument and structural model information.
*/
void addDocumentChangedListener(IStructuredDocumentListener listener);
/**
* The StructuredDocumentListeners and ModelChangedListeners are very
* similar. They both receive identical events. The difference is the
* timing. The "pure" StructuredDocumentListeners are notified after the
* structuredDocument has been changed, but before other, related models
* may have been changed such as the Structural Model. The Structural
* model is in fact itself a "pure" StructuredDocumentListner. The
* ModelChangedListeners can rest assured that all models and data have
* been updated from the change by the tiem they are notified. This is
* especially important for the text widget, for example, which may rely
* on both structuredDocument and structural model information.
*/
void addDocumentChangingListener(IStructuredDocumentListener listener);
/**
* this API ensures that any portion of the document within startOff to
* length is not readonly (that is, that its editable). Note that if the
* range overlaps with other readonly regions, those other readonly
* regions will be adjusted.
*
* @param startOffset
* @param length
*/
void clearReadOnly(int startOffset, int length);
/**
* returns true if any portion of startOffset to length is readonly
*
* @param startOffset
* @param length
* @return
*/
boolean containsReadOnly(int startOffset, int length);
/**
* This method is to remember info about the encoding When the resource
* was last loaded or saved. Note: it is not kept "current", that is, can
* not be depended on blindly to reflect what encoding to use. For that,
* must go through the normal rules expressed in Loaders and Dumpers.
*/
EncodingMemento getEncodingMemento();
org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion getFirstStructuredDocumentRegion();
org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion getLastStructuredDocumentRegion();
/**
* This can be considered the preferred delimiter.
*/
public String getLineDelimiter();
int getLineOfOffset(int offset); // throws SourceEditingException;
/**
* The parser is now required on constructor, so there are occasions it
* needs to be retrieved, such as to be initialized by EmbeddedContentType
*/
RegionParser getParser();
/**
* @deprecated use getStructuredDocumentRegions()
* @return
*/
IStructuredDocumentRegionList getRegionList();
/**
* Returns the <code>IStructuredDocumentRegion</code> at the given character offset.
* @param offset
* @return the <code>IStructuredDocumentRegion</code> at the given character offset.
*/
IStructuredDocumentRegion getRegionAtCharacterOffset(int offset);
/**
* Returns <code>IStructuredDocumentRegion</code>s in the specified range.
* @param offset
* @param length
* @return <code>IStructuredDocumentRegion</code>s in the specified range.
*/
IStructuredDocumentRegion[] getStructuredDocumentRegions(int offset, int length);
/**
* Returns all <code>IStructuredDocumentRegion</code>s in the document.
* @return all <code>IStructuredDocumentRegion</code>s in the document.
*/
IStructuredDocumentRegion[] getStructuredDocumentRegions();
/**
* Note: this method was made public, and part of the interface, for
* easier testing. Clients normally never manipulate the reparser directly
* (nor should they need to).
*/
IStructuredTextReParser getReParser();
String getText();
IStructuredTextUndoManager getUndoManager();
/**
* causes that portion of the document from startOffset to length to be
* marked as readonly. Note that if this range overlaps with some other
* region with is readonly, the regions are effectivly combined.
*
* @param startOffset
* @param length
*/
void makeReadOnly(int startOffset, int length);
/**
* newInstance is similar to clone, except it contains no data. One
* important thing to duplicate is the parser, with the parser correctly
* "cloned", including its tokeninzer, block tags, etc.
*
* NOTE: even after obtaining a 'newInstance' the client may have to do
* some initialization, for example, it may need to add its own model
* listeners. Or, as another example, if the IStructuredDocument has a
* parser of type StructuredDocumentRegionParser, then the client may need
* to add its own StructuredDocumentRegionHandler to that parser, if it is
* in fact needed.
*/
IStructuredDocument newInstance();
void removeDocumentAboutToChangeListener(IModelAboutToBeChangedListener listener);
void removeDocumentChangedListener(IStructuredDocumentListener listener);
void removeDocumentChangingListener(IStructuredDocumentListener listener);
/**
* One of the APIs to manipulate the IStructuredDocument.
*
* replaceText replaces the text from oldStart to oldEnd with the new text
* found in the requestedChange string. If oldStart and oldEnd are equal,
* it is an insertion request. If requestedChange is null (or empty) it is
* a delete request. Otherwise it is a replace request.
*/
StructuredDocumentEvent replaceText(Object source, int oldStart, int replacementLength, String requestedChange);
/**
* Note, same as replaceText API, but will allow readonly areas to be
* replaced. This should seldom be called with a value of "true" for
* ignoreReadOnlySetting. One case where its ok is with undo operations
* (since, presumably, if user just did something that happended to
* involve some inserting readonly text, they should normally be allowed
* to still undo that operation. Otherwise, I can't think of a single
* example, unless its to give the user a choice, e.g. "you are about to
* overwrite read only portions, do you want to continue".
*/
StructuredDocumentEvent replaceText(Object source, int oldStart, int replacementLength, String requestedChange, boolean ignoreReadOnlySetting);
/**
* This method is to remember info about the encoding When the resource
* was last loaded or saved. Note: it is not kept "current", that is, can
* not be depended on blindly to reflect what encoding to use. For that,
* must go through the normal rules expressed in Loaders and Dumpers.
*/
void setEncodingMemento(EncodingMemento encodingMemento);
public void setLineDelimiter(String delimiter);
/**
* One of the APIs to manipulate the IStructuredDocument in terms of Text.
*
* The setText method replaces all text in the model.
*/
StructuredDocumentEvent setText(Object requester, String allText);
void setUndoManager(IStructuredTextUndoManager undoManager);
}