uCalc API Version: 2.1.3-preview.2 Released: 6/16/2026
Warning
uCalc API Preview Release Notice:The documentation describes the intended behavior of the API. The current preview build contains incomplete features, unoptimized performance, and is subject to breaking changes.
TransformerForRuleReplacements = [Transformer]
Property
Product:
Class:
Retrieves a meta-transformer that pre-processes the replacement strings of other transformer rules before they are defined.
Remarks
The TransformerForRuleReplacements() method provides access to a special meta-transformer. This transformer does not process normal text; instead, it processes the replacement strings (the To part) of rules you define with FromTo().
This allows you to create powerful shorthands, aliases, or macros for your replacement logic, promoting consistency and readability in complex transformation projects.
⚙️ How It Works
When you define a rule like t.FromTo(pattern, replacement), the replacement string is first passed through the meta-transformer returned by this method. The result of that transformation is what gets compiled as the final replacement rule.
// 1. Get the meta-transformervar meta = uc.TransformerForRuleReplacements();// 2. Define a meta-rule: "#b({c})" will become "<b>{c}</b>"// Note: {@Eval:'...'} is used to pass the replacement as a literal template.meta.FromTo("#b({c})", "{@Eval:'<b>{c}</b>'}");// 3. Create a standard transformervar t = new uCalc.Transformer();// 4. Use the shorthand in a normal rule definition.// The meta-transformer will expand "#b({word})" before this rule is compiled.t.FromTo("{@Alpha:word}", "#b({word})");// 5. The rule effectively becomes: t.FromTo("{@Alpha:word}", "<b>{word}</b>");Console.WriteLine(t.Transform("make this bold"));// Output: make this <b>bold</b>💡 Core Use Cases
- Creating Aliases: Define a short alias like
~to represent a common but verbose placeholder like{@Self}. - Building Macros: Create complex, reusable replacement templates (e.g., for wrapping text in HTML/XML tags).
- Enforcing Consistency: Ensure all replacement strings follow a standard format by pre-processing them.
⚠️ Critical Pitfall: Premature Variable Evaluation
When defining a meta-rule, its replacement string can contain variable placeholders intended for the final rule (e.g., {c} in the example above). To prevent the meta-transformer from trying to evaluate these placeholders itself, you must wrap the replacement template in {@Eval:'...'}. This treats the template as a literal string, ensuring the placeholders are preserved for the final rule.
- Incorrect:
meta.FromTo("#b({c})", "<b>{c}</b>")- The meta-transformer will look for a variable namedc. - Correct:
meta.FromTo("#b({c})", "{@Eval:'<b>{c}</b>'}")- The meta-transformer inserts the literal string<b>{c}</b>.
Comparative Analysis
- vs. Manual Replacement: You could manually type
<b>{word}</b>every time, but using a meta-transformer abstracts this logic. If you later decide to use<strong>tags instead of<b>, you only need to change the single meta-rule, and all dependent rules update automatically. - vs. Text Pre-processors (C/C++): This feature is analogous to a C pre-processor
#definemacro, but it's fully integrated into the uCalc engine, token-aware, and can be modified dynamically at runtime.
This meta-transformer is not created until TransformerForRuleReplacements() is called for the first time, ensuring no performance overhead if the feature is unused. It is the direct counterpart to TransformerForRulePatterns(), which performs the same function for pattern strings.
Examples
RulePatternTransformer
using uCalcSoftware;
var uc = new uCalc();
var t = uc.NewTransformer();
var Pattern = uc.TransformerForRulePatterns;
var Replacement = uc.TransformerForRuleReplacements;
Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}");
Replacement.FromTo("~", "{@Eval: '{@Self}'}");
t.FromTo("@sq", "");
// Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "");
Console.WriteLine(t.Transform("Test: 'some text'."));
Test: <single quote txt = 'some text'>. using uCalcSoftware; var uc = new uCalc(); var t = uc.NewTransformer(); var Pattern = uc.TransformerForRulePatterns; var Replacement = uc.TransformerForRuleReplacements; Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}"); Replacement.FromTo("~", "{@Eval: '{@Self}'}"); t.FromTo("@sq", "<single quote txt = ~>"); // Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "<single quote txt = {@Self}>"); Console.WriteLine(t.Transform("Test: 'some text'."));
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto t = uc.NewTransformer();
auto Pattern = uc.TransformerForRulePatterns();
auto Replacement = uc.TransformerForRuleReplacements();
Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}");
Replacement.FromTo("~", "{@Eval: '{@Self}'}");
t.FromTo("@sq", "");
// Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "");
cout << t.Transform("Test: 'some text'.") << endl;
}
Test: <single quote txt = 'some text'>. #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto t = uc.NewTransformer(); auto Pattern = uc.TransformerForRulePatterns(); auto Replacement = uc.TransformerForRuleReplacements(); Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}"); Replacement.FromTo("~", "{@Eval: '{@Self}'}"); t.FromTo("@sq", "<single quote txt = ~>"); // Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "<single quote txt = {@Self}>"); cout << t.Transform("Test: 'some text'.") << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim t = uc.NewTransformer()
Dim Pattern = uc.TransformerForRulePatterns
Dim Replacement = uc.TransformerForRuleReplacements
Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}")
Replacement.FromTo("~", "{@Eval: '{@Self}'}")
t.FromTo("@sq", "")
'// Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "");
Console.WriteLine(t.Transform("Test: 'some text'."))
End Sub
End Module
Test: <single quote txt = 'some text'>. Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim t = uc.NewTransformer() Dim Pattern = uc.TransformerForRulePatterns Dim Replacement = uc.TransformerForRuleReplacements Pattern.FromTo("@sq", "{@Eval: '{@Token(_Token_String_SingleQuoted)}'}") Replacement.FromTo("~", "{@Eval: '{@Self}'}") t.FromTo("@sq", "<single quote txt = ~>") '// Same as t.FromTo("{@Token(_Token_QuoteChar_Single)}", "<single quote txt = {@Self}>"); Console.WriteLine(t.Transform("Test: 'some text'.")) End Sub End Module