/** * */ package org.goko.tools.editor.component.scanner; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; /** * @author Psyko * @date 20 juin 2016 */ public class GCodeDecimalRule implements IPredicateRule { /** The matching token */ private IToken token; public GCodeDecimalRule(IToken token) { this.token = token; } /** (inheritDoc) * @see org.eclipse.jface.text.rules.IPredicateRule#getSuccessToken() */ @Override public IToken getSuccessToken() { return token; } /** (inheritDoc) * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) */ @Override public IToken evaluate(ICharacterScanner scanner) { return evaluate(scanner, false); } /** (inheritDoc) * @see org.eclipse.jface.text.rules.IPredicateRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, boolean) */ @Override public IToken evaluate(ICharacterScanner scanner, boolean resume) { char c = (char) scanner.read(); if (Character.isDigit(c)) { // postive numbers and zero do { c = (char) scanner.read(); } while (Character.isDigit(c) || c == '.'); scanner.unread(); return token; } else if (c == '-' || c == '.') { // negative numbers c = (char) scanner.read(); if (Character.isDigit(c)) { do { c = (char) scanner.read(); } while (Character.isDigit(c) || c == '.'); scanner.unread(); return token; } else { scanner.unread(); scanner.unread(); return Token.UNDEFINED; } } else { scanner.unread(); return Token.UNDEFINED; } } }