[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[pdt-dev] Spellcheck patch

Hello!

I suggest the patch, which enables spellchecking in strings and comments of the php content.

Best regards,
Iljas
### Eclipse Workspace Patch 1.0
#P org.eclipse.php.ui
Index: plugin.xml
===================================================================
RCS file: /cvsroot/tools/org.eclipse.pdt/plugins/org.eclipse.php.ui/plugin.xml,v
retrieving revision 1.270
diff -u -r1.270 plugin.xml
--- plugin.xml	25 Oct 2011 03:00:05 -0000	1.270
+++ plugin.xml	24 Mar 2012 18:55:40 -0000
@@ -746,6 +746,12 @@
 			<adapter type="org.eclipse.core.resources.IResource" />
 		</factory>
 		-->
+		<factory
+			adaptableType="org.eclipse.php.internal.core.documentModel.DOMModelForPHP"
+			class="org.eclipse.php.internal.ui.spelling.SpellcheckDelegateAdapterFactory">
+			<adapter
+            	type="org.eclipse.wst.sse.ui.internal.spelling.ISpellcheckDelegate"/>
+		</factory>
 	</extension>
 
 	<!-- Editor actionsets -->
Index: src/org/eclipse/php/internal/ui/spelling/SpellcheckDelegateAdapterFactory.java
===================================================================
RCS file: src/org/eclipse/php/internal/ui/spelling/SpellcheckDelegateAdapterFactory.java
diff -N src/org/eclipse/php/internal/ui/spelling/SpellcheckDelegateAdapterFactory.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/php/internal/ui/spelling/SpellcheckDelegateAdapterFactory.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,116 @@
+package org.eclipse.php.internal.ui.spelling;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.php.internal.core.documentModel.DOMModelForPHP;
+import org.eclipse.php.internal.core.documentModel.parser.regions.IPhpScriptRegion;
+import org.eclipse.php.internal.core.documentModel.partitioner.PHPPartitionTypes;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.core.internal.text.BasicStructuredDocument;
+import org.eclipse.wst.sse.ui.internal.spelling.ISpellcheckDelegate;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+
+// this file content is taken from org.eclipse.wst.xml.ui.internal.spelling.SpellcheckDelegateAdapterFactory
+// and org.eclipse.php.internal.core.format.PHPHeuristicScanner
+
+/**
+ * An <code>IAdapterFactory</code> to adapt an <code>IDOMModel</code> to a
+ * <code>ISpellcheckDelegate</code>.
+ */
+@SuppressWarnings("restriction")
+public class SpellcheckDelegateAdapterFactory implements IAdapterFactory {
+	/**
+	 * This list of classes this factory adapts to.
+	 */
+	private static final Class[] ADAPTER_LIST = new Class[] { ISpellcheckDelegate.class };
+
+	/**
+	 * The <code>ISpellcheckDelegate</code> this factory adapts to
+	 */
+	private static final ISpellcheckDelegate DELEGATE = new PHPSpellcheckDelegate();
+
+	/**
+	 * Implementation of <code>ISpellcheckDelegate</code> for XML type
+	 * documents.
+	 */
+	private static class PHPSpellcheckDelegate implements ISpellcheckDelegate {
+
+		/**
+		 * If the region in the given <code>model</code> at the given
+		 * <code>offset</code> is a <code>Comment</code> region then it should
+		 * be spell checked, otherwise it should not.
+		 * 
+		 * @see org.eclipse.wst.sse.ui.internal.spelling.ISpellcheckDelegate#shouldSpellcheck(org.eclipse.wst.sse.core.internal.provisional.IndexedRegion)
+		 */
+		public boolean shouldSpellcheck(int offset, IStructuredModel model) {
+			boolean shouldSpellcheck = false;
+
+			if (model instanceof DOMModelForPHP) {
+				IStructuredDocument doc = ((DOMModelForPHP) model)
+						.getStructuredDocument();
+				if (doc instanceof BasicStructuredDocument) {
+					IStructuredDocumentRegion sdRegion = ((BasicStructuredDocument) doc)
+							.getRegionAtCharacterOffset(offset);
+					ITextRegion textRegion = sdRegion
+							.getRegionAtCharacterOffset(offset);
+					try {
+						if (textRegion instanceof IPhpScriptRegion) {
+							IPhpScriptRegion phpReg = (IPhpScriptRegion) textRegion;
+							String partition = phpReg.getPartition(offset
+									- sdRegion.getStart());
+							if (partition
+									.equals(PHPPartitionTypes.PHP_QUOTED_STRING)
+									|| partition
+											.equals(PHPPartitionTypes.PHP_COMMENT)
+									|| partition
+											.equals(PHPPartitionTypes.PHP_SINGLE_LINE_COMMENT)
+									|| partition
+											.equals(PHPPartitionTypes.PHP_MULTI_LINE_COMMENT)
+									|| partition
+											.equals(PHPPartitionTypes.PHP_DOC)) {
+								shouldSpellcheck = true;
+							}
+						}
+					} catch (BadLocationException e) {
+
+					}
+
+				}
+
+			}
+
+			return shouldSpellcheck;
+		}
+
+	}
+
+	/**
+	 * Adapts <code>IDOMModel</code> to <code>ISpellcheckDelegate</code>.
+	 * 
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		ISpellcheckDelegate decision = null;
+
+		if (adaptableObject instanceof IDOMModel
+				&& ISpellcheckDelegate.class.equals(adapterType)) {
+			decision = DELEGATE;
+		}
+
+		return decision;
+	}
+
+	/**
+	 * This adapter only adapts to <code>ISpellcheckDelegate</code>
+	 * 
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
+	 */
+	public Class[] getAdapterList() {
+		return ADAPTER_LIST;
+	}
+
+}