JSDOC/Token.vala
[gnome.introspection-doc-generator] / JSDOC / Token.vala
1 /**
2  *      @class Token
3  * 
4  *  @prop data {String} raw value of token
5  *  @prop type {String} type of token
6  *     TOKN  (unknown)          - name is UNKNOWN_TOKEN
7  * 
8  *     KEYW  (keyword)          - name is upper case version of keyword
9  *     NAME  (name/identifier)  - name is NAME
10  *     COMM  (comment)          - name is MULTI_LINE_COMM, JSDOC, SINGLE_LINE_COMM
11  *     PUNC  (puctuation)       - name is String description of punctionan (eg LEFTPARAM)
12  *     WHIT  (white space)      - name is SPACE,NEWLINE
13  *     STRN  (string)           - name is DOBULE_QUOTE, SINGLE_QUOTE
14  *     NUMB  (number)           - name is OCTAL,DECIMAL,HEC_DEC
15  *     REGX   (reg.expression)  - name is REGX
16  *  @prop name {String} see type details above
17  *  @prop identifier {Identifier} identifier class if relivant
18  * 
19  * 
20  * 
21  * old mappings:
22  * 
23  * Script.TOKidentifier  - type == 'NAME'
24  * Script.TOKassign  = data == '='
25  * Script.TOKsemicolon data == '';
26  * 
27  * 
28  * 
29 */
30 namespace JSDOC
31 {
32     int tokid = 1;
33
34     public class Token : Object {
35         
36         int id;
37         
38         public  string data;
39         public string type;
40         public string name;
41         public int line;
42         public string prefix;
43         
44         public string outData;
45         
46         public string identifier;
47         
48         // this.items???
49         
50         
51         public Token(string data, string type, string name, int line)
52         {
53             this.data = data;
54             this.type = type;
55             this.name = name;
56             this.line = line;
57             this.prefix = "";    
58             this.outData = null; // used by packer/scopeparser
59             this.identifier = null; // used by scope
60             this.id = tokid++;
61         }
62     
63         public string asString()
64         {
65             return "line:%d, type %s, name %s, data : %s , outData: %s".printf(
66                     this.line,
67                     this.type,
68                     this.name,
69                     this.data,
70                     this.outData == null ? "" : this.outData
71             )
72             
73         }
74         
75         
76         public string toRaw : function(int lvl = 0)
77         {
78             
79             
80             var ret =  this.data ;
81             
82             
83             if (this.items) {
84                 var ar = [];
85                 this.items.forEach(  function(ai) {
86                     
87                     var str = '';
88                     ai.forEach(  function(it) {
89                         str += it.toRaw(lvl + 1);
90                     })
91                     ar.push(str);
92                     
93                 })
94                 ret +=   ar.join('');
95                 
96             }
97             if (this.props) {
98                 for (var i in this.props) {
99                     ret += this.props[i].key.toRaw(lvl+1) + ' : ';
100                     this.props[i].val.forEach( function(e) {
101                         ret+=e.toRaw(lvl+1);
102                     })
103                     
104                 }
105             }
106             
107             
108             
109             return this.prefix +   ret;
110              
111         },
112
113         toJS : function() {
114             
115             try {
116                 var _tmp = '';
117                 eval( "_tmp = " + this.data);
118                 return _tmp;
119             } catch( e) {
120                 return "ERROR unparsable" + this.data;
121             }
122         },
123          
124                         
125
126         is : function(what) {
127             return this.name === what || this.type === what;
128         }
129 });
130 Token.id = 0;