Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.ui.genericeditor.examples')
-rw-r--r--org.eclipse.ui.genericeditor.examples/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.ui.genericeditor.examples/plugin.xml7
-rw-r--r--org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/ProjectDocumentParticipant.java14
-rw-r--r--org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/SpellCheckDocumentListener.java95
4 files changed, 118 insertions, 1 deletions
diff --git a/org.eclipse.ui.genericeditor.examples/META-INF/MANIFEST.MF b/org.eclipse.ui.genericeditor.examples/META-INF/MANIFEST.MF
index a7f228ca7..a7dd0efc5 100644
--- a/org.eclipse.ui.genericeditor.examples/META-INF/MANIFEST.MF
+++ b/org.eclipse.ui.genericeditor.examples/META-INF/MANIFEST.MF
@@ -10,4 +10,5 @@ Require-Bundle: org.eclipse.ui.genericeditor;bundle-version="1.0.0",
org.eclipse.jface.text;bundle-version="3.11.0",
org.eclipse.core.resources;bundle-version="3.11.0",
org.eclipse.ui;bundle-version="3.108.0",
- org.eclipse.core.runtime;bundle-version="3.11.0"
+ org.eclipse.core.runtime;bundle-version="3.11.0",
+ org.eclipse.ui.workbench.texteditor;bundle-version="3.10.100"
diff --git a/org.eclipse.ui.genericeditor.examples/plugin.xml b/org.eclipse.ui.genericeditor.examples/plugin.xml
index f03f4b6b7..d4552620e 100644
--- a/org.eclipse.ui.genericeditor.examples/plugin.xml
+++ b/org.eclipse.ui.genericeditor.examples/plugin.xml
@@ -50,5 +50,12 @@
editorId="org.eclipse.ui.genericeditor.GenericEditor">
</editorContentTypeBinding>
</extension>
+ <extension
+ point="org.eclipse.core.filebuffers.documentSetup">
+ <participant
+ class="org.eclipse.ui.genericeditor.examples.dotproject.ProjectDocumentParticipant"
+ contentTypeId="org.eclipse.ui.genericeditor.examples.dotproject">
+ </participant>
+ </extension>
</plugin>
diff --git a/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/ProjectDocumentParticipant.java b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/ProjectDocumentParticipant.java
new file mode 100644
index 000000000..d65b8ca32
--- /dev/null
+++ b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/ProjectDocumentParticipant.java
@@ -0,0 +1,14 @@
+package org.eclipse.ui.genericeditor.examples.dotproject;
+
+import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension3;
+
+public class ProjectDocumentParticipant implements IDocumentSetupParticipant {
+
+ @Override
+ public void setup(IDocument document) {
+ document.addDocumentListener(new SpellCheckDocumentListener());
+ }
+
+}
diff --git a/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/SpellCheckDocumentListener.java b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/SpellCheckDocumentListener.java
new file mode 100644
index 000000000..099b891d2
--- /dev/null
+++ b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/SpellCheckDocumentListener.java
@@ -0,0 +1,95 @@
+package org.eclipse.ui.genericeditor.examples.dotproject;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.jface.text.source.IAnnotationModelExtension;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector;
+import org.eclipse.ui.texteditor.spelling.SpellingAnnotation;
+import org.eclipse.ui.texteditor.spelling.SpellingContext;
+import org.eclipse.ui.texteditor.spelling.SpellingProblem;
+import org.eclipse.ui.texteditor.spelling.SpellingService;
+
+public class SpellCheckDocumentListener implements IDocumentListener {
+
+ Job lastJob = null;
+ SpellingService service = EditorsUI.getSpellingService();
+
+ @Override
+ public void documentAboutToBeChanged(DocumentEvent event) {
+ }
+
+ @Override
+ public void documentChanged(final DocumentEvent event) {
+ if (this.lastJob != null) {
+ this.lastJob.cancel();
+ }
+ this.lastJob = new Job("Spellcheck") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ IAnnotationModel model = ITextFileBufferManager.DEFAULT.getTextFileBuffer(event.getDocument()).getAnnotationModel();
+ String text = event.getDocument().get();
+ int commentStart = text.indexOf("<comment>");
+ if (commentStart < 0) {
+ return Status.OK_STATUS;
+ }
+ commentStart += "<comment>".length();
+ int commentEnd = text.indexOf("</comment>", commentStart);
+ if (commentEnd <= commentStart) {
+ return Status.OK_STATUS;
+ }
+ Region region = new Region(commentStart, commentEnd - commentStart);
+ service.check(event.getDocument(), new Region[] { region }, new SpellingContext(), new ISpellingProblemCollector() {
+ private Map<SpellingAnnotation, Position> annotations = new HashMap<>();
+
+ @Override
+ public void endCollecting() {
+ Set<SpellingAnnotation> previous = new HashSet<>();
+ model.getAnnotationIterator().forEachRemaining(annotation -> {
+ if (annotation instanceof SpellingAnnotation) {
+ previous.add((SpellingAnnotation)annotation);
+ }
+ });
+ if (model instanceof IAnnotationModelExtension) {
+ ((IAnnotationModelExtension)model).replaceAnnotations(
+ previous.toArray(new SpellingAnnotation[previous.size()]),
+ annotations);
+
+ } else {
+ previous.forEach(model::removeAnnotation);
+ annotations.forEach(model::addAnnotation);
+ }
+ }
+
+ @Override
+ public void beginCollecting() {
+ }
+
+ @Override
+ public void accept(SpellingProblem problem) {
+ this.annotations.put(new SpellingAnnotation(problem), new Position(problem.getOffset(), problem.getLength()));
+ }
+ }, monitor);
+ return Status.OK_STATUS;
+ }
+ };
+ this.lastJob.setUser(false);
+ this.lastJob.setPriority(Job.DECORATE);
+ // set a delay before reacting to user action to handle continuous typing
+ this.lastJob.schedule(500);
+ }
+
+}

Back to the top