diff --git a/.classpath b/.classpath index 57bca72..3da13b4 100644 --- a/.classpath +++ b/.classpath @@ -1,10 +1,30 @@ + - + + + + + + + + + + + + + + + + + + + + diff --git a/lib/autocomplete-3.2.1-20220313.002528-1.jar b/lib/autocomplete-3.2.1-20220313.002528-1.jar new file mode 100644 index 0000000..149be55 Binary files /dev/null and b/lib/autocomplete-3.2.1-20220313.002528-1.jar differ diff --git a/lib/languagesupport-3.2.0-20220626.210742-1.jar b/lib/languagesupport-3.2.0-20220626.210742-1.jar new file mode 100644 index 0000000..9de3d9a Binary files /dev/null and b/lib/languagesupport-3.2.0-20220626.210742-1.jar differ diff --git a/lib/rhino-1.7.14.jar b/lib/rhino-1.7.14.jar new file mode 100644 index 0000000..ad47a20 Binary files /dev/null and b/lib/rhino-1.7.14.jar differ diff --git a/lib/rsyntaxtextarea-3.2.1-20220312.195807-1.jar b/lib/rsyntaxtextarea-3.2.1-20220312.195807-1.jar new file mode 100644 index 0000000..12c2331 Binary files /dev/null and b/lib/rsyntaxtextarea-3.2.1-20220312.195807-1.jar differ diff --git a/src/com/okseby/io/Open.java b/src/com/okseby/io/Open.java index b6de4a1..ddaf309 100644 --- a/src/com/okseby/io/Open.java +++ b/src/com/okseby/io/Open.java @@ -1,7 +1,7 @@ package com.okseby.io; public class Open { - public Open() { + public void readFile(String path) { } } \ No newline at end of file diff --git a/src/com/okseby/utils/Providers.java b/src/com/okseby/utils/Providers.java new file mode 100644 index 0000000..0288c0b --- /dev/null +++ b/src/com/okseby/utils/Providers.java @@ -0,0 +1,38 @@ +package com.okseby.utils; + +import org.fife.ui.autocomplete.*; + +public class Providers { + public static CompletionProvider createCompletionProvider() { + + // A DefaultCompletionProvider is the simplest concrete implementation + // of CompletionProvider. This provider has no understanding of + // language semantics. It simply checks the text entered up to the + // caret position for a match against known completions. This is all + // that is needed in the majority of cases. + DefaultCompletionProvider provider = new DefaultCompletionProvider(); + + // Add completions for all Java keywords. A BasicCompletion is just + // a straightforward word completion. + provider.addCompletion(new BasicCompletion(provider, "abstract")); + provider.addCompletion(new BasicCompletion(provider, "assert")); + provider.addCompletion(new BasicCompletion(provider, "break")); + provider.addCompletion(new BasicCompletion(provider, "case")); + // ... etc ... + provider.addCompletion(new BasicCompletion(provider, "transient")); + provider.addCompletion(new BasicCompletion(provider, "try")); + provider.addCompletion(new BasicCompletion(provider, "void")); + provider.addCompletion(new BasicCompletion(provider, "volatile")); + provider.addCompletion(new BasicCompletion(provider, "while")); + + // Add a couple of "shorthand" completions. These completions don't + // require the input text to be the same thing as the replacement text. + provider.addCompletion(new ShorthandCompletion(provider, "sysout", + "System.out.println(", "System.out.println(")); + provider.addCompletion(new ShorthandCompletion(provider, "syserr", + "System.err.println(", "System.err.println(")); + + return provider; + + } +} diff --git a/src/com/okseby/win/Window.java b/src/com/okseby/win/Window.java index 5cd0dd1..608970d 100644 --- a/src/com/okseby/win/Window.java +++ b/src/com/okseby/win/Window.java @@ -5,7 +5,6 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; - import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; @@ -13,10 +12,17 @@ import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; -import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.border.EtchedBorder; +import org.fife.rsta.ac.LanguageSupportFactory; +import org.fife.ui.autocomplete.*; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; +import org.fife.ui.rtextarea.RTextScrollPane; + +import com.okseby.utils.Providers; + public class Window implements Runnable { JFrame window; JMenuBar menuBar; @@ -26,7 +32,10 @@ public class Window implements Runnable { JMenuItem fileMenuItem1, fileMenuItem2, fileMenuItem3; JPanel fileExplorer; JPanel mainPanel; - JTextArea textArea; + RSyntaxTextArea textArea; + RTextScrollPane scrollPane; + CompletionProvider completionProvider; + AutoCompletion autoComplete; String title; double version; @@ -71,7 +80,14 @@ public class Window implements Runnable { mainPanel.setLayout(new BorderLayout()); mainPanel.setBorder(new EtchedBorder()); - mainPanel.add(textArea); + mainPanel.add(scrollPane); + + textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); + textArea.setCodeFoldingEnabled(true); + + LanguageSupportFactory.get().register(textArea); + + autoComplete.install(textArea); window.add(fileExplorer, BorderLayout.WEST); window.add(mainPanel); @@ -95,7 +111,10 @@ public class Window implements Runnable { fileMenuItem3 = new JMenuItem("Close File"); fileExplorer = new JPanel(); mainPanel = new JPanel(); - textArea = new JTextArea(); + textArea = new RSyntaxTextArea(); + scrollPane = new RTextScrollPane(textArea); + completionProvider = Providers.createCompletionProvider(); + autoComplete = new AutoCompletion(completionProvider); } @Override diff --git a/src/module-info.java b/src/module-info.java index 0f004b4..56f477e 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -4,4 +4,7 @@ */ module scrypt { requires java.desktop; + requires org.fife.RSyntaxTextArea; + requires autocomplete; + requires languagesupport; } \ No newline at end of file