1 package org.jedit.syntax; 2 3 import javax.swing.text.Segment ; 4 5 11 public class XPathTokenMarker extends TokenMarker { 12 private static final String OPS = "<>=/()[]@*"; 13 private static final String QUOTES = "\"\'"; 14 15 public XPathTokenMarker() { 16 } 17 18 public byte markTokensImpl(byte token, Segment 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: 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: 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: 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 ("Invalid state: " + token); 71 } 72 } 73 74 addToken(length-lastOffset, token); 75 return token; 76 } 77 } 78 79 80 | Popular Tags |