KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.jedit.syntax;
2
3 /*
4  * MakefileTokenMarker.java - Makefile 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  * Makefile token marker.
16  *
17  * @author Slava Pestov
18  * @version $Id: MakefileTokenMarker.java,v 1.1 2003/12/14 16:29:49 daggerrz Exp $
19  */

20 public class MakefileTokenMarker extends TokenMarker
21 {
22    // public members
23
public byte markTokensImpl(byte token, Segment JavaDoc line, int lineIndex)
24    {
25       char[] array = line.array;
26       int offset = line.offset;
27       int lastOffset = offset;
28       int length = line.count + offset;
29       boolean backslash = false;
30 loop: for(int i = offset; i < length; i++)
31       {
32          int i1 = (i+1);
33
34          char c = array[i];
35          if(c == '\\')
36          {
37             backslash = !backslash;
38             continue;
39          }
40
41          switch(token)
42          {
43          case Token.NULL:
44             switch(c)
45             {
46             case ':': case '=': case ' ': case '\t':
47                backslash = false;
48                if(lastOffset == offset)
49                {
50                   addToken(i1 - lastOffset,Token.KEYWORD1);
51                   lastOffset = i1;
52                }
53                break;
54             case '#':
55                if(backslash)
56                   backslash = false;
57                else
58                {
59                   addToken(i - lastOffset,token);
60                   addToken(length - i,Token.COMMENT1);
61                   lastOffset = length;
62                   break loop;
63                }
64                break;
65             case '$':
66                if(backslash)
67                   backslash = false;
68                else if(lastOffset != offset)
69                {
70                   addToken(i - lastOffset,token);
71                   lastOffset = i;
72                   if(length - i > 1)
73                   {
74                      char c1 = array[i1];
75                      if(c1 == '(' || c1 == '{')
76                         token = Token.KEYWORD2;
77                      else
78                      {
79                         addToken(2,Token.KEYWORD2);
80                         lastOffset += 2;
81                         i++;
82                      }
83                   }
84                }
85                break;
86             case '"':
87                if(backslash)
88                   backslash = false;
89                else
90                {
91                   addToken(i - lastOffset,token);
92                   token = Token.LITERAL1;
93                   lastOffset = i;
94                }
95                break;
96             case '\'':
97                if(backslash)
98                   backslash = false;
99                else
100                {
101                   addToken(i - lastOffset,token);
102                   token = Token.LITERAL2;
103                   lastOffset = i;
104                }
105                break;
106             default:
107                backslash = false;
108                break;
109             }
110          case Token.KEYWORD2:
111             backslash = false;
112             if(c == ')' || c == '}')
113             {
114                addToken(i1 - lastOffset,token);
115                token = Token.NULL;
116                lastOffset = i1;
117             }
118             break;
119          case Token.LITERAL1:
120             if(backslash)
121                backslash = false;
122             else if(c == '"')
123             {
124                addToken(i1 - lastOffset,token);
125                token = Token.NULL;
126                lastOffset = i1;
127             }
128             else
129                backslash = false;
130             break;
131          case Token.LITERAL2:
132             if(backslash)
133                backslash = false;
134             else if(c == '\'')
135             {
136                addToken(i1 - lastOffset,Token.LITERAL1);
137                token = Token.NULL;
138                lastOffset = i1;
139             }
140             else
141                backslash = false;
142             break;
143          }
144       }
145       switch(token)
146       {
147       case Token.KEYWORD2:
148          addToken(length - lastOffset,Token.INVALID);
149          token = Token.NULL;
150          break;
151       case Token.LITERAL2:
152          addToken(length - lastOffset,Token.LITERAL1);
153          break;
154       default:
155          addToken(length - lastOffset,token);
156          break;
157       }
158       return token;
159    }
160 }
161
Popular Tags