Statistics
| Revision:

root / tags / v1_0_2_Build_910 / libraries / libIverUtiles / src / com / iver / utiles / console / jedit / BatchFileTokenMarker.java @ 11275

History | View | Annotate | Download (2.27 KB)

1
package com.iver.utiles.console.jedit;
2
/*
3
 * BatchFileTokenMarker.java - Batch file token marker
4
 * Copyright (C) 1998, 1999 Slava Pestov
5
 *
6
 * You may use and modify this package for any purpose. Redistribution is
7
 * permitted, in both source and binary form, provided that this notice
8
 * remains intact in all source distributions of this package.
9
 */
10

    
11
import javax.swing.text.Segment;
12

    
13
/**
14
 * Batch file token marker.
15
 *
16
 * @author Slava Pestov
17
 * @version $Id$
18
 */
19
public class BatchFileTokenMarker extends TokenMarker
20
{
21
        public byte markTokensImpl(byte token, Segment line, int lineIndex)
22
        {
23
                char[] array = line.array;
24
                int offset = line.offset;
25
                int lastOffset = offset;
26
                int length = line.count + offset;
27

    
28
                if(SyntaxUtilities.regionMatches(true,line,offset,"rem"))
29
                {
30
                        addToken(line.count,Token.COMMENT1);
31
                        return Token.NULL;
32
                }
33

    
34
loop:                for(int i = offset; i < length; i++)
35
                {
36
                        int i1 = (i+1);
37

    
38
                        switch(token)
39
                        {
40
                        case Token.NULL:
41
                                switch(array[i])
42
                                {
43
                                case '%':
44
                                        addToken(i - lastOffset,token);
45
                                        lastOffset = i;
46
                                        if(length - i <= 3 || array[i+2] == ' ')
47
                                        {
48
                                                addToken(2,Token.KEYWORD2);
49
                                                i += 2;
50
                                                lastOffset = i;
51
                                        }
52
                                        else
53
                                                token = Token.KEYWORD2;
54
                                        break;
55
                                case '"':
56
                                        addToken(i - lastOffset,token);
57
                                        token = Token.LITERAL1;
58
                                        lastOffset = i;
59
                                        break;
60
                                case ':':
61
                                        if(i == offset)
62
                                        {
63
                                                addToken(line.count,Token.LABEL);
64
                                                lastOffset = length;
65
                                                break loop;
66
                                        }
67
                                        break;
68
                                case ' ':
69
                                        if(lastOffset == offset)
70
                                        {
71
                                                addToken(i - lastOffset,Token.KEYWORD1);
72
                                                lastOffset = i;
73
                                        }
74
                                        break;
75
                                }
76
                                break;
77
                        case Token.KEYWORD2:
78
                                if(array[i] == '%')
79
                                {
80
                                        addToken(i1 - lastOffset,token);
81
                                        token = Token.NULL;
82
                                        lastOffset = i1;
83
                                }
84
                                break;
85
                        case Token.LITERAL1:
86
                                if(array[i] == '"')
87
                                {
88
                                        addToken(i1 - lastOffset,token);
89
                                        token = Token.NULL;
90
                                        lastOffset = i1;
91
                                }
92
                                break;
93
                        default:
94
                                throw new InternalError("Invalid state: " + token);
95
                        }
96
                }
97

    
98
                if(lastOffset != length)
99
                {
100
                        if(token != Token.NULL)
101
                                token = Token.INVALID;
102
                        else if(lastOffset == offset)
103
                                token = Token.KEYWORD1;
104
                        addToken(length - lastOffset,token);
105
                }
106
                return Token.NULL;
107
        }
108

    
109
        public boolean supportsMultilineTokens()
110
        {
111
                return false;
112
        }
113
}