JSDOC/TokenReader.js
[gnome.introspection-doc-generator] / JSDOC / TokenStream.vala
index 885af25..559141b 100644 (file)
@@ -28,7 +28,10 @@ namespace JSDOC {
 
                        this.rewind();
                }
-       
+               public  Gee.ArrayList<Token> toArray()
+               {
+                       return this.tokens;
+               }
 
                
                public void rewind() {
@@ -38,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...
                {
 
 
@@ -77,6 +80,21 @@ 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 (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);
+           
+           
+  
+               }
+               
+               
 
                public int lookFor  (string data)
                {
@@ -121,7 +139,7 @@ namespace JSDOC {
                            }
                            return  new Token("", "VOID", "END_OF_STREAM");
                        }
-                       if (i > this.tokens.size) {
+                       if (i >= this.tokens.size) {
                                return  new Token("", "VOID", "END_OF_STREAM");
                        }
 
@@ -210,11 +228,11 @@ namespace JSDOC {
                 * @param start {String}  token name or data (eg. '{'
                 * @param stop {String} (Optional) token name or data (eg. '}'
                 */
-               public Gee.ArrayList<Token> balance (string start, string stop = "") throws TokenStreamError 
+               public Gee.ArrayList<Token> balance (string start, string in_stop = "") throws TokenStreamError 
                {
                    
                    // accepts names or "{" etc..
-                   
+                   var stop = in_stop;
                    start = Lang.punc(start) == null ? start : Lang.punc(start);
                    
                    if (stop=="") {
@@ -224,7 +242,7 @@ namespace JSDOC {
                        if (stop == null) {
                                throw new TokenStreamError.ArgumentError("balance called with invalid start/stop : %s",start);
                        }
-                   
+                   debug("START=%s, STOP=%s \n", start,stop);
                    var depth = 0;
                    var got = new Gee.ArrayList<Token>();
                    var started = false;
@@ -232,7 +250,8 @@ namespace JSDOC {
                    //Seed.print("STOP:" + stop);
                    Token token;
                    
-                   while (null != (token = this.look(1,false))) {
+                   while (null != (token = this.lookAny(1))) {
+                               debug("BALANCE: %d %s " , this.cursor,  token.asString());
                        if (token.is(start)) {
                      //      Seed.print("balance: START : " + depth + " " + token.data);
                            depth++;
@@ -245,10 +264,14 @@ namespace JSDOC {
                        
                        if (token.is(stop)) {
                            depth--;
-                       //    Seed.print("balance: STOP: "  + depth + " " + token.data);
+                           
+                               //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;
                                }
+                               
                        }
                        if (null == this.next()) {
                                break;
@@ -339,6 +362,23 @@ namespace JSDOC {
                    print(outs);
                }
                
+               public void dumpAll(string indent)
+               {
+                   for (var i = 0;i < this.tokens.size; i++) {
+                       
+                        this.tokens[i].dump("");
+                   }
+                   
+               }
+               public void dumpAllFlat()
+               {
+                   for (var i = 0;i < this.tokens.size; i++) {
+                       
+                        print("%d: %s\n", i, this.tokens[i].asString());
+                   }
+                   
+               }
+               
        }
 }