Text Templates in OpenSCAD
Our first program will demonstrate how to use text templates in OpenSCAD. OpenSCAD doesn’t have built-in support for text templates, so we’ll implement a simple template system using string concatenation and functions.
// Helper function to replace placeholders in a template
function replace_placeholder(template, placeholder, value) =
let(
parts = split(template, str("{{", placeholder, "}}"))
)
len(parts) > 1 ?
str(parts[0], value, replace_placeholder(parts[1], placeholder, value)) :
template;
// Simple template function
function render_template(template, data) =
replace_placeholder(template, "value", data);
// Example usage
template1 = "Value is {{value}}";
echo(render_template(template1, "some text"));
echo(render_template(template1, 5));
echo(render_template(template1, ["Go", "Rust", "C++", "C#"]));
// Template with a named field
function render_named_template(template, data) =
replace_placeholder(template, "Name", data["Name"]);
template2 = "Name: {{Name}}";
echo(render_named_template(template2, ["Name", "Jane Doe"]));
echo(render_named_template(template2, ["Name", "Mickey Mouse"]));
// Conditional template (simple version)
function render_conditional_template(template, data) =
len(data) > 0 ? "yes" : "no";
template3 = "{{if data}}yes{{else}}no{{end}}";
echo(render_conditional_template(template3, "not empty"));
echo(render_conditional_template(template3, ""));
// Range template (simple version)
function render_range_template(data) =
str("Range: ", join(data, " "));
echo(render_range_template(["Go", "Rust", "C++", "C#"]));
In this OpenSCAD implementation, we’ve created simple functions to mimic the behavior of text templates. Here’s a breakdown of the code:
We define a
replace_placeholder
function that replaces placeholders in a template string.The
render_template
function usesreplace_placeholder
to render a simple template with a single value.We demonstrate the usage of this template system with various data types.
For named fields, we create a
render_named_template
function that works with a dictionary-like data structure.We implement a very simple conditional template using the
render_conditional_template
function. This function just checks if the data is empty or not.Finally, we create a
render_range_template
function that joins an array of strings, mimicking the behavior of a range template.
To run this program, save it as a .scad
file and open it in OpenSCAD. The results will be displayed in the console output.
Note that this is a very basic implementation of templates in OpenSCAD. It doesn’t support all the features of a full-fledged template system, but it demonstrates the concept using OpenSCAD’s built-in functions and string manipulation capabilities.