Improved package structure
authorChristian Femers <femers@in.tum.de>
Sat, 29 Jun 2019 01:29:46 +0000 (03:29 +0200)
committerChristian Femers <femers@in.tum.de>
Sat, 29 Jun 2019 01:29:46 +0000 (03:29 +0200)
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java [new file with mode: 0644]

diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java
deleted file mode 100644 (file)
index 6b699ac..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-package net.mograsim.plugin.asm.editor;\r
-\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.text.rules.ICharacterScanner;\r
-import org.eclipse.jface.text.rules.IRule;\r
-import org.eclipse.jface.text.rules.IToken;\r
-import org.eclipse.jface.text.rules.Token;\r
-\r
-public class AsmLabelRule implements IRule\r
-{\r
-\r
-       /** The token to be returned when this rule is successful */\r
-       protected IToken fToken;\r
-\r
-       /**\r
-        * Creates a rule which will return the specified token when a numerical sequence is detected.\r
-        *\r
-        * @param token the token to be returned\r
-        */\r
-       public AsmLabelRule(IToken token)\r
-       {\r
-               Assert.isNotNull(token);\r
-               fToken = token;\r
-       }\r
-\r
-       @Override\r
-       public IToken evaluate(ICharacterScanner scanner)\r
-       {\r
-               int c = scanner.read();\r
-               int i = 1;\r
-               if (Character.isJavaIdentifierStart(c))\r
-               {\r
-                       do\r
-                       {\r
-                               c = scanner.read();\r
-                               i++;\r
-                       } while (Character.isJavaIdentifierPart(c));\r
-                       if (c == ':')\r
-                               return fToken;\r
-                       return abort(scanner, i);\r
-               }\r
-               scanner.unread();\r
-               return Token.UNDEFINED;\r
-       }\r
-\r
-       private static IToken abort(ICharacterScanner scanner, int i)\r
-       {\r
-               for (int j = 0; j < i; j++)\r
-                       scanner.unread();\r
-               return Token.UNDEFINED;\r
-       }\r
-}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java
deleted file mode 100644 (file)
index 14876bc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-package net.mograsim.plugin.asm.editor;\r
-\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.text.rules.ICharacterScanner;\r
-import org.eclipse.jface.text.rules.IRule;\r
-import org.eclipse.jface.text.rules.IToken;\r
-import org.eclipse.jface.text.rules.Token;\r
-\r
-import net.mograsim.plugin.asm.AsmNumberUtil;\r
-\r
-public class AsmNumberRule implements IRule\r
-{\r
-\r
-       /** The token to be returned when this rule is successful */\r
-       protected IToken fToken;\r
-\r
-       /**\r
-        * Creates a rule which will return the specified token when a numerical sequence is detected.\r
-        *\r
-        * @param token the token to be returned\r
-        */\r
-       public AsmNumberRule(IToken token)\r
-       {\r
-               Assert.isNotNull(token);\r
-               fToken = token;\r
-       }\r
-\r
-       @Override\r
-       public IToken evaluate(ICharacterScanner scanner)\r
-       {\r
-               int i = 1;\r
-               int c = scanner.read();\r
-               if (!AsmNumberUtil.isStart(c))\r
-                       return abort(scanner, i);\r
-               StringBuilder sb = new StringBuilder();\r
-               sb.appendCodePoint(c);\r
-               while (true)\r
-               {\r
-                       c = scanner.read();\r
-                       i++;\r
-                       if (AsmNumberUtil.isPart(c))\r
-                               sb.appendCodePoint(c);\r
-                       else\r
-                               break;\r
-               }\r
-               if (!AsmNumberUtil.isNumber(sb))\r
-                       return abort(scanner, i);\r
-               scanner.unread();\r
-               return fToken;\r
-       }\r
-\r
-       private static IToken abort(ICharacterScanner scanner, int i)\r
-       {\r
-               for (int j = 0; j < i; j++)\r
-                       scanner.unread();\r
-               return Token.UNDEFINED;\r
-       }\r
-\r
-}\r
index 8437876..8d42ef5 100644 (file)
@@ -1,7 +1,5 @@
 package net.mograsim.plugin.asm.editor;
 
-import java.util.Set;
-
 import org.eclipse.jface.resource.ColorRegistry;
 import org.eclipse.jface.resource.FontRegistry;
 import org.eclipse.jface.text.IDocument;
@@ -10,14 +8,14 @@ import org.eclipse.jface.text.presentation.PresentationReconciler;
 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
 import org.eclipse.jface.text.rules.EndOfLineRule;
 import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IWordDetector;
 import org.eclipse.jface.text.rules.RuleBasedScanner;
 import org.eclipse.jface.text.rules.Token;
-import org.eclipse.jface.text.rules.WordRule;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.themes.ITheme;
 
-import net.mograsim.plugin.AsmOps;
+import net.mograsim.plugin.asm.editor.rules.AsmLabelRule;
+import net.mograsim.plugin.asm.editor.rules.AsmNumberRule;
+import net.mograsim.plugin.asm.editor.rules.InstructionRule;
 
 public class AsmPresentationReconciler extends PresentationReconciler
 {
@@ -36,33 +34,7 @@ public class AsmPresentationReconciler extends PresentationReconciler
                rules = new IRule[4];
                rules[0] = new EndOfLineRule(";", comment);
                rules[1] = new AsmLabelRule(label);
-               WordRule ops = new WordRule(new IWordDetector()
-               {
-
-                       @Override
-                       public boolean isWordStart(char c)
-                       {
-                               return Character.isJavaIdentifierStart(c);
-                       }
-
-                       @Override
-                       public boolean isWordPart(char c)
-                       {
-                               return Character.isJavaIdentifierPart(c);
-                       }
-               }, std, true)
-               {
-                       {
-                               AsmOps.addListener(this::update);
-                       }
-
-                       void update(Set<String> words)
-                       {
-                               fWords.clear();
-                               words.forEach(s -> fWords.put(s, op));
-                       }
-               };
-               rules[2] = ops;
+               rules[2] = new InstructionRule(op, true);
                rules[3] = new AsmNumberRule(number);
 
                scanner.setRules(rules);
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java
new file mode 100644 (file)
index 0000000..9da76c0
--- /dev/null
@@ -0,0 +1,52 @@
+package net.mograsim.plugin.asm.editor.rules;\r
+\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.text.rules.ICharacterScanner;\r
+import org.eclipse.jface.text.rules.IRule;\r
+import org.eclipse.jface.text.rules.IToken;\r
+import org.eclipse.jface.text.rules.Token;\r
+\r
+public class AsmLabelRule implements IRule\r
+{\r
+\r
+       /** The token to be returned when this rule is successful */\r
+       protected IToken fToken;\r
+\r
+       /**\r
+        * Creates a rule which will return the specified token when a numerical sequence is detected.\r
+        *\r
+        * @param token the token to be returned\r
+        */\r
+       public AsmLabelRule(IToken token)\r
+       {\r
+               Assert.isNotNull(token);\r
+               fToken = token;\r
+       }\r
+\r
+       @Override\r
+       public IToken evaluate(ICharacterScanner scanner)\r
+       {\r
+               int c = scanner.read();\r
+               int i = 1;\r
+               if (Character.isJavaIdentifierStart(c))\r
+               {\r
+                       do\r
+                       {\r
+                               c = scanner.read();\r
+                               i++;\r
+                       } while (Character.isJavaIdentifierPart(c));\r
+                       if (c == ':')\r
+                               return fToken;\r
+                       return abort(scanner, i);\r
+               }\r
+               scanner.unread();\r
+               return Token.UNDEFINED;\r
+       }\r
+\r
+       private static IToken abort(ICharacterScanner scanner, int i)\r
+       {\r
+               for (int j = 0; j < i; j++)\r
+                       scanner.unread();\r
+               return Token.UNDEFINED;\r
+       }\r
+}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java
new file mode 100644 (file)
index 0000000..bad4370
--- /dev/null
@@ -0,0 +1,59 @@
+package net.mograsim.plugin.asm.editor.rules;\r
+\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.text.rules.ICharacterScanner;\r
+import org.eclipse.jface.text.rules.IRule;\r
+import org.eclipse.jface.text.rules.IToken;\r
+import org.eclipse.jface.text.rules.Token;\r
+\r
+import net.mograsim.plugin.asm.AsmNumberUtil;\r
+\r
+public class AsmNumberRule implements IRule\r
+{\r
+\r
+       /** The token to be returned when this rule is successful */\r
+       protected IToken fToken;\r
+\r
+       /**\r
+        * Creates a rule which will return the specified token when a numerical sequence is detected.\r
+        *\r
+        * @param token the token to be returned\r
+        */\r
+       public AsmNumberRule(IToken token)\r
+       {\r
+               Assert.isNotNull(token);\r
+               fToken = token;\r
+       }\r
+\r
+       @Override\r
+       public IToken evaluate(ICharacterScanner scanner)\r
+       {\r
+               int i = 1;\r
+               int c = scanner.read();\r
+               if (!AsmNumberUtil.isStart(c))\r
+                       return abort(scanner, i);\r
+               StringBuilder sb = new StringBuilder();\r
+               sb.appendCodePoint(c);\r
+               while (true)\r
+               {\r
+                       c = scanner.read();\r
+                       i++;\r
+                       if (AsmNumberUtil.isPart(c))\r
+                               sb.appendCodePoint(c);\r
+                       else\r
+                               break;\r
+               }\r
+               if (!AsmNumberUtil.isNumber(sb))\r
+                       return abort(scanner, i);\r
+               scanner.unread();\r
+               return fToken;\r
+       }\r
+\r
+       private static IToken abort(ICharacterScanner scanner, int i)\r
+       {\r
+               for (int j = 0; j < i; j++)\r
+                       scanner.unread();\r
+               return Token.UNDEFINED;\r
+       }\r
+\r
+}\r
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java
new file mode 100644 (file)
index 0000000..730305d
--- /dev/null
@@ -0,0 +1,44 @@
+package net.mograsim.plugin.asm.editor.rules;\r
+\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.text.rules.IToken;\r
+import org.eclipse.jface.text.rules.IWordDetector;\r
+import org.eclipse.jface.text.rules.WordRule;\r
+\r
+import net.mograsim.plugin.AsmOps;\r
+\r
+public class InstructionRule extends WordRule\r
+{\r
+       public InstructionRule(IToken defaultToken)\r
+       {\r
+               this(defaultToken, false);\r
+       }\r
+\r
+       public InstructionRule(IToken defaultToken, boolean ignoreCase)\r
+       {\r
+               super(new InstructionDetector(), defaultToken, ignoreCase);\r
+               AsmOps.addListener(this::update);\r
+       }\r
+\r
+       void update(Set<String> words)\r
+       {\r
+               fWords.clear();\r
+               words.forEach(s -> fWords.put(s, fDefaultToken));\r
+       }\r
+\r
+       static class InstructionDetector implements IWordDetector\r
+       {\r
+               @Override\r
+               public boolean isWordStart(char c)\r
+               {\r
+                       return Character.isJavaIdentifierStart(c);\r
+               }\r
+\r
+               @Override\r
+               public boolean isWordPart(char c)\r
+               {\r
+                       return Character.isJavaIdentifierPart(c);\r
+               }\r
+       }\r
+}\r