kopia lustrzana https://github.com/miklobit/TiddlyWiki5
Restored the JSONParser as a separate entity
It doesn't really have much in common with the JavaScript parserprint-window-tiddler
rodzic
1102c9babb
commit
488562bd95
|
@ -16,6 +16,7 @@ var WikiStore = require("./WikiStore.js").WikiStore,
|
|||
Renderer = require("./Renderer.js").Renderer,
|
||||
WikiTextParser = require("./WikiTextParser.js").WikiTextParser,
|
||||
JavaScriptParser = require("./JavaScriptParser.js").JavaScriptParser,
|
||||
JSONParser = require("./JSONParser.js").JSONParser,
|
||||
ImageParser = require("./ImageParser.js").ImageParser;
|
||||
|
||||
var App = function() {
|
||||
|
@ -27,7 +28,8 @@ var App = function() {
|
|||
// Register the parsers
|
||||
this.store.registerParser("text/x-tiddlywiki",new WikiTextParser({store: this.store}));
|
||||
this.store.registerParser(["image/svg+xml","image/jpg","image/jpeg","image/png","image/gif"],new ImageParser({store: this.store}));
|
||||
this.store.registerParser(["application/json","application/javascript"],new JavaScriptParser({store: this.store}));
|
||||
this.store.registerParser("application/javascript",new JavaScriptParser({store: this.store}));
|
||||
this.store.registerParser("application/json",new JSONParser({store: this.store}));
|
||||
// Register the standard tiddler serializers and deserializers
|
||||
tiddlerInput.register(this.store);
|
||||
tiddlerOutput.register(this.store);
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*\
|
||||
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 WikiTextParseTree = require("./WikiTextParseTree.js").WikiTextParseTree,
|
||||
Renderer = require("./Renderer.js").Renderer,
|
||||
Dependencies = require("./Dependencies.js").Dependencies,
|
||||
utils = require("./Utils.js");
|
||||
|
||||
var renderObject = function(obj) {
|
||||
var children = [],t;
|
||||
if(obj instanceof Array) {
|
||||
for(t=0; t<obj.length; t++) {
|
||||
children.push(Renderer.ElementNode("li",{
|
||||
"class": ["jsonArrayMember"]
|
||||
},[renderObject(obj[t])]));
|
||||
}
|
||||
return Renderer.ElementNode("ul",{
|
||||
"class": ["jsonArray"]
|
||||
},children);
|
||||
} else if(typeof obj === "object") {
|
||||
for(t in obj) {
|
||||
children.push(Renderer.ElementNode("li",{
|
||||
"class": ["jsonObjectMember"]
|
||||
},[Renderer.SplitLabelNode("JSON",[Renderer.TextNode(t)],[renderObject(obj[t])])]));
|
||||
}
|
||||
return Renderer.ElementNode("ul",{
|
||||
"class": ["jsonObject"]
|
||||
},children);
|
||||
} else {
|
||||
return Renderer.LabelNode("JSON" + (typeof obj),[Renderer.TextNode(JSON.stringify(obj))],["jsonValue"]);
|
||||
}
|
||||
};
|
||||
|
||||
var JSONParser = function(options) {
|
||||
this.store = options.store;
|
||||
};
|
||||
|
||||
JSONParser.prototype.parse = function(type,text) {
|
||||
return new WikiTextParseTree([renderObject(JSON.parse(text))],new Dependencies(),this.store);
|
||||
};
|
||||
|
||||
exports.JSONParser = JSONParser;
|
||||
|
||||
})();
|
|
@ -14,31 +14,6 @@ var WikiTextParseTree = require("./WikiTextParseTree.js").WikiTextParseTree,
|
|||
Dependencies = require("./Dependencies.js").Dependencies,
|
||||
esprima = require("esprima");
|
||||
|
||||
var renderObject = function(obj) {
|
||||
var children = [],t;
|
||||
if(obj instanceof Array) {
|
||||
for(t=0; t<obj.length; t++) {
|
||||
children.push(Renderer.ElementNode("li",{
|
||||
"class": ["jsonArrayMember"]
|
||||
},[renderObject(obj[t])]));
|
||||
}
|
||||
return Renderer.ElementNode("ul",{
|
||||
"class": ["jsonArray"]
|
||||
},children);
|
||||
} else if(typeof obj === "object") {
|
||||
for(t in obj) {
|
||||
children.push(Renderer.ElementNode("li",{
|
||||
"class": ["jsonObjectMember"]
|
||||
},[Renderer.SplitLabelNode("JSON",[Renderer.TextNode(t)],[renderObject(obj[t])])]));
|
||||
}
|
||||
return Renderer.ElementNode("ul",{
|
||||
"class": ["jsonObject"]
|
||||
},children);
|
||||
} else {
|
||||
return Renderer.LabelNode("JSON" + (typeof obj),[Renderer.TextNode(JSON.stringify(obj))],["jsonValue"]);
|
||||
}
|
||||
};
|
||||
|
||||
// Initialise the parser
|
||||
var JavaScriptParser = function(options) {
|
||||
this.store = options.store;
|
||||
|
@ -46,14 +21,6 @@ var JavaScriptParser = function(options) {
|
|||
|
||||
// Parse a string of JavaScript code or JSON and return the parse tree as a wikitext parse tree
|
||||
JavaScriptParser.prototype.parse = function(type,code) {
|
||||
if(type === "application/javascript") {
|
||||
return this.parseJavaScript(code);
|
||||
} else {
|
||||
return this.parseJSON(code);
|
||||
}
|
||||
}
|
||||
|
||||
JavaScriptParser.prototype.parseJavaScript = function(code) {
|
||||
// Get the parse tree
|
||||
var parseTree = esprima.parse(code,{
|
||||
tokens: true,
|
||||
|
@ -81,15 +48,6 @@ JavaScriptParser.prototype.parseJavaScript = function(code) {
|
|||
],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;
|
||||
|
||||
})();
|
||||
|
|
Ładowanie…
Reference in New Issue