Contributors:
IBM Corporation - Initial implementation
- Klaus Hartlage - www.eclipseproject.de
+ www.phpeclipse.de
**********************************************************************/
package net.sourceforge.phpeclipse.phpeditor.php;
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;
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;
+
}
/**
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));
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 == '$') {
IPreferenceConstants.PHP_CONSTANT,
IPreferenceConstants.PHP_DEFAULT,
IPreferenceConstants.PHP_OPERATOR,
+ IPreferenceConstants.PHP_BRACE_OPERATOR,
IPreferenceConstants.PHP_KEYWORD_RETURN};
/**
* Creates a PHP code scanner
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()
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$
// 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);
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) {
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;
}
}