From: Christian Femers Date: Sat, 29 Jun 2019 01:29:46 +0000 (+0200) Subject: Improved package structure X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=443acaf4a6470adf66a73cf0443852ce3843ebe2;p=Mograsim.git Improved package structure --- diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java deleted file mode 100644 index 314b3b44..00000000 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmLabelRule.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.mograsim.plugin.asm.editor; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.jface.text.rules.ICharacterScanner; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.Token; - -public class AsmLabelRule implements IRule -{ - - /** The token to be returned when this rule is successful */ - protected IToken fToken; - - /** - * Creates a rule which will return the specified token when a numerical sequence is detected. - * - * @param token the token to be returned - */ - public AsmLabelRule(IToken token) - { - Assert.isNotNull(token); - fToken = token; - } - - @Override - public IToken evaluate(ICharacterScanner scanner) - { - int c = scanner.read(); - int i = 1; - if (Character.isJavaIdentifierStart(c)) - { - do - { - c = scanner.read(); - i++; - } while (Character.isJavaIdentifierPart(c)); - if (c == ':') - return fToken; - return abort(scanner, i); - } - scanner.unread(); - return Token.UNDEFINED; - } - - private static IToken abort(ICharacterScanner scanner, int i) - { - for (int j = 0; j < i; j++) - scanner.unread(); - return Token.UNDEFINED; - } -} \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java deleted file mode 100644 index 5a6850de..00000000 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmNumberRule.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.mograsim.plugin.asm.editor; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.jface.text.rules.ICharacterScanner; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.Token; - -import net.mograsim.plugin.asm.AsmNumberUtil; - -public class AsmNumberRule implements IRule -{ - - /** The token to be returned when this rule is successful */ - protected IToken fToken; - - /** - * Creates a rule which will return the specified token when a numerical sequence is detected. - * - * @param token the token to be returned - */ - public AsmNumberRule(IToken token) - { - Assert.isNotNull(token); - fToken = token; - } - - @Override - public IToken evaluate(ICharacterScanner scanner) - { - int i = 1; - int c = scanner.read(); - if (!AsmNumberUtil.isStart(c)) - return abort(scanner, i); - StringBuilder sb = new StringBuilder(); - sb.appendCodePoint(c); - while (true) - { - c = scanner.read(); - i++; - if (AsmNumberUtil.isPart(c)) - sb.appendCodePoint(c); - else - break; - } - if (!AsmNumberUtil.isNumber(sb)) - return abort(scanner, i); - scanner.unread(); - return fToken; - } - - private static IToken abort(ICharacterScanner scanner, int i) - { - for (int j = 0; j < i; j++) - scanner.unread(); - return Token.UNDEFINED; - } - -} diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java index 84378766..8d42ef59 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java @@ -1,7 +1,5 @@ package net.mograsim.plugin.asm.editor; -import java.util.Set; - import org.eclipse.jface.resource.ColorRegistry; import org.eclipse.jface.resource.FontRegistry; import org.eclipse.jface.text.IDocument; @@ -10,14 +8,14 @@ import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.rules.EndOfLineRule; import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IWordDetector; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.text.rules.WordRule; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.themes.ITheme; -import net.mograsim.plugin.AsmOps; +import net.mograsim.plugin.asm.editor.rules.AsmLabelRule; +import net.mograsim.plugin.asm.editor.rules.AsmNumberRule; +import net.mograsim.plugin.asm.editor.rules.InstructionRule; public class AsmPresentationReconciler extends PresentationReconciler { @@ -36,33 +34,7 @@ public class AsmPresentationReconciler extends PresentationReconciler rules = new IRule[4]; rules[0] = new EndOfLineRule(";", comment); rules[1] = new AsmLabelRule(label); - WordRule ops = new WordRule(new IWordDetector() - { - - @Override - public boolean isWordStart(char c) - { - return Character.isJavaIdentifierStart(c); - } - - @Override - public boolean isWordPart(char c) - { - return Character.isJavaIdentifierPart(c); - } - }, std, true) - { - { - AsmOps.addListener(this::update); - } - - void update(Set words) - { - fWords.clear(); - words.forEach(s -> fWords.put(s, op)); - } - }; - rules[2] = ops; + rules[2] = new InstructionRule(op, true); rules[3] = new AsmNumberRule(number); scanner.setRules(rules); diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java new file mode 100644 index 00000000..b55e0b3c --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmLabelRule.java @@ -0,0 +1,52 @@ +package net.mograsim.plugin.asm.editor.rules; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.text.rules.ICharacterScanner; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.Token; + +public class AsmLabelRule implements IRule +{ + + /** The token to be returned when this rule is successful */ + protected IToken fToken; + + /** + * Creates a rule which will return the specified token when a numerical sequence is detected. + * + * @param token the token to be returned + */ + public AsmLabelRule(IToken token) + { + Assert.isNotNull(token); + fToken = token; + } + + @Override + public IToken evaluate(ICharacterScanner scanner) + { + int c = scanner.read(); + int i = 1; + if (Character.isJavaIdentifierStart(c)) + { + do + { + c = scanner.read(); + i++; + } while (Character.isJavaIdentifierPart(c)); + if (c == ':') + return fToken; + return abort(scanner, i); + } + scanner.unread(); + return Token.UNDEFINED; + } + + private static IToken abort(ICharacterScanner scanner, int i) + { + for (int j = 0; j < i; j++) + scanner.unread(); + return Token.UNDEFINED; + } +} \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java new file mode 100644 index 00000000..728030dc --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java @@ -0,0 +1,59 @@ +package net.mograsim.plugin.asm.editor.rules; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.text.rules.ICharacterScanner; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.Token; + +import net.mograsim.plugin.asm.AsmNumberUtil; + +public class AsmNumberRule implements IRule +{ + + /** The token to be returned when this rule is successful */ + protected IToken fToken; + + /** + * Creates a rule which will return the specified token when a numerical sequence is detected. + * + * @param token the token to be returned + */ + public AsmNumberRule(IToken token) + { + Assert.isNotNull(token); + fToken = token; + } + + @Override + public IToken evaluate(ICharacterScanner scanner) + { + int i = 1; + int c = scanner.read(); + if (!AsmNumberUtil.isStart(c)) + return abort(scanner, i); + StringBuilder sb = new StringBuilder(); + sb.appendCodePoint(c); + while (true) + { + c = scanner.read(); + i++; + if (AsmNumberUtil.isPart(c)) + sb.appendCodePoint(c); + else + break; + } + if (!AsmNumberUtil.isNumber(sb)) + return abort(scanner, i); + scanner.unread(); + return fToken; + } + + private static IToken abort(ICharacterScanner scanner, int i) + { + for (int j = 0; j < i; j++) + scanner.unread(); + return Token.UNDEFINED; + } + +} diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java new file mode 100644 index 00000000..948c60ac --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java @@ -0,0 +1,44 @@ +package net.mograsim.plugin.asm.editor.rules; + +import java.util.Set; + +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.IWordDetector; +import org.eclipse.jface.text.rules.WordRule; + +import net.mograsim.plugin.AsmOps; + +public class InstructionRule extends WordRule +{ + public InstructionRule(IToken defaultToken) + { + this(defaultToken, false); + } + + public InstructionRule(IToken defaultToken, boolean ignoreCase) + { + super(new InstructionDetector(), defaultToken, ignoreCase); + AsmOps.addListener(this::update); + } + + void update(Set words) + { + fWords.clear(); + words.forEach(s -> fWords.put(s, fDefaultToken)); + } + + static class InstructionDetector implements IWordDetector + { + @Override + public boolean isWordStart(char c) + { + return Character.isJavaIdentifierStart(c); + } + + @Override + public boolean isWordPart(char c) + { + return Character.isJavaIdentifierPart(c); + } + } +}