|
From: <caw...@us...> - 2007-07-19 19:07:35
|
Revision: 2802
http://svn.sourceforge.net/rubyeclipse/?rev=2802&view=rev
Author: cawilliams
Date: 2007-07-19 12:07:12 -0700 (Thu, 19 Jul 2007)
Log Message:
-----------
add test and fix for some nasty heredoc syntax that was breaking editor
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/MergingPartitionScanner.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/MergingPartitionScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/MergingPartitionScanner.java 2007-07-19 16:41:35 UTC (rev 2801)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/MergingPartitionScanner.java 2007-07-19 19:07:12 UTC (rev 2802)
@@ -50,8 +50,6 @@
IToken token = null;
while(!(token = fScanner.nextToken()).isEOF()) {
if (lastToken != null && token.getData().equals(lastToken.getData())) {
-// fLength = (fScanner.getTokenOffset() - fOffset) + fScanner.getTokenLength();
-// Assert.isTrue(fLength >= 0);
} else if (lastToken == null) {
lastToken = token;
fOffset = fScanner.getTokenOffset();
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-19 16:41:35 UTC (rev 2801)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java 2007-07-19 19:07:12 UTC (rev 2802)
@@ -52,6 +52,11 @@
public IToken getToken() {
return token;
}
+
+ @Override
+ public String toString() {
+ return getToken().getData() + ": offset: " + getOffset() + ", length: " + getLength();
+ }
}
private RubyYaccLexer lexer;
@@ -154,6 +159,18 @@
addClosingBraceToken();
setLexerPastDynamicSectionOfString();
return popTokenOffQueue();
+ } else if (lexerToken == Tokens.tSTRING_BEG) {
+ String opening = fContents.substring(fOffset - origOffset, lexerSource.getOffset());
+ int index = opening.indexOf(",");
+ if (opening.trim().startsWith("<<") && index != -1) {
+ addHereDocStartToken(index);
+ addCommaToken(index);
+ scanRestOfLine(opening, index);
+ // set up state variables
+ fOpeningString = opening.substring(0, index).trim() + "\n";
+ fContentType = RUBY_STRING;
+ return popTokenOffQueue();
+ }
}
returnValue = getToken(lexerToken);
}
@@ -186,6 +203,26 @@
return returnValue;
}
+ private void scanRestOfLine(String opening, int index) {
+ String possible = opening.substring(index + 1);
+ RubyPartitionScanner scanner = new RubyPartitionScanner();
+ IDocument document = new Document(possible);
+ scanner.setRange(document, 0, possible.length());
+ IToken token;
+ while (!(token = scanner.nextToken()).isEOF()) {
+ push(new QueuedToken(token, scanner.getTokenOffset() + fOffset + index + 1, scanner.getTokenLength()));
+ }
+ setOffset(fOffset + index + 1 + possible.length());
+ }
+
+ private void addCommaToken(int index) {
+ push(new QueuedToken(new Token(RUBY_DEFAULT), fOffset + index, 1));
+ }
+
+ private void addHereDocStartToken(int index) {
+ push(new QueuedToken(new Token(RUBY_STRING), fOffset, index));
+ }
+
private void setOffset(int offset) {
fOffset = offset;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|