Organized imports
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / HTMLUnitContext.java
index e459ce2..6e94d4c 100644 (file)
-/*
- * (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 net.sourceforge.phpdt.core.ICompilationUnit;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.TemplateBuffer;
+import org.eclipse.jface.text.templates.TemplateContextType;
+import org.eclipse.jface.text.templates.TemplateException;
+import org.eclipse.jface.text.templates.TemplateTranslator;
 
 /**
- * A compilation unit context.
+ * A context for javadoc.
  */
-public class HTMLUnitContext extends DocumentTemplateContext {
+public class HTMLUnitContext extends CompilationUnitContext {
 
-  /** 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 <code>null</code>. */
-  //   private final ICompilationUnit fCompilationUnit;
+  // tags
+  //   private static final char HTML_TAG_BEGIN= '<';
+  //   private static final char HTML_TAG_END= '>';
+  //   private static final char JAVADOC_TAG_BEGIN= '@';
+  /**
+   * special characters '&' for the start of HTML entities ' <' for the start of HTML tags '#' for the start of colour attributes
+   * '{' for the start of smarty partitions inside HTML code
+   */
+  private static final String specialChars = "&<#{";
 
   /**
-   * Creates a compilation unit context.
+   * Creates a javadoc template 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 <code>null</code>).
+   * @param type
+   *          the context type.
+   * @param document
+   *          the document.
+   * @param completionOffset
+   *          the completion offset within the document.
+   * @param completionLength
+   *          the completion length within the document.
+   * @param compilationUnit
+   *          the compilation unit (may be <code>null</code>).
    */
-  protected HTMLUnitContext(ContextType type, IDocument document, int completionPosition)
-  //,ICompilationUnit compilationUnit)
-  {
-    super(type, document, completionPosition);
-    // fCompilationUnit= compilationUnit;
+  public HTMLUnitContext(TemplateContextType type, IDocument document, int completionOffset, int completionLength,
+      ICompilationUnit compilationUnit) {
+    super(type, document, completionOffset, completionLength, compilationUnit);
   }
 
   /*
-  * @see TemplateContext#canEvaluate(Template templates)
-  */
+   * @see TemplateContext#canEvaluate(Template templates)
+   */
   public boolean canEvaluate(Template template) {
-    // return fForceEvaluation || 
-    return template.matches(getKey(), getContextType().getName());
-  }
+    String key = getKey();
 
-  /**
-   * Returns <code>true</code> if template matches the prefix and context,
-   * <code>false</code> otherwise.
-   */
-  public boolean canEvaluate(String identifier) {
-    String prefix = getKey();
-    return
-    //      fEnabled &&
-    //      fContextTypeName.equals(contextTypeName) &&
-     (prefix.length() != 0) && identifier.toLowerCase().startsWith(prefix.toLowerCase());
+    if (fForceEvaluation)
+      return true;
+
+    return template.matches(key, getContextType().getId()) && (key.length() != 0)
+        && template.getName().toLowerCase().startsWith(key.toLowerCase());
   }
 
   /*
-  * @see TemplateContext#evaluate(Template template)
-  */
-  public TemplateBuffer evaluate(Template template) throws CoreException {
-    if (!canEvaluate(template))
-      return null;
+   * @see DocumentTemplateContext#getCompletionPosition();
+   */
+  public int getStart() {
+    IDocument document = getDocument();
+    try {
+      int start = getCompletionOffset();
+      char ch = ' ';
+      while (start != 0) {
+        ch = document.getChar(start - 1);
+        if (specialChars.indexOf(ch) != (-1)) {
+          return --start;
+        }
+        if (Character.isUnicodeIdentifierPart(ch)) {
+          start--;
+        } else {
+          break;
+        }
+      }
+      if ((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1))) {
+        start--;
+        if ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1)) {
+          start--;
+        }
+      }
 
-    TemplateTranslator translator = new TemplateTranslator();
-    TemplateBuffer buffer = translator.translate(template.getPattern());
+      //      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--;
+      //}
 
-    getContextType().edit(buffer, this);
+      return start;
 
-    String lineDelimiter = null;
-    try {
-      lineDelimiter = getDocument().getLineDelimiter(0);
     } catch (BadLocationException e) {
+      return getCompletionOffset();
     }
-
-    if (lineDelimiter == null)
-      lineDelimiter = PLATFORM_LINE_DELIMITER;
-
-    //    ITemplateEditor formatter= new JavaFormatter(lineDelimiter);
-    //    formatter.edit(buffer, this);
-
-    return buffer;
   }
 
   /*
-   * @see DocumentTemplateContext#getCompletionPosition();
+   * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getEnd()
    */
-  public int getStart() {
-    IDocument document = getDocument();
+  public int getEnd() {
+
+    if (getCompletionLength() == 0)
+      return super.getEnd();
+
     try {
-      int start = getCompletionPosition();
+      IDocument document = getDocument();
 
-      while (((start != 0) && Character.isUnicodeIdentifierPart(document.getChar(start - 1)))
-        || ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
-        start--;
-      }
+      int start = getCompletionOffset();
+      int end = getCompletionOffset() + getCompletionLength();
 
-      if (((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1)))
-        || ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
-        start--;
-      }
+      while (start != end && Character.isWhitespace(document.getChar(end - 1)))
+        end--;
 
-      return start;
+      return end;
 
     } catch (BadLocationException e) {
-      return getCompletionPosition();
+      return super.getEnd();
     }
   }
 
-  /**
-   * Returns the character before start position of completion.
+  /*
+   * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getKey()
    */
-  public char getCharacterBeforeStart() {
-    int start = getStart();
+  public String getKey() {
+
+    if (getCompletionLength() == 0)
+      return super.getKey();
 
     try {
-      return start == 0 ? ' ' : getDocument().getChar(start - 1);
+      IDocument document = getDocument();
+
+      int start = getStart();
+      int end = getCompletionOffset();
+      return start <= end ? document.get(start, end - start) : ""; //$NON-NLS-1$
 
     } catch (BadLocationException e) {
-      return ' ';
+      return super.getKey();
     }
   }
-  /**
-   * Returns the compilation unit if one is associated with this context, <code>null</code> otherwise.
-   */
-  //   public final ICompilationUnit getCompilationUnit() {
-  //           return fCompilationUnit;
-  //   }
 
-  /**
-   * Returns the enclosing element of a particular element type, <code>null</code>
-   * if no enclosing element of that type exists.
+  /*
+   * @see TemplateContext#evaluate(Template)
    */
-  //   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;
-  //           }       
-  //   }
+  public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
+    TemplateTranslator translator = new TemplateTranslator();
+    TemplateBuffer buffer = translator.translate(template);
+
+    getContextType().resolve(buffer, this);
+
+    return buffer;
+  }
 
 }
+