String Functions Guide
String Functions Guide
DataMagik Document Designer provides powerful string manipulation functions for formatting text in your templates.
Table of Contents
Case Conversion
upper - Convert to Uppercase
Converts all characters to uppercase.
Syntax:
{{.Text | upper}}
Examples:
<h1>{{.CompanyName | upper}}</h1>
<p>{{.Status | upper}}</p>
<div>{{.ProductCode | upper}}</div>
Sample Data:
{
"CompanyName": "Acme Corporation",
"Status": "active",
"ProductCode": "abc-123"
}
Output:
<h1>ACME CORPORATION</h1> <p>ACTIVE</p> <div>ABC-123</div>
Use Cases:
lower - Convert to Lowercase
Converts all characters to lowercase.
Syntax:
{{.Text | lower}}
Examples:
<input type="email" value="{{.Email | lower}}">
<p class="{{.Status | lower}}">Status: {{.Status}}</p>
<a href="mailto:{{.ContactEmail | lower}}">Contact</a>
Sample Data:
{
"Email": "John.Doe@Example.COM",
"Status": "PENDING",
"ContactEmail": "SALES@COMPANY.COM"
}
Output:
<input type="email" value="john.doe@example.com"> <p class="pending">Status: PENDING</p> <a href="mailto:sales@company.com">Contact</a>
Use Cases:
title - Convert to Title Case
Converts the first letter of each word to uppercase.
Syntax:
{{.Text | title}}
Examples:
<h2>{{.FullName | title}}</h2>
<p>{{.JobTitle | title}}</p>
<span>{{.Department | title}}</span>
Sample Data:
{
"FullName": "john doe",
"JobTitle": "senior software engineer",
"Department": "information technology"
}
Output:
<h2>John Doe</h2> <p>Senior Software Engineer</p> <span>Information Technology</span>
Use Cases:
String Formatting with printf
The <code>printf</code> function provides C-style string formatting for precise control over output.
Basic Number Formatting
Format Decimal Places:
<p>Price: ${{.Price | printf "%.2f"}}</p>
<p>Percentage: {{.Rate | printf "%.1f"}}%</p>
<p>Precise: {{.Value | printf "%.4f"}}</p>
Sample Data:
{
"Price": 1234.5,
"Rate": 15.75,
"Value": 3.141592653589793
}
Output:
<p>Price: $1234.50</p> <p>Percentage: 15.8%</p> <p>Precise: 3.1416</p>
Integer Formatting
<p>Quantity: {{.Quantity | printf "%d"}}</p>
<p>Padded: {{.OrderNumber | printf "%05d"}}</p>
<p>Hex: {{.ColorCode | printf "%x"}}</p>
Sample Data:
{
"Quantity": 42,
"OrderNumber": 123,
"ColorCode": 255
}
Output:
<p>Quantity: 42</p> <p>Padded: 00123</p> <p>Hex: ff</p>
String Formatting
<p>{{.Name | printf "Welcome, %s!"}}</p>
<p>{{.Status | printf "Status: %s"}}</p>
<p>{{.Code | printf "Code: %10s"}}</p> <!-- Right-aligned, width 10 -->
Sample Data:
{
"Name": "Alice",
"Status": "Active",
"Code": "ABC"
}
Output:
<p>Welcome, Alice!</p> <p>Status: Active</p> <p>Code: ABC</p>
Common printf Format Specifiers
| Specifier | Description | Example | Output | |-----------|---------------------------|-----------------------------|------------| | `%s` | String | `"Hello" | printf "%s"` | Hello | | `%d` | Integer | `42 | printf "%d"` | 42 | | `%f` | Float | `3.14 | printf "%f"` | 3.140000 | | `%.2f` | Float (2 decimals) | `3.14159 | printf "%.2f"` | 3.14 | | `%05d` | Zero-padded integer | `123 | printf "%05d"` | 00123 | | `%x` | Hexadecimal | `255 | printf "%x"` | ff | | `%X` | Hexadecimal (uppercase) | `255 | printf "%X"` | FF | | `%10s` | Right-aligned (width 10) | `"Hi" | printf "%10s"` | Hi | | `%-10s` | Left-aligned (width 10) | `"Hi" | printf "%-10s"` | Hi |
Currency Formatting Examples
<table>
<tr>
<td>Subtotal:</td>
<td>${{.Subtotal | printf "%.2f"}}</td>
</tr>
<tr>
<td>Tax:</td>
<td>${{.Tax | printf "%.2f"}}</td>
</tr>
<tr>
<td>Shipping:</td>
<td>${{.Shipping | printf "%.2f"}}</td>
</tr>
<tr>
<td><strong>Total:</strong></td>
<td><strong>${{.Total | printf "%.2f"}}</strong></td>
</tr>
</table>
Sample Data:
{
"Subtotal": 99.95,
"Tax": 8.50,
"Shipping": 5.99,
"Total": 114.44
}
Combining Functions
Chaining Multiple Operations
Combine multiple string functions using pipes:
<!-- Convert to lowercase, then title case -->
<p>{{.Name | lower | title}}</p>
<!-- Convert to upper and format -->
<p>{{.Code | upper | printf "Product Code: %s"}}</p>
<!-- Format number then add text -->
<p>{{.Amount | printf "%.2f" | printf "Total: $%s"}}</p>
Sample Data:
{
"Name": "JOHN DOE",
"Code": "prod-abc-123",
"Amount": 1234.5
}
Output:
<p>John Doe</p> <p>Product Code: PROD-ABC-123</p> <p>Total: $1234.50</p>
Complex Formatting Chains
<!-- Email in lowercase with label -->
<p>{{.Email | lower | printf "Contact: %s"}}</p>
<!-- Status badge with uppercase -->
<span class="badge {{.Status | lower}}">
{{.Status | upper}}
</span>
<!-- Formatted currency with thousands separator -->
<p>Revenue: ${{.Revenue | printf "%.2f"}}</p>
Real-World Examples
Example 1: Business Card
<div class="business-card">
<h2>{{.Name | title}}</h2>
<p class="title">{{.JobTitle | title}}</p>
<p>{{.Department | upper}}</p>
<p>{{.Email | lower}}</p>
<p>{{.Phone | printf "Tel: %s"}}</p>
</div>
Sample Data:
{
"Name": "jane smith",
"JobTitle": "marketing director",
"Department": "marketing",
"Email": "Jane.Smith@Company.COM",
"Phone": "+1-555-123-4567"
}
Output:
<div class="business-card"> <h2>Jane Smith</h2> <p class="title">Marketing Director</p> <p>MARKETING</p> <p>jane.smith@company.com</p> <p>Tel: +1-555-123-4567</p> </div>
Example 2: Product Label
<div class="product-label">
<h1>{{.ProductName | upper}}</h1>
<p>SKU: {{.SKU | printf "%08d"}}</p>
<p>Category: {{.Category | title}}</p>
<p class="price">${{.Price | printf "%.2f"}}</p>
{{if .OnSale}}
<p class="sale">
Was: ${{.OriginalPrice | printf "%.2f"}}
</p>
<p class="savings">
Save: ${{.Savings | printf "%.2f"}}
</p>
{{end}}
</div>
Sample Data:
{
"ProductName": "premium wireless headphones",
"SKU": 12345,
"Category": "electronics",
"Price": 149.99,
"OnSale": true,
"OriginalPrice": 199.99,
"Savings": 50.00
}
Output:
<div class="product-label"> <h1>PREMIUM WIRELESS HEADPHONES</h1> <p>SKU: 00012345</p> <p>Category: Electronics</p> <p class="price">$149.99</p> <p class="sale">Was: $199.99</p> <p class="savings">Save: $50.00</p> </div>
Example 3: Invoice Line Items
<table class="invoice-items">
<thead>
<tr>
<th>Description</th>
<th>Qty</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{{range .Items}}
<tr>
<td>{{.Description | title}}</td>
<td>{{.Quantity | printf "%d"}}</td>
<td>${{.UnitPrice | printf "%.2f"}}</td>
<td>${{.Total | printf "%.2f"}}</td>
</tr>
{{end}}
</tbody>
</table>
Sample Data:
{
"Items": [
{
"Description": "consulting services",
"Quantity": 10,
"UnitPrice": 150.0,
"Total": 1500.0
},
{
"Description": "software license",
"Quantity": 1,
"UnitPrice": 499.99,
"Total": 499.99
}
]
}
Output:
<table class="invoice-items">
<thead>
<tr>
<th>Description</th>
<th>Qty</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Consulting Services</td>
<td>10</td>
<td>$150.00</td>
<td>$1500.00</td>
</tr>
<tr>
<td>Software License</td>
<td>1</td>
<td>$499.99</td>
<td>$499.99</td>
</tr>
</tbody>
</table>
Example 4: Status Badges
<div class="status-badges">
{{range .Orders}}
<div class="order">
<span class="order-id">Order: {{.ID | printf "#%05d"}}</span>
<span class="badge badge-{{.Status | lower}}">
{{.Status | upper}}
</span>
</div>
{{end}}
</div>
Sample Data:
{
"Orders": [
{"ID": 1, "Status": "pending"},
{"ID": 42, "Status": "shipped"},
{"ID": 123, "Status": "delivered"}
]
}
Output:
<div class="status-badges">
<div class="order">
<span class="order-id">Order: #00001</span>
<span class="badge badge-pending">PENDING</span>
</div>
<div class="order">
<span class="order-id">Order: #00042</span>
<span class="badge badge-shipped">SHIPPED</span>
</div>
<div class="order">
<span class="order-id">Order: #00123</span>
<span class="badge badge-delivered">DELIVERED</span>
</div>
</div>
Best Practices
- Email Addresses: Always use
lowerfor email addresses - Currency: Always use
printf "%.2f"for monetary values - CSS Classes: Use
lowerfor dynamic CSS class names - IDs and Codes: Use
upperfor product codes and reference IDs - Names: Use
titlefor person names and titles - Consistency: Apply the same formatting rules throughout your template
Next Steps
Function Reference Quick Guide:
upper- ALL CAPSlower- all lowercasetitle- Title Caseprintf- Formatted output