1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-26 11:37:20 +00:00
TiddlyWiki5/editions/tw5.com/tiddlers/howtos/Concatenating text and variables using macro substitution.tid
Saq Imtiaz 3825e2579f
Adds Text substitution support in widget attributes and new operator (#7526)
* feat: new text substitution support, first pass

* fix: use the widget method instead of evaluating a filter

* revert to earlier implementation that emulates macro syntax

* fix: capitalize comments

* feat: add support for triple backticks for substituted attributes

* docs: added docs for substitute operator

* chore: more docs tweaks

* docs: substituted attributes, refactored docs for widget attributes

* docs: fixed typo

* docs: more examples for substituted attributes

* docs: updated prior documentation on concatenating text and variables

* docs: documentation corrections

* Update editions/tw5.com/tiddlers/filters/examples/substitute Operator (Examples).tid

Co-authored-by: btheado <brian.theado@gmail.com>

---------

Co-authored-by: btheado <brian.theado@gmail.com>
2023-06-24 14:57:15 +01:00

53 lines
2.3 KiB
Plaintext

created: 20160424150551727
modified: 20230615114519672
tags: Learning
title: Concatenating text and variables using macro substitution
type: text/vnd.tiddlywiki
<<.from-version "5.3.0">> It is recommended to use [[substituted attributes|Substituted Attribute Values]] or the [[substitute filter operator|substitute Operator]] to concatenate text and variables.
It's a frequent use case in ~TiddlyWiki that you will want to put the results of variables together with various bits of strings of text. This process in some programming languages is often referred to as "concatenating" text.
You might, for instance want to set up a template for your customer database, where links will automatically refer to additional contact information about your customer. Inside your tiddler, you might try something like this:
<<.bad-example "`[[Additional Info|<<currentTiddler>>-Contact]]`">>
But that won't work. If you try this, the link will be interpreted very literally, and will attempt to take you to:
```
<<currentTiddler>>-Contact
```
The solution is to use a macro to put the rendered value of `<<currentTiddler>>` together with the bit of additional text, `-Contact`.
Create a macro at the top of the tiddler like this:
```
\define linkup(link) [[Additional Info|$link$-Contact]]
```
You might be tempted to invoke the new macro like this:
<<.bad-example "`<<linkup <<currentTiddler>> >>`">>
But if you do, you will find that `<<currentTiddler>>` doesn't get rendered, but instead gets passed literally.
Instead, you could use the [[MacroCallWidget]] widget, like this:
```
<$macrocall $name="linkup" link=<<currentTiddler>> />
```
In this case, we passed the value of a variable directly to our macro. This is often a general way to go about this task. If you wanted to create more links based on other variables you could re-use the macro for each situation.
If, as in this case, the only variable you are using is `currentTiddler` then you could write a simple macro, like this:
```
\define linkup() [[Additional Info|$(currentTiddler)$-Contact]]
```
Notice that in this case we don't pass an argument. Instead, we reference the variable using the special syntax `$(variable)$`. Since we don't pass an argument, we can invoke it without the `<$macrocall>` widget more simply, like this:
```
<<linkup>>
```