From 044bd62c8c7f4c073580f7f12d9e157c28e934ff Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Wed, 9 Sep 2015 17:46:59 +0800 Subject: [PATCH] JSDOC/Token.vala --- JSDOC/Token.vala | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/JSDOC/Token.vala b/JSDOC/Token.vala index e69de29..96a601c 100644 --- a/JSDOC/Token.vala +++ b/JSDOC/Token.vala @@ -0,0 +1,117 @@ +/** + * @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 == ''; + * + * + * +*/ + +public class JSDOC.Token : Object { + + public string data; + public string type; + public string name; + public int line; + public string prefix; + + public string outData; + + public string identifier; + + 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 = Token.id++; + }, + Object, + { + toString: function() + { + return 'line:' + this.line + ', type:' + this.type + + ', name:' + this.name + ', data:' + this.data + + ((this.outData === false) ? '' : ( 'outData : ' + this.outData)); + }, + + + toRaw : function(lvl) + { + lvl = lvl || 0; + + var ret = this.data ; + + + if (this.items) { + var ar = []; + this.items.forEach( function(ai) { + + var str = ''; + ai.forEach( function(it) { + str += it.toRaw(lvl + 1); + }) + ar.push(str); + + }) + ret += ar.join(''); + + } + 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; + } + }, + + + + is : function(what) { + return this.name === what || this.type === what; + } +}); +Token.id = 0; \ No newline at end of file -- 2.39.2