1 package net.mograsim.plugin.asm.editor;
5 import org.eclipse.jface.resource.ColorRegistry;
6 import org.eclipse.jface.resource.FontRegistry;
7 import org.eclipse.jface.text.IDocument;
8 import org.eclipse.jface.text.TextAttribute;
9 import org.eclipse.jface.text.presentation.PresentationReconciler;
10 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
11 import org.eclipse.jface.text.rules.EndOfLineRule;
12 import org.eclipse.jface.text.rules.IRule;
13 import org.eclipse.jface.text.rules.IWordDetector;
14 import org.eclipse.jface.text.rules.RuleBasedScanner;
15 import org.eclipse.jface.text.rules.Token;
16 import org.eclipse.jface.text.rules.WordRule;
17 import org.eclipse.ui.PlatformUI;
18 import org.eclipse.ui.themes.ITheme;
20 import net.mograsim.plugin.AsmOps;
22 public class AsmPresentationReconciler extends PresentationReconciler
25 private final Token comment = new Token(null);
26 private final Token std = new Token(null);
27 private final Token op = new Token(null);
28 private final Token label = new Token(null);
29 private final Token number = new Token(null);
31 private IRule[] rules;
33 public AsmPresentationReconciler()
35 RuleBasedScanner scanner = new RuleBasedScanner();
37 rules[0] = new EndOfLineRule(";", comment);
38 rules[1] = new AsmLabelRule(label);
39 WordRule ops = new WordRule(new IWordDetector()
43 public boolean isWordStart(char c)
45 return Character.isJavaIdentifierStart(c);
49 public boolean isWordPart(char c)
51 return Character.isJavaIdentifierPart(c);
56 AsmOps.addListener(this::update);
59 void update(Set<String> words)
62 words.forEach(s -> fWords.put(s, op));
66 rules[3] = new AsmNumberRule(number);
68 scanner.setRules(rules);
69 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
70 this.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
71 this.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
73 ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
75 current.getColorRegistry().addListener(e -> updateStyle(current));
76 current.getFontRegistry().addListener(e -> updateStyle(current));
79 void updateStyle(ITheme current)
81 ColorRegistry cr = current.getColorRegistry();
82 FontRegistry fr = current.getFontRegistry();
83 comment.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_comment_color")));
84 op.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_operation_color"), null, 0,
85 fr.get("net.mograsim.plugin.asm_operation_font")));
86 label.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_label_color")));
87 number.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_number_color")));