/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package net.sourceforge.phpdt.internal.corext.template.php;
import net.sourceforge.phpdt.internal.corext.template.ContextType;
import net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext;
import net.sourceforge.phpdt.internal.corext.template.Template;
import net.sourceforge.phpdt.internal.corext.template.TemplateBuffer;
import net.sourceforge.phpdt.internal.corext.template.TemplateTranslator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
/**
* A compilation unit context.
*/
public class HTMLUnitContext extends DocumentTemplateContext {
/** The platform default line delimiter. */
private static final String PLATFORM_LINE_DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
private static final String specialChars = "&<#";
/** The compilation unit, may be null
. */
// private final ICompilationUnit fCompilationUnit;
/**
* Creates a compilation unit context.
*
* @param type the context type.
* @param document the document.
* @param completionPosition the completion position within the document.
* @param compilationUnit the compilation unit (may be null
).
*/
protected HTMLUnitContext(ContextType type, IDocument document, int completionPosition)
//,ICompilationUnit compilationUnit)
{
super(type, document, completionPosition);
// fCompilationUnit= compilationUnit;
}
/*
* @see TemplateContext#canEvaluate(Template templates)
*/
public boolean canEvaluate(Template template) {
// return fForceEvaluation ||
return template.matches(getKey(), getContextType().getName());
}
/**
* Returns true
if template matches the prefix and context,
* false
otherwise.
*/
public boolean canEvaluate(String identifier) {
String prefix = getKey();
return
// fEnabled &&
// fContextTypeName.equals(contextTypeName) &&
(prefix.length() != 0) && identifier.toLowerCase().startsWith(prefix.toLowerCase());
}
/*
* @see TemplateContext#evaluate(Template template)
*/
public TemplateBuffer evaluate(Template template) throws CoreException {
if (!canEvaluate(template))
return null;
TemplateTranslator translator = new TemplateTranslator();
TemplateBuffer buffer = translator.translate(template.getPattern());
getContextType().edit(buffer, this);
String lineDelimiter = null;
try {
lineDelimiter = getDocument().getLineDelimiter(0);
} catch (BadLocationException e) {
}
if (lineDelimiter == null)
lineDelimiter = PLATFORM_LINE_DELIMITER;
// ITemplateEditor formatter= new JavaFormatter(lineDelimiter);
// formatter.edit(buffer, this);
return buffer;
}
/*
* @see DocumentTemplateContext#getCompletionPosition();
*/
public int getStart() {
IDocument document = getDocument();
try {
int start = getCompletionPosition();
while (((start != 0) && Character.isUnicodeIdentifierPart(document.getChar(start - 1)))
|| ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
start--;
}
if (((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1)))
|| ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
start--;
}
return start;
} catch (BadLocationException e) {
return getCompletionPosition();
}
}
/**
* Returns the character before start position of completion.
*/
public char getCharacterBeforeStart() {
int start = getStart();
try {
return start == 0 ? ' ' : getDocument().getChar(start - 1);
} catch (BadLocationException e) {
return ' ';
}
}
/**
* Returns the compilation unit if one is associated with this context, null
otherwise.
*/
// public final ICompilationUnit getCompilationUnit() {
// return fCompilationUnit;
// }
/**
* Returns the enclosing element of a particular element type, null
* if no enclosing element of that type exists.
*/
// public IJavaElement findEnclosingElement(int elementType) {
// if (fCompilationUnit == null)
// return null;
//
// try {
// IJavaElement element= fCompilationUnit.getElementAt(getStart());
// while (element != null && element.getElementType() != elementType)
// element= element.getParent();
//
// return element;
//
// } catch (JavaModelException e) {
// return null;
// }
// }
}