/*\ title: $:/core/modules/rendertree/wikirendertree.js type: application/javascript module-type: global Wiki text render tree \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; /* Create a render tree object for a parse tree parser: reference to the parse tree to be rendered options: see below Options include: wiki: mandatory reference to wiki associated with this render tree context: optional hashmap of context variables (see below) parentRenderer: optional reference to a parent renderer node for the context chain document: optional document object to use instead of global document Context variables include: tiddlerTitle: title of the tiddler providing the context templateTitle: title of the tiddler providing the current template macroDefinitions: hashmap of macro definitions */ var WikiRenderTree = function(parser,options) { this.parser = parser; this.wiki = options.wiki; this.context = options.context || {}; this.parentRenderer = options.parentRenderer; this.document = options.document; // Hashmap of the renderer classes if(!this.rendererClasses) { WikiRenderTree.prototype.rendererClasses = $tw.modules.applyMethods("wikirenderer"); } }; /* Generate the full render tree for this parse tree */ WikiRenderTree.prototype.execute = function() { this.rendererTree = this.createRenderers(this,this.parser.tree); }; /* Create an array of renderers for an array of parse tree nodes */ WikiRenderTree.prototype.createRenderers = function(parentRenderer,parseTreeNodes) { var rendererNodes = []; if(parseTreeNodes) { for(var t=0; t 0) { while(macroCallParseTreeNode.params[nextAnonParameter].name && nextAnonParameter < macroCallParseTreeNode.params.length-1) { nextAnonParameter++; } if(!macroCallParseTreeNode.params[nextAnonParameter].name) { paramValue = macroCallParseTreeNode.params[nextAnonParameter].value; nextAnonParameter++; } } // If we've still not got a value, use the default, if any paramValue = paramValue || paramInfo["default"] || ""; // Replace any instances of this parameter text = text.replace(new RegExp("\\$" + $tw.utils.escapeRegExp(paramInfo.name) + "\\$","mg"),paramValue); } return text; }; exports.WikiRenderTree = WikiRenderTree; })();