/** * @class Token * * @prop data {String} raw value of token * @prop type {String} type of token * TOKN (unknown) - name is UNKNOWN_TOKEN * * KEYW (keyword) - name is upper case version of keyword * NAME (name/identifier) - name is NAME * COMM (comment) - name is MULTI_LINE_COMM, JSDOC, SINGLE_LINE_COMM * PUNC (puctuation) - name is String description of punctionan (eg LEFTPARAM) * WHIT (white space) - name is SPACE,NEWLINE * STRN (string) - name is DOBULE_QUOTE, SINGLE_QUOTE * NUMB (number) - name is OCTAL,DECIMAL,HEC_DEC * REGX (reg.expression) - name is REGX * @prop name {String} see type details above * @prop identifier {Identifier} identifier class if relivant * * * * old mappings: * * Script.TOKidentifier - type == 'NAME' * Script.TOKassign = data == '=' * Script.TOKsemicolon data == ''; * * * */ namespace JSDOC { int Token_id = 1; public class Token : Object { int id; public string data; public string type; public string name; public int line; public string prefix; public string outData; public string identifier; // used to stuff tokens together when building a tree.. public Gee.ArrayList> items; // props??? what's this??? public Token(string data, string type, string name, int line) { this.data = data; this.type = type; this.name = name; this.line = line; this.prefix = ""; this.outData = null; // used by packer/scopeparser this.identifier = null; // used by scope this.id = tokid++; this.items = new Gee.ArrayList>(); } public string asString() { return "line:%d, type %s, name %s, data : %s , outData: %s".printf( this.line, this.type, this.name, this.data, this.outData == null ? "" : this.outData ); } public string toRaw(int lvl = 0) { var ret = this.data ; foreach(var ai in this.items ) { string str = ""; foreach( var it in ai) { str += it.toRaw(lvl+1); } ret += str; } /* -- what is a prop.. if (this.props) { for (var i in this.props) { ret += this.props[i].key.toRaw(lvl+1) + ' : '; this.props[i].val.forEach( function(e) { ret+=e.toRaw(lvl+1); }) } } */ return this.prefix + ret; } /* toJS : function() { try { var _tmp = ''; eval( "_tmp = " + this.data); return _tmp; } catch( e) { return "ERROR unparsable" + this.data; } }, */ public bool is(string what) { return this.name == what || this.type == what; } } }