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 b227ae2..452b3d3 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 @@ -7,7 +7,7 @@ http://www.eclipse.org/legal/cpl-v10.html Contributors: IBM Corporation - Initial implementation - Klaus Hartlage - www.eclipseproject.de + www.phpeclipse.de **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor.php; @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.List; import net.sourceforge.phpdt.internal.ui.text.AbstractJavaScanner; -import net.sourceforge.phpdt.internal.ui.text.CombinedWordRule; import net.sourceforge.phpdt.ui.text.IColorManager; import net.sourceforge.phpeclipse.IPreferenceConstants; import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr; @@ -46,18 +45,21 @@ public class PHPCodeScanner extends AbstractJavaScanner { protected class OperatorRule implements IRule { /** Java operators */ - private final char[] JAVA_OPERATORS= { ';', '(', ')', '{', '}', '.', '=', '/', '\\', '+', '-', '*', '[', ']', '<', '>', ':', '?', '!', ',', '|', '&', '^', '%', '~', '@'}; + private final char[] JAVA_OPERATORS= { ';', '(', ')', '.', '=', '/', '\\', '+', '-', '*', '[', ']', '<', '>', ':', '?', '!', ',', '|', '&', '^', '%', '~', '@'}; /** Token to return for this rule */ private final IToken fToken; - + /** Token to return for braces */ + private final IToken fTokenBraces; /** * Creates a new operator rule. * * @param token * Token to use for this rule */ - public OperatorRule(IToken token) { + public OperatorRule(IToken token, IToken tokenBraces) { fToken= token; + fTokenBraces= tokenBraces; + } /** @@ -82,7 +84,25 @@ public class PHPCodeScanner extends AbstractJavaScanner { public IToken evaluate(ICharacterScanner scanner) { int character= scanner.read(); + if (character=='{' || character=='}') { + return fTokenBraces; + } if (isOperator((char) character)) { + int lastCharacter = character; + character= scanner.read(); + if (!isOperator((char) character)) { + scanner.unread(); + return fToken; + } + if (lastCharacter=='<' && character=='?') { + scanner.unread(); + scanner.unread(); + return Token.UNDEFINED; + } else if (lastCharacter=='?' && character=='>') { + scanner.unread(); + scanner.unread(); + return Token.UNDEFINED; + } do { character= scanner.read(); } while (isOperator((char) character)); @@ -113,32 +133,41 @@ public class PHPCodeScanner extends AbstractJavaScanner { c = scanner.read(); if (c != '?') { scanner.unread(); + scanner.unread(); + return Token.UNDEFINED; } else { c = scanner.read(); - if (c != 'p') { + if (c != 'p' && c != 'P') { scanner.unread(); + return getToken(IPreferenceConstants.PHP_TAG); } else { c = scanner.read(); - if (c != 'h') { + if (c != 'h' && c != 'H') { scanner.unread(); + scanner.unread(); + return getToken(IPreferenceConstants.PHP_TAG); } else { c = scanner.read(); - if (c != 'p') { + if (c != 'p' && c != 'P') { + scanner.unread(); scanner.unread(); + scanner.unread(); + return getToken(IPreferenceConstants.PHP_TAG); } else { return getToken(IPreferenceConstants.PHP_TAG); } } } } - } if (c == '?') { - c = scanner.read(); + c = scanner.read(); if (c == '>') { return getToken(IPreferenceConstants.PHP_TAG); - } + } scanner.unread(); + scanner.unread(); + return Token.UNDEFINED; } if (fDetector.isWordStart((char) c)) { if (c == '$') { @@ -187,6 +216,7 @@ public class PHPCodeScanner extends AbstractJavaScanner { IPreferenceConstants.PHP_CONSTANT, IPreferenceConstants.PHP_DEFAULT, IPreferenceConstants.PHP_OPERATOR, + IPreferenceConstants.PHP_BRACE_OPERATOR, IPreferenceConstants.PHP_KEYWORD_RETURN}; /** * Creates a PHP code scanner @@ -276,76 +306,6 @@ public class PHPCodeScanner extends AbstractJavaScanner { protected String[] getTokenProperties() { return fgTokenProperties; } - // public void updateToken(JavaColorManager provider) { - // final IPreferenceStore store = - // PHPeclipsePlugin.getDefault().getPreferenceStore(); - // - // Color BackgroundColor = - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_EDITOR_BACKGROUND)); - // - // variable.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE)), - // BackgroundColor, - // (store.getBoolean(PHP_VARIABLE_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_VARIABLE_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // keyword.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD)), - // BackgroundColor, - // (store.getBoolean(PHP_KEYWORD_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_KEYWORD_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // type.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_TYPE)), - // BackgroundColor, - // (store.getBoolean(PHP_TYPE_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_TYPE_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // functionName.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME)), - // BackgroundColor, - // (store.getBoolean(PHP_FUNCTIONNAME_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_FUNCTIONNAME_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // constant.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_CONSTANT)), - // BackgroundColor, - // (store.getBoolean(PHP_CONSTANT_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_CONSTANT_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // string.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_STRING)), - // BackgroundColor, - // (store.getBoolean(PHP_STRING_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_STRING_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // comment.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_SINGLELINE_COMMENT)), - // BackgroundColor, - // (store.getBoolean(PHP_SINGLELINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_SINGLELINE_COMMENT_ITALIC) ? SWT.ITALIC : - // SWT.NONE))); - // multi_comment.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_MULTILINE_COMMENT)), - // BackgroundColor, - // (store.getBoolean(PHP_MULTILINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_MULTILINE_COMMENT_ITALIC) ? SWT.ITALIC : - // SWT.NONE))); - // other.setData( - // new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT)), - // BackgroundColor, - // (store.getBoolean(PHP_DEFAULT_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_DEFAULT_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // } - - // public void updateWordRules() { - /* * @see AbstractJavaScanner#createRules() @@ -361,10 +321,6 @@ public class PHPCodeScanner extends AbstractJavaScanner { 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$ - -// Add rule for operators and brackets - token= getToken(IPreferenceConstants.PHP_OPERATOR); - rules.add(new OperatorRule(token)); token = getToken(IPreferenceConstants.PHP_MULTILINE_COMMENT); rules.add(new MultiLineRule("/*", "*/", token)); //$NON-NLS-2$ //$NON-NLS-1$ @@ -373,7 +329,6 @@ public class PHPCodeScanner extends AbstractJavaScanner { // Add word rule for keywords, types, and constants. token = getToken(IPreferenceConstants.PHP_DEFAULT); PHPWordRule wordRule = new PHPWordRule(new PHPWordDetector(), token); - CombinedWordRule combinedWordRule= new CombinedWordRule(new PHPWordDetector(), token); Token keyword = getToken(IPreferenceConstants.PHP_KEYWORD); Token functionName = getToken(IPreferenceConstants.PHP_FUNCTIONNAME); @@ -391,9 +346,9 @@ public class PHPCodeScanner extends AbstractJavaScanner { elbuffer = (PHPElement) buffer.get(i); if (elbuffer instanceof PHPKeyword) { name = ((PHPKeyword) elbuffer).getName(); -// if (!name.equals("return")) { + if (!name.equals("return")) { wordRule.addWord(name, keyword); -// } + } } else if (elbuffer instanceof PHPFunction) { wordRule.addWord(((PHPFunction) elbuffer).getName(), functionName); } else if (elbuffer instanceof PHPType) { @@ -402,15 +357,17 @@ public class PHPCodeScanner extends AbstractJavaScanner { wordRule.addWord(elbuffer.getName(), constant); } } + +// Add word rule for keyword 'return'. + token= getToken(IPreferenceConstants.PHP_KEYWORD_RETURN); + wordRule.addWord("return", token); + +// Add rule for operators and brackets (at the end !) + rules.add(new OperatorRule(getToken(IPreferenceConstants.PHP_OPERATOR), getToken(IPreferenceConstants.PHP_BRACE_OPERATOR))); + rules.add(wordRule); -// Add word rule for keyword 'return'. -// CombinedWordRule.WordMatcher returnWordRule= new CombinedWordRule.WordMatcher(); -// token= getToken(IPreferenceConstants.PHP_KEYWORD_RETURN); -// returnWordRule.addWord("return", token); //$NON-NLS-1$ -// combinedWordRule.addWordMatcher(returnWordRule); -// rules.add(combinedWordRule); -// + setDefaultReturnToken(getToken(IPreferenceConstants.PHP_DEFAULT)); return rules; } }