Hi Eric

Many thanks for the explanation.

Now, I create a global macro:

\define tagged()
<$set name="target" filter="[<storyTiddler>get[draft.of]] 
[<storyTiddler>!has[draft.of]]">
<$list filter="[<target>tagging[]]"/>
</$set>
\end

And there is no output when called :-(

<<tagged>>

Why, in this case, is the macro code not wikified?

regards

On Sunday, 1 November 2015 09:25:57 UTC+2, Eric Shulman wrote:
>
> On Saturday, October 31, 2015 at 9:45:40 PM UTC-7, Matabele wrote:
>>
>> I tried this -- it doesn't work :-(
>> I created a global macro:
>> \define currentTitle()
>> <$list filter="[<storyTiddler>get[draft.of]] 
>> [<storyTiddler>!has[draft.of]]">
>>
>> </$list>
>> \end
>>
>> The result of a simple macrocall is as expected in both view and edit 
>> mode: 
>> <<currentTitle>>
>>
>> However, when I try this, there is no output in either view or edit mode:
>>
>> <$list filter="[tag<currentTitle>]"/>
>> <$list filter="[<currentTitle>tagging[]]"/>
>> <$list filter="[<currentTitle>listed[tags]]"/>
>>
>> Anyone know why?
>>
>
> There is a widespread and common misperception about macros. 
>  Specifically, because they have a parameter passing syntax, they *look* 
> somewhat like the function syntax in other languages.  As a result, there 
> is an expectation that they *work* like functions do, and can "compute and 
> return" a resulting value. However.... macros don't actually do any 
> computation other than simple *text substitution* to replace any instances 
> of $paramname$ and $(variablename)$ within the macro content and then 
> return that modified content for further handling.
>
> What happens with that result depends on where it is used:
>
> * If the macro result is returned directly into a wiki context (i.e. 
> <<macroname ...>> is embedded directly in wikitext), then the macro's 
> output will be parsed ("wikified") and any <$widgets> and/or <<macroname>> 
> references are then processed in turn.
> * If a macro result is used as a widget parameter (e.g., <$widget 
> paramname=<<macroname>>...></$widget>) or as a reference within a filter 
> (e.g., [tag<macroname>]), then the macro's output is *not* parsed, and is 
> simply used as literal text by the widget or filter handler.
>
> The confusion arises because of this different contextual handling for the 
> macro results...
>
> In your example, the output of the "currentTitle" macro, which has no 
> parameters, is always, literally:
> <$list filter="[<storyTiddler>get[draft.of]] [<storyTiddler>
> !has[draft.of]]">
>
> </$list>
>
> In the first context, where you parse and render the output of 
> <<currentTitle>>, the <$list> widget is invoked, and the expected output is 
> shown.  However, in the second context, where you use 
> [...<currentTitle>...] within a filter, the output of the macro is *not* 
> parsed, so the filter is, literally:
> <$list filter="[tag[<$list filter="[<storyTiddler>get[draft.of]] 
> [<storyTiddler>!has[draft.of]]">
>
> </$list>]]"/>
>
> One possible work-around is to first use the <$set> widget with the 
> filter="..." param to get the actual filter result (the desired tag name), 
> and then use that variable within the subsequent list filter (to list 
> tiddlers that are tagged with that name), like this:
> <$set name="target" filter="[<storyTiddler>get[draft.of]] [<storyTiddler>
> !has[draft.of]]">
> <$list filter="[tag<target>]"/>
> </$set>
>
> I hope this explanation helps,
>
> enjoy,
> -e
>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/tiddlywiki.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/de74c962-614f-4a6a-8340-62b122ab75e8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to