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 Token_id = 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; // white space prefix... (when outputing with WS)
43         
44         public string outData;
45         
46         public string identifier;
47         
48          // used to stuff tokens together when building a tree..
49         public Gee.ArrayList<Token> items;
50         // for a object definition, key -> array of tokens..
51             public Gee.HashMap<string,Gee.ArrayList<Token>> props;
52         
53         // props??? what's this???
54         
55         public Token(string data, string type, string name, int line = -1)
56         {
57             this.data = data;
58             this.type = type;
59             this.name = name;
60             this.line = line;
61             this.prefix = "";    
62             this.outData = null; // used by packer/scopeparser
63             this.identifier = null; // used by scope
64             this.id = Token_id++;
65             
66             
67             this.items = new Gee.ArrayList<Gee.ArrayList<Token>()>;
68             this.props = new Gee.HashMap<string,Gee.ArrayList<Token>>();
69         }
70     
71         public string asString()
72         {
73             return "line:%d, type %s, name %s, data : %s , outData: %s".printf(
74                     this.line,
75                     this.type,
76                     this.name,
77                     this.data,
78                     this.outData == null ? "" : this.outData
79             );
80             
81         }
82         
83         
84         public string toRaw(int lvl = 0)
85         {
86             
87             
88             var ret =  this.data ;
89             
90             foreach(var ai in this.items ) {
91                 // supposed to iterate properties???
92                 string str = "";
93                 //foreach( var it in ai) {
94                  //   str += it.toRaw(lvl+1);
95                // }
96                 ret += str;
97             }
98             
99             /* -- what is a prop..
100             if (this.props) {
101                 for (var i in this.props) {
102                     ret += this.props[i].key.toRaw(lvl+1) + ' : ';
103                     this.props[i].val.forEach( function(e) {
104                         ret+=e.toRaw(lvl+1);
105                     })
106                     
107                 }
108             }
109             
110             */
111             
112             return this.prefix +   ret;
113              
114         }
115         /*
116         toJS : function() {
117             
118             try {
119                 var _tmp = '';
120                 eval( "_tmp = " + this.data);
121                 return _tmp;
122             } catch( e) {
123                 return "ERROR unparsable" + this.data;
124             }
125         },
126         */
127                         
128
129         public bool is(string what) {
130             return this.name == what || this.type == what;
131         }
132     }
133 }
134