From fca7592ce121fbbc4658e0b9bbf4f61b684933a0 Mon Sep 17 00:00:00 2001 From: alan Date: Mon, 19 Apr 2010 15:03:49 +0800 Subject: [PATCH] JSDOC/TokenReader.js --- JSDOC/TokenReader.js | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/JSDOC/TokenReader.js b/JSDOC/TokenReader.js index 2f03c73..98c39e9 100644 --- a/JSDOC/TokenReader.js +++ b/JSDOC/TokenReader.js @@ -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 { -- 2.39.2