The final restructured version for automatic build using maven tycho
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / asm / editor / AsmPresentationReconciler.java
1 package net.mograsim.plugin.asm.editor;
2
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;
15
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;
19
20 public class AsmPresentationReconciler extends PresentationReconciler
21 {
22
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);
28
29         private IRule[] rules;
30
31         public AsmPresentationReconciler()
32         {
33                 RuleBasedScanner scanner = new RuleBasedScanner();
34                 rules = new IRule[4];
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);
39
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);
44
45                 ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
46                 updateStyle(current);
47                 current.getColorRegistry().addListener(e -> updateStyle(current));
48                 current.getFontRegistry().addListener(e -> updateStyle(current));
49         }
50
51         void updateStyle(ITheme current)
52         {
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")));
60         }
61 }