X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java index 294aa1d..8a50ffd 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java @@ -22,6 +22,7 @@ import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector; import net.sourceforge.phpeclipse.phpeditor.util.PHPWordDetector; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.rules.EndOfLineRule; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IRule; @@ -36,7 +37,7 @@ import org.eclipse.jface.text.rules.WordRule; * PHP Code Scanner */ public class PHPCodeScanner extends AbstractJavaScanner { - + /** * Rule to detect java operators. * @@ -160,6 +161,114 @@ public class PHPCodeScanner extends AbstractJavaScanner { } } + protected class SingleQuoteStringRule implements IRule { + + /** Token to return for this rule */ + private final IToken fToken; + + public SingleQuoteStringRule(IToken token) { + fToken = token; + + } + + /* + * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) + */ + public IToken evaluate(ICharacterScanner scanner) { + + int character = scanner.read(); + + if (character=='\'') { + + while (true) { + character = scanner.read(); + if (character == '\\') { + character = scanner.read(); + } else if (character == '\'') { + return fToken; + } + } + + } else { + scanner.unread(); + return Token.UNDEFINED; + } + } + + } + + protected class AccentStringRule implements IRule { + + /** Token to return for this rule */ + private final IToken fToken; + + public AccentStringRule(IToken token) { + fToken = token; + + } + + /* + * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) + */ + public IToken evaluate(ICharacterScanner scanner) { + + int character = scanner.read(); + + if (character=='`') { + + while (true) { + character = scanner.read(); + if (character == '\\') { + character = scanner.read(); + } else if (character == '`') { + return fToken; + } + } + + } else { + scanner.unread(); + return Token.UNDEFINED; + } + } + + } + + protected class DoubleQuoteStringRule implements IRule { + + /** Token to return for this rule */ + private final IToken fToken; + + public DoubleQuoteStringRule(IToken token) { + fToken = token; + + } + + /* + * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) + */ + public IToken evaluate(ICharacterScanner scanner) { + + int character = scanner.read(); + + if (character=='"') { + + while (true) { + character = scanner.read(); + if (character == '\\') { + character = scanner.read(); + } else if (character == '"') { + return fToken; + } + } + + } else { + scanner.unread(); + return Token.UNDEFINED; + } + } + + } + private class PHPWordRule extends WordRule { private StringBuffer fBuffer = new StringBuffer(); @@ -258,7 +367,8 @@ public class PHPCodeScanner extends AbstractJavaScanner { IPreferenceConstants.PHP_KEYWORD, IPreferenceConstants.PHP_FUNCTIONNAME, IPreferenceConstants.PHP_VARIABLE, - IPreferenceConstants.PHP_STRING, + IPreferenceConstants.PHP_STRING_DQ, + IPreferenceConstants.PHP_STRING_SQ, IPreferenceConstants.PHP_TYPE, IPreferenceConstants.PHP_CONSTANT, IPreferenceConstants.PHP_DEFAULT, @@ -292,10 +402,11 @@ public class PHPCodeScanner extends AbstractJavaScanner { rules.add(new EndOfLineRule("//", token)); //$NON-NLS-1$ rules.add(new EndOfLineRule("#", token)); //$NON-NLS-1$ // Add rule for strings and character constants. - token = getToken(IPreferenceConstants.PHP_STRING); - rules.add(new MultiLineRule("\"", "\"", token, '\\')); //$NON-NLS-2$ //$NON-NLS-1$ - rules.add(new MultiLineRule("`", "`", token, '\\')); //$NON-NLS-2$ //$NON-NLS-1$ - rules.add(new MultiLineRule("'", "'", token, '\\')); //$NON-NLS-2$ //$NON-NLS-1$ +// token = getToken(IPreferenceConstants.PHP_STRING_SQ); +// rules.add(new SingleQuoteStringRule(token)); +// token = getToken(IPreferenceConstants.PHP_STRING_DQ); +// rules.add(new DoubleQuoteStringRule(token)); + rules.add(new AccentStringRule(token)); token = getToken(IPreferenceConstants.PHP_MULTILINE_COMMENT); rules.add(new MultiLineRule("/*", "*/", token)); //$NON-NLS-2$ //$NON-NLS-1$