X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Fasm%2Feditor%2Frules%2FAsmNumberRule.java;fp=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Fasm%2Feditor%2Frules%2FAsmNumberRule.java;h=728030dc766372738bed83e990f9c0719b1b6f97;hb=7d05144c25daa53e60fc9ed9fd503546a86567f8;hp=0000000000000000000000000000000000000000;hpb=8bed58cd47f4e53a0a83e066d38864aa6875502f;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/AsmNumberRule.java new file mode 100644 index 00000000..728030dc --- /dev/null +++ b/plugins/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; + } + +}