/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.editor.php.internal.text.rules;
import org.eclipse.jface.text.rules.ICharacterScanner;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
/**
* @author Max Stepanov
*
*/
public class DoubleQuotedStringRule extends MultiLineRule {
/**
* @param token
*/
public DoubleQuotedStringRule(IToken token) {
super("\"", "\"", token, '\\', true); //$NON-NLS-1$ //$NON-NLS-2$
}
/* (non-Javadoc)
* @see org.eclipse.jface.text.rules.PatternRule#endSequenceDetected(org.eclipse.jface.text.rules.ICharacterScanner)
*/
@Override
protected boolean endSequenceDetected(ICharacterScanner scanner) {
int c;
int openBrackets = 0;
while ((c = scanner.read()) != ICharacterScanner.EOF) {
if (c == fEscapeCharacter) {
scanner.read();
} else if (openBrackets > 0) {
if (c == '{') {
++openBrackets;
} else if (c == '}') {
--openBrackets;
}
} else if (c == '{') {
if ((c = scanner.read()) == '$') {
openBrackets = 1;
} else if (c != ICharacterScanner.EOF) {
scanner.unread();
}
} else if ((c == fEndSequence[0] && sequenceDetected(scanner, fEndSequence, fBreaksOnEOF))) {
break;
}
}
return true;
}
}