CommonToken.js revision 324c4644fee44b9898524c09511bd33c3f12e2df
1org.antlr.runtime.CommonToken = function() {
2    var oldToken;
3
4    this.charPositionInLine = -1; // set to invalid position
5    this.channel = 0; // org.antlr.runtime.CommonToken.DEFAULT_CHANNEL
6    this.index = -1;
7
8    if (arguments.length == 1) {
9        if (org.antlr.lang.isNumber(arguments[0])) {
10            this.type = arguments[0];
11        } else {
12            oldToken = arguments[0];
13            this.text = oldToken.getText();
14            this.type = oldToken.getType();
15            this.line = oldToken.getLine();
16            this.index = oldToken.getTokenIndex();
17            this.charPositionInLine = oldToken.getCharPositionInLine();
18            this.channel = oldToken.getChannel();
19            if ( oldToken instanceof org.antlr.runtime.CommonToken ) {
20                this.start = oldToken.start;
21                this.stop = oldToken.stop;
22            }
23        }
24    } else if (arguments.length == 2) {
25        this.type = arguments[0];
26        this.text = arguments[1];
27        this.channel = 0; // org.antlr.runtime.CommonToken.DEFAULT_CHANNEL
28    } else if (arguments.length == 5) {
29        this.input = arguments[0];
30        this.type = arguments[1];
31        this.channel = arguments[2];
32        this.start = arguments[3];
33        this.stop = arguments[4];
34    }
35};
36
37org.antlr.lang.extend(org.antlr.runtime.CommonToken,
38                      org.antlr.runtime.Token,
39{
40    getType: function() {
41        return this.type;
42    },
43
44    setLine: function(line) {
45        this.line = line;
46    },
47
48    getText: function() {
49        if ( org.antlr.lang.isString(this.text) ) {
50            return this.text;
51        }
52        if ( !this.input ) {
53            return null;
54        }
55        this.text = this.input.substring(this.start,this.stop);
56        return this.text;
57    },
58
59    /** Override the text for this token.  getText() will return this text
60     *  rather than pulling from the buffer.  Note that this does not mean
61     *  that start/stop indexes are not valid.  It means that that input
62     *  was converted to a new string in the token object.
63     */
64    setText: function(text) {
65        this.text = text;
66    },
67
68    getLine: function() {
69        return this.line;
70    },
71
72    getCharPositionInLine: function() {
73        return this.charPositionInLine;
74    },
75
76    setCharPositionInLine: function(charPositionInLine) {
77        this.charPositionInLine = charPositionInLine;
78    },
79
80    getChannel: function() {
81        return this.channel;
82    },
83
84    setChannel: function(channel) {
85        this.channel = channel;
86    },
87
88    setType: function(type) {
89        this.type = type;
90    },
91
92    getStartIndex: function() {
93        return this.start;
94    },
95
96    setStartIndex: function(start) {
97        this.start = start;
98    },
99
100    getStopIndex: function() {
101        return this.stop;
102    },
103
104    setStopIndex: function(stop) {
105        this.stop = stop;
106    },
107
108    getTokenIndex: function() {
109        return this.index;
110    },
111
112    setTokenIndex: function(index) {
113        this.index = index;
114    },
115
116    getInputStream: function() {
117        return this.input;
118    },
119
120    setInputStream: function(input) {
121        this.input = input;
122    },
123
124    toString: function() {
125        var channelStr = "";
126        if ( this.channel>0 ) {
127            channelStr=",channel="+this.channel;
128        }
129        var txt = this.getText();
130        if ( !org.antlr.lang.isNull(txt) ) {
131            txt = txt.replace(/\n/g,"\\\\n");
132            txt = txt.replace(/\r/g,"\\\\r");
133            txt = txt.replace(/\t/g,"\\\\t");
134        }
135        else {
136            txt = "<no text>";
137        }
138        return "[@"+this.getTokenIndex()+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+channelStr+","+this.line+":"+this.getCharPositionInLine()+"]";
139    }
140});
141
142/* Monkey patch Token static vars that depend on CommonToken. */
143org.antlr.lang.augmentObject(org.antlr.runtime.Token, {
144    EOF_TOKEN: new org.antlr.runtime.CommonToken(org.antlr.runtime.CharStream.EOF),
145    INVALID_TOKEN: new org.antlr.runtime.CommonToken(0),
146    SKIP_TOKEN: new org.antlr.runtime.CommonToken(0)
147}, true);
148