package com.redhat.ceylon.eclipse.util; import org.eclipse.jface.text.IDocument; import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.utilJ2C; import static org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS; import static org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentExtension4; import org.eclipse.jface.text.IRegion; import org.eclipse.ui.editors.text.EditorsUI; import com.redhat.ceylon.compiler.typechecker.tree.Node; public class Indents { private final static com.redhat.ceylon.ide.common.util.Indents<IDocument> indents = utilJ2C().indents(); public static com.redhat.ceylon.ide.common.util.Indents<IDocument> indents() { return indents; } public String getIndent(Node node, IDocument doc) { if (node==null||node.getEndToken()==null|| node.getEndToken().getLine()==0) { return ""; } try { IRegion region = doc.getLineInformation(node.getToken().getLine()-1); String line = doc.get(region.getOffset(), region.getLength()); char[] chars = line.toCharArray(); for (int i=0; i<chars.length; i++) { if (chars[i]!='\t' && chars[i]!=' ') { return line.substring(0,i); } } return line; } catch (BadLocationException ble) { return ""; } } public String getDefaultIndent() { StringBuilder result = new StringBuilder(); initialIndent(result); return result.toString(); } public int getIndentSpaces() { IPreferenceStore store = EditorsUI.getPreferenceStore(); return store==null ? 4 : store.getInt(EDITOR_TAB_WIDTH); } public boolean getIndentWithSpaces() { IPreferenceStore store = EditorsUI.getPreferenceStore(); return store==null ? false : store.getBoolean(EDITOR_SPACES_FOR_TABS); } public void initialIndent(StringBuilder buf) { //guess an initial indent level if (getIndentWithSpaces()) { int spaces = getIndentSpaces(); for (int i=1; i<=spaces; i++) { buf.append(' '); } } else { buf.append('\t'); } } public String getDefaultLineDelimiter(IDocument document) { if (document instanceof IDocumentExtension4) { return ((IDocumentExtension4) document).getDefaultLineDelimiter(); } else { return System.lineSeparator(); } } }