X-Git-Url: http://secure.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..69bc1d5 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.26 2005-05-05 14:06:38 axelcl Exp $ **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor.php; @@ -151,11 +151,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 +279,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() {