KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jedit > syntax > XPathTokenMarker


1 package org.jedit.syntax;
2
3 import javax.swing.text.Segment JavaDoc;
4
5 /**
6  * Simple XPath Token Marker
7  *
8  * @author Tom Bradford
9  * @version $Id: XPathTokenMarker.java,v 1.1 2003/12/14 16:29:49 daggerrz Exp $
10  */

11 public class XPathTokenMarker extends TokenMarker {
12    private static final String JavaDoc OPS = "<>=/()[]@*";
13    private static final String JavaDoc QUOTES = "\"\'";
14    
15    public XPathTokenMarker() {
16    }
17    
18    public byte markTokensImpl(byte token, Segment JavaDoc line, int lineIndex) {
19       char[] array = line.array;
20       int offset = line.offset;
21       int lastOffset = offset;
22       int length = line.count + offset;
23       
24       for ( int i = offset; i < length; i++ ) {
25          int ip1 = i+1;
26          char c = array[i];
27          switch ( token ) {
28             case Token.NULL: // text
29
if ( OPS.indexOf(c) != -1 ) {
30                   addToken(i-lastOffset, token);
31                   lastOffset = i;
32                   token = Token.KEYWORD1;
33                }
34                else if ( QUOTES.indexOf(c) != -1 ) {
35                   addToken(i-lastOffset, token);
36                   lastOffset = i;
37                   if ( c == '\"' )
38                      token = Token.LITERAL2;
39                   else
40                      token = Token.LITERAL1;
41                }
42                break;
43
44             case Token.KEYWORD1: // operator
45
if ( OPS.indexOf(c) == -1 ) {
46                   addToken(i-lastOffset, token);
47                   lastOffset = i;
48                   if ( QUOTES.indexOf(c) != -1 ) {
49                      if ( c == '\"' )
50                         token = Token.LITERAL2;
51                      else
52                         token = Token.LITERAL1;
53                   }
54                   else
55                      token = Token.NULL;
56                }
57                break;
58                
59             case Token.LITERAL1:
60             case Token.LITERAL2: // strings
61
if ( ( token == Token.LITERAL2 && c == '\"' )
62                  || ( token == Token.LITERAL1 && c == '\'' ) ) {
63                   addToken(ip1-lastOffset, token);
64                   lastOffset = ip1;
65                   token = Token.NULL;
66                }
67                break;
68                
69             default:
70                throw new InternalError JavaDoc("Invalid state: " + token);
71          }
72       }
73       
74       addToken(length-lastOffset, token);
75       return token;
76    }
77 }
78
79
80
Popular Tags