1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-12-07 01:08:06 +00:00

Refactored TiddlyWikiInput to be a type of tiddlerFileInput

This commit is contained in:
Jeremy Ruston
2011-12-07 17:39:55 +00:00
parent dc8871f9a2
commit eb9e8891cb
4 changed files with 45 additions and 60 deletions

View File

@@ -37,7 +37,8 @@ tiddlerInput.fileExtensionMappings = {
".tiddler": "application/x-tiddler-html-div",
".tid": "application/x-tiddler",
".js": "application/javascript",
".json": "application/json"
".json": "application/json",
".tiddlywiki": "application/x-tiddlywiki"
};
tiddlerInput.parseTiddlerFileByMimeType = {
@@ -79,9 +80,46 @@ tiddlerInput.parseTiddlerFileByMimeType = {
result.push(getKnownFields(tiddlers[t]));
}
return result;
},
"application/x-tiddlywiki": function(text,fields) {
var results = [],
storeAreaPos = tiddlerInput.locateStoreArea(text);
if(storeAreaPos) {
var endOfDivRegExp = /(<\/div>\s*)/gi,
startPos = storeAreaPos[0];
endOfDivRegExp.lastIndex = startPos;
var match = endOfDivRegExp.exec(text);
while(match && startPos < storeAreaPos[1]) {
var endPos = endOfDivRegExp.lastIndex,
fields = tiddlerInput.parseTiddlerDiv(text.substring(startPos,endPos));
fields.text = utils.htmlDecode(fields.text);
results.push(fields);
startPos = endPos;
match = endOfDivRegExp.exec(text);
}
}
return results;
}
};
tiddlerInput.locateStoreArea = function(tiddlywikidoc) {
var startSaveArea = '<div id="' + 'storeArea">',
startSaveAreaRegExp = /<div id=["']?storeArea['"]?>/gi,
endSaveArea = '</d' + 'iv>',
endSaveAreaCaps = '</D' + 'IV>',
posOpeningDiv = tiddlywikidoc.search(startSaveAreaRegExp),
limitClosingDiv = tiddlywikidoc.indexOf("<"+"!--POST-STOREAREA--"+">");
if(limitClosingDiv == -1) {
limitClosingDiv = tiddlywikidoc.indexOf("<"+"!--POST-BODY-START--"+">");
}
var start = limitClosingDiv == -1 ? tiddlywikidoc.length : limitClosingDiv,
posClosingDiv = tiddlywikidoc.lastIndexOf(endSaveArea,start);
if(posClosingDiv == -1) {
posClosingDiv = tiddlywikidoc.lastIndexOf(endSaveAreaCaps,start);
}
return (posOpeningDiv != -1 && posClosingDiv != -1) ? [posOpeningDiv + startSaveArea.length,posClosingDiv] : null;
};
/*
Parse a block of metadata and merge the results into a hashmap of tiddler fields.

View File

@@ -1,54 +0,0 @@
/*
Functions concerned with parsing TiddlyWiki files
*/
/*global require: false, exports: false */
"use strict";
var tiddlerInput = require("./TiddlerInput.js"),
utils = require("./Utils.js");
var tiddlyWikiInput = exports;
function locateStoreArea(tiddlywikidoc)
{
var startSaveArea = '<div id="' + 'storeArea">',
startSaveAreaRegExp = /<div id=["']?storeArea['"]?>/gi,
endSaveArea = '</d' + 'iv>',
endSaveAreaCaps = '</D' + 'IV>',
posOpeningDiv = tiddlywikidoc.search(startSaveAreaRegExp),
limitClosingDiv = tiddlywikidoc.indexOf("<"+"!--POST-STOREAREA--"+">");
if(limitClosingDiv == -1) {
limitClosingDiv = tiddlywikidoc.indexOf("<"+"!--POST-BODY-START--"+">");
}
var start = limitClosingDiv == -1 ? tiddlywikidoc.length : limitClosingDiv,
posClosingDiv = tiddlywikidoc.lastIndexOf(endSaveArea,start);
if(posClosingDiv == -1) {
posClosingDiv = tiddlywikidoc.lastIndexOf(endSaveAreaCaps,start);
}
return (posOpeningDiv != -1 && posClosingDiv != -1) ? [posOpeningDiv + startSaveArea.length,posClosingDiv] : null;
}
/*
Parses the text of a TiddlyWiki HTML file, and returns the tiddlers as an array of hashmaps of raw fields.
*/
tiddlyWikiInput.parseTiddlyWiki = function(tiddlywikidoc) {
var results = [],
storeAreaPos = locateStoreArea(tiddlywikidoc);
if(storeAreaPos) {
var endOfDivRegExp = /(<\/div>\s*)/gi,
startPos = storeAreaPos[0];
endOfDivRegExp.lastIndex = startPos;
var match = endOfDivRegExp.exec(tiddlywikidoc);
while(match && startPos < storeAreaPos[1]) {
var endPos = endOfDivRegExp.lastIndex,
fields = tiddlerInput.parseTiddlerDiv(tiddlywikidoc.substring(startPos,endPos));
fields.text = utils.htmlDecode(fields.text);
results.push(fields);
startPos = endPos;
match = endOfDivRegExp.exec(tiddlywikidoc);
}
}
return results;
};