2 * (c) Copyright IBM Corp. 2000, 2001.
5 package net.sourceforge.phpdt.internal.corext.template.php;
7 import net.sourceforge.phpdt.internal.corext.template.ContextType;
8 import net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext;
9 import net.sourceforge.phpdt.internal.corext.template.Template;
10 import net.sourceforge.phpdt.internal.corext.template.TemplateBuffer;
11 import net.sourceforge.phpdt.internal.corext.template.TemplateTranslator;
13 import org.eclipse.core.runtime.CoreException;
14 import org.eclipse.jface.text.BadLocationException;
15 import org.eclipse.jface.text.IDocument;
18 * A compilation unit context.
20 public class HTMLUnitContext extends DocumentTemplateContext {
22 /** The platform default line delimiter. */
23 private static final String PLATFORM_LINE_DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
25 /** special characters
26 * '&' for the start of HTML entities
27 * '<' for the start of HTML tags
28 * '#' for the start of colour attributes
29 * '{' for the start of smarty partitions inside HTML code
31 private static final String specialChars = "&<#{";
33 /** The compilation unit, may be <code>null</code>. */
34 // private final ICompilationUnit fCompilationUnit;
35 protected boolean fForceEvaluation;
37 * Creates a compilation unit context.
39 * @param type the context type.
40 * @param document the document.
41 * @param completionPosition the completion position within the document.
42 * @param compilationUnit the compilation unit (may be <code>null</code>).
44 protected HTMLUnitContext(ContextType type, IDocument document, int completionPosition)
45 //,ICompilationUnit compilationUnit)
47 super(type, document, completionPosition, 0);
48 // fCompilationUnit= compilationUnit;
52 * @see TemplateContext#canEvaluate(Template templates)
54 public boolean canEvaluate(Template template) {
55 // return fForceEvaluation ||
56 return template.matches(getKey(), getContextType().getName());
60 * Returns <code>true</code> if template matches the prefix and context,
61 * <code>false</code> otherwise.
63 public boolean canEvaluate(String identifier) {
64 String prefix = getKey();
67 // fContextTypeName.equals(contextTypeName) &&
68 (prefix.length() != 0) && identifier.toLowerCase().startsWith(prefix.toLowerCase());
72 * @see TemplateContext#evaluate(Template template)
74 public TemplateBuffer evaluate(Template template) throws CoreException {
75 if (!canEvaluate(template))
78 TemplateTranslator translator = new TemplateTranslator();
79 TemplateBuffer buffer = translator.translate(template.getPattern());
81 getContextType().edit(buffer, this);
83 String lineDelimiter = null;
85 lineDelimiter = getDocument().getLineDelimiter(0);
86 } catch (BadLocationException e) {
89 if (lineDelimiter == null)
90 lineDelimiter = PLATFORM_LINE_DELIMITER;
92 // ITemplateEditor formatter= new JavaFormatter(lineDelimiter);
93 // formatter.edit(buffer, this);
99 * @see DocumentTemplateContext#getCompletionPosition();
101 public int getStart() {
102 IDocument document = getDocument();
104 int start = getCompletionOffset();
107 ch = document.getChar(start - 1);
108 if (specialChars.indexOf(ch) != (-1)) {
111 if (Character.isUnicodeIdentifierPart(ch)) {
117 if ((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1))) {
119 if ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1)) {
124 // while (((start != 0)
125 // && Character.isUnicodeIdentifierPart(document.getChar(start - 1)))
127 // && specialChars.indexOf(document.getChar(start - 1)) != (-1))) {
132 // && Character.isUnicodeIdentifierStart(document.getChar(start - 1)))
134 // && specialChars.indexOf(document.getChar(start - 1)) != (-1))) {
140 } catch (BadLocationException e) {
141 return getCompletionOffset();
146 * Returns the character before start position of completion.
148 public char getCharacterBeforeStart() {
149 int start = getStart();
152 return start == 0 ? ' ' : getDocument().getChar(start - 1);
154 } catch (BadLocationException e) {
159 * Returns the compilation unit if one is associated with this context, <code>null</code> otherwise.
161 // public final ICompilationUnit getCompilationUnit() {
162 // return fCompilationUnit;
166 * Returns the enclosing element of a particular element type, <code>null</code>
167 * if no enclosing element of that type exists.
169 // public IJavaElement findEnclosingElement(int elementType) {
170 // if (fCompilationUnit == null)
174 // IJavaElement element= fCompilationUnit.getElementAt(getStart());
175 // while (element != null && element.getElementType() != elementType)
176 // element= element.getParent();
180 // } catch (JavaModelException e) {
187 public void setForceEvaluation(boolean evaluate) {
188 fForceEvaluation = evaluate;