A shell script template engine for generating HTML markup
example_templates | ||
src | ||
cli.js | ||
index.js | ||
package.json | ||
README.md |
Template Engine
A shell script template engine for generating scripts that render HTML markup, or anything really.
Examples
$ #!/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 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:
#!/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 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:
<!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>