KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jedit > syntax > BatchFileTokenMarker


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

11
12 import javax.swing.text.Segment JavaDoc;
13
14 /**
15  * Batch file token marker.
16  *
17  * @author Slava Pestov
18  * @version $Id: BatchFileTokenMarker.java,v 1.1 2003/12/14 16:29:49 daggerrz Exp $
19  */

20 public class BatchFileTokenMarker extends TokenMarker
21 {
22    public byte markTokensImpl(byte token, Segment JavaDoc line, int lineIndex)
23    {
24       char[] array = line.array;
25       int offset = line.offset;
26       int lastOffset = offset;
27       int length = line.count + offset;
28
29       if(SyntaxUtilities.regionMatches(true,line,offset,"rem"))
30       {
31          addToken(line.count,Token.COMMENT1);
32          return Token.NULL;
33       }
34
35 loop: for(int i = offset; i < length; i++)
36       {
37          int i1 = (i+1);
38
39          switch(token)
40          {
41          case Token.NULL:
42             switch(array[i])
43             {
44             case '%':
45                addToken(i - lastOffset,token);
46                lastOffset = i;
47                if(length - i <= 3 || array[i+2] == ' ')
48                {
49                   addToken(2,Token.KEYWORD2);
50                   i += 2;
51                   lastOffset = i;
52                }
53                else
54                   token = Token.KEYWORD2;
55                break;
56             case '"':
57                addToken(i - lastOffset,token);
58                token = Token.LITERAL1;
59                lastOffset = i;
60                break;
61             case ':':
62                if(i == offset)
63                {
64                   addToken(line.count,Token.LABEL);
65                   lastOffset = length;
66                   break loop;
67                }
68                break;
69             case ' ':
70                if(lastOffset == offset)
71                {
72                   addToken(i - lastOffset,Token.KEYWORD1);
73                   lastOffset = i;
74                }
75                break;
76             }
77             break;
78          case Token.KEYWORD2:
79             if(array[i] == '%')
80             {
81                addToken(i1 - lastOffset,token);
82                token = Token.NULL;
83                lastOffset = i1;
84             }
85             break;
86          case Token.LITERAL1:
87             if(array[i] == '"')
88             {
89                addToken(i1 - lastOffset,token);
90                token = Token.NULL;
91                lastOffset = i1;
92             }
93             break;
94          default:
95             throw new InternalError JavaDoc("Invalid state: " + token);
96          }
97       }
98
99       if(lastOffset != length)
100       {
101          if(token != Token.NULL)
102             token = Token.INVALID;
103          else if(lastOffset == offset)
104             token = Token.KEYWORD1;
105          addToken(length - lastOffset,token);
106       }
107       return Token.NULL;
108    }
109
110    public boolean supportsMultilineTokens()
111    {
112       return false;
113    }
114 }
115
Popular Tags