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
10 * Revision 1.1 2004/02/26 02:25:42 agfitzp
11 * renamed packages to match xml & css
13 * Revision 1.1 2004/02/05 03:10:08 agfitzp
16 * Revision 1.1.2.1 2003/12/12 21:37:24 agfitzp
17 * Experimental work for Classes view
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.
22 *========================================================================
24 package net.sourceforge.phpeclipse.js.core.parser;
26 import java.util.ArrayList;
27 import java.util.List;
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;
39 * Scanner for detecting syntactic elements: comments, strings, classes, functions
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";
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);
60 * String for detecting member declarations.
62 private static String memberToken= ".prototype";
65 * Creates a new JSSyntaxScanner object.
67 public JSSyntaxScanner() {
68 List rules = new ArrayList();
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, '\\'));
75 rules.add(new WhitespaceRule(new JSWhitespaceDetector()));
77 rules.add(new MultiLineRule("function(", ")", TOKEN_FUNCTION));
78 rules.add(new MultiLineRule("function ", ")", TOKEN_FUNCTION));
80 rules.add(new WordRule(new JSWordDetector(), TOKEN_DEFAULT));
81 rules.add(new PredicateWordRule(new JSReferenceDetector(), memberToken, TOKEN_MEMBER));
91 private void setRuleList(List rules)
93 IRule[] result = new IRule[rules.size()];
94 rules.toArray(result);