X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLUnitContext.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLUnitContext.java index e459ce2..bbd35b7 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLUnitContext.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLUnitContext.java @@ -1,155 +1,175 @@ -/* - * (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 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; - // } - // } +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 null). + */ + 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; + } }