/*\ title: $:/core/modules/deserializers.js type: application/javascript module-type: tiddlerdeserializer Functions to deserialise tiddlers from a block of text \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; /* Utility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:
The text of the tiddler (without the expected HTML encoding).
Note that the field attributes are HTML encoded, but that the body of the
 tag is not encoded.

When these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.
*/
var parseTiddlerDiv = function(text /* [,fields] */) {
	// Slot together the default results
	var result = {};
	if(arguments.length > 1) {
		for(var f=1; f]*)>([(?:\s|\S)]*)<\/div>\s*$/gi,
		subDivRegExp = /^\s*
([(?:\s|\S)]*)<\/pre>\s*$/gi,
		attrRegExp = /\s*([^=\s]+)\s*=\s*"([^"]*)"/gi,
		match = divRegExp.exec(text);
	if(match) {
		var subMatch = subDivRegExp.exec(match[2]); // Body of the 
tag if(subMatch) { result.text = subMatch[1]; } else { result.text = match[2]; } var attrMatch; do { attrMatch = attrRegExp.exec(match[1]); if(attrMatch) { var name = attrMatch[1]; var value = attrMatch[2]; result[name] = value; } } while(attrMatch); return result; } else { return undefined; } }; exports["application/x-tiddler-html-div"] = function(text,fields) { return [parseTiddlerDiv(text,fields)]; }; exports["application/json"] = function(text,fields) { var tiddlers = JSON.parse(text), result = [], getKnownFields = function(tid) { var fields = {}; "title text created creator modified modifier type tags".split(" ").forEach(function(value) { if(tid[value] !== null) { fields[value] = tid[value]; } }); return fields; }; for(var t=0; t/gi, match = storeAreaMarkerRegExp.exec(text); if(match) { // If so, it's either a classic TiddlyWiki file or a TW5 file // First read the normal tiddlers var results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields); // Then any system tiddlers var systemAreaMarkerRegExp = /
/gi, sysMatch = systemAreaMarkerRegExp.exec(text); if(sysMatch) { results.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields)); } return results } else { // It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler return deserializeHtmlFile(text,fields); } }; function deserializeHtmlFile(text,fields) { var result = {}; $tw.utils.each(fields,function(value,name) { result[name] = value; }); result.text = text; result.type = "text/html"; return [result]; } function deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) { var results = [], endOfDivRegExp = /(<\/div>\s*)/gi, startPos = storeAreaEnd, defaultType = isTiddlyWiki5 ? undefined : "text/x-tiddlywiki"; endOfDivRegExp.lastIndex = startPos; var match = endOfDivRegExp.exec(text); while(match) { var endPos = endOfDivRegExp.lastIndex, tiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType}); if(!tiddlerFields) { break; } $tw.utils.each(tiddlerFields,function(value,name) { if(typeof value === "string") { tiddlerFields[name] = $tw.utils.htmlDecode(value); } }); if(tiddlerFields.text !== null) { results.push(tiddlerFields); } startPos = endPos; match = endOfDivRegExp.exec(text); } return results; } })();