JSDOC/TokenStream.vala
[gnome.introspection-doc-generator] / JSDOC / TokenStream.vala
index 10a8b98..9f7d311 100644 (file)
@@ -41,7 +41,7 @@ namespace JSDOC {
                /**
                    @type JSDOC.Token
                */
-               public Token? look (int n, bool considerWhitespace) 
+               public Token? look (int n, bool considerWhitespace)  // depricated... causes all sorts of problems...
                {
 
 
@@ -80,6 +80,48 @@ namespace JSDOC {
               // return new Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
                    
                }
+               // look through token stream, including white space...
+               public Token? lookAny (int n)
+               {
+
+
+                   if (considerWhitespace == true) {
+                   
+                       if (this.cursor+n < 0 || this.cursor+n > (this.tokens.size -1)) {
+                           return new Token("", "VOID", "START_OF_STREAM");
+                       }
+                       return this.tokens.get(this.cursor+n);
+                   }
+                   
+
+               var count = 0;
+               var i = this.cursor;
+
+               while (true) {
+                   if (i < 0) {
+                               return new Token("", "VOID", "START_OF_STREAM");
+                       }
+                   if (i >= this.tokens.size) {
+                               return new Token("", "VOID", "END_OF_STREAM");
+                       }
+
+                   if (i != this.cursor && this.tokens.get(i).is("WHIT")) {
+                               i += (n < 0) ? -1 : 1;
+                       continue;
+                   }
+                   
+                   if (count == n) {
+                       return this.tokens.get(i);
+                   }
+                   count++;
+                   i += (n < 0) ? -1 : 1;
+               }
+
+              // return new Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
+                   
+               }
+               
+               
 
                public int lookFor  (string data)
                {
@@ -236,7 +278,7 @@ namespace JSDOC {
                    Token token;
                    
                    while (null != (token = this.look(1,false))) {
-                               debug("BALANCE: " + token.asString());
+                               debug("BALANCE: %d %s " , this.cursor,  token.asString());
                        if (token.is(start)) {
                      //      Seed.print("balance: START : " + depth + " " + token.data);
                            depth++;
@@ -252,6 +294,8 @@ namespace JSDOC {
                            
                                print("balance (%d): STOP: %s\n" ,  depth ,  token.data);
                            if (depth < 1) {
+                                   this.next(); // shift cursor to eat closer...
+                                       print("returning got %d\n", got.size);
                                        return got;
                                }
                                
@@ -353,7 +397,14 @@ namespace JSDOC {
                    }
                    
                }
-               
+               public void dumpAllFlat()
+               {
+                   for (var i = 0;i < this.tokens.size; i++) {
+                       
+                        print("%d: %s\n", i, this.tokens[i].asString());
+                   }
+                   
+               }
                
        }
 }