X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java index 390bba8..a3a6e0f 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java @@ -8,18 +8,19 @@ Contributors: Igor Malinin - initial contribution - $Id: PHPPartitionScanner.java,v 1.31 2005-10-09 11:24:07 axelcl Exp $ + $Id: PHPPartitionScanner.java,v 1.35 2007-03-17 14:07:31 axelcl Exp $ **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor.php; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import net.sourceforge.phpdt.internal.compiler.parser.Scanner; import net.sourceforge.phpeclipse.ui.text.rules.AbstractPartitioner; -import org.eclipse.jface.text.Assert; +//incastrix +//import org.eclipse.jface.text.Assert; +import org.eclipse.core.runtime.Assert; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.rules.ICharacterScanner; @@ -28,8 +29,8 @@ import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; /** - * - * + * + * * @author Igor Malinin */ public class PHPPartitionScanner implements IPartitionTokenScanner { @@ -268,7 +269,8 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { if (position >= end) { return false; } - ch = document.getChar(position++); // ignore escaped character + ch = document.getChar(position++); // ignore escaped + // character } else if (ch == '"') { return true; } @@ -292,7 +294,8 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { if (position >= end) { return false; } - ch = document.getChar(position++); // ignore escaped character + ch = document.getChar(position++); // ignore escaped + // character } else if (ch == '\'') { return true; } @@ -303,19 +306,35 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { return false; } + /** + * Read until HEREDOC ends + * + * @return + */ private boolean readUntilEscapedHEREDOC() { - // search until heredoc ends try { char ch; StringBuffer buf = new StringBuffer(); char[] heredocIdent; + if (position >= end) { return false; } + ch = document.getChar(position++); + + + while (ch == ' ') { + if (position >= end) { + return false; + } + ch = document.getChar(position++); + } + if (!Scanner.isPHPIdentifierStart(ch)) { return false; } + while (Scanner.isPHPIdentifierPart(ch)) { buf.append(ch); if (position >= end) { @@ -323,29 +342,36 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { } ch = document.getChar(position++); } + heredocIdent = buf.toString().toCharArray(); + while (true) { if (position >= end) { return false; } - ch = document.getChar(position++); - if (ch == '\n') { // heredoc could end after a newline + + ch = document.getChar (position++); // Get the next character from file + + if (ch == '\n') { // heredoc could end after a newline int pos = 0; + while (true) { - if (position >= end) { - return false; + if (position >= end) { // If we are at the end of file + return false; // Return } - if (pos==heredocIdent.length) { - return true; + + if (pos == heredocIdent.length) { // If the found length equals the length of heredoc id + return true; // we found the end of heredoc } - ch = document.getChar(position++); // ignore escaped character - if (ch != heredocIdent[pos]) { - break; + + ch = document.getChar (position++); // Ignore escaped character + + if (ch != heredocIdent[pos]) { // If current character doesn't match the heredoc id + break; // break the heredoc end search } - pos++; + + pos++; // Character matched the heredoc id so far } - } else if (ch == '"') { - return true; } } } catch (BadLocationException e) { @@ -430,7 +456,8 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { /* * @see org.eclipse.jface.text.rules.IPartitionTokenScanner */ - public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) { + public void setPartialRange(IDocument document, int offset, int length, + String contentType, int partitionOffset) { // state = STATE_DEFAULT; if (partitionOffset > -1) { int delta = offset - partitionOffset;