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