2 * Copyright winterwell Mathematics Ltd.
3 * @author Daniel Winterstein
6 package winterwell.markdown.editors;
8 import org.eclipse.jface.preference.IPreferenceStore;
9 import org.eclipse.jface.preference.PreferenceConverter;
10 import org.eclipse.jface.text.TextAttribute;
11 import org.eclipse.jface.text.rules.IRule;
12 import org.eclipse.jface.text.rules.IWhitespaceDetector;
13 import org.eclipse.jface.text.rules.MultiLineRule;
14 import org.eclipse.jface.text.rules.RuleBasedScanner;
15 import org.eclipse.jface.text.rules.Token;
16 import org.eclipse.jface.text.rules.WhitespaceRule;
17 import org.eclipse.swt.SWT;
19 import winterwell.markdown.Activator;
20 import winterwell.markdown.preferences.MarkdownPreferencePage;
25 * @author Daniel Winterstein
27 public class MDScanner extends RuleBasedScanner {
29 public MDScanner(ColorManager cm) {
31 IPreferenceStore pStore = Activator.getDefault().getPreferenceStore();
32 Token heading = new Token(new TextAttribute(cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_HEADER)), null, SWT.BOLD));
33 Token comment = new Token(new TextAttribute(cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_COMMENT))));
34 Token emphasis = new Token(new TextAttribute(cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_DEFUALT)), null, SWT.ITALIC));
35 Token list = new Token(new TextAttribute(cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_HEADER)), null, SWT.BOLD));
36 Token link = new Token(new TextAttribute(cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_LINK)), null, TextAttribute.UNDERLINE));
37 Token code = new Token(new TextAttribute(
38 cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_CODE)),
39 cm.getColor(PreferenceConverter.getColor(pStore, MarkdownPreferencePage.PREF_CODE_BG)),
41 setRules(new IRule[] {
43 new HeaderRule(heading),
44 new HeaderWithUnderlineRule(heading),
46 new EmphasisRule("_", emphasis),
47 new EmphasisRule("***", emphasis),
48 new EmphasisRule("**", emphasis),
49 new EmphasisRule("*", emphasis),
50 new EmphasisRule("``", code),
51 new EmphasisRule("`", code),
52 new MultiLineRule("<!--", "-->", comment),
53 // WhitespaceRule messes up with the rest of rules
54 // new WhitespaceRule(new IWhitespaceDetector() {
55 // public boolean isWhitespace(char c) {
56 // return Character.isWhitespace(c);