JSDOC/Token.vala
[gnome.introspection-doc-generator] / JSDOC / Token.vala
index e69de29..90dbf85 100644 (file)
@@ -0,0 +1,127 @@
+/**
+ *     @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 tokid = 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;
+        
+        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++;
+        }
+    
+        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
+            )
+            
+        }
+        
+        
+        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