diff --git a/app/src/processing/app/WebServer.java b/app/src/processing/app/WebServer.java
index 618f09c65..bd13f59b4 100644
--- a/app/src/processing/app/WebServer.java
+++ b/app/src/processing/app/WebServer.java
@@ -16,20 +16,17 @@ import java.util.zip.*;
* this article on java.sun.com.
*/
public class WebServer {
-
- /** where worker threads stand idle */
- static final Vector threads = new Vector<>();
-
- /** max # worker threads */
- static final int WORKERS = 5;
-
- /** P5 in decimal; if there are complaints, move to preferences.txt */
- static final int PORT = 8053;
-
static final int HTTP_OK = 200;
static final int HTTP_NOT_FOUND = 404;
static final int HTTP_BAD_METHOD = 405;
+ /** where worker threads stand idle */
+ private final Vector threads = new Vector<>();
+
+ /** max # worker threads */
+ static final int WORKERS = 5;
+
+ private final int port;
private final ZipFile zip;
private final Map entries;
@@ -38,8 +35,10 @@ public class WebServer {
static final byte[] EOL = { (byte) '\r', (byte) '\n' };
- public WebServer(String zipPath) throws IOException {
- zip = new ZipFile(zipPath);
+ public WebServer(File zipFile, int port) throws IOException {
+ this.zip = new ZipFile(zipFile);
+ this.port = port;
+
entries = new HashMap<>();
Enumeration extends ZipEntry> en = zip.entries();
while (en.hasMoreElements()) {
@@ -57,7 +56,7 @@ public class WebServer {
new Thread(() -> {
try {
- ServerSocket ss = new ServerSocket(PORT);
+ ServerSocket ss = new ServerSocket(port);
while (true) {
Socket s = ss.accept();
synchronized (threads) {
@@ -79,6 +78,11 @@ public class WebServer {
}
+ public String getPrefix() {
+ return "http://localhost:" + port + "/";
+ }
+
+
class Worker implements Runnable {
// buffer to use for requests
byte[] buffer;
@@ -111,12 +115,12 @@ public class WebServer {
// go back in wait queue if there's fewer
// than numHandler connections.
socket = null;
- synchronized (WebServer.threads) {
- if (WebServer.threads.size() >= WebServer.WORKERS) {
+ synchronized (threads) {
+ if (threads.size() >= WebServer.WORKERS) {
// too many threads, exit this one
return;
} else {
- WebServer.threads.addElement(this);
+ threads.addElement(this);
}
}
}
@@ -320,7 +324,7 @@ public class WebServer {
*/
static public void main(String[] args) {
try {
- new WebServer(args[0]);
+ new WebServer(new File(args[0]), 8053);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java
index b8075fca6..6ebd283fe 100644
--- a/app/src/processing/app/ui/Editor.java
+++ b/app/src/processing/app/ui/Editor.java
@@ -1049,80 +1049,6 @@ public abstract class Editor extends JFrame implements RunnerListener {
}
- /*
- protected void addToolMenuItem(JMenu menu, String className) {
- try {
- Class> toolClass = Class.forName(className);
- final Tool tool = (Tool) toolClass.newInstance();
-
- JMenuItem item = new JMenuItem(tool.getMenuTitle());
-
- tool.init(Editor.this);
-
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- EventQueue.invokeLater(tool);
- }
- });
- menu.add(item);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
- protected JMenu addInternalTools(JMenu menu) {
- addToolMenuItem(menu, "processing.app.tools.CreateFont");
- addToolMenuItem(menu, "processing.app.tools.ColorSelector");
- addToolMenuItem(menu, "processing.app.tools.Archiver");
-
- if (Platform.isMacOS()) {
- addToolMenuItem(menu, "processing.app.tools.InstallCommander");
- }
-
- return menu;
- }
- */
-
-
- /*
- // testing internal web server to serve up docs from a zip file
- item = new JMenuItem("Web Server Test");
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- //WebServer ws = new WebServer();
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- try {
- int port = WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip");
- Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html");
-
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- }
- });
- menu.add(item);
- */
-
- /*
- item = new JMenuItem("Browser Test");
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- //Base.openURL("http://processing.org/learning/gettingstarted/");
- //JFrame browserFrame = new JFrame("Browser");
- BrowserStartup bs = new BrowserStartup("jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html");
- bs.initUI();
- bs.launch();
- }
- });
- menu.add(item);
- */
-
-
abstract public JMenu buildHelpMenu();
@@ -2202,50 +2128,6 @@ public abstract class Editor extends JFrame implements RunnerListener {
}
- /*
- protected void handleFindReference() {
- String text = textarea.getSelectedText().trim();
-
- if (text.length() == 0) {
- statusNotice("First select a word to find in the reference.");
-
- } else {
- char[] c = textarea.getText().toCharArray();
- int after = Math.max(textarea.getSelectionStart(), textarea.getSelectionStop());
- if (checkParen(c, after, c.length)) {
- text += "_";
- System.out.println("looking up ref for " + text);
- }
- String referenceFile = mode.lookupReference(text);
- System.out.println("reference file is " + referenceFile);
- if (referenceFile == null) {
- statusNotice("No reference available for \"" + text + "\"");
- } else {
- showReference(referenceFile + ".html");
- }
- }
- }
-
-
- protected void handleFindReference() {
- String text = textarea.getSelectedText().trim();
-
- if (text.length() == 0) {
- statusNotice("First select a word to find in the reference.");
-
- } else {
- String referenceFile = mode.lookupReference(text);
- //System.out.println("reference file is " + referenceFile);
- if (referenceFile == null) {
- statusNotice("No reference available for \"" + text + "\"");
- } else {
- showReference(referenceFile + ".html");
- }
- }
- }
- */
-
-
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
diff --git a/build/build.xml b/build/build.xml
index 2399c1620..8754cc900 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -353,7 +353,8 @@
-
+
+
@@ -375,6 +376,8 @@
ignoreerrors="${reference.ignorable}"
usetimestamp="true" />
+
+
-
diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java
index 0aec78da4..bb5b14231 100644
--- a/java/src/processing/mode/java/JavaEditor.java
+++ b/java/src/processing/mode/java/JavaEditor.java
@@ -74,7 +74,6 @@ public class JavaEditor extends Editor {
JMenu modeMenu;
// protected JMenuItem inspectorItem;
-
// static final int ERROR_TAB_INDEX = 0;
protected PreprocService preprocService;
@@ -90,6 +89,11 @@ public class JavaEditor extends Editor {
static private final boolean SHOW_AST_VIEWER = false;
private ASTViewer astViewer;
+ /** P5 in decimal; if there are complaints, move to preferences.txt */
+ static final int REFERENCE_PORT = 8053;
+ Boolean useReferenceServer;
+ WebServer referenceServer;
+
protected JavaEditor(Base base, String path, EditorState state,
Mode mode) throws EditorException {
@@ -1199,6 +1203,34 @@ public class JavaEditor extends Editor {
}
+ public void showReference(String filename) {
+ if (useReferenceServer == null) {
+ File referenceZip = new File(mode.getFolder(), "reference.zip");
+ if (referenceZip.exists()) {
+ try {
+ referenceServer = new WebServer(referenceZip, REFERENCE_PORT);
+ useReferenceServer = true;
+
+ } catch (IOException e) {
+ Messages.showWarning("Reference Server Problem", "Error while starting the documentation server.");
+ }
+
+ } else {
+ useReferenceServer = false;
+ }
+ }
+
+ if (useReferenceServer) {
+ String url = referenceServer.getPrefix() + "reference/" + filename;
+ Platform.openURL(url);
+
+ } else {
+ File file = new File(mode.getReferenceFolder(), filename);
+ showReferenceFile(file);
+ }
+ }
+
+
public void statusError(String what) {
super.statusError(what);
// new Exception("deactivating RUN").printStackTrace();