Fixed Asm Editor
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / asm / editor / rules / InstructionRule.java
1 package net.mograsim.plugin.asm.editor.rules;\r
2 \r
3 import java.util.Objects;\r
4 import java.util.Set;\r
5 \r
6 import org.eclipse.jface.text.rules.IToken;\r
7 import org.eclipse.jface.text.rules.IWordDetector;\r
8 import org.eclipse.jface.text.rules.WordRule;\r
9 \r
10 import net.mograsim.plugin.AsmOps;\r
11 \r
12 public class InstructionRule extends WordRule\r
13 {\r
14         private final IToken instToken;\r
15 \r
16         public InstructionRule(IToken defaultToken, IToken instToken)\r
17         {\r
18                 this(defaultToken, instToken, false);\r
19         }\r
20 \r
21         public InstructionRule(IToken defaultToken, IToken instToken, boolean ignoreCase)\r
22         {\r
23                 super(new InstructionDetector(), Objects.requireNonNull(defaultToken), ignoreCase);\r
24                 this.instToken = Objects.requireNonNull(instToken);\r
25                 AsmOps.addListener(this::update);\r
26         }\r
27 \r
28         void update(Set<String> words)\r
29         {\r
30                 fWords.clear();\r
31                 words.forEach(s -> fWords.put(s, instToken));\r
32         }\r
33 \r
34         static class InstructionDetector implements IWordDetector\r
35         {\r
36                 @Override\r
37                 public boolean isWordStart(char c)\r
38                 {\r
39                         return Character.isJavaIdentifierStart(c);\r
40                 }\r
41 \r
42                 @Override\r
43                 public boolean isWordPart(char c)\r
44                 {\r
45                         return Character.isJavaIdentifierPart(c);\r
46                 }\r
47         }\r
48 }\r