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 / spelling / WordCorrectionProposal.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java
new file mode 100644 (file)
index 0000000..60aaeb0
--- /dev/null
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 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.spelling;
+
+import java.text.MessageFormat;
+
+import net.sourceforge.phpdt.internal.ui.PHPUIMessages;
+import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+import net.sourceforge.phpdt.internal.ui.text.java.IInvocationContext;
+import net.sourceforge.phpdt.internal.ui.text.java.IPHPCompletionProposal;
+import net.sourceforge.phpdt.internal.ui.text.phpdoc.IHtmlTagConstants;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Proposal to correct the incorrectly spelled word.
+ * 
+ * @since 3.0
+ */
+public class WordCorrectionProposal implements IPHPCompletionProposal,
+               IHtmlTagConstants {
+
+       /**
+        * Returns the html representation of the specified string.
+        * 
+        * @param string
+        *            The string to return the html representation for
+        * @return The html representation for the string
+        */
+       public static String getHtmlRepresentation(final String string) {
+
+               final int length = string.length();
+               final StringBuffer buffer = new StringBuffer(string);
+
+               for (int offset = length - 1; offset >= 0; offset--) {
+
+                       for (int index = 0; index < HTML_ENTITY_CHARACTERS.length; index++) {
+
+                               if (string.charAt(offset) == HTML_ENTITY_CHARACTERS[index]) {
+
+                                       buffer.replace(offset, offset + 1, String
+                                                       .valueOf(HTML_ENTITY_CODES[index]));
+                                       break;
+                               }
+                       }
+               }
+               return buffer.toString();
+       }
+
+       /** The invocation context */
+       private final IInvocationContext fContext;
+
+       /** The length in the document */
+       private final int fLength;
+
+       /** The line where to apply the correction */
+       private final String fLine;
+
+       /** The offset in the document */
+       private final int fOffset;
+
+       /** The relevance of this proposal */
+       private final int fRelevance;
+
+       /** The word to complete */
+       private final String fWord;
+
+       /**
+        * Creates a new word correction proposal.
+        * 
+        * @param word
+        *            The corrected word
+        * @param arguments
+        *            The problem arguments associated with the spelling problem
+        * @param offset
+        *            The offset in the document where to apply the proposal
+        * @param length
+        *            The lenght in the document to apply the proposal
+        * @param context
+        *            The invocation context for this proposal
+        * @param relevance
+        *            The relevance of this proposal
+        */
+       public WordCorrectionProposal(final String word, final String[] arguments,
+                       final int offset, final int length,
+                       final IInvocationContext context, final int relevance) {
+
+               fWord = Character.isUpperCase(arguments[0].charAt(0)) ? Character
+                               .toUpperCase(word.charAt(0))
+                               + word.substring(1) : word;
+
+               fOffset = offset;
+               fLength = length;
+               fContext = context;
+               fRelevance = relevance;
+
+               final StringBuffer buffer = new StringBuffer(80);
+
+               buffer.append("...<br>"); //$NON-NLS-1$
+               buffer.append(getHtmlRepresentation(arguments[1]));
+               buffer.append("<b>"); //$NON-NLS-1$
+               buffer.append(getHtmlRepresentation(fWord));
+               buffer.append("</b>"); //$NON-NLS-1$
+               buffer.append(getHtmlRepresentation(arguments[2]));
+               buffer.append("<br>..."); //$NON-NLS-1$
+
+               fLine = buffer.toString();
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#apply(org.eclipse.jface.text.IDocument)
+        */
+       public final void apply(final IDocument document) {
+               try {
+                       document.replace(fOffset, fLength, fWord);
+               } catch (BadLocationException exception) {
+                       // Do nothing
+               }
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getAdditionalProposalInfo()
+        */
+       public String getAdditionalProposalInfo() {
+               return fLine;
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getContextInformation()
+        */
+       public final IContextInformation getContextInformation() {
+               return null;
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getDisplayString()
+        */
+       public String getDisplayString() {
+               return MessageFormat.format(PHPUIMessages
+                               .getString("Spelling.correct.label"), new String[] { fWord }); //$NON-NLS-1$
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getImage()
+        */
+       public Image getImage() {
+               return PHPUiImages.get(PHPUiImages.IMG_CORRECTION_RENAME);
+       }
+
+       /*
+        * @see net.sourceforge.phpdt.ui.text.java.IJavaCompletionProposal#getRelevance()
+        */
+       public final int getRelevance() {
+               return fRelevance;
+       }
+
+       /*
+        * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getSelection(org.eclipse.jface.text.IDocument)
+        */
+       public final Point getSelection(final IDocument document) {
+
+               int offset = fContext.getSelectionOffset();
+               int length = fContext.getSelectionLength();
+
+               final int delta = fWord.length() - fLength;
+               if (offset <= fOffset && offset + length >= fOffset)
+                       length += delta;
+               else if (offset > fOffset && offset + length > fOffset + fLength) {
+                       offset += delta;
+                       length -= delta;
+               } else
+                       length += delta;
+
+               return new Point(offset, length);
+       }
+}