/*
* 11/29/2008
*
* CodeTemplate.java - A "template" (macro) for commonly-typed code.
*
* This library is distributed under a modified BSD license. See the included
* RSyntaxTextArea.License.txt file for details.
*/
package org.fife.ui.rsyntaxtextarea.templates;
import java.io.Serializable;
import javax.swing.text.BadLocationException;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
/**
* A "code template" is a kind of macro for commonly-typed code. It
* associates a short identifier with a longer code snippet, then when the
* code template is enabled and the short identifier is typed, it is
* replaced with the longer code snippet.<p>
*
* For example, you can associate the identifier <code>forb</code>
* (short for "for-block") with the following code:<p>
*
* <pre>
* for (<caret>) {
*
* }
* </pre>
*
* Then, whenever you type <code>forb</code> followed by a trigger
* (e.g., a space) into a text area with this <code>CodeTemplate</code>,
* the code snippet is added in place of <code>forb</code>. Further,
* the caret is placed at the position denoted by <code><caret></code>.<p>
*
* Static text replacements are done with {@link StaticCodeTemplate}. Dynamic
* templates can also be created and used.
*
* @author Robert Futrell
* @version 0.1
* @see StaticCodeTemplate
*/
public interface CodeTemplate extends Cloneable, Comparable<CodeTemplate>,
Serializable {
/**
* Creates a deep copy of this template.
*
* @return A deep copy of this template.
*/
public Object clone();
/**
* Returns the ID of this code template.
*
* @return The template's ID.
*/
public String getID();
/**
* Invokes this code template. The changes are made to the given text
* area.
*
* @param textArea The text area to operate on.
* @throws BadLocationException If something bad happens.
*/
public void invoke(RSyntaxTextArea textArea) throws BadLocationException;
}