1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / template / preferences / TemplateVariableProcessor.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java
new file mode 100644 (file)
index 0000000..ea9665c
--- /dev/null
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.text.template.preferences;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.eclipse.jface.text.templates.TemplateContextType;
+import org.eclipse.jface.text.templates.TemplateVariableResolver;
+
+public class TemplateVariableProcessor implements IContentAssistProcessor {
+
+       private static Comparator fgTemplateVariableProposalComparator = new Comparator() {
+               public int compare(Object arg0, Object arg1) {
+                       TemplateVariableProposal proposal0 = (TemplateVariableProposal) arg0;
+                       TemplateVariableProposal proposal1 = (TemplateVariableProposal) arg1;
+
+                       return proposal0.getDisplayString().compareTo(
+                                       proposal1.getDisplayString());
+               }
+
+               public boolean equals(Object arg0) {
+                       return false;
+               }
+       };
+
+       /** the context type */
+       private TemplateContextType fContextType;
+
+       /**
+        * Sets the context type.
+        */
+       public void setContextType(TemplateContextType contextType) {
+               fContextType = contextType;
+       }
+
+       /**
+        * Gets the context type.
+        */
+       public TemplateContextType getContextType() {
+               return fContextType;
+       }
+
+       /*
+        * @see IContentAssistProcessor#computeCompletionProposals(ITextViewer, int)
+        */
+       public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
+                       int documentOffset) {
+
+               if (fContextType == null)
+                       return null;
+
+               List proposals = new ArrayList();
+
+               String text = viewer.getDocument().get();
+               int start = getStart(text, documentOffset);
+               int end = documentOffset;
+
+               String string = text.substring(start, end);
+               String prefix = (string.length() >= 2) ? string.substring(2) : null;
+
+               int offset = start;
+               int length = end - start;
+
+               for (Iterator iterator = fContextType.resolvers(); iterator.hasNext();) {
+                       TemplateVariableResolver variable = (TemplateVariableResolver) iterator
+                                       .next();
+
+                       if (prefix == null || variable.getType().startsWith(prefix))
+                               proposals.add(new TemplateVariableProposal(variable, offset,
+                                               length, viewer));
+               }
+
+               Collections.sort(proposals, fgTemplateVariableProposalComparator);
+               return (ICompletionProposal[]) proposals
+                               .toArray(new ICompletionProposal[proposals.size()]);
+       }
+
+       /* Guesses the start position of the completion */
+       private int getStart(String string, int end) {
+               int start = end;
+
+               if (start >= 1 && string.charAt(start - 1) == '$')
+                       return start - 1;
+
+               while ((start != 0)
+                               && Character.isUnicodeIdentifierPart(string.charAt(start - 1)))
+                       start--;
+
+               if (start >= 2 && string.charAt(start - 1) == '{'
+                               && string.charAt(start - 2) == '$')
+                       return start - 2;
+
+               return end;
+       }
+
+       /*
+        * @see IContentAssistProcessor#computeContextInformation(ITextViewer, int)
+        */
+       public IContextInformation[] computeContextInformation(ITextViewer viewer,
+                       int documentOffset) {
+               return null;
+       }
+
+       /*
+        * @see IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
+        */
+       public char[] getCompletionProposalAutoActivationCharacters() {
+               return new char[] { '$' };
+       }
+
+       /*
+        * @see IContentAssistProcessor#getContextInformationAutoActivationCharacters()
+        */
+       public char[] getContextInformationAutoActivationCharacters() {
+               return null;
+       }
+
+       /*
+        * @see IContentAssistProcessor#getErrorMessage()
+        */
+       public String getErrorMessage() {
+               return null;
+       }
+
+       /*
+        * @see IContentAssistProcessor#getContextInformationValidator()
+        */
+       public IContextInformationValidator getContextInformationValidator() {
+               return null;
+       }
+
+}