X-Git-Url: http://git.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 84f31f4..9e75272 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 @@ -19,8 +19,10 @@ import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector; import net.sourceforge.phpeclipse.phpeditor.util.PHPWordDetector; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.rules.EndOfLineRule; +import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IRule; import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.IWordDetector; import org.eclipse.jface.text.rules.MultiLineRule; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.SingleLineRule; @@ -2412,6 +2414,54 @@ public class PHPCodeScanner extends RuleBasedScanner { "zzip_read", "zzip_readdir" }; + private IToken variable; + + private class PHPWordRule extends WordRule { + private StringBuffer fBuffer= new StringBuffer(); + + public PHPWordRule(IWordDetector detector) { + super(detector, Token.UNDEFINED); + } + + public PHPWordRule(IWordDetector detector, IToken defaultToken) { + super(detector, defaultToken); + } + + public IToken evaluate(ICharacterScanner scanner) { + int c = scanner.read(); + boolean isVariable = false; + if (fDetector.isWordStart((char) c)) { + if (c=='$') { + isVariable = true; + } + if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) { + + fBuffer.setLength(0); + do { + fBuffer.append((char) c); + c = scanner.read(); + } while (c != scanner.EOF && fDetector.isWordPart((char) c)); + scanner.unread(); + + if (isVariable) { + return variable; + } + IToken token = (IToken) fWords.get(fBuffer.toString()); + if (token != null) + return token; + + if (fDefaultToken.isUndefined()) + unreadBuffer(scanner); + + return fDefaultToken; + } + } + + scanner.unread(); + return Token.UNDEFINED; + } + } + private static String[] fgConstants = { "__LINE__", "__FILE__", "true", "false" }; private TextAttribute fComment; private TextAttribute fKeyword; @@ -2429,28 +2479,31 @@ public class PHPCodeScanner extends RuleBasedScanner { IToken string = new Token(new TextAttribute(provider.getColor(PHPColorProvider.STRING))); IToken comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.SINGLE_LINE_COMMENT))); IToken multi_comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.MULTI_LINE_COMMENT))); - IToken other = new Token(new TextAttribute(provider.getColor(PHPColorProvider.DEFAULT))); + IToken other = new Token(new TextAttribute(provider.getColor(PHPColorProvider.DEFAULT))); + variable = new Token(new TextAttribute(provider.getColor(PHPColorProvider.VARIABLE))); + + List rules = new ArrayList(); // Add rule for single line comments. rules.add(new EndOfLineRule("//", comment)); //$NON-NLS-1$ - EndOfLineRule endOfLine = new EndOfLineRule("#", comment); - endOfLine.setColumnConstraint(0); - rules.add(endOfLine); - + // EndOfLineRule endOfLine = new EndOfLineRule("#", comment); + // endOfLine.setColumnConstraint(0); + rules.add(new EndOfLineRule("#", comment)); + // Add rule for strings and character constants. rules.add(new SingleLineRule("\"", "\"", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$ rules.add(new SingleLineRule("'", "'", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$ - // rules.add(new SingleLineRule("//", "//", php_comment)); - rules.add(new MultiLineRule("/*", "*/", multi_comment)); - + // rules.add(new SingleLineRule("//", "//", php_comment)); + rules.add(new MultiLineRule("/*", "*/", multi_comment)); + // Add generic whitespace rule. rules.add(new WhitespaceRule(new PHPWhitespaceDetector())); // Add word rule for keywords, types, and constants. - WordRule wordRule = new WordRule(new PHPWordDetector(), other); + PHPWordRule wordRule = new PHPWordRule(new PHPWordDetector(), other); for (int i = 0; i < fgKeywords.length; i++) wordRule.addWord(fgKeywords[i], keyword); for (int i = 0; i < fgTypes.length; i++)