Home | History | Annotate | Download | only in runtime
      1 org.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 
     37 org.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. */
    143 org.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