/*\ title: js/WikiTextParser.js Parses a block of tiddlywiki-format wiki text into a parse tree object. \*/ (function(){ /*jslint node: true */ "use strict"; var WikiTextRules = require("./WikiTextRules.js"), WikiTextParseTree = require("./WikiTextParseTree.js").WikiTextParseTree, utils = require("./Utils.js"), util = require("util"); /* Creates a new instance of the wiki text parser with the specified options. The options are a hashmap of mandatory members as follows: store: The store object to use to parse any cascaded content (eg transclusion) Planned: enableRules: An array of names of wiki text rules to enable. If not specified, all rules are available extraRules: An array of additional rule handlers to add enableMacros: An array of names of macros to enable. If not specified, all macros are available extraMacros: An array of additional macro handlers to add */ var WikiTextParser = function(options) { this.store = options.store; this.autoLinkWikiWords = true; this.rules = WikiTextRules.rules; var pattern = []; for(var n=0; n this.nextMatch) this.outputText(this.output,this.nextMatch,ruleMatch.index); // Set the match parameters for the handler this.matchStart = ruleMatch.index; this.matchLength = ruleMatch[0].length; this.matchText = ruleMatch[0]; this.nextMatch = this.rulesRegExp.lastIndex; // Figure out which rule matched and call its handler var t; for(t=1; t this.nextMatch) this.outputText(this.output,this.nextMatch,terminatorMatch.index); // Set the match parameters this.matchText = terminatorMatch[1]; this.matchLength = terminatorMatch[1].length; this.matchStart = terminatorMatch.index; this.nextMatch = this.matchStart + this.matchLength; // Restore the output pointer this.output = oldOutput; return; } // It must be a rule match; output any text before the match if(ruleMatch.index > this.nextMatch) this.outputText(this.output,this.nextMatch,ruleMatch.index); // Set the match parameters this.matchStart = ruleMatch.index; this.matchLength = ruleMatch[0].length; this.matchText = ruleMatch[0]; this.nextMatch = this.rulesRegExp.lastIndex; // Figure out which rule matched and call its handler var t; for(t=1; t