JSDOC/TokenReader.js
authoralan <alan@alanfast.akbkhome.com>
Mon, 19 Apr 2010 07:03:49 +0000 (15:03 +0800)
committeralan <alan@alanfast.akbkhome.com>
Mon, 19 Apr 2010 07:03:49 +0000 (15:03 +0800)
JSDOC/TokenReader.js

index 2f03c73..98c39e9 100644 (file)
@@ -31,6 +31,7 @@ TokenReader = XObject.define(
 
 
         tokenize : function(/**JSDOC.TextStream*/stream) {
+            this.line =1;
             var tokens = [];
             /**@ignore*/ tokens.last    = function() { return tokens[tokens.length-1]; }
             /**@ignore*/ tokens.lastSym = function() {
@@ -52,7 +53,7 @@ TokenReader = XObject.define(
                 if (this.read_word(stream, tokens))      continue;
                 
                 // if execution reaches here then an error has happened
-                tokens.push(new Token(stream.next(), "TOKN", "UNKNOWN_TOKEN"));
+                tokens.push(new Token(stream.next(), "TOKN", "UNKNOWN_TOKEN", this.line));
             }
             
             
@@ -75,21 +76,21 @@ TokenReader = XObject.define(
             else {
                 var name;
                 if ((name = Lang.keyword(found))) {
-                    tokens.push(new Token(found, "KEYW", name));
+                    tokens.push(new Token(found, "KEYW", name, this.line));
                     return true;
                 }
                 if (!this.sepIdents || found.indexOf('.') < 0 ) {
-                    tokens.push(new Token(found, "NAME", "NAME"));
+                    tokens.push(new Token(found, "NAME", "NAME", this.line));
                     return true;
                 }
                 var n = found.split('.');
                 var p = false;
                 n.forEach(function(nm) {
                     if (p) {
-                        tokens.push(new Token('.', "PUNC", "DOT"));
+                        tokens.push(new Token('.', "PUNC", "DOT", this.line));
                     }
                     p=true;
-                    tokens.push(new Token(nm, "NAME", "NAME"));
+                    tokens.push(new Token(nm, "NAME", "NAME", this.line));
                 });
                 return true;
                 
@@ -110,7 +111,7 @@ TokenReader = XObject.define(
                 return false;
             }
             else {
-                tokens.push(new Token(found, "PUNC", Lang.punc(found)));
+                tokens.push(new Token(found, "PUNC", Lang.punc(found), this.line));
                 return true;
             }
         },
@@ -130,7 +131,7 @@ TokenReader = XObject.define(
             }
             else {
                 if (this.collapseWhite) found = " ";
-                if (this.keepWhite) tokens.push(new Token(found, "WHIT", "SPACE"));
+                if (this.keepWhite) tokens.push(new Token(found, "WHIT", "SPACE", this.line));
                 return true;
             }
         },
@@ -142,6 +143,7 @@ TokenReader = XObject.define(
             var found = "";
             
             while (!stream.look().eof && Lang.isNewline(stream.look())) {
+                this.line++;
                 found += stream.next();
             }
             
@@ -150,7 +152,7 @@ TokenReader = XObject.define(
             }
             else {
                 if (this.collapseWhite) found = "\n";
-                if (this.keepWhite) tokens.push(new Token(found, "WHIT", "NEWLINE"));
+                if (this.keepWhite) tokens.push(new Token(found, "WHIT", "NEWLINE", this.line));
                 return true;
             }
         },
@@ -161,14 +163,16 @@ TokenReader = XObject.define(
         read_mlcomment : function(/**JSDOC.TokenStream*/stream, tokens) {
             if (stream.look() == "/" && stream.look(1) == "*") {
                 var found = stream.next(2);
-                
+                var c = '';
                 while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) {
-                    found += stream.next();
+                    c = stream.next();
+                    if (c == "\n") this.line++;
+                    found += c;
                 }
                 
                 // to start doclet we allow /** or /*** but not /**/ or /****
-                if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new Token(found, "COMM", "JSDOC"));
-                else if (this.keepComments) tokens.push(new Token(found, "COMM", "MULTI_LINE_COMM"));
+                if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new Token(found, "COMM", "JSDOC", this.line));
+                else if (this.keepComments) tokens.push(new Token(found, "COMM", "MULTI_LINE_COMM", this.line));
                 return true;
             }
             return false;
@@ -190,7 +194,7 @@ TokenReader = XObject.define(
                 }
                 
                 if (this.keepComments) {
-                    tokens.push(new Token(found, "COMM", "SINGLE_LINE_COMM"));
+                    tokens.push(new Token(found, "COMM", "SINGLE_LINE_COMM", this.line));
                 }
                 return true;
             }
@@ -219,7 +223,7 @@ TokenReader = XObject.define(
                     }
                     else if (stream.look() == "\"") {
                         string += stream.next();
-                        tokens.push(new Token(string, "STRN", "DOUBLE_QUOTE"));
+                        tokens.push(new Token(string, "STRN", "DOUBLE_QUOTE", this.line));
                         return true;
                     }
                     else {
@@ -244,7 +248,7 @@ TokenReader = XObject.define(
                     }
                     else if (stream.look() == "'") {
                         string += stream.next();
-                        tokens.push(new Token(string, "STRN", "SINGLE_QUOTE"));
+                        tokens.push(new Token(string, "STRN", "SINGLE_QUOTE", this.line));
                         return true;
                     }
                     else {
@@ -273,8 +277,8 @@ TokenReader = XObject.define(
                 return false;
             }
             else {
-                if (/^0[0-7]/.test(found)) tokens.push(new Token(found, "NUMB", "OCTAL"));
-                else tokens.push(new Token(found, "NUMB", "DECIMAL"));
+                if (/^0[0-7]/.test(found)) tokens.push(new Token(found, "NUMB", "OCTAL", this.line));
+                else tokens.push(new Token(found, "NUMB", "DECIMAL", this.line));
                 return true;
             }
         },
@@ -311,7 +315,7 @@ TokenReader = XObject.define(
             
             while (!stream.look().eof) {
                 if (Lang.isHexDec(found) && !Lang.isHexDec(found+stream.look())) { // done
-                    tokens.push(new Token(found, "NUMB", "HEX_DEC"));
+                    tokens.push(new Token(found, "NUMB", "HEX_DEC", this.line));
                     return true;
                 }
                 else {
@@ -356,7 +360,7 @@ TokenReader = XObject.define(
                             regex += stream.next();
                         }
                         
-                        tokens.push(new Token(regex, "REGX", "REGX"));
+                        tokens.push(new Token(regex, "REGX", "REGX", this.line));
                         return true;
                     }
                     else {