1 package net.mograsim.plugin.asm.editor;
3 import org.eclipse.jface.resource.ColorRegistry;
4 import org.eclipse.jface.resource.FontRegistry;
5 import org.eclipse.jface.text.IDocument;
6 import org.eclipse.jface.text.TextAttribute;
7 import org.eclipse.jface.text.presentation.PresentationReconciler;
8 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
9 import org.eclipse.jface.text.rules.EndOfLineRule;
10 import org.eclipse.jface.text.rules.IRule;
11 import org.eclipse.jface.text.rules.RuleBasedScanner;
12 import org.eclipse.jface.text.rules.Token;
13 import org.eclipse.ui.PlatformUI;
14 import org.eclipse.ui.themes.ITheme;
16 import net.mograsim.plugin.asm.editor.rules.AsmLabelRule;
17 import net.mograsim.plugin.asm.editor.rules.AsmNumberRule;
18 import net.mograsim.plugin.asm.editor.rules.InstructionRule;
20 public class AsmPresentationReconciler extends PresentationReconciler
23 private final Token comment = new Token(null);
24 // private final Token std = new Token(null);
25 private final Token op = new Token(null);
26 private final Token label = new Token(null);
27 private final Token number = new Token(null);
29 private IRule[] rules;
31 public AsmPresentationReconciler()
33 RuleBasedScanner scanner = new RuleBasedScanner();
35 rules[0] = new EndOfLineRule(";", comment);
36 rules[1] = new AsmLabelRule(label);
37 rules[2] = new InstructionRule(Token.UNDEFINED, op, true);
38 rules[3] = new AsmNumberRule(number);
40 scanner.setRules(rules);
41 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
42 this.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
43 this.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
45 ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
47 current.getColorRegistry().addListener(e -> updateStyle(current));
48 current.getFontRegistry().addListener(e -> updateStyle(current));
51 void updateStyle(ITheme current)
53 ColorRegistry cr = current.getColorRegistry();
54 FontRegistry fr = current.getFontRegistry();
55 comment.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_comment_color")));
56 op.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_operation_color"), null, 0,
57 fr.get("net.mograsim.plugin.asm_operation_font")));
58 label.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_label_color")));
59 number.setData(new TextAttribute(cr.get("net.mograsim.plugin.asm_number_color")));