Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / tokenmarker / ConsoleToken.java @ 4899

History | View | Annotate | Download (3.92 KB)

1
package com.iver.cit.gvsig.gui.tokenmarker;
2

    
3
import javax.swing.JFrame;
4
import javax.swing.text.Segment;
5

    
6
import com.iver.utiles.console.JConsole;
7
import com.iver.utiles.console.jedit.KeywordMap;
8
import com.iver.utiles.console.jedit.Token;
9
import com.iver.utiles.console.jedit.TokenMarker;
10

    
11
/**
12
 * Console token marker.
13
 *
14
 * @author Vicente Caballero Navarro
15
 */
16
public class ConsoleToken extends TokenMarker{
17

    
18

    
19
        public ConsoleToken(KeywordMap keywordMap) {
20
                keywords=keywordMap;
21
        }
22

    
23
        public static void main(String[] args) {
24
                JConsole console = new JConsole();
25
                //console.addText("-", 0);
26
                KeywordMap keywordMap=new KeywordMap(true);
27
                keywordMap.add("hola",Token.LABEL);
28
                ConsoleToken consoleToken=new ConsoleToken(keywordMap);
29
                console.setTokenMarker(consoleToken);
30
                JFrame frame = new JFrame();
31
                frame.getContentPane().add(console);
32
                frame.pack();
33
                frame.show();
34
        }
35

    
36

    
37
          // private members
38
          private KeywordMap keywords;
39

    
40
          private int lastOffset;
41
          private int lastKeyword;
42

    
43

    
44

    
45
          public byte markTokensImpl(byte token, Segment line, int lineIndex)
46
          {
47
            char[] array = line.array;
48
            int offset = line.offset;
49
            lastOffset = offset;
50
            lastKeyword = offset;
51
            int length = line.count + offset;
52

    
53
        loop: for(int i = offset; i < length; i++)
54
            {
55
              int i1 = (i+1);
56

    
57
              char c = array[i];
58

    
59
              switch(token)
60
              {
61
                case Token.NULL:
62
                  switch(c)
63
                  {
64
                    case '@':
65
                      addToken(i - lastOffset, token);
66
                      addToken(length - i, Token.KEYWORD2);
67
                      token = Token.NULL;
68
                      lastOffset = lastKeyword = length;
69
                      break loop;
70

    
71
                    case '#':
72
                      doKeyword(line, i, c);
73
                      addToken(i - lastOffset,token);
74
                      token = Token.LABEL;
75
                      lastOffset = lastKeyword = i;
76
                      break;
77
                    case '*':
78
                      doKeyword(line, i, c);
79
                      addToken(i - lastOffset,token);
80
                      token = Token.KEYWORD3;
81
                      lastOffset = lastKeyword = i;
82
                      break;
83

    
84
                    case ' ':
85
                      doKeyword(line, i, c);
86
                  }
87
                  break;
88
                case Token.LABEL:
89
                  if(c == '>')
90
                  {
91
                    addToken(i1 - lastOffset, token);
92
                    token = Token.NULL;
93
                    lastOffset = lastKeyword = i1;
94
                  }
95
                  break;
96
                case Token.LITERAL2:
97
              /*    if(c == '\'')
98
                  {
99
                    addToken(i1 - lastOffset, Token.LITERAL2);
100
                    token = Token.NULL;
101
                    lastOffset = lastKeyword = i1;
102
                  }
103
                */
104
                  break;
105
                case Token.KEYWORD2:
106
                      /*    if(c == '\'')
107
                          {
108
                            addToken(i1 - lastOffset, Token.KEYWORD2);
109
                            token = Token.NULL;
110
                            lastOffset = lastKeyword = i1;
111
                          }
112
                          */
113
                          break;
114
                case Token.KEYWORD3:
115
                        /*  if(c == '\'')
116
                          {
117
                            addToken(i1 - lastOffset, Token.KEYWORD3);
118
                            token = Token.NULL;
119
                            lastOffset = lastKeyword = i1;
120
                          }
121
                          */
122
                          break;
123
                default:
124
                  throw new InternalError("Invalid state: " + token);
125
              }
126
            }
127

    
128
            if (token == Token.NULL)
129
              doKeyword(line, length, '\0');
130

    
131
            switch(token)
132
            {
133
              case Token.LABEL:
134
              case Token.LITERAL2:
135
                addToken(length - lastOffset, token);
136
                token = Token.NULL;
137
                break;
138
              default:
139
                addToken(length - lastOffset, token);
140
                break;
141
            }
142

    
143
            return token;
144
          }
145

    
146
          private boolean doKeyword(Segment line, int i, char c)
147
          {
148
            int i1 = i + 1;
149

    
150
            int len = i - lastKeyword;
151
            byte id = keywords.lookup(line, lastKeyword, len);
152
            if (id != Token.NULL)
153
            {
154
              if (lastKeyword != lastOffset)
155
                addToken(lastKeyword - lastOffset, Token.NULL);
156
              addToken(len, id);
157
              lastOffset = i;
158
            }
159
            lastKeyword = i1;
160
            return false;
161
          }
162
        }
163

    
164