96 lines
2.2 KiB
Markdown
96 lines
2.2 KiB
Markdown
|
|
# Template Engine
|
|
|
|
A shell script template engine for generating scripts that render HTML markup,
|
|
or anything really.
|
|
|
|
## Examples
|
|
|
|
```html
|
|
$ #!/bin/sh
|
|
$ title='My Restaurant Randomizer';
|
|
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<title><% $title %></title>
|
|
</head>
|
|
<body>
|
|
<h1>Welcome to <% $title %></h1>
|
|
<p>From the following restaurants:</p>
|
|
<ul>
|
|
# Loop through restaurants and display each one
|
|
$ while read -r restaurant; do
|
|
<li><% $restaurant %></li>
|
|
$ done <restaurants.txt
|
|
</ul>
|
|
<p>
|
|
The fates have decided that you shall eat at:
|
|
<strong><$% shuf -n 1 restaurants.txt %></strong>
|
|
</p>
|
|
</body>
|
|
</html>
|
|
```
|
|
|
|
The above template will generate the following shell script:
|
|
|
|
```bash
|
|
#!/bin/sh
|
|
title='My Restaurant Randomizer';
|
|
printf '%s\n' '<!doctype html>';
|
|
printf '%s\n' '<html>';
|
|
printf '%s\n' ' <head>';
|
|
printf '%s' ' <title>';
|
|
printf '%s' "$title" | jq -Rrj @html;
|
|
printf '%s\n' '</title>';
|
|
printf '%s\n' ' </head>';
|
|
printf '%s\n' ' <body>';
|
|
printf '%s' ' <h1>Welcome to ';
|
|
printf '%s' "$title" | jq -Rrj @html;
|
|
printf '%s\n' '</h1>';
|
|
printf '%s\n' ' <p>From the following restaurants:</p>';
|
|
printf '%s\n' ' <ul>';
|
|
# Loop through restaurants and display each one
|
|
while read -r restaurant; do
|
|
printf '%s' ' <li>';
|
|
printf '%s' "$restaurant" | jq -Rrj @html;
|
|
printf '%s\n' '</li>';
|
|
done <restaurants.txt
|
|
printf '%s\n' ' </ul>';
|
|
printf '%s\n' ' <p>';
|
|
printf '%s\n' ' The fates have decided that you shall eat at:';
|
|
printf '%s' ' <strong>';
|
|
printf '%s' "$(shuf -n 1 restaurants.txt)" | jq -Rrj @html;
|
|
printf '%s\n' '</strong>';
|
|
printf '%s\n' ' </p>';
|
|
printf '%s\n' ' </body>';
|
|
printf '%s\n' '</html>';
|
|
```
|
|
|
|
Which when executed might produce the following HTML:
|
|
|
|
```html
|
|
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<title>My Restaurant Randomizer</title>
|
|
</head>
|
|
<body>
|
|
<h1>Welcome to My Restaurant Randomizer</h1>
|
|
<p>From the following restaurants:</p>
|
|
<ul>
|
|
<li>Luigi's</li>
|
|
<li>Papa Johns</li>
|
|
<li>SushiQ</li>
|
|
</ul>
|
|
<p>
|
|
The fates have decided that you shall eat at:
|
|
<strong>Luigi's</strong>
|
|
</p>
|
|
</body>
|
|
</html>
|
|
```
|
|
## License
|
|
|
|
[MIT](https://choosealicense.com/licenses/mit/)
|
|
|