Add Javascript Compressor, and new XObject base util class (will replace Object.js)
[gnome.introspection-doc-generator] / JSDOC / TokenStream.js
index cc3f6af..b5385a6 100644 (file)
@@ -21,6 +21,7 @@ TokenStream = Object.define(
     },
     Object,
     {
+        cursor : -1, // where are we in the stream.
         
         rewind : function() {
             this.cursor = -1;
@@ -33,7 +34,9 @@ TokenStream = Object.define(
             if (typeof n == "undefined") n = 0;
 
             if (considerWhitespace == true) {
-                if (this.cursor+n < 0 || this.cursor+n > this.tokens.length) return {};
+                if (this.cursor+n < 0 || this.cursor+n > (this.tokens.length -1)) {
+                    return new Token("", "VOID", "START_OF_STREAM");
+                }
                 return this.tokens[this.cursor+n];
             }
             else {
@@ -91,8 +94,14 @@ TokenStream = Object.define(
             var i = this.cursor;
 
             while (true) {
-                if (i < 0) return false;
-                else if (i > this.tokens.length) return false;
+               // print(i);
+                if (i < 0) {
+                    if (n > -1) {
+                        i = 0; continue;
+                    }
+                    return   new Token("", "VOID", "END_OF_STREAM");
+                }
+                else if (i > this.tokens.length) return  new Token("", "VOID", "END_OF_STREAM");
 
                 if (i != this.cursor && (this.tokens[i] === undefined || this.tokens[i].is("WHIT") || this.tokens[i].is("COMM"))) {
                     if (n < 0) i--; else i++;
@@ -105,7 +114,7 @@ TokenStream = Object.define(
                 count++;
                 (n < 0)? i-- : i++;
             }
-
+        // should never get here..
             return false; // because null isn't an object and caller always expects an object;
             
         },
@@ -133,7 +142,9 @@ TokenStream = Object.define(
         },
         // what about comments after 'function'...
         // is this used ???
-
+        nextTok  : function() {
+            return this.nextNonSpace();
+        },
         nextNonSpace : function ()
         {
             
@@ -149,9 +160,14 @@ TokenStream = Object.define(
             }
         },
         /**
-            @type JSDOC.Token[]
-        */
+         *    @type JSDOC.Token[]
+         * @param start {String}  token name or data (eg. '{'
+         * @param stop {String} (Optional) token name or data (eg. '}'
+         */
         balance : function(/**String*/start, /**String*/stop) {
+            
+            start = typeof(Lang.matching(start)) == 'undefined' ? Lang.punc(start) : start;
+            
             if (!stop) stop = Lang.matching(start);
             
             var depth = 0;
@@ -218,10 +234,16 @@ TokenStream = Object.define(
         arrayToString : function(ar) {
             console.log(typeof(ar));
             var ret = [];
-            Roo.each(ar, function(e) {
+            ar.forEach(function(e) {
                 ret.push(e.data);
             })
             return ret.join('');
+        },
+        dump: function()
+        {
+            this.tokens.forEach(function(t) {
+                print(t.toString());
+            });
         }
 });
     
\ No newline at end of file