X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java new file mode 100644 index 0000000..60aaeb0 --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/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); + } +}