1 30 31 package org.syntax.jedit.tokenmarker; 32 33 import javax.swing.text.Segment ; 34 35 41 public class TeXTokenMarker extends TokenMarker 42 { 43 public static final byte BDFORMULA = Token.INTERNAL_FIRST; 45 public static final byte EDFORMULA = (byte)(Token.INTERNAL_FIRST + 1); 46 47 public byte markTokensImpl(byte token, Segment line, int lineIndex) 48 { 49 char[] array = line.array; 50 int offset = line.offset; 51 int lastOffset = offset; 52 int length = line.count + offset; 53 boolean backslash = false; 54 loop: for(int i = offset; i < length; i++) 55 { 56 int i1 = (i+1); 57 58 char c = array[i]; 59 if(Character.isLetter(c)) 65 { 66 backslash = false; 67 } 68 else 69 { 70 if(backslash) 71 { 72 backslash = false; 76 if(token == Token.KEYWORD2 || token == EDFORMULA) 77 token = Token.KEYWORD2; 78 addToken(i1 - lastOffset,token); 79 lastOffset = i1; 80 if(token == Token.KEYWORD1) 81 token = Token.NULL; 82 continue; 83 } 84 else 85 { 86 if(token == BDFORMULA || token == EDFORMULA) 91 token = Token.KEYWORD2; 92 addToken(i - lastOffset,token); 93 if(token == Token.KEYWORD1) 94 token = Token.NULL; 95 lastOffset = i; 96 } 97 } 98 switch(c) 99 { 100 case '%': 101 if(backslash) 102 { 103 backslash = false; 104 break; 105 } 106 addToken(i - lastOffset,token); 107 addToken(length - i,Token.COMMENT1); 108 lastOffset = length; 109 break loop; 110 case '\\': 111 backslash = true; 112 if(token == Token.NULL) 113 { 114 token = Token.KEYWORD1; 115 addToken(i - lastOffset,Token.NULL); 116 lastOffset = i; 117 } 118 break; 119 case '$': 120 backslash = false; 121 if(token == Token.NULL) { 123 token = Token.KEYWORD2; 124 addToken(i - lastOffset,Token.NULL); 125 lastOffset = i; 126 } 127 else if(token == Token.KEYWORD1) { 129 token = Token.KEYWORD2; 130 addToken(i - lastOffset,Token.KEYWORD1); 131 lastOffset = i; 132 } 133 else if(token == Token.KEYWORD2) { 135 if(i - lastOffset == 1 && array[i-1] == '$') 136 { 137 token = BDFORMULA; 138 break; 139 } 140 token = Token.NULL; 141 addToken(i1 - lastOffset,Token.KEYWORD2); 142 lastOffset = i1; 143 } 144 else if(token == BDFORMULA) { 146 token = EDFORMULA; 147 } 148 else if(token == EDFORMULA) { 150 token = Token.NULL; 151 addToken(i1 - lastOffset,Token.KEYWORD2); 152 lastOffset = i1; 153 } 154 break; 155 } 156 } 157 if(lastOffset != length) 158 addToken(length - lastOffset,token == BDFORMULA 159 || token == EDFORMULA ? Token.KEYWORD2 : 160 token); 161 return (token != Token.KEYWORD1 ? token : Token.NULL); 162 } 163 } 164 | Popular Tags |