X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=JSDOC%2FTokenReader.js;h=41513a190f49bfa2cbb8b8256b9f58c06daaa735;hb=ab02fc2fb5b6705a01f26d25b50937780bc0dd73;hp=3db1c0912431dfd7cf201f581f2e1d5a49889608;hpb=bf500865bb6f0354292bdd255e6c39c87f7e113e;p=gnome.introspection-doc-generator diff --git a/JSDOC/TokenReader.js b/JSDOC/TokenReader.js index 3db1c09..41513a1 100644 --- a/JSDOC/TokenReader.js +++ b/JSDOC/TokenReader.js @@ -40,8 +40,10 @@ 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() { + /**@ignore*/ + tokens.last = function() { return tokens[tokens.length-1]; } + /**@ignore*/ + tokens.lastSym = function() { for (var i = tokens.length-1; i >= 0; i--) { if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i]; } @@ -115,13 +117,23 @@ TokenReader = XObject.define( found += stream.next(); } + if (found === "") { return false; } - else { - tokens.push(new Token(found, "PUNC", Lang.punc(found), this.line)); - return true; + + if ((found == '}' || found == ']') && tokens.lastSym().data == ',') { + //print("Error - comma found before " + found); + //print(JSON.stringify(tokens.lastSym(), null,4)); + throw { + name : "ArgumentError", + message: "Error - comma found before " + found + " on line " + this.line + "\n" + } } + + tokens.push(new Token(found, "PUNC", Lang.punc(found), this.line)); + return true; + }, /** @@ -130,15 +142,14 @@ TokenReader = XObject.define( read_space : function(/**JSDOC.TokenStream*/stream, tokens) { var found = ""; - while (!stream.look().eof && Lang.isSpace(stream.look())) { - if (Lang.isNewline(stream.look())) break; + while (!stream.look().eof && Lang.isSpace(stream.look()) && !Lang.isNewline(stream.look())) { found += stream.next(); } if (found === "") { return false; } - print("WHITE = " + JSON.stringify(found)); + //print("WHITE = " + JSON.stringify(found)); if (this.collapseWhite) found = " "; if (this.keepWhite) tokens.push(new Token(found, "WHIT", "SPACE", this.line)); return true; @@ -150,7 +161,7 @@ TokenReader = XObject.define( */ read_newline : function(/**JSDOC.TokenStream*/stream, tokens) { var found = ""; - + var line = this.line; while (!stream.look().eof && Lang.isNewline(stream.look())) { this.line++; found += stream.next(); @@ -165,11 +176,11 @@ TokenReader = XObject.define( } if (this.keepWhite) { var last = tokens.pop(); - if (last.name != "WHIT") { + if (last && last.name != "WHIT") { tokens.push(last); } - tokens.push(new Token(found, "WHIT", "NEWLINE", this.line)); + tokens.push(new Token(found, "WHIT", "NEWLINE", line)); } return true; }, @@ -181,6 +192,7 @@ TokenReader = XObject.define( if (stream.look() == "/" && stream.look(1) == "*") { var found = stream.next(2); var c = ''; + var line = this.line; while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) { c = stream.next(); if (c == "\n") this.line++; @@ -189,7 +201,7 @@ TokenReader = XObject.define( // to start doclet we allow /** or /*** but not /**/ or /**** 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)); + else if (this.keepComments) tokens.push(new Token(found, "COMM", "MULTI_LINE_COMM", line)); return true; } return false; @@ -205,13 +217,15 @@ TokenReader = XObject.define( || (stream.look() == "<" && stream.look(1) == "!" && stream.look(2) == "-" && stream.look(3) == "-" && (found=stream.next(4))) ) { - + var line = this.line; while (!stream.look().eof && !Lang.isNewline(stream.look())) { found += stream.next(); } - + if (!stream.look().eof) { + found += stream.next(); + } if (this.keepComments) { - tokens.push(new Token(found, "COMM", "SINGLE_LINE_COMM", this.line)); + tokens.push(new Token(found, "COMM", "SINGLE_LINE_COMM", line)); } this.line++; return true;