Organized imports
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / php / HTMLCodeScanner.java
1 /**********************************************************************
2 Copyright (c) 2000, 2002 IBM Corp. and others.
3 All rights reserved. This program and the accompanying materials
4 are made available under the terms of the Common Public License v1.0
5 which accompanies this distribution, and is available at
6 http://www.eclipse.org/legal/cpl-v10.html
7
8 Contributors:
9     IBM Corporation - Initial implementation
10     www.phpeclipse.de
11 **********************************************************************/
12 package net.sourceforge.phpeclipse.phpeditor.php;
13
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import net.sourceforge.phpdt.internal.ui.text.AbstractJavaScanner;
18 import net.sourceforge.phpdt.ui.text.IColorManager;
19 import net.sourceforge.phpeclipse.IPreferenceConstants;
20 import net.sourceforge.phpeclipse.phpeditor.util.HTMLWordDetector;
21 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
22 import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector;
23
24 import org.eclipse.jface.preference.IPreferenceStore;
25 import org.eclipse.jface.text.TextAttribute;
26 import org.eclipse.jface.text.rules.ICharacterScanner;
27 import org.eclipse.jface.text.rules.IToken;
28 import org.eclipse.jface.text.rules.IWordDetector;
29 import org.eclipse.jface.text.rules.SingleLineRule;
30 import org.eclipse.jface.text.rules.Token;
31 import org.eclipse.jface.text.rules.WhitespaceRule;
32 import org.eclipse.jface.text.rules.WordRule;
33
34 /**
35  * A HTML code scanner.
36  */
37 public class HTMLCodeScanner extends AbstractJavaScanner {
38
39 //  private static String[] fgKeywords = {
40 //  };
41 //
42 //  private static String[] fgTypes = {
43 //  };
44
45 //  private IToken keyword;
46   private static String[] fgTokenProperties =
47   {
48     IPreferenceConstants.PHP_MULTILINE_COMMENT,
49     IPreferenceConstants.PHP_SINGLELINE_COMMENT,
50           IPreferenceConstants.PHP_TAG,
51     IPreferenceConstants.PHP_KEYWORD,
52     IPreferenceConstants.PHP_FUNCTIONNAME,
53     IPreferenceConstants.PHP_VARIABLE,
54     IPreferenceConstants.PHP_STRING,
55     IPreferenceConstants.PHP_TYPE,
56     IPreferenceConstants.PHP_CONSTANT,
57     IPreferenceConstants.PHP_DEFAULT,
58     IPreferenceConstants.PHP_OPERATOR,
59     IPreferenceConstants.PHP_BRACE_OPERATOR,
60     IPreferenceConstants.PHP_KEYWORD_RETURN};
61   /*
62    * @see AbstractJavaScanner#getTokenProperties()
63    */
64   protected String[] getTokenProperties() {
65     return fgTokenProperties;
66   }
67   private class HTMLWordRule extends WordRule {
68     private StringBuffer fBuffer = new StringBuffer();
69
70     public HTMLWordRule(IWordDetector detector) {
71       super(detector, Token.UNDEFINED);
72     }
73
74     public HTMLWordRule(IWordDetector detector, IToken defaultToken) {
75       super(detector, defaultToken);
76     }
77
78     public IToken evaluate(ICharacterScanner scanner) {
79       int c = scanner.read();
80       boolean tagBegin = false;
81       if (fDetector.isWordStart((char) c)) {
82         if (c == '<') {
83           tagBegin = true;
84         }
85         if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
86
87           fBuffer.setLength(0);
88           do {
89             fBuffer.append((char) c);
90             c = scanner.read();
91             if (c == '>') {
92               fBuffer.append((char) c);
93               c = scanner.read();
94               break;
95             }
96             if (c == '/' && (fBuffer.length() > 2) ) {
97               break;
98             }
99           } while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c));
100           scanner.unread();
101
102           if (tagBegin) {
103             return getToken(IPreferenceConstants.PHP_KEYWORD);
104           }
105           IToken token = (IToken) fWords.get(fBuffer.toString());
106           if (token != null)
107             return token;
108
109           if (fDefaultToken.isUndefined())
110             unreadBuffer(scanner);
111
112           return fDefaultToken;
113         }
114       }
115
116       scanner.unread();
117       return Token.UNDEFINED;
118     }
119
120   }
121
122   //private static String[] fgConstants = { "__LINE__", "__FILE__", "true", "false" };
123   private TextAttribute fComment;
124   private TextAttribute fKeyword;
125   private TextAttribute fType;
126   private TextAttribute fString;
127   private PHPColorProvider fColorProvider;
128
129   /**
130    * Creates a Java code scanner
131    */
132   public HTMLCodeScanner(IColorManager manager, IPreferenceStore store) {
133     super(manager, store);
134     initialize();
135   }
136
137   /*
138    * @see AbstractJavaScanner#createRules()
139    */
140   protected List createRules() {
141     List rules = new ArrayList();
142
143 //  keyword = new Token(new TextAttribute(provider.getColor(PHPColorProvider.KEYWORD)));
144 //  IToken type = new Token(new TextAttribute(provider.getColor(PHPColorProvider.FUNCTION_NAME)));
145 //    IToken string = new Token(new TextAttribute(provider.getColor(PHPColorProvider.STRING)));
146 //  IToken comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.SINGLE_LINE_COMMENT)));
147 //  IToken multi_comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.MULTI_LINE_COMMENT)));
148 //    IToken other = new Token(new TextAttribute(provider.getColor(PHPColorProvider.DEFAULT)));
149
150   //variable = new Token(new TextAttribute(provider.getColor(PHPColorProvider.VARIABLE)));
151
152
153   // Add rule for single line comments.
154   //rules.add(new EndOfLineRule("//", comment)); //$NON-NLS-1$
155   //rules.add(new EndOfLineRule("#", comment));
156
157   // Add rule for strings and character constants.
158   rules.add(new SingleLineRule("\"", "\"", getToken(IPreferenceConstants.PHP_STRING))); //$NON-NLS-2$ //$NON-NLS-1$
159   // rules.add(new SingleLineRule("'", "'", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
160
161   // rules.add(new SingleLineRule("//", "//", php_comment));
162   // rules.add(new MultiLineRule("/*", "*/", multi_comment));
163
164   // Add generic whitespace rule.
165   rules.add(new WhitespaceRule(new PHPWhitespaceDetector()));
166
167   // Add word rule for keywords, types, and constants.
168   HTMLWordRule wordRule = new HTMLWordRule(new HTMLWordDetector(), getToken(IPreferenceConstants.PHP_DEFAULT));
169 //  for (int i = 0; i < fgKeywords.length; i++)
170 //    wordRule.addWord(fgKeywords[i], keyword);
171 //  for (int i = 0; i < fgTypes.length; i++)
172 //    wordRule.addWord(fgTypes[i], type);
173   rules.add(wordRule);
174   
175   setDefaultReturnToken(getToken(IPreferenceConstants.PHP_DEFAULT));
176 return rules;
177   }
178 }