JSDOC/TokenReader.js
[gnome.introspection-doc-generator] / JSDOC / Token.vala
index 96a601c..a3ba98b 100644 (file)
  * 
  * 
 */
+namespace JSDOC
+{
+    int Token_id = 1;
 
-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 class TokenKeyMap : Object {
+               public Token key;
+               public Gee.ArrayList<Token> vals;
+               
+               public TokenKeyMap()
+               {
+                       this.key = new Token("","VOID", "VOID"); 
+                       this.vals = new  Gee.ArrayList<Token>();
+               }
+               
+               
+       }
+
+    public class Token : Object {
+        
+        public int id;
+        
+        public string data;
+        public string type;
+        public string name;
+        public int line;
+        public string prefix; // white space prefix... (when outputing with WS)
+        
+        public string outData;
+        
+        public Identifier identifier;
+        
+         // used to stuff tokens together when building a tree..
+        public Gee.ArrayList<Gee.ArrayList<Token>> items;
+        // for a object definition, key -> array of tokens..
+           public Gee.HashMap<string,TokenKeyMap> props;
+        
+        // props??? what's this???
+        
+        public Token(string data, string type, string name, int line = -1)
+        {
+            this.data = data;
+            this.type = type;
+            this.name = name;
+            this.line = line;
+            this.prefix = "";    
+            this.outData = ""; // used by packer/scopeparser
+            this.identifier = null; // used by scope
+            this.id = Token_id++;
+            
+            
+            this.items = new Gee.ArrayList<Gee.ArrayList<Token>>();
+            this.props = new Gee.HashMap<string,TokenKeyMap>();
+        }
     
-    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()
+        public string asString()
         {
-            return 'line:' + this.line + ', type:' + this.type + 
-                ', name:' + this.name + ', data:' + this.data + 
-                ((this.outData === false) ? '' : ( 'outData : ' + this.outData));
-        },
+            return "line:%d, id %d, type %s, data : %s,  name %s, , outData: %s".printf(
+                    this.line,
+                    this.id,
+                    this.type,
+                    this.data,
+                    this.name,
+                    this.outData == null ? "" : this.outData
+            );
+            
+        }
+        
+        
+        public void dump(string indent)
+               {
+               print("%s%s\n",indent, this.asString());
+               if (this.items.size > 0) {
+                       
+                               for (var i = 0;i < this.items.size; i++) {
+                               print("%s --ITEMS[%d] [ \n",indent,i);
+                                       for (var j = 0;j < this.items[i].size; j++) {
+                                               this.items[i][j].dump(indent + "  ");
+                                       }
+                               }
+                       }
+                       if (this.props.size > 0) {
+                               var m = this.props.map_iterator();
+                               while(m.next()) {
+                               print("%s --KEY %s ::  \n",indent,m.get_key());
+                               var vals = m.get_value().vals;
+                                       for (var i = 0;i < vals.size; i++) {
+
+                                               vals[i].dump(indent + "  ");
+                                       }
+                               }
+                       
+                       
+                       }
+                       
+               }
         
         
-        toRaw : function(lvl)
+        public string toRaw(int lvl = 0)
         {
-            lvl = lvl || 0;
             
-            var ret =  this.data ;
             
+            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('');
-                
+            foreach(var ai in this.items ) {
+                // supposed to iterate properties???
+                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) + ' : ';
@@ -91,12 +151,12 @@ public class JSDOC.Token : Object {
                 }
             }
             
-            
+            */
             
             return this.prefix +   ret;
              
-        },
-
+        }
+        /*
         toJS : function() {
             
             try {
@@ -107,11 +167,12 @@ public class JSDOC.Token : Object {
                 return "ERROR unparsable" + this.data;
             }
         },
-         
+        */
                         
 
-        is : function(what) {
-            return this.name === what || this.type === what;
+        public bool is(string what) {
+            return this.name == what || this.type == what;
         }
-});
-Token.id = 0;     
\ No newline at end of file
+    }
+}
+  
\ No newline at end of file