diff --git a/ginsu.js b/ginsu.js index 6dba361d2..74e098a09 100644 --- a/ginsu.js +++ b/ginsu.js @@ -11,14 +11,14 @@ var fs = require("fs"), path = require("path"), Tiddler = require("./js/Tiddler.js").Tiddler, - tiddlyWikiInput = require("./js/TiddlyWikiInput.js"), + tiddlerInput = require("./js/TiddlerInput.js"), tiddlerOutput = require("./js/TiddlerOutput.js"); var tiddlywikifilename = process.argv[2]; var outputdir = process.argv[3]; var tiddlywikidoc = fs.readFileSync(tiddlywikifilename,"utf8"); -var tiddlers = tiddlyWikiInput.parseTiddlyWiki(tiddlywikidoc); +var tiddlers = tiddlerInput.parseTiddlerFile(tiddlywikidoc,"application/x-tiddlywiki"); var recipe = []; for(var t=0; t\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 = '
', + startSaveAreaRegExp = /
/gi, + endSaveArea = '', + endSaveAreaCaps = '', + 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. diff --git a/js/TiddlyWikiInput.js b/js/TiddlyWikiInput.js deleted file mode 100755 index 3fc1b6def..000000000 --- a/js/TiddlyWikiInput.js +++ /dev/null @@ -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 = '
', - startSaveAreaRegExp = /
/gi, - endSaveArea = '', - endSaveAreaCaps = '', - 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; -}; diff --git a/tiddlywiki.js b/tiddlywiki.js index be2e018c3..49292ce33 100644 --- a/tiddlywiki.js +++ b/tiddlywiki.js @@ -9,7 +9,6 @@ var WikiStore = require("./js/WikiStore.js").WikiStore, Tiddler = require("./js/Tiddler.js").Tiddler, Recipe = require("./js/Recipe.js").Recipe, Tiddler = require("./js/Tiddler.js").Tiddler, - tiddlyWikiInput = require("./js/TiddlyWikiInput.js"), tiddlerOutput = require("./js/TiddlerOutput.js"), tiddlerInput = require("./js/TiddlerInput.js"), util = require("util"), @@ -101,8 +100,10 @@ var commandLineSwitches = { if(err) { callback(err); } else { - var fields = {title: args[0]}; - var tiddlers = tiddlerInput.parseTiddlerFile(data,path.extname(args[0]),fields); + var fields = {title: args[0]}, + extname = path.extname(args[0]), + type = extname === ".html" ? "application/x-tiddlywiki" : extname; + var tiddlers = tiddlerInput.parseTiddlerFile(data,type,fields); for(var t=0; t