Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: Source/devtools/front_end/JavaScriptFormatter.js

Issue 18347003: DevTools: Implement CSS pretty-printing (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Comments addressed Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/CSSFormatter.js ('k') | Source/devtools/front_end/ScriptFormatter.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/JavaScriptFormatter.js
diff --git a/Source/devtools/front_end/JavaScriptFormatter.js b/Source/devtools/front_end/JavaScriptFormatter.js
index 9536289dd7376b40add3eb58fba400b490f3a8ad..ba5296731604d6513f2ad00e854a852e6159b833 100644
--- a/Source/devtools/front_end/JavaScriptFormatter.js
+++ b/Source/devtools/front_end/JavaScriptFormatter.js
@@ -28,207 +28,12 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-function FormattedContentBuilder(content, mapping, originalOffset, formattedOffset, indentString)
-{
- this._originalContent = content;
- this._originalOffset = originalOffset;
- this._lastOriginalPosition = 0;
-
- this._formattedContent = [];
- this._formattedContentLength = 0;
- this._formattedOffset = formattedOffset;
- this._lastFormattedPosition = 0;
-
- this._mapping = mapping;
-
- this._lineNumber = 0;
- this._nestingLevel = 0;
- this._indentString = indentString;
- this._cachedIndents = {};
-}
-
-FormattedContentBuilder.prototype = {
- addToken: function(token)
- {
- for (var i = 0; i < token.comments_before.length; ++i)
- this._addComment(token.comments_before[i]);
-
- while (this._lineNumber < token.line) {
- this._addText("\n");
- this._addIndent();
- this._needNewLine = false;
- this._lineNumber += 1;
- }
-
- if (this._needNewLine) {
- this._addText("\n");
- this._addIndent();
- this._needNewLine = false;
- }
-
- this._addMappingIfNeeded(token.pos);
- this._addText(this._originalContent.substring(token.pos, token.endPos));
- this._lineNumber = token.endLine;
- },
-
- addSpace: function()
- {
- this._addText(" ");
- },
-
- addNewLine: function()
- {
- this._needNewLine = true;
- },
-
- increaseNestingLevel: function()
- {
- this._nestingLevel += 1;
- },
-
- decreaseNestingLevel: function()
- {
- this._nestingLevel -= 1;
- },
-
- content: function()
- {
- return this._formattedContent.join("");
- },
-
- mapping: function()
- {
- return { original: this._originalPositions, formatted: this._formattedPositions };
- },
-
- _addIndent: function()
- {
- if (this._cachedIndents[this._nestingLevel]) {
- this._addText(this._cachedIndents[this._nestingLevel]);
- return;
- }
-
- var fullIndent = "";
- for (var i = 0; i < this._nestingLevel; ++i)
- fullIndent += this._indentString;
- this._addText(fullIndent);
-
- // Cache a maximum of 20 nesting level indents.
- if (this._nestingLevel <= 20)
- this._cachedIndents[this._nestingLevel] = fullIndent;
- },
-
- _addComment: function(comment)
- {
- if (this._lineNumber < comment.line) {
- for (var j = this._lineNumber; j < comment.line; ++j)
- this._addText("\n");
- this._lineNumber = comment.line;
- this._needNewLine = false;
- this._addIndent();
- } else
- this.addSpace();
-
- this._addMappingIfNeeded(comment.pos);
- if (comment.type === "comment1")
- this._addText("//");
- else
- this._addText("/*");
-
- this._addText(comment.value);
-
- if (comment.type !== "comment1") {
- this._addText("*/");
- var position;
- while ((position = comment.value.indexOf("\n", position + 1)) !== -1)
- this._lineNumber += 1;
- }
- },
-
- _addText: function(text)
- {
- this._formattedContent.push(text);
- this._formattedContentLength += text.length;
- },
-
- _addMappingIfNeeded: function(originalPosition)
- {
- if (originalPosition - this._lastOriginalPosition === this._formattedContentLength - this._lastFormattedPosition)
- return;
- this._mapping.original.push(this._originalOffset + originalPosition);
- this._lastOriginalPosition = originalPosition;
- this._mapping.formatted.push(this._formattedOffset + this._formattedContentLength);
- this._lastFormattedPosition = this._formattedContentLength;
- }
-}
-
-var tokens = [
- ["EOS"],
- ["LPAREN", "("], ["RPAREN", ")"], ["LBRACK", "["], ["RBRACK", "]"], ["LBRACE", "{"], ["RBRACE", "}"], ["COLON", ":"], ["SEMICOLON", ";"], ["PERIOD", "."], ["CONDITIONAL", "?"],
- ["INC", "++"], ["DEC", "--"],
- ["ASSIGN", "="], ["ASSIGN_BIT_OR", "|="], ["ASSIGN_BIT_XOR", "^="], ["ASSIGN_BIT_AND", "&="], ["ASSIGN_SHL", "<<="], ["ASSIGN_SAR", ">>="], ["ASSIGN_SHR", ">>>="],
- ["ASSIGN_ADD", "+="], ["ASSIGN_SUB", "-="], ["ASSIGN_MUL", "*="], ["ASSIGN_DIV", "/="], ["ASSIGN_MOD", "%="],
- ["COMMA", ","], ["OR", "||"], ["AND", "&&"], ["BIT_OR", "|"], ["BIT_XOR", "^"], ["BIT_AND", "&"], ["SHL", "<<"], ["SAR", ">>"], ["SHR", ">>>"],
- ["ADD", "+"], ["SUB", "-"], ["MUL", "*"], ["DIV", "/"], ["MOD", "%"],
- ["EQ", "=="], ["NE", "!="], ["EQ_STRICT", "==="], ["NE_STRICT", "!=="], ["LT", "<"], ["GT", ">"], ["LTE", "<="], ["GTE", ">="],
- ["INSTANCEOF", "instanceof"], ["IN", "in"], ["NOT", "!"], ["BIT_NOT", "~"], ["DELETE", "delete"], ["TYPEOF", "typeof"], ["VOID", "void"],
- ["BREAK", "break"], ["CASE", "case"], ["CATCH", "catch"], ["CONTINUE", "continue"], ["DEBUGGER", "debugger"], ["DEFAULT", "default"], ["DO", "do"], ["ELSE", "else"], ["FINALLY", "finally"],
- ["FOR", "for"], ["FUNCTION", "function"], ["IF", "if"], ["NEW", "new"], ["RETURN", "return"], ["SWITCH", "switch"], ["THIS", "this"], ["THROW", "throw"], ["TRY", "try"], ["VAR", "var"],
- ["WHILE", "while"], ["WITH", "with"], ["NULL_LITERAL", "null"], ["TRUE_LITERAL", "true"], ["FALSE_LITERAL", "false"], ["NUMBER"], ["STRING"], ["IDENTIFIER"], ["CONST", "const"]
-];
-
-var Tokens = {};
-for (var i = 0; i < tokens.length; ++i)
- Tokens[tokens[i][0]] = i;
-
-var TokensByValue = {};
-for (var i = 0; i < tokens.length; ++i) {
- if (tokens[i][1])
- TokensByValue[tokens[i][1]] = i;
-}
-
-var TokensByType = {
- "eof": Tokens.EOS,
- "name": Tokens.IDENTIFIER,
- "num": Tokens.NUMBER,
- "regexp": Tokens.DIV,
- "string": Tokens.STRING
-};
-
-function Tokenizer(content)
-{
- this._readNextToken = parse.tokenizer(content);
- this._state = this._readNextToken.context();
-}
-
-Tokenizer.prototype = {
- content: function()
- {
- return this._state.text;
- },
-
- next: function(forceRegexp)
- {
- var uglifyToken = this._readNextToken(forceRegexp);
- uglifyToken.endPos = this._state.pos;
- uglifyToken.endLine = this._state.line;
- uglifyToken.token = this._convertUglifyToken(uglifyToken);
- return uglifyToken;
- },
-
- _convertUglifyToken: function(uglifyToken)
- {
- var token = TokensByType[uglifyToken.type];
- if (typeof token === "number")
- return token;
- token = TokensByValue[uglifyToken.value];
- if (typeof token === "number")
- return token;
- throw "Unknown token type " + uglifyToken.type;
- }
-}
-
-function JavaScriptFormatter(tokenizer, builder)
+/**
+ * @constructor
+ * @param {FormatterWorker.JavaScriptTokenizer} tokenizer
+ * @param {FormatterWorker.JavaScriptFormattedContentBuilder} builder
+ */
+FormatterWorker.JavaScriptFormatter = function(tokenizer, builder)
{
this._tokenizer = tokenizer;
this._builder = builder;
@@ -236,21 +41,27 @@ function JavaScriptFormatter(tokenizer, builder)
this._nextToken = this._tokenizer.next();
}
-JavaScriptFormatter.prototype = {
+FormatterWorker.JavaScriptFormatter.prototype = {
format: function()
{
- this._parseSourceElements(Tokens.EOS);
- this._consume(Tokens.EOS);
+ this._parseSourceElements(FormatterWorker.JavaScriptTokens.EOS);
+ this._consume(FormatterWorker.JavaScriptTokens.EOS);
},
+ /**
+ * @return {string}
+ */
_peek: function()
{
return this._nextToken.token;
},
+ /**
+ * @return {string}
+ */
_next: function()
{
- if (this._token && this._token.token === Tokens.EOS)
+ if (this._token && this._token.token === FormatterWorker.JavaScriptTokens.EOS)
throw "Unexpected EOS token";
this._builder.addToken(this._nextToken);
@@ -260,6 +71,9 @@ JavaScriptFormatter.prototype = {
return this._token.token;
},
+ /**
+ * @param {string} token
+ */
_consume: function(token)
{
var next = this._next();
@@ -267,6 +81,9 @@ JavaScriptFormatter.prototype = {
throw "Unexpected token in consume: expected " + token + ", actual " + next;
},
+ /**
+ * @param {string} token
+ */
_expect: function(token)
{
var next = this._next();
@@ -276,15 +93,21 @@ JavaScriptFormatter.prototype = {
_expectSemicolon: function()
{
- if (this._peek() === Tokens.SEMICOLON)
- this._consume(Tokens.SEMICOLON);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.SEMICOLON)
+ this._consume(FormatterWorker.JavaScriptTokens.SEMICOLON);
},
+ /**
+ * @return {boolean}
+ */
_hasLineTerminatorBeforeNext: function()
{
return this._nextToken.nlb;
},
+ /**
+ * @param {string} endToken
+ */
_parseSourceElements: function(endToken)
{
while (this._peek() !== endToken) {
@@ -295,7 +118,7 @@ JavaScriptFormatter.prototype = {
_parseStatementOrBlock: function()
{
- if (this._peek() === Tokens.LBRACE) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.LBRACE) {
this._builder.addSpace();
this._parseBlock();
return true;
@@ -310,38 +133,38 @@ JavaScriptFormatter.prototype = {
_parseStatement: function()
{
switch (this._peek()) {
- case Tokens.LBRACE:
+ case FormatterWorker.JavaScriptTokens.LBRACE:
return this._parseBlock();
- case Tokens.CONST:
- case Tokens.VAR:
+ case FormatterWorker.JavaScriptTokens.CONST:
+ case FormatterWorker.JavaScriptTokens.VAR:
return this._parseVariableStatement();
- case Tokens.SEMICOLON:
+ case FormatterWorker.JavaScriptTokens.SEMICOLON:
return this._next();
- case Tokens.IF:
+ case FormatterWorker.JavaScriptTokens.IF:
return this._parseIfStatement();
- case Tokens.DO:
+ case FormatterWorker.JavaScriptTokens.DO:
return this._parseDoWhileStatement();
- case Tokens.WHILE:
+ case FormatterWorker.JavaScriptTokens.WHILE:
return this._parseWhileStatement();
- case Tokens.FOR:
+ case FormatterWorker.JavaScriptTokens.FOR:
return this._parseForStatement();
- case Tokens.CONTINUE:
+ case FormatterWorker.JavaScriptTokens.CONTINUE:
return this._parseContinueStatement();
- case Tokens.BREAK:
+ case FormatterWorker.JavaScriptTokens.BREAK:
return this._parseBreakStatement();
- case Tokens.RETURN:
+ case FormatterWorker.JavaScriptTokens.RETURN:
return this._parseReturnStatement();
- case Tokens.WITH:
+ case FormatterWorker.JavaScriptTokens.WITH:
return this._parseWithStatement();
- case Tokens.SWITCH:
+ case FormatterWorker.JavaScriptTokens.SWITCH:
return this._parseSwitchStatement();
- case Tokens.THROW:
+ case FormatterWorker.JavaScriptTokens.THROW:
return this._parseThrowStatement();
- case Tokens.TRY:
+ case FormatterWorker.JavaScriptTokens.TRY:
return this._parseTryStatement();
- case Tokens.FUNCTION:
+ case FormatterWorker.JavaScriptTokens.FUNCTION:
return this._parseFunctionDeclaration();
- case Tokens.DEBUGGER:
+ case FormatterWorker.JavaScriptTokens.DEBUGGER:
return this._parseDebuggerStatement();
default:
return this._parseExpressionOrLabelledStatement();
@@ -350,23 +173,23 @@ JavaScriptFormatter.prototype = {
_parseFunctionDeclaration: function()
{
- this._expect(Tokens.FUNCTION);
+ this._expect(FormatterWorker.JavaScriptTokens.FUNCTION);
this._builder.addSpace();
- this._expect(Tokens.IDENTIFIER);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
this._parseFunctionLiteral()
},
_parseBlock: function()
{
- this._expect(Tokens.LBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.LBRACE);
this._builder.addNewLine();
this._builder.increaseNestingLevel();
- while (this._peek() !== Tokens.RBRACE) {
+ while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) {
this._parseStatement();
this._builder.addNewLine();
}
this._builder.decreaseNestingLevel();
- this._expect(Tokens.RBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACE);
},
_parseVariableStatement: function()
@@ -377,34 +200,34 @@ JavaScriptFormatter.prototype = {
_parseVariableDeclarations: function()
{
- if (this._peek() === Tokens.VAR)
- this._consume(Tokens.VAR);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.VAR)
+ this._consume(FormatterWorker.JavaScriptTokens.VAR);
else
- this._consume(Tokens.CONST)
+ this._consume(FormatterWorker.JavaScriptTokens.CONST)
this._builder.addSpace();
var isFirstVariable = true;
do {
if (!isFirstVariable) {
- this._consume(Tokens.COMMA);
+ this._consume(FormatterWorker.JavaScriptTokens.COMMA);
this._builder.addSpace();
}
isFirstVariable = false;
- this._expect(Tokens.IDENTIFIER);
- if (this._peek() === Tokens.ASSIGN) {
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.ASSIGN) {
this._builder.addSpace();
- this._consume(Tokens.ASSIGN);
+ this._consume(FormatterWorker.JavaScriptTokens.ASSIGN);
this._builder.addSpace();
this._parseAssignmentExpression();
}
- } while (this._peek() === Tokens.COMMA);
+ } while (this._peek() === FormatterWorker.JavaScriptTokens.COMMA);
},
_parseExpressionOrLabelledStatement: function()
{
this._parseExpression();
- if (this._peek() === Tokens.COLON) {
- this._expect(Tokens.COLON);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.COLON) {
+ this._expect(FormatterWorker.JavaScriptTokens.COLON);
this._builder.addSpace();
this._parseStatement();
}
@@ -413,21 +236,21 @@ JavaScriptFormatter.prototype = {
_parseIfStatement: function()
{
- this._expect(Tokens.IF);
+ this._expect(FormatterWorker.JavaScriptTokens.IF);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
var isBlock = this._parseStatementOrBlock();
- if (this._peek() === Tokens.ELSE) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.ELSE) {
if (isBlock)
this._builder.addSpace();
else
this._builder.addNewLine();
this._next();
- if (this._peek() === Tokens.IF) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.IF) {
this._builder.addSpace();
this._parseStatement();
} else
@@ -437,31 +260,31 @@ JavaScriptFormatter.prototype = {
_parseContinueStatement: function()
{
- this._expect(Tokens.CONTINUE);
+ this._expect(FormatterWorker.JavaScriptTokens.CONTINUE);
var token = this._peek();
- if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) {
+ if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) {
this._builder.addSpace();
- this._expect(Tokens.IDENTIFIER);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
}
this._expectSemicolon();
},
_parseBreakStatement: function()
{
- this._expect(Tokens.BREAK);
+ this._expect(FormatterWorker.JavaScriptTokens.BREAK);
var token = this._peek();
- if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) {
+ if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) {
this._builder.addSpace();
- this._expect(Tokens.IDENTIFIER);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
}
this._expectSemicolon();
},
_parseReturnStatement: function()
{
- this._expect(Tokens.RETURN);
+ this._expect(FormatterWorker.JavaScriptTokens.RETURN);
var token = this._peek();
- if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) {
+ if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) {
this._builder.addSpace();
this._parseExpression();
}
@@ -470,27 +293,27 @@ JavaScriptFormatter.prototype = {
_parseWithStatement: function()
{
- this._expect(Tokens.WITH);
+ this._expect(FormatterWorker.JavaScriptTokens.WITH);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._parseStatementOrBlock();
},
_parseCaseClause: function()
{
- if (this._peek() === Tokens.CASE) {
- this._expect(Tokens.CASE);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.CASE) {
+ this._expect(FormatterWorker.JavaScriptTokens.CASE);
this._builder.addSpace();
this._parseExpression();
} else
- this._expect(Tokens.DEFAULT);
- this._expect(Tokens.COLON);
+ this._expect(FormatterWorker.JavaScriptTokens.DEFAULT);
+ this._expect(FormatterWorker.JavaScriptTokens.COLON);
this._builder.addNewLine();
this._builder.increaseNestingLevel();
- while (this._peek() !== Tokens.CASE && this._peek() !== Tokens.DEFAULT && this._peek() !== Tokens.RBRACE) {
+ while (this._peek() !== FormatterWorker.JavaScriptTokens.CASE && this._peek() !== FormatterWorker.JavaScriptTokens.DEFAULT && this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) {
this._parseStatement();
this._builder.addNewLine();
}
@@ -499,25 +322,25 @@ JavaScriptFormatter.prototype = {
_parseSwitchStatement: function()
{
- this._expect(Tokens.SWITCH);
+ this._expect(FormatterWorker.JavaScriptTokens.SWITCH);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._builder.addSpace();
- this._expect(Tokens.LBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.LBRACE);
this._builder.addNewLine();
this._builder.increaseNestingLevel();
- while (this._peek() !== Tokens.RBRACE)
+ while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE)
this._parseCaseClause();
this._builder.decreaseNestingLevel();
- this._expect(Tokens.RBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACE);
},
_parseThrowStatement: function()
{
- this._expect(Tokens.THROW);
+ this._expect(FormatterWorker.JavaScriptTokens.THROW);
this._builder.addSpace();
this._parseExpression();
this._expectSemicolon();
@@ -525,25 +348,25 @@ JavaScriptFormatter.prototype = {
_parseTryStatement: function()
{
- this._expect(Tokens.TRY);
+ this._expect(FormatterWorker.JavaScriptTokens.TRY);
this._builder.addSpace();
this._parseBlock();
var token = this._peek();
- if (token === Tokens.CATCH) {
+ if (token === FormatterWorker.JavaScriptTokens.CATCH) {
this._builder.addSpace();
- this._consume(Tokens.CATCH);
+ this._consume(FormatterWorker.JavaScriptTokens.CATCH);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
- this._expect(Tokens.IDENTIFIER);
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._builder.addSpace();
this._parseBlock();
token = this._peek();
}
- if (token === Tokens.FINALLY) {
- this._consume(Tokens.FINALLY);
+ if (token === FormatterWorker.JavaScriptTokens.FINALLY) {
+ this._consume(FormatterWorker.JavaScriptTokens.FINALLY);
this._builder.addSpace();
this._parseBlock();
}
@@ -551,41 +374,41 @@ JavaScriptFormatter.prototype = {
_parseDoWhileStatement: function()
{
- this._expect(Tokens.DO);
+ this._expect(FormatterWorker.JavaScriptTokens.DO);
var isBlock = this._parseStatementOrBlock();
if (isBlock)
this._builder.addSpace();
else
this._builder.addNewLine();
- this._expect(Tokens.WHILE);
+ this._expect(FormatterWorker.JavaScriptTokens.WHILE);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._expectSemicolon();
},
_parseWhileStatement: function()
{
- this._expect(Tokens.WHILE);
+ this._expect(FormatterWorker.JavaScriptTokens.WHILE);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._parseStatementOrBlock();
},
_parseForStatement: function()
{
- this._expect(Tokens.FOR);
+ this._expect(FormatterWorker.JavaScriptTokens.FOR);
this._builder.addSpace();
- this._expect(Tokens.LPAREN);
- if (this._peek() !== Tokens.SEMICOLON) {
- if (this._peek() === Tokens.VAR || this._peek() === Tokens.CONST) {
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.SEMICOLON) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.VAR || this._peek() === FormatterWorker.JavaScriptTokens.CONST) {
this._parseVariableDeclarations();
- if (this._peek() === Tokens.IN) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.IN) {
this._builder.addSpace();
- this._consume(Tokens.IN);
+ this._consume(FormatterWorker.JavaScriptTokens.IN);
this._builder.addSpace();
this._parseExpression();
}
@@ -593,17 +416,17 @@ JavaScriptFormatter.prototype = {
this._parseExpression();
}
- if (this._peek() !== Tokens.RPAREN) {
- this._expect(Tokens.SEMICOLON);
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.RPAREN) {
+ this._expect(FormatterWorker.JavaScriptTokens.SEMICOLON);
this._builder.addSpace();
- if (this._peek() !== Tokens.SEMICOLON)
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.SEMICOLON)
this._parseExpression();
- this._expect(Tokens.SEMICOLON);
+ this._expect(FormatterWorker.JavaScriptTokens.SEMICOLON);
this._builder.addSpace();
- if (this._peek() !== Tokens.RPAREN)
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.RPAREN)
this._parseExpression();
}
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._parseStatementOrBlock();
},
@@ -611,8 +434,8 @@ JavaScriptFormatter.prototype = {
_parseExpression: function()
{
this._parseAssignmentExpression();
- while (this._peek() === Tokens.COMMA) {
- this._expect(Tokens.COMMA);
+ while (this._peek() === FormatterWorker.JavaScriptTokens.COMMA) {
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
this._builder.addSpace();
this._parseAssignmentExpression();
}
@@ -622,7 +445,7 @@ JavaScriptFormatter.prototype = {
{
this._parseConditionalExpression();
var token = this._peek();
- if (Tokens.ASSIGN <= token && token <= Tokens.ASSIGN_MOD) {
+ if (FormatterWorker.JavaScriptTokens.ASSIGN <= token && token <= FormatterWorker.JavaScriptTokens.ASSIGN_MOD) {
this._builder.addSpace();
this._next();
this._builder.addSpace();
@@ -633,13 +456,13 @@ JavaScriptFormatter.prototype = {
_parseConditionalExpression: function()
{
this._parseBinaryExpression();
- if (this._peek() === Tokens.CONDITIONAL) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.CONDITIONAL) {
this._builder.addSpace();
- this._consume(Tokens.CONDITIONAL);
+ this._consume(FormatterWorker.JavaScriptTokens.CONDITIONAL);
this._builder.addSpace();
this._parseAssignmentExpression();
this._builder.addSpace();
- this._expect(Tokens.COLON);
+ this._expect(FormatterWorker.JavaScriptTokens.COLON);
this._builder.addSpace();
this._parseAssignmentExpression();
}
@@ -649,7 +472,7 @@ JavaScriptFormatter.prototype = {
{
this._parseUnaryExpression();
var token = this._peek();
- while (Tokens.OR <= token && token <= Tokens.IN) {
+ while (FormatterWorker.JavaScriptTokens.OR <= token && token <= FormatterWorker.JavaScriptTokens.IN) {
this._builder.addSpace();
this._next();
this._builder.addSpace();
@@ -661,9 +484,9 @@ JavaScriptFormatter.prototype = {
_parseUnaryExpression: function()
{
var token = this._peek();
- if ((Tokens.NOT <= token && token <= Tokens.VOID) || token === Tokens.ADD || token === Tokens.SUB || token === Tokens.INC || token === Tokens.DEC) {
+ if ((FormatterWorker.JavaScriptTokens.NOT <= token && token <= FormatterWorker.JavaScriptTokens.VOID) || token === FormatterWorker.JavaScriptTokens.ADD || token === FormatterWorker.JavaScriptTokens.SUB || token === FormatterWorker.JavaScriptTokens.INC || token === FormatterWorker.JavaScriptTokens.DEC) {
this._next();
- if (token === Tokens.DELETE || token === Tokens.TYPEOF || token === Tokens.VOID)
+ if (token === FormatterWorker.JavaScriptTokens.DELETE || token === FormatterWorker.JavaScriptTokens.TYPEOF || token === FormatterWorker.JavaScriptTokens.VOID)
this._builder.addSpace();
this._parseUnaryExpression();
} else
@@ -674,32 +497,32 @@ JavaScriptFormatter.prototype = {
{
this._parseLeftHandSideExpression();
var token = this._peek();
- if (!this._hasLineTerminatorBeforeNext() && (token === Tokens.INC || token === Tokens.DEC))
+ if (!this._hasLineTerminatorBeforeNext() && (token === FormatterWorker.JavaScriptTokens.INC || token === FormatterWorker.JavaScriptTokens.DEC))
this._next();
},
_parseLeftHandSideExpression: function()
{
- if (this._peek() === Tokens.NEW)
+ if (this._peek() === FormatterWorker.JavaScriptTokens.NEW)
this._parseNewExpression();
else
this._parseMemberExpression();
while (true) {
switch (this._peek()) {
- case Tokens.LBRACK:
- this._consume(Tokens.LBRACK);
+ case FormatterWorker.JavaScriptTokens.LBRACK:
+ this._consume(FormatterWorker.JavaScriptTokens.LBRACK);
this._parseExpression();
- this._expect(Tokens.RBRACK);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACK);
break;
- case Tokens.LPAREN:
+ case FormatterWorker.JavaScriptTokens.LPAREN:
this._parseArguments();
break;
- case Tokens.PERIOD:
- this._consume(Tokens.PERIOD);
- this._expect(Tokens.IDENTIFIER);
+ case FormatterWorker.JavaScriptTokens.PERIOD:
+ this._consume(FormatterWorker.JavaScriptTokens.PERIOD);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
break;
default:
@@ -710,9 +533,9 @@ JavaScriptFormatter.prototype = {
_parseNewExpression: function()
{
- this._expect(Tokens.NEW);
+ this._expect(FormatterWorker.JavaScriptTokens.NEW);
this._builder.addSpace();
- if (this._peek() === Tokens.NEW)
+ if (this._peek() === FormatterWorker.JavaScriptTokens.NEW)
this._parseNewExpression();
else
this._parseMemberExpression();
@@ -720,11 +543,11 @@ JavaScriptFormatter.prototype = {
_parseMemberExpression: function()
{
- if (this._peek() === Tokens.FUNCTION) {
- this._expect(Tokens.FUNCTION);
- if (this._peek() === Tokens.IDENTIFIER) {
+ if (this._peek() === FormatterWorker.JavaScriptTokens.FUNCTION) {
+ this._expect(FormatterWorker.JavaScriptTokens.FUNCTION);
+ if (this._peek() === FormatterWorker.JavaScriptTokens.IDENTIFIER) {
this._builder.addSpace();
- this._expect(Tokens.IDENTIFIER);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
}
this._parseFunctionLiteral();
} else
@@ -732,18 +555,18 @@ JavaScriptFormatter.prototype = {
while (true) {
switch (this._peek()) {
- case Tokens.LBRACK:
- this._consume(Tokens.LBRACK);
+ case FormatterWorker.JavaScriptTokens.LBRACK:
+ this._consume(FormatterWorker.JavaScriptTokens.LBRACK);
this._parseExpression();
- this._expect(Tokens.RBRACK);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACK);
break;
- case Tokens.PERIOD:
- this._consume(Tokens.PERIOD);
- this._expect(Tokens.IDENTIFIER);
+ case FormatterWorker.JavaScriptTokens.PERIOD:
+ this._consume(FormatterWorker.JavaScriptTokens.PERIOD);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
break;
- case Tokens.LPAREN:
+ case FormatterWorker.JavaScriptTokens.LPAREN:
this._parseArguments();
break;
@@ -755,39 +578,39 @@ JavaScriptFormatter.prototype = {
_parseDebuggerStatement: function()
{
- this._expect(Tokens.DEBUGGER);
+ this._expect(FormatterWorker.JavaScriptTokens.DEBUGGER);
this._expectSemicolon();
},
_parsePrimaryExpression: function()
{
switch (this._peek()) {
- case Tokens.THIS:
- return this._consume(Tokens.THIS);
- case Tokens.NULL_LITERAL:
- return this._consume(Tokens.NULL_LITERAL);
- case Tokens.TRUE_LITERAL:
- return this._consume(Tokens.TRUE_LITERAL);
- case Tokens.FALSE_LITERAL:
- return this._consume(Tokens.FALSE_LITERAL);
- case Tokens.IDENTIFIER:
- return this._consume(Tokens.IDENTIFIER);
- case Tokens.NUMBER:
- return this._consume(Tokens.NUMBER);
- case Tokens.STRING:
- return this._consume(Tokens.STRING);
- case Tokens.ASSIGN_DIV:
+ case FormatterWorker.JavaScriptTokens.THIS:
+ return this._consume(FormatterWorker.JavaScriptTokens.THIS);
+ case FormatterWorker.JavaScriptTokens.NULL_LITERAL:
+ return this._consume(FormatterWorker.JavaScriptTokens.NULL_LITERAL);
+ case FormatterWorker.JavaScriptTokens.TRUE_LITERAL:
+ return this._consume(FormatterWorker.JavaScriptTokens.TRUE_LITERAL);
+ case FormatterWorker.JavaScriptTokens.FALSE_LITERAL:
+ return this._consume(FormatterWorker.JavaScriptTokens.FALSE_LITERAL);
+ case FormatterWorker.JavaScriptTokens.IDENTIFIER:
+ return this._consume(FormatterWorker.JavaScriptTokens.IDENTIFIER);
+ case FormatterWorker.JavaScriptTokens.NUMBER:
+ return this._consume(FormatterWorker.JavaScriptTokens.NUMBER);
+ case FormatterWorker.JavaScriptTokens.STRING:
+ return this._consume(FormatterWorker.JavaScriptTokens.STRING);
+ case FormatterWorker.JavaScriptTokens.ASSIGN_DIV:
return this._parseRegExpLiteral();
- case Tokens.DIV:
+ case FormatterWorker.JavaScriptTokens.DIV:
return this._parseRegExpLiteral();
- case Tokens.LBRACK:
+ case FormatterWorker.JavaScriptTokens.LBRACK:
return this._parseArrayLiteral();
- case Tokens.LBRACE:
+ case FormatterWorker.JavaScriptTokens.LBRACE:
return this._parseObjectLiteral();
- case Tokens.LPAREN:
- this._consume(Tokens.LPAREN);
+ case FormatterWorker.JavaScriptTokens.LPAREN:
+ this._consume(FormatterWorker.JavaScriptTokens.LPAREN);
this._parseExpression();
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
return;
default:
return this._next();
@@ -796,26 +619,26 @@ JavaScriptFormatter.prototype = {
_parseArrayLiteral: function()
{
- this._expect(Tokens.LBRACK);
+ this._expect(FormatterWorker.JavaScriptTokens.LBRACK);
this._builder.increaseNestingLevel();
- while (this._peek() !== Tokens.RBRACK) {
- if (this._peek() !== Tokens.COMMA)
+ while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACK) {
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.COMMA)
this._parseAssignmentExpression();
- if (this._peek() !== Tokens.RBRACK) {
- this._expect(Tokens.COMMA);
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACK) {
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
this._builder.addSpace();
}
}
this._builder.decreaseNestingLevel();
- this._expect(Tokens.RBRACK);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACK);
},
_parseObjectLiteralGetSet: function()
{
var token = this._peek();
- if (token === Tokens.IDENTIFIER || token === Tokens.NUMBER || token === Tokens.STRING ||
- Tokens.DELETE <= token && token <= Tokens.FALSE_LITERAL ||
- token === Tokens.INSTANCEOF || token === Tokens.IN || token === Tokens.CONST) {
+ if (token === FormatterWorker.JavaScriptTokens.IDENTIFIER || token === FormatterWorker.JavaScriptTokens.NUMBER || token === FormatterWorker.JavaScriptTokens.STRING ||
+ FormatterWorker.JavaScriptTokens.DELETE <= token && token <= FormatterWorker.JavaScriptTokens.FALSE_LITERAL ||
+ token === FormatterWorker.JavaScriptTokens.INSTANCEOF || token === FormatterWorker.JavaScriptTokens.IN || token === FormatterWorker.JavaScriptTokens.CONST) {
this._next();
this._parseFunctionLiteral();
}
@@ -823,46 +646,46 @@ JavaScriptFormatter.prototype = {
_parseObjectLiteral: function()
{
- this._expect(Tokens.LBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.LBRACE);
this._builder.increaseNestingLevel();
- while (this._peek() !== Tokens.RBRACE) {
+ while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) {
var token = this._peek();
switch (token) {
- case Tokens.IDENTIFIER:
- this._consume(Tokens.IDENTIFIER);
+ case FormatterWorker.JavaScriptTokens.IDENTIFIER:
+ this._consume(FormatterWorker.JavaScriptTokens.IDENTIFIER);
var name = this._token.value;
- if ((name === "get" || name === "set") && this._peek() !== Tokens.COLON) {
+ if ((name === "get" || name === "set") && this._peek() !== FormatterWorker.JavaScriptTokens.COLON) {
this._builder.addSpace();
this._parseObjectLiteralGetSet();
- if (this._peek() !== Tokens.RBRACE) {
- this._expect(Tokens.COMMA);
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) {
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
}
continue;
}
break;
- case Tokens.STRING:
- this._consume(Tokens.STRING);
+ case FormatterWorker.JavaScriptTokens.STRING:
+ this._consume(FormatterWorker.JavaScriptTokens.STRING);
break;
- case Tokens.NUMBER:
- this._consume(Tokens.NUMBER);
+ case FormatterWorker.JavaScriptTokens.NUMBER:
+ this._consume(FormatterWorker.JavaScriptTokens.NUMBER);
break;
default:
this._next();
}
- this._expect(Tokens.COLON);
+ this._expect(FormatterWorker.JavaScriptTokens.COLON);
this._builder.addSpace();
this._parseAssignmentExpression();
- if (this._peek() !== Tokens.RBRACE) {
- this._expect(Tokens.COMMA);
+ if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) {
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
}
}
this._builder.decreaseNestingLevel();
- this._expect(Tokens.RBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACE);
},
_parseRegExpLiteral: function()
@@ -877,39 +700,325 @@ JavaScriptFormatter.prototype = {
_parseArguments: function()
{
- this._expect(Tokens.LPAREN);
- var done = (this._peek() === Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
+ var done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN);
while (!done) {
this._parseAssignmentExpression();
- done = (this._peek() === Tokens.RPAREN);
+ done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN);
if (!done) {
- this._expect(Tokens.COMMA);
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
this._builder.addSpace();
}
}
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
},
_parseFunctionLiteral: function()
{
- this._expect(Tokens.LPAREN);
- var done = (this._peek() === Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.LPAREN);
+ var done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN);
while (!done) {
- this._expect(Tokens.IDENTIFIER);
- done = (this._peek() === Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER);
+ done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN);
if (!done) {
- this._expect(Tokens.COMMA);
+ this._expect(FormatterWorker.JavaScriptTokens.COMMA);
this._builder.addSpace();
}
}
- this._expect(Tokens.RPAREN);
+ this._expect(FormatterWorker.JavaScriptTokens.RPAREN);
this._builder.addSpace();
- this._expect(Tokens.LBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.LBRACE);
this._builder.addNewLine();
this._builder.increaseNestingLevel();
- this._parseSourceElements(Tokens.RBRACE);
+ this._parseSourceElements(FormatterWorker.JavaScriptTokens.RBRACE);
this._builder.decreaseNestingLevel();
- this._expect(Tokens.RBRACE);
+ this._expect(FormatterWorker.JavaScriptTokens.RBRACE);
+ }
+}
+
+/**
+ * @constructor
+ * @param {string} content
+ * @param {{original: Array.<number>, formatted: Array.<number>}} mapping
+ * @param {number} originalOffset
+ * @param {number} formattedOffset
+ * @param {string} indentString
+ */
+FormatterWorker.JavaScriptFormattedContentBuilder = function(content, mapping, originalOffset, formattedOffset, indentString)
+{
+ this._originalContent = content;
+ this._originalOffset = originalOffset;
+ this._lastOriginalPosition = 0;
+
+ this._formattedContent = [];
+ this._formattedContentLength = 0;
+ this._formattedOffset = formattedOffset;
+ this._lastFormattedPosition = 0;
+
+ this._mapping = mapping;
+
+ this._lineNumber = 0;
+ this._nestingLevel = 0;
+ this._indentString = indentString;
+ this._cachedIndents = {};
+}
+
+FormatterWorker.JavaScriptFormattedContentBuilder.prototype = {
+ /**
+ * @param {{comments_before: Array.<string>, line: number, pos: number, endLine: number, nlb: boolean}} token
+ */
+ addToken: function(token)
+ {
+ for (var i = 0; i < token.comments_before.length; ++i)
+ this._addComment(token.comments_before[i]);
+
+ while (this._lineNumber < token.line) {
+ this._addText("\n");
+ this._addIndent();
+ this._needNewLine = false;
+ this._lineNumber += 1;
+ }
+
+ if (this._needNewLine) {
+ this._addText("\n");
+ this._addIndent();
+ this._needNewLine = false;
+ }
+
+ this._addMappingIfNeeded(token.pos);
+ this._addText(this._originalContent.substring(token.pos, token.endPos));
+ this._lineNumber = token.endLine;
+ },
+
+ addSpace: function()
+ {
+ this._addText(" ");
+ },
+
+ addNewLine: function()
+ {
+ this._needNewLine = true;
+ },
+
+ increaseNestingLevel: function()
+ {
+ this._nestingLevel += 1;
+ },
+
+ decreaseNestingLevel: function()
+ {
+ this._nestingLevel -= 1;
+ },
+
+ /**
+ * @return {string}
+ */
+ content: function()
+ {
+ return this._formattedContent.join("");
+ },
+
+ _addIndent: function()
+ {
+ if (this._cachedIndents[this._nestingLevel]) {
+ this._addText(this._cachedIndents[this._nestingLevel]);
+ return;
+ }
+
+ var fullIndent = "";
+ for (var i = 0; i < this._nestingLevel; ++i)
+ fullIndent += this._indentString;
+ this._addText(fullIndent);
+
+ // Cache a maximum of 20 nesting level indents.
+ if (this._nestingLevel <= 20)
+ this._cachedIndents[this._nestingLevel] = fullIndent;
+ },
+
+ _addComment: function(comment)
+ {
+ if (this._lineNumber < comment.line) {
+ for (var j = this._lineNumber; j < comment.line; ++j)
+ this._addText("\n");
+ this._lineNumber = comment.line;
+ this._needNewLine = false;
+ this._addIndent();
+ } else
+ this.addSpace();
+
+ this._addMappingIfNeeded(comment.pos);
+ if (comment.type === "comment1")
+ this._addText("//");
+ else
+ this._addText("/*");
+
+ this._addText(comment.value);
+
+ if (comment.type !== "comment1") {
+ this._addText("*/");
+ var position;
+ while ((position = comment.value.indexOf("\n", position + 1)) !== -1)
+ this._lineNumber += 1;
+ }
+ },
+
+ /**
+ * @param {string} text
+ */
+ _addText: function(text)
+ {
+ this._formattedContent.push(text);
+ this._formattedContentLength += text.length;
+ },
+
+ /**
+ * @param {number} originalPosition
+ */
+ _addMappingIfNeeded: function(originalPosition)
+ {
+ if (originalPosition - this._lastOriginalPosition === this._formattedContentLength - this._lastFormattedPosition)
+ return;
+ this._mapping.original.push(this._originalOffset + originalPosition);
+ this._lastOriginalPosition = originalPosition;
+ this._mapping.formatted.push(this._formattedOffset + this._formattedContentLength);
+ this._lastFormattedPosition = this._formattedContentLength;
+ }
+}
+
+FormatterWorker.JavaScriptTokens = {};
+FormatterWorker.JavaScriptTokensByValue = {};
+
+FormatterWorker.JavaScriptTokens.EOS = 0;
+FormatterWorker.JavaScriptTokens.LPAREN = FormatterWorker.JavaScriptTokensByValue["("] = 1;
+FormatterWorker.JavaScriptTokens.RPAREN = FormatterWorker.JavaScriptTokensByValue[")"] = 2;
+FormatterWorker.JavaScriptTokens.LBRACK = FormatterWorker.JavaScriptTokensByValue["["] = 3;
+FormatterWorker.JavaScriptTokens.RBRACK = FormatterWorker.JavaScriptTokensByValue["]"] = 4;
+FormatterWorker.JavaScriptTokens.LBRACE = FormatterWorker.JavaScriptTokensByValue["{"] = 5;
+FormatterWorker.JavaScriptTokens.RBRACE = FormatterWorker.JavaScriptTokensByValue["}"] = 6;
+FormatterWorker.JavaScriptTokens.COLON = FormatterWorker.JavaScriptTokensByValue[":"] = 7;
+FormatterWorker.JavaScriptTokens.SEMICOLON = FormatterWorker.JavaScriptTokensByValue[";"] = 8;
+FormatterWorker.JavaScriptTokens.PERIOD = FormatterWorker.JavaScriptTokensByValue["."] = 9;
+FormatterWorker.JavaScriptTokens.CONDITIONAL = FormatterWorker.JavaScriptTokensByValue["?"] = 10;
+FormatterWorker.JavaScriptTokens.INC = FormatterWorker.JavaScriptTokensByValue["++"] = 11;
+FormatterWorker.JavaScriptTokens.DEC = FormatterWorker.JavaScriptTokensByValue["--"] = 12;
+FormatterWorker.JavaScriptTokens.ASSIGN = FormatterWorker.JavaScriptTokensByValue["="] = 13;
+FormatterWorker.JavaScriptTokens.ASSIGN_BIT_OR = FormatterWorker.JavaScriptTokensByValue["|="] = 14;
+FormatterWorker.JavaScriptTokens.ASSIGN_BIT_XOR = FormatterWorker.JavaScriptTokensByValue["^="] = 15;
+FormatterWorker.JavaScriptTokens.ASSIGN_BIT_AND = FormatterWorker.JavaScriptTokensByValue["&="] = 16;
+FormatterWorker.JavaScriptTokens.ASSIGN_SHL = FormatterWorker.JavaScriptTokensByValue["<<="] = 17;
+FormatterWorker.JavaScriptTokens.ASSIGN_SAR = FormatterWorker.JavaScriptTokensByValue[">>="] = 18;
+FormatterWorker.JavaScriptTokens.ASSIGN_SHR = FormatterWorker.JavaScriptTokensByValue[">>>="] = 19;
+FormatterWorker.JavaScriptTokens.ASSIGN_ADD = FormatterWorker.JavaScriptTokensByValue["+="] = 20;
+FormatterWorker.JavaScriptTokens.ASSIGN_SUB = FormatterWorker.JavaScriptTokensByValue["-="] = 21;
+FormatterWorker.JavaScriptTokens.ASSIGN_MUL = FormatterWorker.JavaScriptTokensByValue["*="] = 22;
+FormatterWorker.JavaScriptTokens.ASSIGN_DIV = FormatterWorker.JavaScriptTokensByValue["/="] = 23;
+FormatterWorker.JavaScriptTokens.ASSIGN_MOD = FormatterWorker.JavaScriptTokensByValue["%="] = 24;
+FormatterWorker.JavaScriptTokens.COMMA = FormatterWorker.JavaScriptTokensByValue[","] = 25;
+FormatterWorker.JavaScriptTokens.OR = FormatterWorker.JavaScriptTokensByValue["||"] = 26;
+FormatterWorker.JavaScriptTokens.AND = FormatterWorker.JavaScriptTokensByValue["&&"] = 27;
+FormatterWorker.JavaScriptTokens.BIT_OR = FormatterWorker.JavaScriptTokensByValue["|"] = 28;
+FormatterWorker.JavaScriptTokens.BIT_XOR = FormatterWorker.JavaScriptTokensByValue["^"] = 29;
+FormatterWorker.JavaScriptTokens.BIT_AND = FormatterWorker.JavaScriptTokensByValue["&"] = 30;
+FormatterWorker.JavaScriptTokens.SHL = FormatterWorker.JavaScriptTokensByValue["<<"] = 31;
+FormatterWorker.JavaScriptTokens.SAR = FormatterWorker.JavaScriptTokensByValue[">>"] = 32;
+FormatterWorker.JavaScriptTokens.SHR = FormatterWorker.JavaScriptTokensByValue[">>>"] = 33;
+FormatterWorker.JavaScriptTokens.ADD = FormatterWorker.JavaScriptTokensByValue["+"] = 34;
+FormatterWorker.JavaScriptTokens.SUB = FormatterWorker.JavaScriptTokensByValue["-"] = 35;
+FormatterWorker.JavaScriptTokens.MUL = FormatterWorker.JavaScriptTokensByValue["*"] = 36;
+FormatterWorker.JavaScriptTokens.DIV = FormatterWorker.JavaScriptTokensByValue["/"] = 37;
+FormatterWorker.JavaScriptTokens.MOD = FormatterWorker.JavaScriptTokensByValue["%"] = 38;
+FormatterWorker.JavaScriptTokens.EQ = FormatterWorker.JavaScriptTokensByValue["=="] = 39;
+FormatterWorker.JavaScriptTokens.NE = FormatterWorker.JavaScriptTokensByValue["!="] = 40;
+FormatterWorker.JavaScriptTokens.EQ_STRICT = FormatterWorker.JavaScriptTokensByValue["==="] = 41;
+FormatterWorker.JavaScriptTokens.NE_STRICT = FormatterWorker.JavaScriptTokensByValue["!=="] = 42;
+FormatterWorker.JavaScriptTokens.LT = FormatterWorker.JavaScriptTokensByValue["<"] = 43;
+FormatterWorker.JavaScriptTokens.GT = FormatterWorker.JavaScriptTokensByValue[">"] = 44;
+FormatterWorker.JavaScriptTokens.LTE = FormatterWorker.JavaScriptTokensByValue["<="] = 45;
+FormatterWorker.JavaScriptTokens.GTE = FormatterWorker.JavaScriptTokensByValue[">="] = 46;
+FormatterWorker.JavaScriptTokens.INSTANCEOF = FormatterWorker.JavaScriptTokensByValue["instanceof"] = 47;
+FormatterWorker.JavaScriptTokens.IN = FormatterWorker.JavaScriptTokensByValue["in"] = 48;
+FormatterWorker.JavaScriptTokens.NOT = FormatterWorker.JavaScriptTokensByValue["!"] = 49;
+FormatterWorker.JavaScriptTokens.BIT_NOT = FormatterWorker.JavaScriptTokensByValue["~"] = 50;
+FormatterWorker.JavaScriptTokens.DELETE = FormatterWorker.JavaScriptTokensByValue["delete"] = 51;
+FormatterWorker.JavaScriptTokens.TYPEOF = FormatterWorker.JavaScriptTokensByValue["typeof"] = 52;
+FormatterWorker.JavaScriptTokens.VOID = FormatterWorker.JavaScriptTokensByValue["void"] = 53;
+FormatterWorker.JavaScriptTokens.BREAK = FormatterWorker.JavaScriptTokensByValue["break"] = 54;
+FormatterWorker.JavaScriptTokens.CASE = FormatterWorker.JavaScriptTokensByValue["case"] = 55;
+FormatterWorker.JavaScriptTokens.CATCH = FormatterWorker.JavaScriptTokensByValue["catch"] = 56;
+FormatterWorker.JavaScriptTokens.CONTINUE = FormatterWorker.JavaScriptTokensByValue["continue"] = 57;
+FormatterWorker.JavaScriptTokens.DEBUGGER = FormatterWorker.JavaScriptTokensByValue["debugger"] = 58;
+FormatterWorker.JavaScriptTokens.DEFAULT = FormatterWorker.JavaScriptTokensByValue["default"] = 59;
+FormatterWorker.JavaScriptTokens.DO = FormatterWorker.JavaScriptTokensByValue["do"] = 60;
+FormatterWorker.JavaScriptTokens.ELSE = FormatterWorker.JavaScriptTokensByValue["else"] = 61;
+FormatterWorker.JavaScriptTokens.FINALLY = FormatterWorker.JavaScriptTokensByValue["finally"] = 62;
+FormatterWorker.JavaScriptTokens.FOR = FormatterWorker.JavaScriptTokensByValue["for"] = 63;
+FormatterWorker.JavaScriptTokens.FUNCTION = FormatterWorker.JavaScriptTokensByValue["function"] = 64;
+FormatterWorker.JavaScriptTokens.IF = FormatterWorker.JavaScriptTokensByValue["if"] = 65;
+FormatterWorker.JavaScriptTokens.NEW = FormatterWorker.JavaScriptTokensByValue["new"] = 66;
+FormatterWorker.JavaScriptTokens.RETURN = FormatterWorker.JavaScriptTokensByValue["return"] = 67;
+FormatterWorker.JavaScriptTokens.SWITCH = FormatterWorker.JavaScriptTokensByValue["switch"] = 68;
+FormatterWorker.JavaScriptTokens.THIS = FormatterWorker.JavaScriptTokensByValue["this"] = 69;
+FormatterWorker.JavaScriptTokens.THROW = FormatterWorker.JavaScriptTokensByValue["throw"] = 70;
+FormatterWorker.JavaScriptTokens.TRY = FormatterWorker.JavaScriptTokensByValue["try"] = 71;
+FormatterWorker.JavaScriptTokens.VAR = FormatterWorker.JavaScriptTokensByValue["var"] = 72;
+FormatterWorker.JavaScriptTokens.WHILE = FormatterWorker.JavaScriptTokensByValue["while"] = 73;
+FormatterWorker.JavaScriptTokens.WITH = FormatterWorker.JavaScriptTokensByValue["with"] = 74;
+FormatterWorker.JavaScriptTokens.NULL_LITERAL = FormatterWorker.JavaScriptTokensByValue["null"] = 75;
+FormatterWorker.JavaScriptTokens.TRUE_LITERAL = FormatterWorker.JavaScriptTokensByValue["true"] = 76;
+FormatterWorker.JavaScriptTokens.FALSE_LITERAL = FormatterWorker.JavaScriptTokensByValue["false"] = 77;
+FormatterWorker.JavaScriptTokens.NUMBER = 78;
+FormatterWorker.JavaScriptTokens.STRING = 79;
+FormatterWorker.JavaScriptTokens.IDENTIFIER = 80;
+FormatterWorker.JavaScriptTokens.CONST = FormatterWorker.JavaScriptTokensByValue["const"] = 81;
+
+FormatterWorker.JavaScriptTokensByType = {
+ "eof": FormatterWorker.JavaScriptTokens.EOS,
+ "name": FormatterWorker.JavaScriptTokens.IDENTIFIER,
+ "num": FormatterWorker.JavaScriptTokens.NUMBER,
+ "regexp": FormatterWorker.JavaScriptTokens.DIV,
+ "string": FormatterWorker.JavaScriptTokens.STRING
+};
+
+/**
+ * @constructor
+ * @param {string} content
+ */
+FormatterWorker.JavaScriptTokenizer = function(content)
+{
+ this._readNextToken = parse.tokenizer(content);
+ this._state = this._readNextToken.context();
+}
+
+FormatterWorker.JavaScriptTokenizer.prototype = {
+ /**
+ * @return {string}
+ */
+ content: function()
+ {
+ return this._state.text;
+ },
+
+ /**
+ * @param {boolean=} forceRegexp
+ */
+ next: function(forceRegexp)
+ {
+ var uglifyToken = this._readNextToken(forceRegexp);
+ uglifyToken.endPos = this._state.pos;
+ uglifyToken.endLine = this._state.line;
+ uglifyToken.token = this._convertUglifyToken(uglifyToken);
+ return uglifyToken;
+ },
+
+ _convertUglifyToken: function(uglifyToken)
+ {
+ var token = FormatterWorker.JavaScriptTokensByType[uglifyToken.type];
+ if (typeof token === "number")
+ return token;
+ token = FormatterWorker.JavaScriptTokensByValue[uglifyToken.value];
+ if (typeof token === "number")
+ return token;
+ throw "Unknown token type " + uglifyToken.type;
}
}
« no previous file with comments | « Source/devtools/front_end/CSSFormatter.js ('k') | Source/devtools/front_end/ScriptFormatter.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698