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 314b3b4..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-package net.mograsim.plugin.asm.editor;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
-
-public class AsmLabelRule implements IRule
-{
-
-       /** The token to be returned when this rule is successful */
-       protected IToken fToken;
-
-       /**
-        * Creates a rule which will return the specified token when a numerical sequence is detected.
-        *
-        * @param token the token to be returned
-        */
-       public AsmLabelRule(IToken token)
-       {
-               Assert.isNotNull(token);
-               fToken = token;
-       }
-
-       @Override
-       public IToken evaluate(ICharacterScanner scanner)
-       {
-               int c = scanner.read();
-               int i = 1;
-               if (Character.isJavaIdentifierStart(c))
-               {
-                       do
-                       {
-                               c = scanner.read();
-                               i++;
-                       } while (Character.isJavaIdentifierPart(c));
-                       if (c == ':')
-                               return fToken;
-                       return abort(scanner, i);
-               }
-               scanner.unread();
-               return Token.UNDEFINED;
-       }
-
-       private static IToken abort(ICharacterScanner scanner, int i)
-       {
-               for (int j = 0; j < i; j++)
-                       scanner.unread();
-               return Token.UNDEFINED;
-       }
-}
\ 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 5a6850d..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-package net.mograsim.plugin.asm.editor;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
-
-import net.mograsim.plugin.asm.AsmNumberUtil;
-
-public class AsmNumberRule implements IRule
-{
-
-       /** The token to be returned when this rule is successful */
-       protected IToken fToken;
-
-       /**
-        * Creates a rule which will return the specified token when a numerical sequence is detected.
-        *
-        * @param token the token to be returned
-        */
-       public AsmNumberRule(IToken token)
-       {
-               Assert.isNotNull(token);
-               fToken = token;
-       }
-
-       @Override
-       public IToken evaluate(ICharacterScanner scanner)
-       {
-               int i = 1;
-               int c = scanner.read();
-               if (!AsmNumberUtil.isStart(c))
-                       return abort(scanner, i);
-               StringBuilder sb = new StringBuilder();
-               sb.appendCodePoint(c);
-               while (true)
-               {
-                       c = scanner.read();
-                       i++;
-                       if (AsmNumberUtil.isPart(c))
-                               sb.appendCodePoint(c);
-                       else
-                               break;
-               }
-               if (!AsmNumberUtil.isNumber(sb))
-                       return abort(scanner, i);
-               scanner.unread();
-               return fToken;
-       }
-
-       private static IToken abort(ICharacterScanner scanner, int i)
-       {
-               for (int j = 0; j < i; j++)
-                       scanner.unread();
-               return Token.UNDEFINED;
-       }
-
-}
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..b55e0b3
--- /dev/null
@@ -0,0 +1,52 @@
+package net.mograsim.plugin.asm.editor.rules;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+
+public class AsmLabelRule implements IRule
+{
+
+       /** The token to be returned when this rule is successful */
+       protected IToken fToken;
+
+       /**
+        * Creates a rule which will return the specified token when a numerical sequence is detected.
+        *
+        * @param token the token to be returned
+        */
+       public AsmLabelRule(IToken token)
+       {
+               Assert.isNotNull(token);
+               fToken = token;
+       }
+
+       @Override
+       public IToken evaluate(ICharacterScanner scanner)
+       {
+               int c = scanner.read();
+               int i = 1;
+               if (Character.isJavaIdentifierStart(c))
+               {
+                       do
+                       {
+                               c = scanner.read();
+                               i++;
+                       } while (Character.isJavaIdentifierPart(c));
+                       if (c == ':')
+                               return fToken;
+                       return abort(scanner, i);
+               }
+               scanner.unread();
+               return Token.UNDEFINED;
+       }
+
+       private static IToken abort(ICharacterScanner scanner, int i)
+       {
+               for (int j = 0; j < i; j++)
+                       scanner.unread();
+               return Token.UNDEFINED;
+       }
+}
\ 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..728030d
--- /dev/null
@@ -0,0 +1,59 @@
+package net.mograsim.plugin.asm.editor.rules;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+
+public class AsmNumberRule implements IRule
+{
+
+       /** The token to be returned when this rule is successful */
+       protected IToken fToken;
+
+       /**
+        * Creates a rule which will return the specified token when a numerical sequence is detected.
+        *
+        * @param token the token to be returned
+        */
+       public AsmNumberRule(IToken token)
+       {
+               Assert.isNotNull(token);
+               fToken = token;
+       }
+
+       @Override
+       public IToken evaluate(ICharacterScanner scanner)
+       {
+               int i = 1;
+               int c = scanner.read();
+               if (!AsmNumberUtil.isStart(c))
+                       return abort(scanner, i);
+               StringBuilder sb = new StringBuilder();
+               sb.appendCodePoint(c);
+               while (true)
+               {
+                       c = scanner.read();
+                       i++;
+                       if (AsmNumberUtil.isPart(c))
+                               sb.appendCodePoint(c);
+                       else
+                               break;
+               }
+               if (!AsmNumberUtil.isNumber(sb))
+                       return abort(scanner, i);
+               scanner.unread();
+               return fToken;
+       }
+
+       private static IToken abort(ICharacterScanner scanner, int i)
+       {
+               for (int j = 0; j < i; j++)
+                       scanner.unread();
+               return Token.UNDEFINED;
+       }
+
+}
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..948c60a
--- /dev/null
@@ -0,0 +1,44 @@
+package net.mograsim.plugin.asm.editor.rules;
+
+import java.util.Set;
+
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.IWordDetector;
+import org.eclipse.jface.text.rules.WordRule;
+
+import net.mograsim.plugin.AsmOps;
+
+public class InstructionRule extends WordRule
+{
+       public InstructionRule(IToken defaultToken)
+       {
+               this(defaultToken, false);
+       }
+
+       public InstructionRule(IToken defaultToken, boolean ignoreCase)
+       {
+               super(new InstructionDetector(), defaultToken, ignoreCase);
+               AsmOps.addListener(this::update);
+       }
+
+       void update(Set<String> words)
+       {
+               fWords.clear();
+               words.forEach(s -> fWords.put(s, fDefaultToken));
+       }
+
+       static class InstructionDetector implements IWordDetector
+       {
+               @Override
+               public boolean isWordStart(char c)
+               {
+                       return Character.isJavaIdentifierStart(c);
+               }
+
+               @Override
+               public boolean isWordPart(char c)
+               {
+                       return Character.isJavaIdentifierPart(c);
+               }
+       }
+}