1 package org.jedit.syntax; 2 3 11 12 import javax.swing.text.Segment ; 13 14 20 public class MakefileTokenMarker extends TokenMarker 21 { 22 public byte markTokensImpl(byte token, Segment line, int lineIndex) 24 { 25 char[] array = line.array; 26 int offset = line.offset; 27 int lastOffset = offset; 28 int length = line.count + offset; 29 boolean backslash = false; 30 loop: for(int i = offset; i < length; i++) 31 { 32 int i1 = (i+1); 33 34 char c = array[i]; 35 if(c == '\\') 36 { 37 backslash = !backslash; 38 continue; 39 } 40 41 switch(token) 42 { 43 case Token.NULL: 44 switch(c) 45 { 46 case ':': case '=': case ' ': case '\t': 47 backslash = false; 48 if(lastOffset == offset) 49 { 50 addToken(i1 - lastOffset,Token.KEYWORD1); 51 lastOffset = i1; 52 } 53 break; 54 case '#': 55 if(backslash) 56 backslash = false; 57 else 58 { 59 addToken(i - lastOffset,token); 60 addToken(length - i,Token.COMMENT1); 61 lastOffset = length; 62 break loop; 63 } 64 break; 65 case '$': 66 if(backslash) 67 backslash = false; 68 else if(lastOffset != offset) 69 { 70 addToken(i - lastOffset,token); 71 lastOffset = i; 72 if(length - i > 1) 73 { 74 char c1 = array[i1]; 75 if(c1 == '(' || c1 == '{') 76 token = Token.KEYWORD2; 77 else 78 { 79 addToken(2,Token.KEYWORD2); 80 lastOffset += 2; 81 i++; 82 } 83 } 84 } 85 break; 86 case '"': 87 if(backslash) 88 backslash = false; 89 else 90 { 91 addToken(i - lastOffset,token); 92 token = Token.LITERAL1; 93 lastOffset = i; 94 } 95 break; 96 case '\'': 97 if(backslash) 98 backslash = false; 99 else 100 { 101 addToken(i - lastOffset,token); 102 token = Token.LITERAL2; 103 lastOffset = i; 104 } 105 break; 106 default: 107 backslash = false; 108 break; 109 } 110 case Token.KEYWORD2: 111 backslash = false; 112 if(c == ')' || c == '}') 113 { 114 addToken(i1 - lastOffset,token); 115 token = Token.NULL; 116 lastOffset = i1; 117 } 118 break; 119 case Token.LITERAL1: 120 if(backslash) 121 backslash = false; 122 else if(c == '"') 123 { 124 addToken(i1 - lastOffset,token); 125 token = Token.NULL; 126 lastOffset = i1; 127 } 128 else 129 backslash = false; 130 break; 131 case Token.LITERAL2: 132 if(backslash) 133 backslash = false; 134 else if(c == '\'') 135 { 136 addToken(i1 - lastOffset,Token.LITERAL1); 137 token = Token.NULL; 138 lastOffset = i1; 139 } 140 else 141 backslash = false; 142 break; 143 } 144 } 145 switch(token) 146 { 147 case Token.KEYWORD2: 148 addToken(length - lastOffset,Token.INVALID); 149 token = Token.NULL; 150 break; 151 case Token.LITERAL2: 152 addToken(length - lastOffset,Token.LITERAL1); 153 break; 154 default: 155 addToken(length - lastOffset,token); 156 break; 157 } 158 return token; 159 } 160 } 161 | Popular Tags |