/*******************************************************************************
 * Copyright (c) 2005, 2016 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
 *
 *******************************************************************************/
package org.eclipse.dltk.ruby.internal.ui.templates;

import org.eclipse.dltk.core.IPreferencesLookupDelegate;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.ruby.internal.ui.RubyUI;
import org.eclipse.dltk.ui.CodeFormatterConstants;
import org.eclipse.dltk.ui.templates.IScriptTemplateIndenter;
import org.eclipse.dltk.ui.templates.ScriptTemplateContext;
import org.eclipse.dltk.ui.templates.TabExpandScriptTemplateIndenter;
import org.eclipse.dltk.ui.text.util.TabStyle;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.templates.TemplateContextType;

public class RubyTemplateContext extends ScriptTemplateContext {

	public RubyTemplateContext(TemplateContextType type, IDocument document,
			int completionOffset, int completionLength,
			ISourceModule sourceModule) {
		super(type, document, completionOffset, completionLength, sourceModule);
	}

	@Override
	protected IScriptTemplateIndenter getIndenter() {
		IPreferencesLookupDelegate prefs = getPreferences();
		if (TabStyle.SPACES == TabStyle.forName(prefs.getString(
				RubyUI.PLUGIN_ID, CodeFormatterConstants.FORMATTER_TAB_CHAR))) {
			return new TabExpandScriptTemplateIndenter(prefs
					.getInt(RubyUI.PLUGIN_ID,
							CodeFormatterConstants.FORMATTER_TAB_SIZE));
		}
		return super.getIndenter();
	}
}
