JSDOC/TokenReader.js
[gnome.introspection-doc-generator] / JSDOC / TokenReader.js
index 58859eb..173e67c 100644 (file)
@@ -23,21 +23,18 @@ TokenReader = XObject.define(
     },
     Object,
     {
-            
+        collapseWhite : false, // only reduces white space...
 
         /**
          * tokenize a stream
          * @return {Array} of tokens
          * 
-         * ts = new TextStream();
+         * ts = new TextStream(File.read(str));
          * tr = TokenReader({ keepComments : true, keepWhite : true });
          * tr.tokenize(ts)
          * 
          */
-            @type {JSDOC.Token[]}
-           
-                
-         */
+            
 
 
         tokenize : function(/**JSDOC.TextStream*/stream) {
@@ -95,12 +92,13 @@ TokenReader = XObject.define(
                 }
                 var n = found.split('.');
                 var p = false;
+                var _this = this;
                 n.forEach(function(nm) {
                     if (p) {
-                        tokens.push(new Token('.', "PUNC", "DOT", this.line));
+                        tokens.push(new Token('.', "PUNC", "DOT", _this.line));
                     }
                     p=true;
-                    tokens.push(new Token(nm, "NAME", "NAME", this.line));
+                    tokens.push(new Token(nm, "NAME", "NAME", _this.line));
                 });
                 return true;
                 
@@ -156,13 +154,22 @@ TokenReader = XObject.define(
                 this.line++;
                 found += stream.next();
             }
-            
+              this.line++;
             if (found === "") {
                 return false;
             }
             else {
-                if (this.collapseWhite) found = "\n";
-                if (this.keepWhite) tokens.push(new Token(found, "WHIT", "NEWLINE", this.line));
+                if (this.collapseWhite) {
+                    found = "\n";
+                }
+                if (this.keepWhite) {
+                    var last = tokens.pop();
+                    if (last.name != "WHIT") {
+                        tokens.push(last);
+                    }
+                    
+                    tokens.push(new Token(found, "WHIT", "NEWLINE", this.line));
+                }
                 return true;
             }
         },