A shell script template engine for generating HTML markup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.4 KiB

2 years ago
# 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
2 years ago
<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>';
2 years ago
printf '%s' "$title" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g;s/"/\&quot;/g;s/'\''/\&#39;/g'
2 years ago
printf '%s\n' '</title>';
printf '%s\n' ' </head>';
printf '%s\n' ' <body>';
printf '%s' ' <h1>Welcome to ';
2 years ago
printf '%s' "$title" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g;s/"/\&quot;/g;s/'\''/\&#39;/g'
2 years ago
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
2 years ago
printf '%s' ' <li>';
2 years ago
printf '%s' "$restaurant" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g;s/"/\&quot;/g;s/'\''/\&#39;/g'
2 years ago
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>';
2 years ago
printf '%s' "$(shuf -n 1 restaurants.txt)" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g;s/"/\&quot;/g;s/'\''/\&#39;/g'
2 years ago
printf '%s\n' '</strong>';
printf '%s\n' ' </p>';
printf '%s\n' ' </body>';
printf '%s\n' '</html>';
```
Which when executed might produce the following HTML:
2 years ago
```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&apos;s</li>
<li>Papa Johns</li>
<li>SushiQ</li>
</ul>
<p>
The fates have decided that you shall eat at:
<strong>Luigi&apos;s</strong>
2 years ago
</p>
</body>
</html>
```
## License
[MIT](https://choosealicense.com/licenses/mit/)