Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extEditing / src / org / gvsig / editing / gui / tokenmarker / ConsoleToken.java @ 29685

History | View | Annotate | Download (3.93 KB)

1
package org.gvsig.editing.gui.tokenmarker;
2

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

    
6
import org.gvsig.utils.console.JConsole;
7
import org.gvsig.utils.console.jedit.KeywordMap;
8
import org.gvsig.utils.console.jedit.Token;
9
import org.gvsig.utils.console.jedit.TokenMarker;
10

    
11

    
12

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

    
20

    
21
        public ConsoleToken(KeywordMap keywordMap) {
22
                keywords=keywordMap;
23
        }
24

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

    
38

    
39
          // private members
40
          private KeywordMap keywords;
41

    
42
          private int lastOffset;
43
          private int lastKeyword;
44

    
45

    
46

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

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

    
59
              char c = array[i];
60

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

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

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

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

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

    
145
            return token;
146
          }
147

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

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

    
166