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;
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();
}
}
- 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() {