/*\ title: js/JavaScriptParser.js Parses JavaScript source code into a parse tree using PEGJS \*/ (function(){ /*jslint node: true */ "use strict"; var WikiTextParseTree = require("./WikiTextParseTree.js").WikiTextParseTree, Renderer = require("./Renderer.js").Renderer, Dependencies = require("./Dependencies.js").Dependencies, esprima = require("esprima"); var renderObject = function(obj) { var children = [],t; if(obj instanceof Array) { for(t=0; t endLastToken) { result.push(Renderer.TextNode(code.substring(endLastToken,token.range[0]))); } result.push(Renderer.ElementNode("span",{ "class": "javascript-" + token.type.toLowerCase() },[ Renderer.TextNode(token.value) ])); endLastToken = token.range[1] + 1; } if(endLastToken < code.length) { result.push(Renderer.TextNode(code.substring(endLastToken))); } return new WikiTextParseTree([ Renderer.ElementNode("pre",{"class": "javascript-source"},result) ],new Dependencies(),this.store); }; JavaScriptParser.prototype.parseJSON = function(code) { // Wrap it in parenthesis to make it a program code = "(" + code + ")"; // Get the parse tree return new WikiTextParseTree([ renderObject(esprima.parse(code)) ],new Dependencies(),this.store); }; exports.JavaScriptParser = JavaScriptParser; })();