76343dd76df825c851696e921b1fe552531be8ea
[phpeclipse.git] /
1 /*
2  * (c) Copyright IBM Corp. 2000, 2001.
3  * All Rights Reserved.
4  */
5 package net.sourceforge.phpdt.internal.corext.template.php;
6
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;
12
13 import org.eclipse.core.runtime.CoreException;
14 import org.eclipse.jface.text.BadLocationException;
15 import org.eclipse.jface.text.IDocument;
16
17 /**
18  * A compilation unit context.
19  */
20 public class HTMLUnitContext extends DocumentTemplateContext {
21
22   /** The platform default line delimiter. */
23   private static final String PLATFORM_LINE_DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
24
25   private static final String specialChars = "&<#";
26   /** The compilation unit, may be <code>null</code>. */
27   //    private final ICompilationUnit fCompilationUnit;
28
29   /**
30    * Creates a compilation unit context.
31    * 
32    * @param type   the context type.
33    * @param document the document.
34    * @param completionPosition the completion position within the document.
35    * @param compilationUnit the compilation unit (may be <code>null</code>).
36    */
37   protected HTMLUnitContext(ContextType type, IDocument document, int completionPosition)
38   //,ICompilationUnit compilationUnit)
39   {
40     super(type, document, completionPosition, 0);
41     //  fCompilationUnit= compilationUnit;
42   }
43
44   /*
45   * @see TemplateContext#canEvaluate(Template templates)
46   */
47   public boolean canEvaluate(Template template) {
48     // return fForceEvaluation || 
49     return template.matches(getKey(), getContextType().getName());
50   }
51
52   /**
53    * Returns <code>true</code> if template matches the prefix and context,
54    * <code>false</code> otherwise.
55    */
56   public boolean canEvaluate(String identifier) {
57     String prefix = getKey();
58     return
59     //      fEnabled &&
60     //      fContextTypeName.equals(contextTypeName) &&
61      (prefix.length() != 0) && identifier.toLowerCase().startsWith(prefix.toLowerCase());
62   }
63
64   /*
65   * @see TemplateContext#evaluate(Template template)
66   */
67   public TemplateBuffer evaluate(Template template) throws CoreException {
68     if (!canEvaluate(template))
69       return null;
70
71     TemplateTranslator translator = new TemplateTranslator();
72     TemplateBuffer buffer = translator.translate(template.getPattern());
73
74     getContextType().edit(buffer, this);
75
76     String lineDelimiter = null;
77     try {
78       lineDelimiter = getDocument().getLineDelimiter(0);
79     } catch (BadLocationException e) {
80     }
81
82     if (lineDelimiter == null)
83       lineDelimiter = PLATFORM_LINE_DELIMITER;
84
85     //    ITemplateEditor formatter= new JavaFormatter(lineDelimiter);
86     //    formatter.edit(buffer, this);
87
88     return buffer;
89   }
90
91   /*
92    * @see DocumentTemplateContext#getCompletionPosition();
93    */
94   public int getStart() {
95     IDocument document = getDocument();
96     try {
97       int start = getCompletionOffset();
98
99           if ( ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
100                 return --start;
101           }
102                         
103       while (((start != 0) && Character.isUnicodeIdentifierPart(document.getChar(start - 1)))
104         || ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
105         start--;
106       }
107
108       if (((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1)))
109         || ((start != 0) && specialChars.indexOf(document.getChar(start - 1)) != (-1) )) {
110         start--;
111       }
112
113       return start;
114
115     } catch (BadLocationException e) {
116       return getCompletionOffset();
117     }
118   }
119
120   /**
121    * Returns the character before start position of completion.
122    */
123   public char getCharacterBeforeStart() {
124     int start = getStart();
125
126     try {
127       return start == 0 ? ' ' : getDocument().getChar(start - 1);
128
129     } catch (BadLocationException e) {
130       return ' ';
131     }
132   }
133   /**
134    * Returns the compilation unit if one is associated with this context, <code>null</code> otherwise.
135    */
136   //    public final ICompilationUnit getCompilationUnit() {
137   //            return fCompilationUnit;
138   //    }
139
140   /**
141    * Returns the enclosing element of a particular element type, <code>null</code>
142    * if no enclosing element of that type exists.
143    */
144   //    public IJavaElement findEnclosingElement(int elementType) {
145   //            if (fCompilationUnit == null)
146   //                    return null;
147   //
148   //            try {
149   //                    IJavaElement element= fCompilationUnit.getElementAt(getStart());
150   //                    while (element != null && element.getElementType() != elementType)
151   //                            element= element.getParent();
152   //                    
153   //                    return element;
154   //
155   //            } catch (JavaModelException e) {
156   //                    return null;
157   //            }       
158   //    }
159
160 }