|
From: Markus B. <mba...@us...> - 2005-10-03 11:32:06
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7559/src/org/rubypeople/rdt/internal/ui/text Modified Files: RubyPartitionScanner.java Added Files: HereDocPatternRule.java NumberSignDetector.java Log Message: merged from SRB_0-6-1_2 Index: RubyPartitionScanner.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** RubyPartitionScanner.java 1 Apr 2005 02:11:42 -0000 1.8 --- RubyPartitionScanner.java 3 Oct 2005 11:31:34 -0000 1.9 *************** *** 11,14 **** --- 11,15 ---- import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.Token; + import org.eclipse.jface.text.rules.WordPatternRule; public class RubyPartitionScanner extends RuleBasedPartitionScanner { *************** *** 20,23 **** --- 21,25 ---- public static final String REGULAR_EXPRESSION = "partition_scanner_ruby_regular_expression"; public static final String COMMAND = "partition_scanner_ruby_command"; + public static final String HERE_DOC = "partition_scanner_here_doc"; public static final String[] LEGAL_CONTENT_TYPES = {STRING, MULTI_LINE_COMMENT, SINGLE_LINE_COMMENT, REGULAR_EXPRESSION, COMMAND}; *************** *** 34,37 **** --- 36,40 ---- IToken regexp = new Token(REGULAR_EXPRESSION); IToken command = new Token(COMMAND); + IToken hereDoc = new Token(STRING) ; List rules = new ArrayList(); *************** *** 57,65 **** // Single line comments rules.add(new EndOfLineRule("#", singleLineComment)); // Multiline comments ! rules.add(new MultiLineRule("=begin", "=end", multiLineComment)); ! ! // TODO Handle Heredocs! IPredicateRule[] result = new IPredicateRule[rules.size()]; --- 60,72 ---- // Single line comments + // ?# evaluates to the asiic value of # + rules.add(new WordPatternRule(new NumberSignDetector(),"?", "#", Token.UNDEFINED)) ; rules.add(new EndOfLineRule("#", singleLineComment)); // Multiline comments ! MultiLineRule multiLineCommentRule = new MultiLineRule("=begin", "=end", multiLineComment) ; ! multiLineCommentRule.setColumnConstraint(0) ; ! rules.add(multiLineCommentRule); ! ! rules.add(new HereDocPatternRule(hereDoc)) ; IPredicateRule[] result = new IPredicateRule[rules.size()]; --- NEW FILE: HereDocPatternRule.java --- package org.rubypeople.rdt.internal.ui.text; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IToken; public class HereDocPatternRule extends org.eclipse.jface.text.rules.PatternRule { public HereDocPatternRule(IToken token) { // TODO: escape char OK? super("<<", "", token, (char)-1, false, false); } protected boolean endSequenceDetected(ICharacterScanner scanner) { char firstChar = (char) scanner.read() ; if (Character.isWhitespace(firstChar)) { return false ; } if (firstChar == '-') { firstChar = (char) scanner.read() ; } boolean isQuoted = false ; char quote = ' ' ; if (firstChar == '\'' || firstChar == '"') { isQuoted = true ; quote = firstChar ; firstChar = (char) scanner.read() ; } String keyword = "" ; char c = firstChar ; do { if ((byte) c == ICharacterScanner.EOF || Character.isWhitespace(c)) { break ; } keyword += c ; c = (char) scanner.read() ; } while ( true ) ; if (keyword.length() == 0) { return false ; } if (isQuoted && !(keyword.charAt(keyword.length() -1) == quote) ) { return false ; } if (isQuoted) { fEndSequence = keyword.substring(0, keyword.length() - 1).toCharArray() ; } else { fEndSequence = keyword.toCharArray() ; } boolean result = super.endSequenceDetected(scanner) ; if (!result) { return false ; } // the keyword must be at the beginning of the line return scanner.getColumn() == fEndSequence.length ; } } --- NEW FILE: NumberSignDetector.java --- package org.rubypeople.rdt.internal.ui.text; import org.eclipse.jface.text.rules.IWordDetector; public class NumberSignDetector implements IWordDetector { public NumberSignDetector() { super(); } public boolean isWordStart(char c) { return isWordPart(c) ; } public boolean isWordPart(char c) { return '#' == c; } } |