Organized imports
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.js.core / src / net / sourceforge / phpeclipse / js / core / parser / JSSyntaxScanner.java
1 /*
2  * Created on May 16, 2003
3  *========================================================================
4  * Modifications history
5  *========================================================================
6  * $Log: not supported by cvs2svn $
7  * Revision 1.1  2004/09/02 18:14:38  jsurfer
8  * intial source from ttp://www.sf.net/projects/wdte
9  *
10  * Revision 1.1  2004/02/26 02:25:42  agfitzp
11  * renamed packages to match xml & css
12  *
13  * Revision 1.1  2004/02/05 03:10:08  agfitzp
14  * Initial Submission
15  *
16  * Revision 1.1.2.1  2003/12/12 21:37:24  agfitzp
17  * Experimental work for Classes view
18  *
19  * Revision 1.2  2003/05/30 20:53:09  agfitzp
20  * 0.0.2 : Outlining is now done as the user types. Some other bug fixes.
21  *
22  *========================================================================
23  */
24 package net.sourceforge.phpeclipse.js.core.parser;
25
26 import java.util.ArrayList;
27 import java.util.List;
28
29 import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
30 import org.eclipse.jface.text.rules.IRule;
31 import org.eclipse.jface.text.rules.IToken;
32 import org.eclipse.jface.text.rules.MultiLineRule;
33 import org.eclipse.jface.text.rules.SingleLineRule;
34 import org.eclipse.jface.text.rules.Token;
35 import org.eclipse.jface.text.rules.WhitespaceRule;
36 import org.eclipse.jface.text.rules.WordRule;
37
38 /**
39  * Scanner for detecting syntactic elements: comments, strings, classes, functions
40  *
41  * @author fitzpata
42  *
43  */
44 public class JSSyntaxScanner extends BufferedRuleBasedScanner {
45         public final static String JS_DEFAULT = "__js_default";
46         public final static String JS_COMMENT = "__js_comment";
47         public final static String JS_FUNCTION = "__js_function";
48         public final static String JS_STRING = "__js_string";
49         public final static String JS_MEMBER = "__js_member";
50         public final static String JS_PERIOD = "__js_period";
51
52         public final static IToken TOKEN_STRING = new Token(JS_STRING);
53         public final static IToken TOKEN_COMMENT = new Token(JS_COMMENT);
54         public final static IToken TOKEN_DEFAULT = new Token(JS_DEFAULT);
55         public final static IToken TOKEN_FUNCTION = new Token(JS_FUNCTION);
56         public final static IToken TOKEN_MEMBER = new Token(JS_MEMBER);
57         public final static IToken TOKEN_PERIOD = new Token(JS_PERIOD);
58
59         /**
60          * String for detecting member declarations.
61          */
62         private static String memberToken=  ".prototype";
63
64         /**
65          * Creates a new JSSyntaxScanner object.
66          */
67         public JSSyntaxScanner() {
68                 List rules = new ArrayList();
69
70                 rules.add(new MultiLineRule("/*", "*/", TOKEN_COMMENT));
71                 rules.add(new SingleLineRule("//", "", TOKEN_COMMENT));
72                 rules.add(new SingleLineRule("\"", "\"", TOKEN_STRING, '\\'));
73                 rules.add(new SingleLineRule("'", "'", TOKEN_STRING, '\\'));
74                 
75                 rules.add(new WhitespaceRule(new JSWhitespaceDetector()));
76                 
77                 rules.add(new MultiLineRule("function(", ")", TOKEN_FUNCTION));
78                 rules.add(new MultiLineRule("function ", ")", TOKEN_FUNCTION));
79
80                 rules.add(new WordRule(new JSWordDetector(), TOKEN_DEFAULT));
81                 rules.add(new PredicateWordRule(new JSReferenceDetector(), memberToken, TOKEN_MEMBER));
82                 
83                 setRuleList(rules);
84         }
85
86
87         /**
88          * set the rule list
89          * @param rules
90          */
91         private void setRuleList(List rules)
92         {
93                 IRule[] result = new IRule[rules.size()];
94                 rules.toArray(result);
95                 setRules(result);
96         }
97 }