1 package org.jedit.syntax; 2 3 11 12 import javax.swing.text.Segment ; 13 14 20 public class BatchFileTokenMarker extends TokenMarker 21 { 22 public byte markTokensImpl(byte token, Segment line, int lineIndex) 23 { 24 char[] array = line.array; 25 int offset = line.offset; 26 int lastOffset = offset; 27 int length = line.count + offset; 28 29 if(SyntaxUtilities.regionMatches(true,line,offset,"rem")) 30 { 31 addToken(line.count,Token.COMMENT1); 32 return Token.NULL; 33 } 34 35 loop: for(int i = offset; i < length; i++) 36 { 37 int i1 = (i+1); 38 39 switch(token) 40 { 41 case Token.NULL: 42 switch(array[i]) 43 { 44 case '%': 45 addToken(i - lastOffset,token); 46 lastOffset = i; 47 if(length - i <= 3 || array[i+2] == ' ') 48 { 49 addToken(2,Token.KEYWORD2); 50 i += 2; 51 lastOffset = i; 52 } 53 else 54 token = Token.KEYWORD2; 55 break; 56 case '"': 57 addToken(i - lastOffset,token); 58 token = Token.LITERAL1; 59 lastOffset = i; 60 break; 61 case ':': 62 if(i == offset) 63 { 64 addToken(line.count,Token.LABEL); 65 lastOffset = length; 66 break loop; 67 } 68 break; 69 case ' ': 70 if(lastOffset == offset) 71 { 72 addToken(i - lastOffset,Token.KEYWORD1); 73 lastOffset = i; 74 } 75 break; 76 } 77 break; 78 case Token.KEYWORD2: 79 if(array[i] == '%') 80 { 81 addToken(i1 - lastOffset,token); 82 token = Token.NULL; 83 lastOffset = i1; 84 } 85 break; 86 case Token.LITERAL1: 87 if(array[i] == '"') 88 { 89 addToken(i1 - lastOffset,token); 90 token = Token.NULL; 91 lastOffset = i1; 92 } 93 break; 94 default: 95 throw new InternalError ("Invalid state: " + token); 96 } 97 } 98 99 if(lastOffset != length) 100 { 101 if(token != Token.NULL) 102 token = Token.INVALID; 103 else if(lastOffset == offset) 104 token = Token.KEYWORD1; 105 addToken(length - lastOffset,token); 106 } 107 return Token.NULL; 108 } 109 110 public boolean supportsMultilineTokens() 111 { 112 return false; 113 } 114 } 115 | Popular Tags |