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 * Java properties/DOS INI token marker.
16 *
17 * @author Slava Pestov
18 * @version $Id: PropsTokenMarker.java,v 1.9 1999/12/13 03:40:30 sp Exp $
19 */
20 public class PropsTokenMarker extends TokenMarker
21 {
22 public static final byte VALUE = Token.INTERNAL_FIRST;
23
24 public byte markTokensImpl( byte token, Segment line, int lineIndex )
25 {
26 char[] array = line.array;
27 int offset = line.offset;
28 int lastOffset = offset;
29 int length = line.count + offset;
30 loop : for( int i = offset; i < length; i++ )
31 {
32 int i1 = ( i + 1 );
33
34 switch( token )
35 {
36 case Token.NULL :
37 switch( array[i] )
38 {
39 case '#' :
40 case ';' :
41 if( i == offset )
42 {
43 addToken( line.count, Token.COMMENT1 );
44 lastOffset = length;
45 break loop;
46 }
47 break;
48 case '[' :
49 if( i == offset )
50 {
51 addToken( i - lastOffset, token );
52 token = Token.KEYWORD2;
53 lastOffset = i;
54 }
55 break;
56 case '=' :
57 addToken( i - lastOffset, Token.KEYWORD1 );
58 token = VALUE;
59 lastOffset = i;
60 break;
61 }
62 break;
63 case Token.KEYWORD2 :
64 if( array[i] == ']' )
65 {
66 addToken( i1 - lastOffset, token );
67 token = Token.NULL;
68 lastOffset = i1;
69 }
70 break;
71 case VALUE :
72 break;
73 default :
74 throw new InternalError( "Invalid state: " + token );
75 }
76 }
77 if( lastOffset != length )
78 addToken( length - lastOffset, Token.NULL );
79 return Token.NULL;
80 }
81
82 public boolean supportsMultilineTokens()
83 {
84 return false;
85 }
86 }