|
From: <caw...@us...> - 2007-07-16 14:47:14
|
Revision: 2764
http://svn.sourceforge.net/rubyeclipse/?rev=2764&view=rev
Author: cawilliams
Date: 2007-07-16 07:47:09 -0700 (Mon, 16 Jul 2007)
Log Message:
-----------
test and fix for #5211 - Ruby code colorization goes wrong till the end of file on some text patterns. (We didn't properly handle the % form of strings/regexp/commands)
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java
trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java 2007-07-16 13:45:35 UTC (rev 2763)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java 2007-07-16 14:47:09 UTC (rev 2764)
@@ -67,6 +67,7 @@
private List<QueuedToken> fQueue = new ArrayList<QueuedToken>();
private String fContentType = RUBY_DEFAULT;
private boolean inSingleQuote;
+ private String fOpeningString;
public final static String RUBY_MULTI_LINE_COMMENT = IRubyPartitions.RUBY_MULTI_LINE_COMMENT;
@@ -254,17 +255,11 @@
private void setLexerPastDynamicSectionOfString() throws IOException {
IDocument document;
StringBuffer fakeContents = new StringBuffer();
- int start = fOffset - 1;
+ int start = fOffset - fOpeningString.length();
for (int i = 0; i < start; i++) {
fakeContents.append(" ");
}
- if (fContentType.equals(RUBY_REGULAR_EXPRESSION)) {
- fakeContents.append('/');
- } else if (fContentType.equals(RUBY_COMMAND)) {
- fakeContents.append('`');
- } else {
- fakeContents.append('"');
- }
+ fakeContents.append(fOpeningString);
if ((fOffset - origOffset) < origLength) {
fakeContents.append(new String(fContents.substring((fOffset - origOffset)))); // BLAH removed + 1 from end here
}
@@ -305,16 +300,18 @@
case Tokens.tSTRING_CONTENT:
return new Token(fContentType);
case Tokens.tSTRING_BEG:
- String token = fContents.substring(fOffset - origOffset, lexerSource.getOffset());
- if (token.trim().equals("'")) {
+ fOpeningString = fContents.substring(fOffset - origOffset, lexerSource.getOffset()).trim();
+ if (fOpeningString.equals("'")) {
inSingleQuote = true;
- }
- fContentType = RUBY_STRING;
+ }
+ fContentType = RUBY_STRING;
return new Token(RUBY_STRING);
case Tokens.tXSTRING_BEG:
+ fOpeningString = fContents.substring(fOffset - origOffset, lexerSource.getOffset()).trim();
fContentType = RUBY_COMMAND;
return new Token(RUBY_COMMAND);
case Tokens.tQWORDS_BEG:
+ fOpeningString = fContents.substring(fOffset - origOffset, lexerSource.getOffset()).trim();
fContentType = RUBY_STRING;
return new Token(RUBY_STRING);
case Tokens.tSTRING_END:
@@ -323,6 +320,7 @@
inSingleQuote = false;
return new Token(oldContentType);
case Tokens.tREGEXP_BEG:
+ fOpeningString = fContents.substring(fOffset - origOffset, lexerSource.getOffset()).trim();
fContentType = RUBY_REGULAR_EXPRESSION;
return new Token(RUBY_REGULAR_EXPRESSION);
case Tokens.tREGEXP_END:
Modified: trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java 2007-07-16 13:45:35 UTC (rev 2763)
+++ trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java 2007-07-16 14:47:09 UTC (rev 2764)
@@ -301,5 +301,18 @@
assertEquals(RubyPartitionScanner.RUBY_COMMAND, this.getContentType(code, 63));
assertEquals(RubyPartitionScanner.RUBY_DEFAULT, this.getContentType(code, 65));
}
+
+ public void testPercentXCommand() {
+ String code = "if (@options.do_it)\n" +
+ " %x{#{cmd}}\n" +
+ "end\n";
+ assertEquals(RubyPartitionScanner.RUBY_DEFAULT, this.getContentType(code, 1)); // i'f'
+ assertEquals(RubyPartitionScanner.RUBY_COMMAND, this.getContentType(code, 22)); // '%'x
+ assertEquals(RubyPartitionScanner.RUBY_COMMAND, this.getContentType(code, 24)); // %x'{'
+ assertEquals(RubyPartitionScanner.RUBY_DEFAULT, this.getContentType(code, 27)); //'c'md
+ assertEquals(RubyPartitionScanner.RUBY_COMMAND, this.getContentType(code, 30)); // cmd'}'
+ assertEquals(RubyPartitionScanner.RUBY_COMMAND, this.getContentType(code, 31)); // cmd}'}'
+ assertEquals(RubyPartitionScanner.RUBY_DEFAULT, this.getContentType(code, 33)); //'e'nd
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|