1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-26 10:00:34 +00:00
TiddlyWiki5/js/JSONParser.js

57 lines
1.4 KiB
JavaScript
Raw Normal View History

/*\
title: js/JSONParser.js
Compiles JSON objects into JavaScript functions that render them in HTML and plain text
\*/
(function(){
/*jslint node: true */
"use strict";
var utils = require("./Utils.js");
var JSONRenderer = function(handlerCode) {
/*jslint evil: true */
this.handler = eval(handlerCode);
};
JSONRenderer.prototype.render = function(tiddler,store) {
return this.handler(tiddler,store,utils);
};
JSONRenderer.prototype.toString = function(type) {
var output = [];
utils.renderObject(output,type,this.handler.toString(),[]);
return output.join("");
};
// The parse tree is degenerate
var JSONParseTree = function(tree) {
this.tree = tree;
this.dependencies = [];
};
JSONParseTree.prototype.compile = function(type) {
console.log("(function (tiddler,store,utils) {var output=[]; utils.renderObject(output,'" + type + "'," + JSON.stringify(this.tree) + ",[]);return output.join('');})");
return new JSONRenderer("(function (tiddler,store,utils) {var output=[]; utils.renderObject(output,'" + type + "'," + JSON.stringify(this.tree) + ",[]);return output.join('');})");
};
JSONParseTree.prototype.toString = function(type) {
var output = [];
utils.renderObject(output,type,this.tree,[]);
return output.join("");
};
var JSONParser = function() {
};
JSONParser.prototype.parse = function(type,text) {
return new JSONParseTree(JSON.parse(text));
};
exports.JSONParser = JSONParser;
})();