|
From: <caw...@us...> - 2007-09-13 17:07:54
|
Revision: 3169
http://rubyeclipse.svn.sourceforge.net/rubyeclipse/?rev=3169&view=rev
Author: cawilliams
Date: 2007-09-13 10:07:52 -0700 (Thu, 13 Sep 2007)
Log Message:
-----------
fix #5730 - Editor unable to open a malformed .rb file
Modified Paths:
--------------
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/RubyPartitionScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java 2007-09-13 14:10:25 UTC (rev 3168)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/RubyPartitionScanner.java 2007-09-13 17:07:52 UTC (rev 3169)
@@ -185,10 +185,22 @@
}
} catch (SyntaxException se) {
if (se.getMessage().equals("embedded document meets end of file")) {
+ // Add to the queue (at end), then try to just do the rest of the file...
// TODO recover somehow by removing this chunk out of the fContents?
- setOffset(se.getPosition().getStartOffset());
- fLength = fContents.length() - se.getPosition().getStartOffset();
- return new Token(RUBY_MULTI_LINE_COMMENT);
+ int start = se.getPosition().getStartOffset();
+ int length = fContents.length() - start;
+ QueuedToken qtoken = new QueuedToken(new Token(RUBY_MULTI_LINE_COMMENT), start, length);
+ RubyPartitionScanner scanner = new RubyPartitionScanner();
+ String possible = fContents.substring(0, se.getPosition().getStartOffset());
+ 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, scanner.getTokenLength()));
+ }
+ push(qtoken);
+ push(new QueuedToken(Token.EOF, start + length, 0));
+ return popTokenOffQueue();
}
if (lexerSource.getOffset() - origLength == 0)
@@ -529,4 +541,4 @@
return stack.get(stack.size() - 1);
}
}
-}
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|