From: axelcl Date: Tue, 3 May 2005 10:32:26 +0000 (+0000) Subject: Improved PHP end tag (i.e. ?> ) syntax highlighting after operators X-Git-Url: http://secure.phpeclipse.com Improved PHP end tag (i.e. ?> ) syntax highlighting after operators ', ':', '?', '!', ',', '|', '&', '^', '%', '~', '@'}; - /** Token to return for this rule */ - private final IToken fToken; - /** Token to return for braces */ - private final IToken fTokenBraces; - /** + protected class OperatorRule implements IRule { + + /** Java operators */ + private final char[] PHP_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, IToken tokenBraces) { - fToken= token; - fTokenBraces= tokenBraces; - - } - - /** + public OperatorRule(IToken token, IToken tokenBraces) { + fToken = token; + fTokenBraces = tokenBraces; + + } + + /** * Is this character an operator character? * * @param character * Character to determine whether it is an operator character - * @return true iff the character is an operator, - * false otherwise. + * @return true iff the character is an operator, false otherwise. */ - public boolean isOperator(char character) { - for (int index= 0; index < JAVA_OPERATORS.length; index++) { - if (JAVA_OPERATORS[index] == character) - return true; - } - return false; - } - - /* + public boolean isOperator(char character) { + for (int index = 0; index < PHP_OPERATORS.length; index++) { + if (PHP_OPERATORS[index] == character) + return true; + } + return false; + } + + /* * @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=='{' || 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)); - scanner.unread(); - return fToken; - } else { - scanner.unread(); - return Token.UNDEFINED; - } - } - } - + 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 (checkPHPTag(scanner, lastCharacter, character)) { + return Token.UNDEFINED; + } + do { + lastCharacter = character; + character = scanner.read(); + if (checkPHPTag(scanner, lastCharacter, character)) { + return fToken; + } + } while (isOperator((char) character)); + scanner.unread(); + return fToken; + } else { + scanner.unread(); + return Token.UNDEFINED; + } + } + + /** + * Check if lastCharacter/character are a PHP start or end token ( <? ... ?> ) + * + * @param scanner + * @param lastCharacter + * @param character + * @return + */ + private boolean checkPHPTag(ICharacterScanner scanner, int lastCharacter, int character) { + if (lastCharacter == '<' && character == '?') { + scanner.unread(); + scanner.unread(); + return true; + } else if (lastCharacter == '?' && character == '>') { + scanner.unread(); + scanner.unread(); + return true; + } + return false; + } + } + private class PHPWordRule extends WordRule { private StringBuffer fBuffer = new StringBuffer(); @@ -137,6 +182,9 @@ public class PHPCodeScanner extends AbstractJavaScanner { return Token.UNDEFINED; } else { c = scanner.read(); + if (c == '=') { // ') { return getToken(IPreferenceConstants.PHP_TAG); - } + } scanner.unread(); scanner.unread(); return Token.UNDEFINED; @@ -203,11 +251,10 @@ public class PHPCodeScanner extends AbstractJavaScanner { //private PHPColorProvider fColorProvider; - private static String[] fgTokenProperties = - { + private static String[] fgTokenProperties = { IPreferenceConstants.PHP_MULTILINE_COMMENT, IPreferenceConstants.PHP_SINGLELINE_COMMENT, - IPreferenceConstants.PHP_TAG, + IPreferenceConstants.PHP_TAG, IPreferenceConstants.PHP_KEYWORD, IPreferenceConstants.PHP_FUNCTIONNAME, IPreferenceConstants.PHP_VARIABLE, @@ -217,7 +264,8 @@ public class PHPCodeScanner extends AbstractJavaScanner { IPreferenceConstants.PHP_DEFAULT, IPreferenceConstants.PHP_OPERATOR, IPreferenceConstants.PHP_BRACE_OPERATOR, - IPreferenceConstants.PHP_KEYWORD_RETURN}; + IPreferenceConstants.PHP_KEYWORD_RETURN }; + /** * Creates a PHP code scanner */ @@ -225,79 +273,6 @@ public class PHPCodeScanner extends AbstractJavaScanner { public PHPCodeScanner(IColorManager manager, IPreferenceStore store) { super(manager, store); initialize(); - // // final IPreferenceStore store = - // PHPeclipsePlugin.getDefault().getPreferenceStore(); - // Color BackgroundColor = - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_EDITOR_BACKGROUND)); - // variable = - // new Token( - // 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 = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_KEYWORD_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_KEYWORD_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // type = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_TYPE)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_TYPE_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_TYPE_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // functionName = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_FUNCTIONNAME)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_FUNCTIONNAME_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_FUNCTIONNAME_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // constant = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_CONSTANT)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_CONSTANT_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_CONSTANT_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // string = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_STRING)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_STRING_BOLD) ? SWT.BOLD : SWT.NONE ) + - // (store.getBoolean(PHP_STRING_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // comment = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_SINGLELINE_COMMENT)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_SINGLELINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE ) - // + (store.getBoolean(PHP_SINGLELINE_COMMENT_ITALIC) ? SWT.ITALIC : - // SWT.NONE))); - // multi_comment = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, - // PHP_MULTILINE_COMMENT)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_MULTILINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NONE) - // + (store.getBoolean(PHP_MULTILINE_COMMENT_ITALIC) ? SWT.ITALIC : - // SWT.NONE))); - // other = - // new Token(new TextAttribute( - // provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT)), - // BackgroundColor, - // //SWT.NONE)); - // (store.getBoolean(PHP_DEFAULT_BOLD) ? SWT.BOLD : SWT.NONE) + - // (store.getBoolean(PHP_DEFAULT_ITALIC) ? SWT.ITALIC : SWT.NONE))); - // updateWordRules(); } /* @@ -321,7 +296,7 @@ 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$ - + token = getToken(IPreferenceConstants.PHP_MULTILINE_COMMENT); rules.add(new MultiLineRule("/*", "*/", token)); //$NON-NLS-2$ //$NON-NLS-1$ // Add generic whitespace rule. @@ -329,7 +304,7 @@ 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); - + Token keyword = getToken(IPreferenceConstants.PHP_KEYWORD); Token functionName = getToken(IPreferenceConstants.PHP_FUNCTIONNAME); Token type = getToken(IPreferenceConstants.PHP_TYPE); @@ -357,17 +332,17 @@ public class PHPCodeScanner extends AbstractJavaScanner { wordRule.addWord(elbuffer.getName(), constant); } } - -// Add word rule for keyword 'return'. - token= getToken(IPreferenceConstants.PHP_KEYWORD_RETURN); + + // 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))); - + // 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); - + setDefaultReturnToken(getToken(IPreferenceConstants.PHP_DEFAULT)); return rules; } -} +} \ No newline at end of file