Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2009 itemis AG (http://www.itemis.eu) 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 /
  
  package org.eclipse.xtext.ui.editor.formatting;
  
 import  org.eclipse.jface.text.BadLocationException;
 import  org.eclipse.jface.text.IDocument;
 import  org.eclipse.jface.text.IRegion;
 import  org.eclipse.jface.text.formatter.IContentFormatter;
 import  org.eclipse.jface.text.formatter.IFormattingStrategy;
 import  org.eclipse.jface.text.source.ISourceViewer;
 import  org.eclipse.jface.text.source.SourceViewerConfiguration;
 import  org.eclipse.text.edits.ReplaceEdit;
 import  org.eclipse.text.edits.TextEdit;
 
 
 public class ContentFormatterFactory implements IContentFormatterFactory {
 
 	public class ContentFormatter implements IContentFormatter {
 		public void format(IDocument document, IRegion region) {
 			IXtextDocument doc = (IXtextDocumentdocument;
 			try {
 				if (r != null) {
 					TextEdit edit = createTextEdit(docr);
 					if (edit != null) {
 						edit.apply(doc);
 					}
 					
 				}
 			} catch (BadLocationException e) {
 				throw new RuntimeException(e);
 			}
 		}
 		
 		public IFormattingStrategy getFormattingStrategy(String contentType) {
 			return null;
 		}
 	}

TODO: Use a org.eclipse.xtext.util.ReplaceRegion instead of the ReplaceRegion.
 
 	public class FormattingUnitOfWork implements
 
 		protected final IRegion region;
 
 		public FormattingUnitOfWork(IRegion region) {
 			super();
 			this. = region;
 		}
 
 		public ReplaceRegion exec(XtextResource statethrows Exception {
 			IParseResult parseResult = state.getParseResult();
 			if (parseResult == null)
 				return null;
 			IFormattedRegion r = .format(parseResult.getRootNode(), .getOffset(), .getLength());
 			return new ReplaceRegion(r.getOffset(), r.getLength(), r.getFormattedText());
 		}
 	}
 
 
 	public IContentFormatter createConfiguredFormatter(
 			SourceViewerConfiguration configuration, ISourceViewer sourceViewer) {
 		return new ContentFormatter();
 	}

Create a text edit from the given replace region. The default impl will strip the common leading and trailing parts of the replaced region and the replacement text.

Since:
2.8
 
 	protected TextEdit createTextEdit(IXtextDocument docReplaceRegion rthrows BadLocationException {
 		String originalText = doc.get(r.getOffset(), r.getLength());
 		String newText = r.getText();
 		int start = 0;
 		int originalEnd = originalText.length() - 1;
 		int newEnd = newText.length() - 1;
 		int minLen = Math.min(r.getLength(), newText.length());
		while(start < minLen && originalText.charAt(start) == newText.charAt(start)) {
			start++;
		}
		while (originalEnd >= start
				&& newEnd >= start
				&& originalText.charAt(originalEnd) == newText.charAt(newEnd)) {
			originalEnd--;
			newEnd--;
		}
		return new ReplaceEdit(r.getOffset() + startoriginalEnd - start + 1, r.getText().substring(startnewEnd + 1));
	}
New to GrepCode? Check out our FAQ X