1 package org.jedit.syntax; 2 3 11 12 import javax.swing.text.Segment ; 13 14 20 public class TeXTokenMarker extends TokenMarker 21 { 22 public static final byte BDFORMULA = Token.INTERNAL_FIRST; 24 public static final byte EDFORMULA = (byte)(Token.INTERNAL_FIRST + 1); 25 26 public byte markTokensImpl(byte token, Segment line, int lineIndex) 27 { 28 char[] array = line.array; 29 int offset = line.offset; 30 int lastOffset = offset; 31 int length = line.count + offset; 32 boolean backslash = false; 33 loop: for(int i = offset; i < length; i++) 34 { 35 int i1 = (i+1); 36 37 char c = array[i]; 38 if(Character.isLetter(c)) 44 { 45 backslash = false; 46 } 47 else 48 { 49 if(backslash) 50 { 51 backslash = false; 55 if(token == Token.KEYWORD2 || token == EDFORMULA) 56 token = Token.KEYWORD2; 57 addToken(i1 - lastOffset,token); 58 lastOffset = i1; 59 if(token == Token.KEYWORD1) 60 token = Token.NULL; 61 continue; 62 } 63 else 64 { 65 if(token == BDFORMULA || token == EDFORMULA) 70 token = Token.KEYWORD2; 71 addToken(i - lastOffset,token); 72 if(token == Token.KEYWORD1) 73 token = Token.NULL; 74 lastOffset = i; 75 } 76 } 77 switch(c) 78 { 79 case '%': 80 if(backslash) 81 { 82 backslash = false; 83 break; 84 } 85 addToken(i - lastOffset,token); 86 addToken(length - i,Token.COMMENT1); 87 lastOffset = length; 88 break loop; 89 case '\\': 90 backslash = true; 91 if(token == Token.NULL) 92 { 93 token = Token.KEYWORD1; 94 addToken(i - lastOffset,Token.NULL); 95 lastOffset = i; 96 } 97 break; 98 case '$': 99 backslash = false; 100 if(token == Token.NULL) { 102 token = Token.KEYWORD2; 103 addToken(i - lastOffset,Token.NULL); 104 lastOffset = i; 105 } 106 else if(token == Token.KEYWORD1) { 108 token = Token.KEYWORD2; 109 addToken(i - lastOffset,Token.KEYWORD1); 110 lastOffset = i; 111 } 112 else if(token == Token.KEYWORD2) { 114 if(i - lastOffset == 1 && array[i-1] == '$') 115 { 116 token = BDFORMULA; 117 break; 118 } 119 token = Token.NULL; 120 addToken(i1 - lastOffset,Token.KEYWORD2); 121 lastOffset = i1; 122 } 123 else if(token == BDFORMULA) { 125 token = EDFORMULA; 126 } 127 else if(token == EDFORMULA) { 129 token = Token.NULL; 130 addToken(i1 - lastOffset,Token.KEYWORD2); 131 lastOffset = i1; 132 } 133 break; 134 } 135 } 136 if(lastOffset != length) 137 addToken(length - lastOffset,token == BDFORMULA 138 || token == EDFORMULA ? Token.KEYWORD2 : 139 token); 140 return (token != Token.KEYWORD1 ? token : Token.NULL); 141 } 142 } 143 | Popular Tags |