JSDOC/TokenReader.js
[gnome.introspection-doc-generator] / JSDOC / TokenReader.js
index 98c39e9..9970186 100644 (file)
@@ -1,12 +1,12 @@
 //<script type="text/javascript">
 
-//imports['Object.js'].load(Object);
 XObject = imports.XObject.XObject;
-console = imports['console.js'].console;
+console = imports.console.console;
 
-JSDOC   = imports['JSDOC.js'].JSDOC;
-Token   = imports['JSDOC/Token.js'].Token;
-Lang    = imports['JSDOC/Lang.js'].Lang;
+
+Token   = imports.Token.Token;
+Lang    = imports.Lang.Lang;
 
 /**
        @class Search a {@link JSDOC.TextStream} for language tokens.
@@ -23,11 +23,18 @@ TokenReader = XObject.define(
     },
     Object,
     {
-            
+        collapseWhite : false, // only reduces white space...
 
         /**
-            @type {JSDOC.Token[]}
+         * tokenize a stream
+         * @return {Array} of tokens
+         * 
+         * ts = new TextStream(File.read(str));
+         * tr = TokenReader({ keepComments : true, keepWhite : true });
+         * tr.tokenize(ts)
+         * 
          */
+            
 
 
         tokenize : function(/**JSDOC.TextStream*/stream) {
@@ -151,8 +158,18 @@ TokenReader = XObject.define(
                 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.shift();
+                    if (last.name != "WHIT") {
+                        tokens.push(last);
+                    }
+                    
+                    
+                    tokens.push(new Token(found, "WHIT", "NEWLINE", this.line));
+                }
                 return true;
             }
         },
@@ -196,6 +213,7 @@ TokenReader = XObject.define(
                 if (this.keepComments) {
                     tokens.push(new Token(found, "COMM", "SINGLE_LINE_COMM", this.line));
                 }
+                this.line++;
                 return true;
             }
             return false;