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