X-Git-Url: http://secure.phpeclipse.com
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
index 0000000..60aaeb0
--- /dev/null
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java
@@ -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("...
"); //$NON-NLS-1$
+ buffer.append(getHtmlRepresentation(arguments[1]));
+ buffer.append(""); //$NON-NLS-1$
+ buffer.append(getHtmlRepresentation(fWord));
+ buffer.append(""); //$NON-NLS-1$
+ buffer.append(getHtmlRepresentation(arguments[2]));
+ buffer.append("
..."); //$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);
+ }
+}