Organized imports
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / php / PHPPartitionScanner.java
index 8d0de49..4b163e0 100644 (file)
@@ -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() {