Java tutorial
/** * Copyright (c) 2009 by JP Moresmau * This code is made available under the terms of the Eclipse Public License, * version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html */ package net.sf.eclipsefp.haskell.ui.internal.editors.cabal; import java.util.Arrays; import net.sf.eclipsefp.haskell.core.cabalmodel.CabalSyntax; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.internal.preferences.editor.IEditorPreferenceNames; import net.sf.eclipsefp.haskell.util.LangUtil; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy; import org.eclipse.jface.text.DocumentCommand; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.TextUtilities; /** * Indent strategy: indent after section name * * @author JP Moresmau */ public class CabalAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy { @Override public void customizeDocumentCommand(final IDocument d, final DocumentCommand c) { // end of line if (c.length == 0 && c.text != null && TextUtilities.endsWith(d.getLegalLineDelimiters(), c.text) != -1) { // add indent level after a cabal section (e.g., global, executable, library) try { IRegion r = d.getLineInformation(d.getLineOfOffset(c.offset)); String s = LangUtil.ltrim(d.get(r.getOffset(), r.getLength()).toLowerCase()); // Superclass takes care of autoindentation super.customizeDocumentCommand(d, c); for (String section : CabalSyntax.sections.keySet()) { if (s.equals(section) || s.startsWith(section + " ")) { //$NON-NLS-1$ char[] ch = new char[getTabWidth()]; Arrays.fill(ch, ' '); c.text = c.text + new String(ch); return; } } } catch (BadLocationException ble) { // ignore } } } private int getTabWidth() { IPreferenceStore prefStore = HaskellUIPlugin.getDefault().getPreferenceStore(); return prefStore.getInt(IEditorPreferenceNames.EDITOR_CABAL_TAB_WIDTH); } }