1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / HTMLUnitContext.java
index c9abf99..bbd35b7 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 {
-
-  /** 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;
-
-  /**
-   * 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 <code>null</code>).
-   */
-  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 <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());
-  }
-
-  /*
-  * @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, <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.
-   */
-  //   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 class HTMLUnitContext extends CompilationUnitContext {
+
+       // 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 javadoc template context.
+        * 
+        * @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>).
+        */
+       public HTMLUnitContext(TemplateContextType type, IDocument document,
+                       int completionOffset, int completionLength,
+                       ICompilationUnit compilationUnit) {
+               super(type, document, completionOffset, completionLength,
+                               compilationUnit);
+       }
+
+       /*
+        * @see TemplateContext#canEvaluate(Template templates)
+        */
+       public boolean canEvaluate(Template template) {
+               String key = getKey();
+
+               if (fForceEvaluation)
+                       return true;
+
+               return template.matches(key, getContextType().getId())
+                               && (key.length() != 0)
+                               && template.getName().toLowerCase().startsWith(
+                                               key.toLowerCase());
+       }
+
+       /*
+        * @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--;
+                               }
+                       }
+
+                       // 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 getCompletionOffset();
+               }
+       }
+
+       /*
+        * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getEnd()
+        */
+       public int getEnd() {
+
+               if (getCompletionLength() == 0)
+                       return super.getEnd();
+
+               try {
+                       IDocument document = getDocument();
+
+                       int start = getCompletionOffset();
+                       int end = getCompletionOffset() + getCompletionLength();
+
+                       while (start != end
+                                       && Character.isWhitespace(document.getChar(end - 1)))
+                               end--;
+
+                       return end;
+
+               } catch (BadLocationException e) {
+                       return super.getEnd();
+               }
+       }
+
+       /*
+        * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getKey()
+        */
+       public String getKey() {
+
+               if (getCompletionLength() == 0)
+                       return super.getKey();
+
+               try {
+                       IDocument document = getDocument();
+
+                       int start = getStart();
+                       int end = getCompletionOffset();
+                       return start <= end ? document.get(start, end - start) : ""; //$NON-NLS-1$
+
+               } catch (BadLocationException e) {
+                       return super.getKey();
+               }
+       }
+
+       /*
+        * @see TemplateContext#evaluate(Template)
+        */
+       public TemplateBuffer evaluate(Template template)
+                       throws BadLocationException, TemplateException {
+               TemplateTranslator translator = new TemplateTranslator();
+               TemplateBuffer buffer = translator.translate(template);
+
+               getContextType().resolve(buffer, this);
+
+               return buffer;
+       }
 
 }