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.
 
Ben Ashton 68b435b095 Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago
example_templates Fixed read to prevent mangling backslashes 2 years ago
src Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago
.gitignore Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago
README.md Fixed read to prevent mangling backslashes 2 years ago
cli.js Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago
index.js Initial commit 2 years ago
package-lock.json Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago
package.json Added support for executing templates directly. After installing, templates with an appropriate hashbang can be marked as executable and ran directly. 2 years ago

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 -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:

#!/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:

<!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>
    </p>
  </body>
</html>

License

MIT