about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--I/index.lh178
l---------[-rw-r--r--]README.md142
2 files changed, 179 insertions, 141 deletions
diff --git a/I/index.lh b/I/index.lh new file mode 100644 index 0000000..3b84431 --- /dev/null +++ b/I/index.lh
@@ -0,0 +1,178 @@
1<h1>UNK</h1>
2
3<h2>a very small static site generator</h2>
4
5__UNK__ is an experiment in minimalism.
6It is a templating static site generator
7with an included markup language
8that all fits with 1000 bytes.
9There are three main scripts:
10
11<ul>
12 <li><strong>UNK</strong, a bash script that applies the template
13 to each page and publishes them to the output dir,</li>
14 <li><strong>LHT</strong, an awk script that serves as a (very) basic
15 markup language, and</li>
16 <li><strong>TM</strong,
17 the default template script for <strong>UNK</strong>.</li>
18</ul>
19
20__UNK__ and __LHT__ are 250 bytes each, for a total of 500 bytes.
21__TM__ takes up the remaining 500 bytes
22of the target 1000 bytes.
23You are, of course, free to make the template file as large
24and involved as you like.
25
26<h1>DETAILS</h1>
27
28<h2>unk</h2>
29
30__UNK__ takes a set of files in a directory, applies a template to them,
31and output them into another directory as HTML files ready for a server.
32To keep a very small size, __UNK__ delegates most file processing to __TM__,
33the main template. It delegates by using an idea found in
34<a href="https://github.com/zimbatm/shab">shab</a>:
35each input file is read as a `heredoc`, which enables
36shell interpolation.
37So the template, as opposed to the engine,
38can do all the heavy-lifting of index generation and navigation and such.
39
40Content goes into the following (hard-coded) directories:
41
42<ul>
43 <li><strong>I/</strong>,
44 for written (<em><strong>I</strong>nput</em>) content
45 (the pages of the site),</li>
46 <li><strong>S/</strong>, for <em><strong>S</strong>tatic</em> content
47 (css, images, etc.), &amp;</li>
48 <li><strong>O/</strong>, for the (<em><strong>O</strong>utput</em>)
49 website, ready for <code>rsync</code>ing to a server.</li>
50</ul>
51
52If there is no __TM__ in the directory where __UNK__ is run,
53one will be created that will simply `cat` the file being processed.
54
55The following variables are made available to __TM__:
56
57<ul>
58 <li><strong>FN</strong>: the <em>FileName</em>
59 (with directories removed) of the file being processed</li>
60 <li><strong>TT</strong>: the <em>TiTle</em>
61 (the first line) of the file</li>
62 <li><strong>BD</strong>: the <em>BoDy</em>
63 (the rest) of the file</li>
64</ul>
65
66as well as this function:
67
68<ul>
69 <li><strong>X</strong, for <em>eXpand</em>:
70 the <code>shab</code> stand-in.
71 It is much simpler than <code>shab</code>,
72 and will fail if the template
73 (or if it nests templates, one of the nested ones)
74 has a <code>ZZ</code> on a line by itself,
75 due to its <code>heredoc</code> nature.</li>
76</ul>
77
78and these aliases (though they're more an artefact of saving space
79in the script, but they can be used in templates):
80
81<ul>
82 <li><strong>c</strong>: <code>cat</code></li>
83 <li><strong>q</strong>: <code>test</code></li>
84 <li><strong>e</strong>: <code>echo</code></li>
85</ul>
86
87As mentioned above, templates can be nested.
88Simply call another template from __TM__ with the __X__ function.
89
90<h2>lht</h2>
91
92__LHT__ stands for *Less HyperText*,
93because that's what you're writing when you're writing it
94(though not much less than HTML).
95Basically,
96blank lines are interpreted as <code>&lt;p&gt;</code> tag breaks,
97unless the previous source paragraph started with
98<code>&lt;</code> and ended with <code>&gt;</code>.
99It also has support for three inline spans:
100
101<ul>
102 <li><code>&#42;em&#42;</code>
103 as <em>em</em></li>
104 <li><code>&#95;&#95;strong&#95;&#95;</code>
105 as <strong>strong</strong></li>
106 <li><code>&#96;code&#96; as <code>code</code></li>
107</ul>
108
109Everything else is just HTML.
110This means that a valid `.lht` file is *almost* a valid `.md` file,
111except where it nests HTML and Markdown
112(so it's not really, but you can run it through Markdown in a pinch
113and get the basic idea across.
114This file, for example, is both `index.lht` and `README.md`
115(they're just symlinked to each other),
116so it's got some weirdness to keep things compatible between Markdown and LHT.
117But if you're just writing for LHT, it can be much simpler.).
118
119__LHT__ was inspired, in part, by
120<a href="http://john.ankarstrom.se/html">Writing HTML in HTML</a>
121by John Ankarstrom,
122as well as some other articles I can't think of right now.
123I liked the idea, but some tags in HTML are just annoying to write
124over and over, and take me out of the flow of writing prose.
125So I fixed those few tags.
126__The inline tags are definitely subject to change.__
127
128<h1>Why?</h1>
129
130I was bored and decided I'd try to write a static site generator
131that could fit in a
132<a href="https://writing.exchange/web/statuses/102333562361891512">toot</a>
133(500 characters).
134I
135<a href="https://writing.exchange/web/statuses/102334522981990897">wrote</a>
136<a href="https://writing.exchange/web/statuses/102334522981990897">a few</a>
137<a href="https://writing.exchange/web/statuses/102339851501562648">of them</a>,
138making them smaller and smaller each time.
139By the end, I was left with a *tiny* script
140that delegated almost *all* the work to the template file.
141That script became __UNK__ in this repo.
142
143I was feeling pretty high on my horse after writing the tiny SSG,
144so I thought,
145<em><a href="https://writing.exchange/@acdw/102339290120562386">maybe
146I could try for a tootable Markdown converter next</a></em>
147boy, was I wrong about that.
148Markdown is *way* too complicated to fit in 500 bytes.
149So I just wrote the Really Important Parts: <code>&lt;p&gt;</code>
150and some inlines.
151
152<h1>LEGAL</h1>
153
154Copyright &copy; 2019 Case Duckworth
155<a href="mailto:acdw@acdw.net">&lt;acdw@acdw.net&gt;</a>.
156
157This work is free.
158You can redistribute it and/or modify it under the terms of
159the Do What The Fuck You Want To Public License, Version 2,
160as published by Sam Hocevar.
161See the LICENSE file for more details.
162
163<h2>Why this license?</h2>
164
165I was going to go with a stricter license like the GPL,
166but realized that
167
168<ol>
169 <li>this software isn't so important or time-consuming that I need
170 others to credit me or redistribute the project under the same terms,
171 and</li>
172 <li>the GPL is <em>way</em> too long for a project like this.
173 It's over 35 times <em>bigger</em> than the entirety of this project,
174 not counting the content or this README.
175 It would weigh down the entire undertaking.
176 The WTFPL, by contrast, is a trim 443 characters,
177 which is right in keeping with the smallness of this project.</li>
178</ol>
diff --git a/README.md b/README.md index c25e751..b23acff 100644..120000 --- a/README.md +++ b/README.md
@@ -1,141 +1 @@
1# UNK I/index.lh \ No newline at end of file
2
3## a very small static site generator
4
5**UNK** is an experiment in minimalism.
6It is a templating static site generator
7with an included markup language
8that all fits with 1000 bytes.
9There are three main scripts:
10
11- **UNK**, a bash script that applies the template
12 to each page and publishes them to the output dir,
13- **LHT**, an awk script that serves as a (very) basic
14 markup language, and
15- **TM**, the default template script for **UNK**.
16
17**UNK** and **LHT** are 250 bytes each, for a total of 500 bytes.
18**TM** takes up the remaining 500 bytes
19of the target 1000 bytes.
20You are, of course, free to make the template file as large
21and involved as you like.
22
23# DETAILS
24
25## unk
26
27**UNK** takes a set of files in a directory, applies a template to them,
28and output them into another directory as HTML files ready for a server.
29To keep a very small size, **UNK** delegates most file processing to **TM**,
30the main template. It delegates by using an idea found in
31[shab](https://github.com/zimbatm/shab):
32each input file is read as a `heredoc`, which enables
33shell interpolation.
34So the template, as opposed to the engine,
35can do all the heavy-lifting of index generation and navigation and such.
36
37Content goes into the following (hard-coded) directories:
38
39- **I/**, for written (*__i__nput*) content (the pages of the site),
40- **S/**, for ***s***tatic content (css, images, etc.), &
41- **O/**, for the (*__o__utput*) website, ready for `rsync`ing
42 to a server.
43
44If there is no **TM** in the directory where **UNK** is run,
45one will be created that will simply `cat` the file being processed.
46
47The following variables are made available to **TM**:
48
49- **FN**: the *FileName* (with directories removed)
50 of the file being processed
51- **TT**: the *TiTle* (the first line) of the file
52- **BD**: the *BoDy* (the rest) of the file
53
54as well as this function:
55
56- **X**, for *eXpand*: the `shab` stand-in.
57 It is much simpler than `shab`, and will fail if the template
58 (or if it nests templates, one of the nested ones)
59 has a `ZZ` on a line by itself, due to its `heredoc` nature.
60
61and these aliases (though they're more an artefact of saving space
62in the script, but they can be used in templates):
63
64- **c**: `cat`
65- **q**: `test`
66- **e**: `echo`
67
68As mentioned above, templates can be nested.
69Simply call another template from **TM** with the **X** function.
70
71## lht
72
73**LHT** stands for *Less HyperText*,
74because that's what you're writing when you're writing it
75(though not much less than HTML).
76Basically,
77blank lines are interpreted as `<p>` tag breaks,
78unless the previous source paragraph started with `<` and ended with `>`.
79It also has support for three inline spans:
80
81- `*em*` or `_em_` as *em*
82- `**strong**` or `__strong__` as **strong**
83- `` `code` `` as `code`.
84
85Everything else is just HTML.
86
87**LHT** was inspired, in part, by
88[Writing HTML in HTML](http://john.ankarstrom.se/html) by John Ankarstrom,
89as well as some other articles I can't think of right now.
90I liked the idea, but some tags in HTML are just annoying to write
91over and over, and take me out of the flow of writing prose.
92So I fixed those few tags.
93**The inline tags are definitely subject to change.**
94
95# Why?
96
97I was bored and decided I'd try to write a static site generator
98that could fit in a [toot] (500 characters).
99I [wrote][1] [a few][2] [of them][3],
100making them smaller and smaller each time.
101By the end, I was left with a *tiny* script
102that delegated almost *all* the work to the template file.
103That script became **UNK** in this repo.
104
105[toot]: https://writing.exchange/web/statuses/102333562361891512
106[1]: https://writing.exchange/web/statuses/102334522981990897
107[2]: https://writing.exchange/web/statuses/102334522981990897
108[3]: https://writing.exchange/web/statuses/102339851501562648
109
110I was feeling pretty high on my horse after writing the tiny SSG,
111so I thought,
112*[maybe I could try for a tootable Markdown converter next][4]* --
113boy, was I wrong about that.
114Markdown is *way* too complicated to fit in 500 bytes.
115So I just wrote the Really Important Parts: `<p>` and some inlines.
116
117[4]: https://writing.exchange/@acdw/102339290120562386
118
119# LEGAL
120
121Copyright &copy; 2019 Case Duckworth &lt;<acdw@acdw.net>&gt;.
122
123This work is free.
124You can redistribute it and/or modify it under the terms of
125the Do What The Fuck You Want To Public License, Version 2,
126as published by Sam Hocevar.
127See the LICENSE file for more details.
128
129## Why this license?
130
131I was going to go with a stricter license like the GPL,
132but realized that
133
1341. this software isn't so important or time-consuming that I need
135 others to credit me or redistribute the project under the same terms, and
1362. the GPL is *way* too long for a project like this.
137 It's over 35 times *bigger* than the entirety of this project,
138 not counting the content or this README.
139 It would weigh down the entire undertaking.
140 The WTFPL, by contrast, is a trim 443 characters,
141 which is right in keeping with the smallness of this project.