1
2
3
4
5
6
7
8
9
10 package org.syntax.jedit.tokenmarker;
11
12 import javax.swing.text.Segment;
13
14 /***
15 * TeX token marker.
16 *
17 * @author Slava Pestov
18 * @version $Id: TeXTokenMarker.java,v 1.16 1999/12/13 03:40:30 sp Exp $
19 */
20 public class TeXTokenMarker extends TokenMarker
21 {
22
23 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
39
40
41
42
43 if( Character.isLetter( c ) )
44 {
45 backslash = false;
46 }
47 else
48 {
49 if( backslash )
50 {
51
52
53
54 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
66
67
68
69 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 )
101 {
102 token = Token.KEYWORD2;
103 addToken( i - lastOffset, Token.NULL );
104 lastOffset = i;
105 }
106 else if( token == Token.KEYWORD1 )
107 {
108 token = Token.KEYWORD2;
109 addToken( i - lastOffset, Token.KEYWORD1 );
110 lastOffset = i;
111 }
112 else if( token == Token.KEYWORD2 )
113 {
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 )
124 {
125 token = EDFORMULA;
126 }
127 else if( token == EDFORMULA )
128 {
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 || token == EDFORMULA ? Token.KEYWORD2 : token );
138 return( token != Token.KEYWORD1 ? token : Token.NULL );
139 }
140 }