类org.eclipse.jface.text.DocumentEvent源码实例Demo

下面列出了怎么用org.eclipse.jface.text.DocumentEvent的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: goclipse   文件: LangCompletionProposal.java
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
	if(offset < getReplaceOffset())
		return false;
	
	String prefix;
	try {
		prefix = document.get(getReplaceOffset(), offset - getReplaceOffset());
	} catch (BadLocationException e) {
		return false;
	}
	boolean validPrefix = isValidPrefix(prefix);
	
	if(validPrefix && event != null) {
		// adapt replacement length to document event/ 
		int eventEndOffset = event.fOffset + event.fLength;
		// The event should be a common prefix completion (this should be true anyways) :
		int replaceEndPos = getReplaceOffset() + getReplaceLength();
		if(event.fOffset >= getReplaceOffset() && eventEndOffset <= replaceEndPos) {
			int delta = (event.fText == null ? 0 : event.fText.length()) - event.fLength;
			this.replaceLength = Math.max(getReplaceLength() + delta, 0);
		}
	}
	
	return validPrefix;
}
 
/**
 * Computes the change abstraction given a text event.
 *
 * @param event the text event to analyze
 * @return a change object describing the event
 */
private Change computeChange(TextEvent event) {
	DocumentEvent e= event.getDocumentEvent();
	if (e == null)
		return new Change(TypingRun.NO_CHANGE, -1);

	int start= e.getOffset();
	int end= e.getOffset() + e.getLength();
	String newText= e.getText();
	if (newText == null)
		newText= new String();

	if (start == end) {
		// no replace / delete / overwrite
		if (newText.length() == 1)
			return new Change(TypingRun.INSERT, end + 1);
	} else if (start == end - 1) {
		if (newText.length() == 1)
			return new Change(TypingRun.OVERTYPE, end);
		if (newText.length() == 0)
			return new Change(TypingRun.DELETE, start);
	}

	return new Change(TypingRun.UNKNOWN, -1);
}
 
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
	if (event != null) {
		int oldReplaceContextLength = getReplaceContextLength();
		int diff = event.getText().length() - event.getLength();
		setReplaceContextLength(oldReplaceContextLength + diff);
	}
	try {
		String prefix = document.get(replacementOffset, offset - replacementOffset);
		return matcher.isCandidateMatchingPrefix(replacementString, prefix);
	}
	catch (BadLocationException e) {
		log.info(e.getMessage(), e);
		return false;
	}
}
 
源代码4 项目: LogViewer   文件: DamageRepairer.java
public IRegion getDamageRegion(ITypedRegion partition, DocumentEvent event, boolean documentPartitioningChanged) {
    if (!documentPartitioningChanged) {
        try {

            IRegion info= document.getLineInformationOfOffset(event.getOffset());
            int start= Math.max(partition.getOffset(), info.getOffset());

            int end= event.getOffset() + (event.getText() == null ? event.getLength() : event.getText().length());

            if (info.getOffset() <= end && end <= info.getOffset() + info.getLength()) {
                // optimize the case of the same line
                end= info.getOffset() + info.getLength();
            } else
                end= endOfLineOf(end);

            end= Math.min(partition.getOffset() + partition.getLength(), end);
            return new Region(start, end - start);

        } catch (BadLocationException x) {
            logger.logInfo("unable to find location in document to repair a given region",x); //$NON-NLS-1$
        }
    }
    return partition;
}
 
源代码5 项目: xtext-eclipse   文件: HighlightingPresenter.java
/**
 * Update the given position with the given event. The event overlaps with the start of the position.
 * 
 * @param position
 *            The position
 * @param event
 *            The event
 */
private void updateWithOverStartEvent(AttributedPosition position, DocumentEvent event) {
	int eventOffset = event.getOffset();
	int eventEnd = eventOffset + event.getLength();

	String newText = event.getText();
	if (newText == null)
		newText = ""; //$NON-NLS-1$
	int eventNewLength = newText.length();

	int excludedLength = eventNewLength;
	while (excludedLength > 0 && Character.isJavaIdentifierPart(newText.charAt(excludedLength - 1)))
		excludedLength--;
	int deleted = eventEnd - position.getOffset();
	int inserted = eventNewLength - excludedLength;
	position.update(eventOffset + excludedLength, position.getLength() - deleted + inserted);
}
 
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
    String[] strs = PySelection.getActivationTokenAndQual(document, offset, false);
    //System.out.println("validating:"+strs[0]+" - "+strs[1]);
    //when we end with a '.', we should start a new completion (and not stay in the old one).
    if (strs[1].length() == 0 && (strs[0].length() == 0 || strs[0].endsWith("."))) {
        //System.out.println(false);
        return false;
    }
    String qualifier = strs[1];
    final boolean useSubstringMatchInCodeCompletion = PyCodeCompletionPreferences
            .getUseSubstringMatchInCodeCompletion();
    String displayString = getDisplayString();
    boolean ret = PyCodeCompletionUtils.acceptName(useSubstringMatchInCodeCompletion, displayString, qualifier);
    return ret;
}
 
源代码7 项目: e4macs   文件: KillRing.java
/**
 * Determine if a selection is being replaced by non-emacs+ behavior (or YANK), and save the
 * replaced content in the kill ring. This captures the Eclipse (but not emacs) behavior where
 * typing/pasting into a selection replaces the old with the new, so it is appropriate to save
 * the old text to the kill ring.
 * 
 * @param event the DocumentEvent containing the IDocument, offset, and length
 * @return true if the non-zero length region matches the current selection in the editor
 */
private boolean isSelectionReplace(DocumentEvent event) {
	int len = event.getLength();
	// ignore plain insertion or any emacs+ (except YANK) command invocation
	if (selectionReplace &&  len > 0 && shouldSave()) {
		ITextEditor editor = EmacsPlusUtils.getCurrentEditor();
		// otherwise, if we can get the selection, see if it matches the replace region
		if (editor != null && editor.getDocumentProvider().getDocument(editor.getEditorInput()) == event.getDocument()) {
			ISelection isel = editor.getSelectionProvider().getSelection();
			if (isel instanceof ITextSelection) {
				ITextSelection selection = (ITextSelection)isel;
				boolean result = selection.getOffset() == event.getOffset() && selection.getLength() == len;
				return result;
			}
		}
	}
	return false;
}
 
源代码8 项目: statecharts   文件: StyleRanges.java
public List<StyleRange> getRanges(String expression) {
	final List<StyleRange> ranges = Lists.newArrayList();
	DocumentEvent event = new DocumentEvent();
	event.fDocument = new DummyDocument(expression);
	DocumentTokenSource tokenSource = tokenSourceProvider.get();
	tokenSource.updateStructure(event);
	Iterator<ILexerTokenRegion> iterator = tokenSource.getTokenInfos().iterator();
	while (iterator.hasNext()) {
		ILexerTokenRegion next = iterator.next();
		TextAttribute attribute = attributeProvider.getAttribute(tokenTypeMapper.getId(next.getLexerTokenType()));
		StyleRange range = new StyleRange(next.getOffset(), next.getLength(), attribute.getForeground(),
				attribute.getBackground());
		range.font = attribute.getFont();
		range.fontStyle = attribute.getStyle();
		ranges.add(range);
	}
	return merge(ranges);
}
 
protected int getLineShift(IDocument oldState, DocumentEvent event) throws BadLocationException {
	// Insert edit.
	if (event.fLength == 0) {
		Preconditions.checkNotNull(event.fText, "fText");
		int beforeEndLine = event.fDocument.getLineOfOffset(event.fOffset + event.fLength);
		int afterEndLine = event.fDocument.getLineOfOffset(event.fOffset + event.fText.length());
		return afterEndLine - beforeEndLine;
	// Delete edit.
	} else if (event.fText == null || event.fText.isEmpty()) {
		return event.fDocument.getLineOfOffset(event.fOffset) - oldState.getLineOfOffset(event.fOffset + event.fLength);
	// Replace edit.
	} else {
		int startLine = oldState.getLineOfOffset(event.fOffset + event.fLength);
		int lineShift = event.fDocument.getLineOfOffset(event.fOffset + event.fText.length()) - startLine;
		return lineShift;
	}
}
 
源代码10 项目: KaiZen-OpenAPI-Editor   文件: JsonEditor.java
@Override
public void documentChanged(DocumentEvent event) {
    if (event.getDocument() instanceof JsonDocument) {
        final JsonDocument document = (JsonDocument) event.getDocument();

        document.onChange();
        Display.getCurrent().asyncExec(new Runnable() {
            @Override
            public void run() {
                if (contentOutline != null) {
                    // depends on the results of document.onChange()
                    contentOutline.setInput(getEditorInput());
                }
            }
        });
        // depends on the results of document.onChange()
        runValidate(false);
    }
}
 
@Override
public IRegion getDamageRegion(
	ITypedRegion partition,
	DocumentEvent event,
	boolean documentPartitioningChanged) {
	if (!documentPartitioningChanged) {
		try {

			IRegion info = fDocument.getLineInformationOfOffset(event.getOffset());
			int start = Math.max(partition.getOffset(), info.getOffset());

			int end =
				event.getOffset()
					+ (event.getText() == null
						? event.getLength()
						: event.getText().length());

			if (info.getOffset() <= end
				&& end <= info.getOffset() + info.getLength()) {
				// optimize the case of the same line
				end = info.getOffset() + info.getLength();
			} else
				end = endOfLineOf(end);

			end =
				Math.min(
					partition.getOffset() + partition.getLength(),
					end);
			return new Region(start, end - start);

		} catch (BadLocationException x) {
		}
	}

	return partition;
}
 
源代码12 项目: tm4e   文件: DocumentLineList.java
private void removeLine(DocumentEvent event) throws BadLocationException {
	int startLine = DocumentHelper.getStartLine(event);
	int endLine = DocumentHelper.getEndLine(event, true);
	for (int i = endLine; i > startLine; i--) {
		DocumentLineList.this.removeLine(i);
	}
}
 
@Override
public void documentChanged(DocumentEvent event) {

	String command = "document.replace(" + event.getOffset() + ", " + event.getLength() + ", \""
			+ toText(event.getText()) + "\");";
	write("\t\t" + command, true);

	//commands.add(new Command(command));
}
 
源代码14 项目: Pydev   文件: PyDefaultDamagerRepairer.java
/**
 * {@inheritDoc}
 * <p>
 * This implementation damages entire lines unless clipped by the given partition.
 * </p>
 *
 * @return the full lines containing the document changes described by the document event,
 *         clipped by the given partition. If there was a partitioning change then the whole
 *         partition is returned.
 */
@Override
public IRegion getDamageRegion(ITypedRegion partition, DocumentEvent e, boolean documentPartitioningChanged) {

    if (!documentPartitioningChanged) {
        try {

            IRegion info = fDocument.getLineInformationOfOffset(e.getOffset());
            int start = Math.max(partition.getOffset(), info.getOffset());

            int end = e.getOffset() + (e.getText() == null ? e.getLength() : e.getText().length());

            if (info.getOffset() <= end && end <= info.getOffset() + info.getLength()) {
                // optimize the case of the same line
                end = info.getOffset() + info.getLength();
            } else {
                end = endOfLineOf(end);
            }

            end = Math.min(partition.getOffset() + partition.getLength(), end);
            return new Region(start, end - start);

        } catch (BadLocationException x) {
        }
    }

    return partition;
}
 
源代码15 项目: uima-uimaj   文件: NonRuleBasedDamagerRepairer.java
/**
 * Gets the damage region.
 *
 * @param partition the partition
 * @param event the event
 * @param documentPartitioningChanged the document partitioning changed
 * @return the damage region
 * @see IPresentationDamager#getDamageRegion(ITypedRegion, DocumentEvent, boolean)
 */
@Override
public IRegion getDamageRegion(ITypedRegion partition, DocumentEvent event,
        boolean documentPartitioningChanged) {
  if (!documentPartitioningChanged) {
    try {

      IRegion info = fDocument.getLineInformationOfOffset(event.getOffset());
      int start = Math.max(partition.getOffset(), info.getOffset());

      int end = event.getOffset()
              + (event.getText() == null ? event.getLength() : event.getText().length());

      if (info.getOffset() <= end && end <= info.getOffset() + info.getLength()) {
        // optimize the case of the same line
        end = info.getOffset() + info.getLength();
      } else
        end = endOfLineOf(end);

      end = Math.min(partition.getOffset() + partition.getLength(), end);
      return new Region(start, end - start);

    } catch (BadLocationException x) {
    }
  }

  return partition;
}
 
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
	if (getContext() instanceof JavaStatementPostfixContext) {
		JavaStatementPostfixContext c = (JavaStatementPostfixContext) getContext();
		try {
			int start = c.getStart() + c.getAffectedSourceRegion().getLength() + 1;
			String content = document.get(start, offset - start);
			return this.getTemplate().getName().toLowerCase().startsWith(content.toLowerCase());
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
	}
	return super.validate(document, offset, event);
}
 
源代码17 项目: xtext-eclipse   文件: PresentationDamager.java
/**
 * @return <code>true</code> only if the lastDamage is encloses the affected text of the given DocumentEvent.
 */
protected boolean isEventMatchingLastDamage(DocumentEvent e, IRegion lastDamage) {
	int eventStart = e.getOffset();
	int eventEnd = eventStart+e.getText().length();
	int damageStart = lastDamage.getOffset();
	int damageEnd = damageStart+lastDamage.getLength();
	boolean result = damageStart<=eventStart && damageEnd>=eventEnd;
	return result;
}
 
源代码18 项目: xtext-eclipse   文件: DocumentTokenSource.java
/**
 * @since 2.4
 */
protected RepairEntryData getRepairEntryData(DocumentEvent e) throws Exception {
	int tokenStartsAt = 0;
	int tokenInfoIdx = 0;
	for(tokenInfoIdx = 0; tokenInfoIdx< getInternalModifyableTokenInfos().size(); ++tokenInfoIdx) {
		TokenInfo oldToken = getInternalModifyableTokenInfos().get(tokenInfoIdx);
		if(tokenStartsAt <= e.getOffset() && tokenStartsAt + oldToken.getLength() >= e.getOffset())
			break;
		tokenStartsAt += oldToken.getLength();
	}
	final TokenSource delegate = createTokenSource(e.fDocument.get(tokenStartsAt, e.fDocument.getLength() - tokenStartsAt));
	final int offset = tokenStartsAt;
	TokenSource source = new TokenSource() {
		@Override
		public Token nextToken() {
			CommonToken commonToken = (CommonToken) delegate.nextToken();
			commonToken.setText(commonToken.getText());
			commonToken.setStartIndex(commonToken.getStartIndex()+offset);
			commonToken.setStopIndex(commonToken.getStopIndex()+offset);
			return commonToken;
		}

		@Override
		public String getSourceName() {
			return delegate.getSourceName();
		}
	};
	final CommonToken token = (CommonToken) source.nextToken();
	return new RepairEntryData(offset, tokenInfoIdx, token, source);
}
 
源代码19 项目: xtext-eclipse   文件: XtextDocument.java
@Override
protected void fireDocumentChanged(DocumentEvent event) {
	new DisplayRunnable() {
		@Override
		protected void run() throws Exception {
			cancelReaders(resource);
			tokenSource.updateStructure(event);
			XtextDocument.super.fireDocumentChanged(event);
		}
	}.syncExec();
}
 
源代码20 项目: typescript.java   文件: IDETypeScriptFile.java
@Override
public void documentAboutToBeChanged(DocumentEvent event) {
	if (isDisableChanged()) {
		return;
	}
	setDirty(true);
	if (getProject().getProjectSettings().getSynchStrategy() == SynchStrategy.CHANGE) {
		synchronized (synchLock) {
			try {
				String newText = event.getText();
				int position = event.getOffset();

				Location loc = getLocation(position);
				int line = loc.getLine();
				int offset = loc.getOffset();

				Location endLoc = getLocation(position + event.getLength());
				int endLine = endLoc.getLine();
				int endOffset = endLoc.getOffset();

				getProject().getClient().changeFile(getName(), line, offset, endLine, endOffset, newText);
			} catch (Throwable e) {
				e.printStackTrace();
			} finally {
				setDirty(false);
				synchLock.notifyAll();
			}
		}
	}
}
 
源代码21 项目: Pydev   文件: SimpleAssistProposal.java
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
    String[] strs = PySelection.getActivationTokenAndQual(document, offset, false);

    String activationToken = strs[0];
    String qualifier = strs[1];

    if (activationToken.equals("") && qualifier.equals("") == false) {
        if (fReplacementString.startsWith(qualifier) && !fReplacementString.equals(qualifier)) {
            return true;
        }
    }

    return false;
}
 
源代码22 项目: xtext-eclipse   文件: XtextDocumentProvider.java
@Override
public void documentChanged(DocumentEvent event) {
	if (element.fCanBeSaved && modificationStamp == event.getModificationStamp()) {
		element.fCanBeSaved = false;
		fireElementDirtyStateChanged(element.fElement, element.fCanBeSaved);
	} else if (!element.fCanBeSaved) {
		element.fCanBeSaved = true;
		fireElementDirtyStateChanged(element.fElement, element.fCanBeSaved);
	}
}
 
源代码23 项目: xtext-eclipse   文件: HighlightingPresenter.java
/**
 * Update the given position with the given event. The event overlaps with the end of the position.
 * 
 * @param position
 *            The position
 * @param event
 *            The event
 */
private void updateWithOverEndEvent(AttributedPosition position, DocumentEvent event) {
	String newText = event.getText();
	if (newText == null)
		newText = ""; //$NON-NLS-1$
	int eventNewLength = newText.length();

	int includedLength = 0;
	while (includedLength < eventNewLength && Character.isJavaIdentifierPart(newText.charAt(includedLength)))
		includedLength++;
	position.setLength(event.getOffset() - position.getOffset() + includedLength);
}
 
private IEditingSupport createViewerHelper() {
	return new IEditingSupport() {
		public boolean isOriginator(DocumentEvent event, IRegion subjectRegion) {
			return true; // assume true, since we only register while we are active
		}
		public boolean ownsFocusShell() {
			return fIsQueryShowing;
		}

	};
}
 
/**
 * Update the given position with the given event. The event precedes the position.
 *
 * @param position The position
 * @param event The event
 */
private void updateWithPrecedingEvent(HighlightedPosition position, DocumentEvent event) {
	String newText= event.getText();
	int eventNewLength= newText != null ? newText.length() : 0;
	int deltaLength= eventNewLength - event.getLength();

	position.setOffset(position.getOffset() + deltaLength);
}
 
源代码26 项目: xtext-eclipse   文件: XtextReconciler.java
private void handleDocumentChanged(DocumentEvent event) {
	/*
	 * The reconciler does not partake in the general 
	 * model listener cancelation, so it has to cancel 
	 * itself on document changes
	 */
	cancel();
	if (log.isTraceEnabled())
		log.trace("Reconciler cancelled");
	reallyEnqueueEvent(event);
	schedule(delay);
	if (log.isTraceEnabled())
		log.trace("Reconciler scheduled with delay: " + delay);
}
 
源代码27 项目: xtext-eclipse   文件: XtextReconciler.java
/**
 * @since 2.7
 */
public void forceReconcile() {
	if(editor != null && editor.getDocument() != null) {
		DocumentEvent dummyEvent = new DocumentEvent(editor.getDocument(), 0, 0, "");
		handleDocumentChanged(dummyEvent);
	}
}
 
public boolean validate(IDocument document, int offset, DocumentEvent event)
{
	try
	{
		String content = document.get(fReplacementPosition.getOffset(), offset - fReplacementPosition.getOffset());
		if (fReplacementString.startsWith(content))
			return true;
	}
	catch (BadLocationException e)
	{
		// ignore concurrently modified document
	}
	return false;
}
 
public HighlightedPositionDiffContext(
		IDocument oldState,
		DocumentEvent event,
		Iterable<? extends HighlightedPositionCore> oldPositions,
		Iterable<? extends HighlightedPositionCore> newPositions) {

	this.oldState = oldState;
	this.newState = event.fDocument;
	this.event = event;
	this.oldPositions = ImmutableList.copyOf(oldPositions);
	this.newPositions = ImmutableList.copyOf(newPositions);
}
 
public boolean validate(IDocument document, int offset, DocumentEvent event) {
	try {
		String content= document.get(fReplacementPosition.getOffset(), offset - fReplacementPosition.getOffset());
		if (fReplacementString.startsWith(content))
			return true;
	} catch (BadLocationException e) {
		// ignore concurrently modified document
	}
	return false;
}
 
 类所在包
 同包方法