In this age of booming web development, there are web frameworks available for pushing out a web application as quickly as possible. However, sometimes that's too much and all you need is a static site, so you pick from one of the many static site generators and start building your site.
Sometimes even that's too much. You need to write a few HTML pages, and all you
want is a simple HTML templating tool so you don't have to type {{ code('') }}
a dozen times.
In the modern app-driven world, you would be hard-pressed to find such a tool ("simple" isn't in the vocabulary), but the old UNIX world offers a solution: M4.
M4 is a general text preprocessing tool and works nicely for templating HTML. Make header and footer templates:
m4_dnl header.m4
m4_dnl These lines can be used as comments.
m4_dnl "dnl" means "delete to newline".
TITLE
m4_dnl This placeholder TITLE will be replaced later.
m4_dnl footer.m4
Write your content:
m4_dnl index.m4
m4_define(TITLE, My home page)m4_dnl
m4_dnl The m4_define here defines a macro.
m4_dnl "TITLE" will now be replaced with "My home page".
m4_dnl That includes the "TITLE" in our header template.
m4_dnl The "m4_dnl" after the "m4_define" removes the newline.
m4_dnl It's only needed if you care about blank lines in the output.
m4_include(header.m4)m4_dnl
m4_dnl Here we include our header template.
My home page
Hello World!
m4_include(footer.m4)m4_dnl
m4_dnl Here we include our footer template.
Then run:
$ m4 -P index.m4 > index.html
It's as simple as that. M4 offers other functions as well, so if you don't need a full static site generator, M4 should be able to fulfill any specific demands you have.