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