|
From: Christopher W. <caw...@us...> - 2005-12-02 16:18:20
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21995/src/org/rubypeople/rdt/internal/ui/text/ruby Modified Files: RubyCodeScanner.java CharacterRule.java Added Files: SymbolRule.java SingleCharacterPrefixRule.java Log Message: Allow distinct syntax highlighting of symbols --- NEW FILE: SingleCharacterPrefixRule.java --- package org.rubypeople.rdt.internal.ui.text.ruby; import org.eclipse.jface.text.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; /** * This is a base class for recognizing tokens where a single character prefix * can determine if the word is of a particular token type. The token ends at * EOF, EOL or whitespace. * * @author cawilliams * */ public class SingleCharacterPrefixRule implements IRule { protected char fPrefix; protected IToken fToken; protected int fMinLength; protected int fMaxLength; public SingleCharacterPrefixRule(char prefix, IToken token, int minLength, int maxLength) { fPrefix = prefix; Assert.isNotNull(token); fToken = token; Assert.isLegal(minLength >= 1); fMinLength = minLength; Assert.isLegal(maxLength >= 1); fMaxLength = maxLength; } public IToken evaluate(ICharacterScanner scanner) { int c = scanner.read(); int length = 1; if (((char) c) == fPrefix) { // Now read until we hit EOF, EOL or whitespace while (true) { c = scanner.read(); if (c == ICharacterScanner.EOF || Character.isWhitespace((char) c)) { scanner.unread(); if (!lengthInRange(length)) return Token.UNDEFINED; return fToken; } length++; } } scanner.unread(); return Token.UNDEFINED; } /** * Determine if the length of the token is valid. * * @param length * @return */ protected boolean lengthInRange(int length) { return (length >= fMinLength) && (length <= fMaxLength); } } --- NEW FILE: SymbolRule.java --- package org.rubypeople.rdt.internal.ui.text.ruby; import org.eclipse.jface.text.rules.IToken; /** * A rule which will return the given Token for Ruby symbols. * * @author cawilliams * */ public class SymbolRule extends SingleCharacterPrefixRule { private static final char PREFIX = ':'; public SymbolRule(IToken token) { super(PREFIX, token, 2, Integer.MAX_VALUE); } } Index: CharacterRule.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/CharacterRule.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CharacterRule.java 2 Dec 2005 02:56:05 -0000 1.1 --- CharacterRule.java 2 Dec 2005 16:18:11 -0000 1.2 *************** *** 1,48 **** package org.rubypeople.rdt.internal.ui.text.ruby; - import org.eclipse.jface.text.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 CharacterRule 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 CharacterRule(IToken token) { ! Assert.isNotNull(token); ! fToken = token; ! } ! ! /* ! * @see IRule#evaluate(ICharacterScanner) ! */ ! public IToken evaluate(ICharacterScanner scanner) { ! int c = scanner.read(); ! if (((char) c) == '?') { ! c = scanner.read(); ! if (c == ICharacterScanner.EOF) { ! scanner.unread(); ! return Token.UNDEFINED; ! } ! int d = scanner.read(); ! if (!Character.isWhitespace((char) c) && Character.isWhitespace((char) d)) { ! scanner.unread(); ! return fToken; ! } ! } ! scanner.unread(); ! return Token.UNDEFINED; ! } } --- 1,20 ---- package org.rubypeople.rdt.internal.ui.text.ruby; import org.eclipse.jface.text.rules.IToken; ! public class CharacterRule extends SingleCharacterPrefixRule { ! private static final char PREFIX = '?'; ! private static final int WORD_LENGTH = 2; ! /** ! * Creates a rule which will return the specified token when a character ! * sequence is detected. ! * ! * @param token ! * the token to be returned ! */ ! public CharacterRule(IToken token) { ! super(PREFIX, token, WORD_LENGTH, 2); ! } } Index: RubyCodeScanner.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyCodeScanner.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** RubyCodeScanner.java 2 Dec 2005 02:56:05 -0000 1.8 --- RubyCodeScanner.java 2 Dec 2005 16:18:11 -0000 1.9 *************** *** 20,24 **** private static String[] fgTokenProperties = { IRubyColorConstants.RUBY_KEYWORD, IRubyColorConstants.RUBY_DEFAULT, ! IRubyColorConstants.RUBY_FIXNUM, IRubyColorConstants.RUBY_CHARACTER // TODO Add Ability to set colors for return and operators // IRubyColorConstants.RUBY_METHOD_NAME, --- 20,25 ---- private static String[] fgTokenProperties = { IRubyColorConstants.RUBY_KEYWORD, IRubyColorConstants.RUBY_DEFAULT, ! IRubyColorConstants.RUBY_FIXNUM, IRubyColorConstants.RUBY_CHARACTER, ! IRubyColorConstants.RUBY_SYMBOL // TODO Add Ability to set colors for return and operators // IRubyColorConstants.RUBY_METHOD_NAME, *************** *** 55,58 **** --- 56,62 ---- IToken fixnumToken = getToken(IRubyColorConstants.RUBY_FIXNUM); rules.add(new NumberRule(fixnumToken)); + + rules.add(new SymbolRule( + getToken(IRubyColorConstants.RUBY_SYMBOL))); IWordDetector wordDetector = new RubyWordDetector(); |