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 8d0de49..4b163e0 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,7 +8,7 @@ Contributors: Igor Malinin - initial contribution - $Id: PHPPartitionScanner.java,v 1.25 2004-09-02 18:32:34 jsurfer Exp $ + $Id: PHPPartitionScanner.java,v 1.27 2005-05-06 00:57:28 stefanbjarni Exp $ **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor.php; @@ -17,7 +17,6 @@ import java.util.Map; import net.sourceforge.phpeclipse.ui.text.rules.AbstractPartitioner; -import org.eclipse.core.internal.indexing.AbstractPagePolicy; import org.eclipse.jface.text.Assert; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; @@ -151,11 +150,17 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { return getToken(token); case '"': // double quoted string // read until end of double quoted string - readUntilEscaped('"'); + if (!readUntilEscapedDQ()) { + state = STATE_DEFAULT; + return getToken(token); + } break; case '\'': // single quoted string // read until end of single quoted string - readUntilEscaped('\''); + if (!readUntilEscapedSQ()) { + state = STATE_DEFAULT; + return getToken(token); + } break; case '/': // comment start? ch = read(); @@ -273,22 +278,46 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { } } - private void readUntilEscaped(char ch) { + private boolean readUntilEscapedDQ() { + // search last double quoted character if (position >= end) { - return; + return false; } try { + char ch; while (true) { - if (document.getChar(position++) == ch) { - if (position < 2 || document.getChar(position - 2) != '\\') { - break; - } + ch = document.getChar(position++); + if (ch == '\\') { + ch = document.getChar(position++); // ignore escaped character + } else if (ch == '"') { + return true; + } + } + } catch (BadLocationException e) { + --position; + } + return false; + } + + private boolean readUntilEscapedSQ() { + // search last single quoted character + if (position >= end) { + return false; + } + try { + char ch; + while (true) { + ch = document.getChar(position++); + if (ch == '\\') { + ch = document.getChar(position++); // ignore escaped character + } else if (ch == '\'') { + return true; } } } catch (BadLocationException e) { --position; - return; } + return false; } private void readSingleLine() {