diff --git a/editor/org.processing.editor/.classpath b/editor/org.processing.editor/.classpath
index ad32c83a7..43473f469 100644
--- a/editor/org.processing.editor/.classpath
+++ b/editor/org.processing.editor/.classpath
@@ -3,5 +3,12 @@
+
+
+
+
+
+
+
diff --git a/editor/org.processing.editor/META-INF/MANIFEST.MF b/editor/org.processing.editor/META-INF/MANIFEST.MF
index ba885d11f..a4d1c3908 100644
--- a/editor/org.processing.editor/META-INF/MANIFEST.MF
+++ b/editor/org.processing.editor/META-INF/MANIFEST.MF
@@ -8,6 +8,6 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.ui,
org.eclipse.jface.text,
org.eclipse.ui.editors
-Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.eclipse.ui.views.contentoutline
+Bundle-ActivationPolicy: lazy
diff --git a/editor/org.processing.editor/plugin.xml b/editor/org.processing.editor/plugin.xml
index 1ae123912..d6a4d8c43 100644
--- a/editor/org.processing.editor/plugin.xml
+++ b/editor/org.processing.editor/plugin.xml
@@ -1,12 +1,10 @@
-
-
+
+
+
+
+
+
diff --git a/editor/org.processing.editor/src/org/processing/actions/RunButton.java b/editor/org.processing.editor/src/org/processing/actions/RunButton.java
new file mode 100644
index 000000000..fb8074f19
--- /dev/null
+++ b/editor/org.processing.editor/src/org/processing/actions/RunButton.java
@@ -0,0 +1,60 @@
+package org.processing.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IEditorActionDelegate;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.processing.editor.ProcessingLog;
+
+import processing.app.preproc.*; // get the preprocessor stuff
+
+/**
+ * Right now this just does some hello world test stuff.
+ * Soon it will run the preprocessor only.
+ * Eventually it will function like the run button in the PDE.
+ *
+ * @author lonnen
+ *
+ */
+public class RunButton implements IEditorActionDelegate {
+ String editorContents = null;
+
+ /** Main logic for the button */
+ public void run(IAction action) {
+ ProcessingLog.logInfo("Someone hit the toolbar button!");
+ // get the program as a string
+ //System.out.println(editorContents);// SUCCESS!!
+ // dump to the preprocessor
+ // do something with the results
+ }
+
+ /**
+ * Notifies this action delegate that the selection in the workbench has changed.
+ *
+ * We're required to implement this, but right now it does nothing.
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ // ignore. we don't care about the selection, but we have to implement this
+ }
+
+ /**
+ * Retrieved the editor contents when a new editor is set.
+ * This is messy but this is how we get the editor contents from
+ * the IEditorActionDelegate. When the preprocessor is implemented
+ * as a proper builder it will be able to retrieve an up-to-date
+ * copy of the editor contents.
+ */
+ public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+ if (targetEditor instanceof ITextEditor) {
+ IDocumentProvider provider= ((ITextEditor) targetEditor).getDocumentProvider();
+ IEditorInput input= targetEditor.getEditorInput();
+ IDocument document= provider.getDocument(input);
+ editorContents = document.get();
+ }
+ }
+
+}
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingAnnotationHover.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingAnnotationHover.java
index 7fb2de6dd..33f9d14e3 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingAnnotationHover.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingAnnotationHover.java
@@ -11,7 +11,9 @@
package org.processing.editor;
-import org.eclipse.jface.text.*;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISourceViewer;
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingContentOutlinePage.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingContentOutlinePage.java
index cecf2cb13..71900ee36 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingContentOutlinePage.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingContentOutlinePage.java
@@ -15,8 +15,19 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.text.*;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.BadPositionCategoryException;
+import org.eclipse.jface.text.DefaultPositionUpdater;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IPositionUpdater;
+import org.eclipse.jface.text.Position;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.texteditor.IDocumentProvider;
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingDocumentSetupParticipant.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingDocumentSetupParticipant.java
index b72e5e133..1a2e9f40d 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingDocumentSetupParticipant.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingDocumentSetupParticipant.java
@@ -1,7 +1,6 @@
package org.processing.editor;
import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
-
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentExtension3;
import org.eclipse.jface.text.IDocumentPartitioner;
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingEditor.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingEditor.java
index c8c4a5d38..90ef02ba7 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingEditor.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingEditor.java
@@ -15,20 +15,14 @@ import java.util.ResourceBundle;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.swt.widgets.Composite;
-
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.viewers.ISelection;
-
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.ITextViewerExtension5;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.Region;
-//import org.eclipse.jface.text.source.IAnnotationAccess;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
@@ -36,16 +30,14 @@ import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
-
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.editors.text.TextEditor;
-//import org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.eclipse.ui.texteditor.TextEditorAction;
import org.eclipse.ui.texteditor.TextOperationAction;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-//import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; // error checking annotations
/**
* Sets up a Processing specific text editor.
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingEditorPlugin.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingEditorPlugin.java
index b248346d3..a45a4056e 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingEditorPlugin.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingEditorPlugin.java
@@ -16,13 +16,12 @@ import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jface.text.rules.RuleBasedScanner;
-import org.processing.editor.javadoc.JavaDocScanner;
-import org.processing.editor.language.ProcessingCodeScanner;
-import org.processing.editor.util.ProcessingColorProvider;
-
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.processing.editor.javadoc.JavaDocScanner;
+import org.processing.editor.language.ProcessingCodeScanner;
+import org.processing.editor.util.ProcessingColorProvider;
/**
* Processing editor plug-in class.
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingPartitionScanner.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingPartitionScanner.java
index 70e88efdc..27eea7283 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingPartitionScanner.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingPartitionScanner.java
@@ -13,7 +13,16 @@ package org.processing.editor;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.text.rules.*;
+import org.eclipse.jface.text.rules.EndOfLineRule;
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IPredicateRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.IWordDetector;
+import org.eclipse.jface.text.rules.MultiLineRule;
+import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
+import org.eclipse.jface.text.rules.SingleLineRule;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.WordRule;
/**
* Processing uses Java comments, so we use the same scanner. The class name is
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingSourceViewerConfiguration.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingSourceViewerConfiguration.java
index 638e297bd..aff27dbf7 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingSourceViewerConfiguration.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingSourceViewerConfiguration.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.processing.editor;
-import org.eclipse.swt.graphics.RGB;
-
import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;
import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
@@ -28,10 +26,7 @@ import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
-
-//TODO implement completion properly for Processing
-//Removing JavaDoc support from sketches, but leave in code
-//import org.processing.editor.javadoc.JavaDocCompletionProcessor;
+import org.eclipse.swt.graphics.RGB;
import org.processing.editor.language.ProcessingAutoIndentStrategy;
import org.processing.editor.language.ProcessingCompletionProcessor;
import org.processing.editor.language.ProcessingDoubleClickSelector;
diff --git a/editor/org.processing.editor/src/org/processing/editor/ProcessingTextHover.java b/editor/org.processing.editor/src/org/processing/editor/ProcessingTextHover.java
index 1be66a9e3..8cecda67b 100644
--- a/editor/org.processing.editor/src/org/processing/editor/ProcessingTextHover.java
+++ b/editor/org.processing.editor/src/org/processing/editor/ProcessingTextHover.java
@@ -11,7 +11,11 @@
package org.processing.editor;
-import org.eclipse.jface.text.*;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
import org.eclipse.swt.graphics.Point;
/**
diff --git a/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocCompletionProcessor.java b/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocCompletionProcessor.java
index 94ff44d32..32aad9f20 100644
--- a/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocCompletionProcessor.java
+++ b/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocCompletionProcessor.java
@@ -12,7 +12,11 @@ package org.processing.editor.javadoc;
import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.contentassist.*;
+import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;
/**
* Example Java doc completion processor. Should work for Processing unmodified. Do we even use Javadoc?
diff --git a/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocScanner.java b/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocScanner.java
index 3bd97f7b1..765c9327d 100644
--- a/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocScanner.java
+++ b/editor/org.processing.editor/src/org/processing/editor/javadoc/JavaDocScanner.java
@@ -14,7 +14,14 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.TextAttribute;
-import org.eclipse.jface.text.rules.*;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.IWordDetector;
+import org.eclipse.jface.text.rules.RuleBasedScanner;
+import org.eclipse.jface.text.rules.SingleLineRule;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.WhitespaceRule;
+import org.eclipse.jface.text.rules.WordRule;
import org.processing.editor.util.ProcessingColorProvider;
import org.processing.editor.util.ProcessingWhitespaceDetector;
diff --git a/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCodeScanner.java b/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCodeScanner.java
index f9b1e0510..8e7ca492e 100644
--- a/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCodeScanner.java
+++ b/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCodeScanner.java
@@ -21,9 +21,18 @@ import java.util.List;
import java.util.Set;
import org.eclipse.jface.text.TextAttribute;
-import org.eclipse.jface.text.rules.*;
+import org.eclipse.jface.text.rules.EndOfLineRule;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.RuleBasedScanner;
+import org.eclipse.jface.text.rules.SingleLineRule;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.WhitespaceRule;
+import org.eclipse.jface.text.rules.WordRule;
import org.processing.editor.ProcessingEditorPlugin;
-import org.processing.editor.util.*;
+import org.processing.editor.util.ProcessingColorProvider;
+import org.processing.editor.util.ProcessingWhitespaceDetector;
+import org.processing.editor.util.ProcessingWordDetector;
/**
* A Processing code scanner.
diff --git a/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCompletionProcessor.java b/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCompletionProcessor.java
index 9cba52294..0b5ca8cb7 100644
--- a/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCompletionProcessor.java
+++ b/editor/org.processing.editor/src/org/processing/editor/language/ProcessingCompletionProcessor.java
@@ -15,7 +15,13 @@ import java.text.MessageFormat;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.TextPresentation;
-import org.eclipse.jface.text.contentassist.*;
+import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ContextInformation;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;
/**
* Example Java completion processor. Should work unmodified for Processing.
diff --git a/editor/org.processing.editor/src/org/processing/editor/util/ProcessingColorProvider.java b/editor/org.processing.editor/src/org/processing/editor/util/ProcessingColorProvider.java
index 65fa208c1..4ac3b9b3b 100644
--- a/editor/org.processing.editor/src/org/processing/editor/util/ProcessingColorProvider.java
+++ b/editor/org.processing.editor/src/org/processing/editor/util/ProcessingColorProvider.java
@@ -11,7 +11,9 @@
package org.processing.editor.util;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;