1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-30 20:10:28 +00:00

FIx transcluding of functions

This first implementation concatenates the results of the filter (with no separator) and then wikifies the result.

The test in this commit is quite interesting...
This commit is contained in:
jeremy@jermolene.com 2022-08-04 09:28:56 +01:00
parent 6207ec4812
commit 9317804464
2 changed files with 50 additions and 0 deletions

View File

@ -161,6 +161,7 @@ TranscludeWidget.prototype.collectSlotFillParameters = function() {
Get transcluded parse tree nodes as an object {parser:,text:,type:} Get transcluded parse tree nodes as an object {parser:,text:,type:}
*/ */
TranscludeWidget.prototype.getTransclusionTarget = function() { TranscludeWidget.prototype.getTransclusionTarget = function() {
var self = this;
// Determine whether we're being used in inline or block mode // Determine whether we're being used in inline or block mode
var parseAsInline = !this.parseTreeNode.isBlock; var parseAsInline = !this.parseTreeNode.isBlock;
if(this.transcludeMode === "inline") { if(this.transcludeMode === "inline") {
@ -205,6 +206,25 @@ TranscludeWidget.prototype.getTransclusionTarget = function() {
} }
$tw.utils.addAttributeToParseTreeNode(parser.tree[0],name,param["default"]) $tw.utils.addAttributeToParseTreeNode(parser.tree[0],name,param["default"])
}); });
} else if(srcVariable.isFunctionDefinition) {
var actualParams = this.getOrderedTransclusionParameters(),
variables = {};
$tw.utils.each(srcVariable.params,function(param,index) {
var name = param.name;
// Parameter names starting with dollar must be escaped to double dollars
if(name.charAt(0) === "$") {
name = "$" + name;
}
if(self.hasAttribute(name)) {
variables[name] = self.getAttribute(name);
} else if(self.hasAttribute(index + "")) {
variables[name] = self.getAttribute(index + "");
} else {
variables[name] = param["default"];
}
});
var result = this.wiki.filterTiddlers(srcVariable.value,this.makeFakeWidgetWithVariables(variables),this.wiki.makeTiddlerIterator([])).join("");
parser = this.wiki.parseText(this.transcludeType,result || "",{parseAsInline: parseAsInline, configTrimWhiteSpace: srcVariable.configTrimWhiteSpace});
} else { } else {
// For macros and ordinary variables, wrap the parse tree in a vars widget assigning the parameters to variables named "__paramname__" // For macros and ordinary variables, wrap the parse tree in a vars widget assigning the parameters to variables named "__paramname__"
parser = { parser = {

View File

@ -0,0 +1,30 @@
title: Functions/WikifiedFunctions
description: Wikified functions
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\whitespace trim
\function fn-buffalo(p)
[<p>addsuffix[ with a buffalo]]
\end
\procedure proc-buffalo(p)
<$text text={{{ [<p>addsuffix[ with a buffalo]] }}}/>
\end
\define macro-buffalo(p)
$p$ with a buffalo
\end
<<fn-buffalo "Going to lunch">>
<<proc-buffalo "Going to lunch">>
<<macro-buffalo "Going to lunch">>
+
title: ExpectedResult
<p>Going to lunch with a buffalo</p><p>Going to lunch with a buffalo</p><p>Going to lunch with a buffalo</p>