Eric:
Very tricky indeed but you made it look simple!
It worked - yay! I am trying some more complex examples including
embedded macro calls and will report back.
Thanks!
Steve
On Monday, July 20, 2020 at 6:13:07 PM UTC-4, Eric Shulman wrote:
>
> On Monday, July 20, 2020 at 1:55:57 PM UTC-7, steve wrote:
>>
>> I am working on a macro to highlight target strings within the text field
>> of a tiddler.
>> The use case is to make it easier to for me see where the targetStrings
>> are (if any).
>>
>
>
>> My question is how to highlight the targetString in the macro (ie.
>> treating
>> the macro as a string) as opposed to (apparently) executing the macro
>> and highlighting the targetString in the output.
>>
>>
> There's nothing wrong with your filter and regexp usage.
>
> To see the literal output text, I used the <$text> widget in the table,
> like this:
> \define formatTid.highlightText(inputText targetString)
> <$set name="outputText" filter="[[$inputText$]]
> +[splitregexp[\b$targetString$\b]join[@@color:blue;$targetString$@@]]"
> select="0">
>
> | ''outputText''|<$text text=<<outputText>>/>|
> \end
> <$macrocall $name="formatTid.highlightText"
> inputText={{highlightTest.sentence!!text}} targetString="goFish"/>
>
> The result of the above (using your example input) is:
> outputText \define @@color:blue;goFish@@() !!! This example has three
> instances of @@color:blue;goFish@@. \end <<@@color:blue;goFish@@>>
>
> As you can see, your regexp filter DID find and replace all the
> targetString instances by wrapping them with "@@color:blue;...@@" as you
> intended. Of course, that doesn't produce the output you want, which is to
> see the full input text *with the blue highlighting*.
>
> The problem with using just <<outputText>> in the table stems from the way
> the TWCore parser processes and renders the "outputText" value.
>
> 1) anything starting with "\define" or "\end" is part of a macro
> definition, and the TWCore doesn't *render* those as output.
>
> 2) anything from "<<" through ">>" is a macro invocation, and if the macro
> isn't defined in the current context, then it produces no output.
>
> Thus, only the normal wikitext content in your example is displayed as
> output and the macro definition and macro invocation are not shown.
>
> Fortunately, I did find a way to get something closer to what you want.
> Try this:
> \define formatTid.highlightText(inputText targetString)
> <$set name="outputText" filter="[[$inputText$]]
> +[splitregexp[\b$targetString$\b]join[@@color:blue;$targetString$@@]]"
> select="0">
>
> | ''outputText''|@@white-space:pre;<<showOutput>>@@|
> \end
>
> \define showOutput()
> \rules only styleinline
> $(outputText)$
> \end
>
> <$macrocall $name="formatTid.highlightText" inputText={{highlightTest.
> sentence!!text}} targetString="goFish"/>
>
> * The @@white-space:pre;...@@ in the table forces whitespace to be
> rendered as-is (the default rendering collapses all whitespace)
> * The showOutput() macro uses the "\rules" pragma to disable all parsing
> except for "styleinline" (the "@@" syntax)
>
> The result of the above (using your example input) is:
> outputText \define goFish() !!! This example has three instances of goFish.
> \end <<goFish>>
>
> Which is, I think, very close to what you intended.
>
> Tricky stuff, eh?
>
> Let me know how it goes...
>
> 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 view this discussion on the web visit
https://groups.google.com/d/msgid/tiddlywiki/f175df20-c265-4bff-a0da-cc4224433399o%40googlegroups.com.