A .build.yml => .build.yml +12 -0
@@ 0,0 1,12 @@
+image: debian/stable
+oauth: pages.sr.ht/PAGES:RW
+environment:
+ site: barf.bt.ht
+sources:
+ - https://git.sr.ht/~bt/barf
+tasks:
+- package: |
+ cd barf/build
+ tar -cvz . > ../../site.tar.gz
+- upload: |
+ acurl -f https://pages.sr.ht/publish/$site -Fcontent=@site.tar.gz
A Makefile => Makefile +13 -0
@@ 0,0 1,13 @@
+build:
+ ./barf
+ rsync -r public/ build/public
+
+clean:
+ rm -rf build/*
+
+watch:
+ while true; do \
+ ls -d .git/* * posts/* pages/* header.html | entr -cd make ;\
+ done
+
+.PHONY: build clean watch
M README.md => README.md +15 -1
@@ 4,7 4,7 @@ barf is an extremely minimal blog generator.
The entire build script is less than 100 lines of shell.
-It could *almost* be called "suckless", but probably isnt.
+It could *almost* be called "suckless", but probably isn't.
(barf is a modified/forked version of Karl Bartel's fantastic [blog.sh](https://github.com/karlb/karl.berlin). Be sure to check it out since my version does things slightly different.)
@@ 14,6 14,8 @@ It could *almost* be called "suckless", but probably isnt.
>
> Blogs Are Really Fun
+---
+
## Core Features
- Extremely portable
@@ 21,6 23,8 @@ It could *almost* be called "suckless", but probably isnt.
- Handles both blog posts and normal pages
- No front matter or templating, just create markdown files
+---
+
## Requirements
- rsync
@@ 28,10 32,14 @@ It could *almost* be called "suckless", but probably isnt.
- entr (optonal)
- standard UNIX tools
+---
+
## Basic Setup
Clone this repo and navigate inside it. Edit the "header.html" and "footer.html" files with your own information, navigation, etc.
+Be sure to edit the **RSS meta url** or else your feed won't validate!
+
Then, clone and build my patched version of smu:
```sh
@@ 50,11 58,17 @@ Your blog content will be in the `build` directory.
Now you can delete the dummy posts/pages and start making your own!
+Media (such as images, videos) are placed in the "public" folder and carried over to the "build" folder via rsync. You can easily remove this altogether inside the main `barf` script if you plan to store media elsewhere (or not use any at all).
+
+---
+
## Projects Goals
- The core focus should be to **reduce** the code of this project, not increase it. Overall scope needs to remain small.
- Major tweaks/add-ons should be run by individuals via forks/patches - not put into the barf base
+---
+
## FAQs
### How do I test locally?
A barf => barf +101 -0
@@ 0,0 1,101 @@
+#!/bin/sh
+set -eu
+MARKDOWN=smu
+IFS=' '
+
+# Create tab separated file with filename, title, creation date, last update
+index_tsv() {
+ for f in "$1"/*.md
+ do
+ title=$(sed -n '/^# /{s/# //p; q}' "$f")
+ printf '%s\t%s\t%s\t%s\n' "$f" "${title:="No Title"}"
+ done
+}
+
+index_html() {
+ # Print header
+ title=$(sed -n '/^# /{s/# //p; q}' index.md)
+ sed "s/{{TITLE}}/$title/" header.html
+
+ # Intro text
+ $MARKDOWN index.md
+
+ # Posts
+ while read -r f title created; do
+ link=$(echo "$f" | sed -E 's|.*/(.*).md|\1/|')
+ created=$(echo $(head -3 "$f" | tail -1))
+ echo "<span class='created'>$created — <a href=\"$link\">$title</a></span>"
+ done < "$1" | sort -r
+
+ # Print footer after post list
+ cat footer.html
+}
+
+atom_xml() {
+ uri=$(sed -rn '/atom.xml/ s/.*href="([^"]*)".*/\1/ p' header.html)
+ domain=$(echo "$uri" | sed 's/atom.xml//g' | sed 's|/[^/]*$||')
+ first_commit_date=$(git log --pretty='format:%ai' . | cut -d ' ' -f1 | tail -1)
+
+ cat <<EOF
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>$(sed -n '/^# /{s/# //p; q}' index.md)</title>
+ <link href="$domain/atom.xml" rel="self" />
+ <updated>$(date +%FT%TZ)</updated>
+ <author>
+ <name>$(git config user.name)</name>
+ </author>
+ <id>$domain,$first_commit_date:default-atom-feed/</id>
+EOF
+
+ while read -r f title created; do
+
+ content=$($MARKDOWN "$f" | sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g')
+ post_link=$(echo "$f" | sed -E 's|posts/(.*).md|\1|')
+ basic_date=$(echo $(head -3 "$f" | tail -1))
+ published_date=$(date -d $basic_date +%FT%TZ)
+
+ cat <<EOF
+ <entry>
+ <title>$title</title>
+ <content type="html">$content</content>
+ <link href="$domain/$post_link"/>
+ <id>$domain/$post_link</id>
+ <updated>$published_date</updated>
+ <published>$published_date</published>
+ </entry>
+EOF
+ done < "$1"
+
+ echo '</feed>'
+}
+
+write_page() {
+ filename=$1
+ directory=$(echo $(basename "$filename" .md))
+ $(mkdir -p build/$directory)
+ target=$(echo "$filename" | sed -r 's|\w+/(.*).md|build/\1/index.html|')
+ created=$(echo $(head -3 "$filename" | tail -1))
+ title=$2
+
+ $MARKDOWN "$filename" | \
+ cat header.html - |\
+ sed "s|{{TITLE}}|$title|" \
+ > "$target" && cat footer.html >> "$target"
+}
+
+rm -fr build && mkdir build
+
+# Blog posts
+index_tsv posts | sort -rt " " -k 3 > build/posts.tsv
+index_html build/posts.tsv > build/index.html
+atom_xml build/posts.tsv > build/atom.xml
+while read -r f title created; do
+ write_page "$f" "$title" "$created"
+done < build/posts.tsv
+
+# Pages
+index_tsv pages > build/pages.tsv
+while read -r f title created; do
+ write_page "$f" "$title" "$created"
+done < build/pages.tsv
A build/about/index.html => build/about/index.html +121 -0
@@ 0,0 1,121 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>About `barf`</title>
+ <link href="https://barf.bt.ht/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
+ <style>
+ * {
+ box-sizing: border-box;
+ }
+ body {
+ font-family: sans-serif;
+ line-height: 1.45;
+ margin: 0 auto;
+ max-width: 45rem;
+ padding: 0 15px;
+ }
+ hr {
+ background-color: grey;
+ border: 0;
+ height: 1px;
+ margin: 2rem 0;
+ }
+ nav {
+ margin: 2rem 0 0;
+ }
+ main {
+ hyphens: auto;
+ }
+ main p {
+ margin: 1rem;
+ }
+ h1,h2,h3,h4 {
+ margin: 2rem 0 0;
+ }
+ h1 {
+ margin-bottom: 0.5rem;
+ }
+ h1 + p {
+ margin: 0 0 1rem;
+ }
+ span.created {
+ display: block;
+ margin: 4px 15px;
+ }
+ img {
+ border: 1px solid lightgrey;
+ height: auto;
+ max-width: 100%;
+ width: auto;
+ }
+ blockquote {
+ background-color: linen;
+ border-left: 4px solid lightcoral;
+ margin: 2rem 0;
+ padding: 10px;
+ }
+ blockquote p {
+ margin: 0;
+ }
+ figure {
+ margin: 2rem 0;
+ }
+ figcaption {
+ color: slategrey;
+ }
+ code {
+ background: #eee;
+ padding: 0.3rem;
+ tab-size: 4;
+ }
+ pre {
+ background: #eee;
+ }
+ pre code {
+ background: none;
+ display: block;
+ overflow-x: auto;
+ padding: 0.3rem 0.6rem;
+ }
+ table {
+ border-collapse: collapse;
+ margin: 2rem 0;
+ text-align: left;
+ width: 100%;
+ }
+ tr {
+ border-bottom: 1px solid lightgrey;
+ }
+ tr:nth-of-type(odd) td {
+ background-color: #f8f8f8;
+ }
+ th,td {
+ padding: 6px;
+ }
+ footer {
+ border-top: 1px dashed grey;
+ margin: 2rem 0;
+ padding: 1rem 15px;
+ }
+ </style>
+</head>
+
+<nav>
+ <a href="/">Home</a><span> | </span><a href="/about">About</a><span> | </span><a href="/websites">Websites</a><span> | </span><a href="https://git.sr.ht/~bt/barf">Source Code</a>
+</nav>
+
+<main>
+<h1>About <code>barf</code></h1>
+<p>barf is a minimal and suckless-inspired blog generator. It is a tweaked and slightly patched version of Karl Bartel's fantastic <a href="https://github.com/karlb/karl.berlin">blog.sh</a>.</p>
+<h2>Why?</h2>
+<p>This project was created by me, <a href="https://bt.ht">Bradley Taunt</a>, out of frustration with overly complex and bloated blogging options. I tried <em>so many</em> "minimal" generators but each on ended up having some glaring issue or heavy reliance on dependencies. </p>
+<p>I wanted to have a system that I could easily replicate on any Linux machine. Something that didn't require me to download half the internet just to get up and running. I'm a sucker for keeping things simple.</p>
+<footer role="contentinfo">
+ <span><a href="#">↑ Back to Top</a></span><br><br>
+ <small>
+ Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
+ The <a href="https://git.sr.ht/~bt/barf">code for this site</a> is <a href="https://git.sr.ht/~bt/barf/tree/master/item/LICENSE">MIT</a>.
+ </small>
+</footer><
\ No newline at end of file
A build/atom.xml => build/atom.xml +250 -0
@@ 0,0 1,250 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>barf</title>
+ <link href="https://barf.bt.ht/atom.xml" rel="self" />
+ <updated>2023-01-05T09:55:21Z</updated>
+ <author>
+ <name>Bradley Taunt</name>
+ </author>
+ <id>https://barf.bt.ht,2023-01-04:default-atom-feed/</id>
+ <entry>
+ <title>Markdown Examples in barf</title>
+ <content type="html"><h1>Markdown Examples in barf</h1>
+<p>2022-01-05</p>
+<p>This following was lifted from <a href="https://github.com/karlb/smu">https://github.com/karlb/smu</a></p>
+<h1><code>smu</code> Syntax</h1>
+<p>smu was started as a rewrite of
+<a href="http://daringfireball.net/projects/markdown/">markdown</a> but became something
+more lightweight and consistent. It differs from <a href="https://commonmark.org/">CommonMark</a> in the following ways:</p>
+<ul>
+<li>No support for <em>reference style links</em></li>
+<li>Stricter indentation rules for lists</li>
+<li>Lists don't end paragraphs by themselves (blank line needed)</li>
+<li>Horizontal rules (<code>&lt;hr&gt;</code>) must use <code>- - -</code> as syntax</li>
+<li>Code fences have stricter syntax</li>
+</ul>
+<p>Patches that increase the CommonMark compatibility are welcome as long as they don't increase the code complexity significantly.</p>
+<p>This project is a fork of the <a href="https://github.com/gottox/smu">original smu</a> by
+<a href="https://eboland.de">Enno Boland (gottox)</a>. The main differences to the
+original smu are:</p>
+<ul>
+<li>Support for code fences</li>
+<li>Improved <a href="https://commonmark.org/">CommonMark</a> compatibility. E.g.
+<ul>
+<li>Code blocks need four spaces indentation instead of three</li>
+<li>Skip empty lines at end of code blocks</li>
+<li>Ignore single spaces around code spans</li>
+<li>Keep HTML comments in output</li>
+<li>Improved spec compliance for lists</li>
+<li>Nesting code block in blockquotes works</li>
+<li>"Empty" lines in lists behave identically, no matter how much whitespace they contain</li>
+<li>No backslash escapes in code blocks</li>
+<li>Use first number as start number for ordered lists</li>
+</ul>
+</li>
+<li>Added a simple test suite to check for compliance and avoid regressions</li>
+</ul>
+<h2>Inline patterns</h2>
+<p>There are several patterns you can use to highlight your text:</p>
+<ul>
+<li><p>Emphasis</p>
+
+<ul>
+<li>Surround your text with <code>*</code> or <code>_</code> to get <em>emphasised</em> text:
+<pre><code>This *is* cool.
+This _is_ cool, too.
+</code></pre>
+</li>
+<li>Surround your text with <code>**</code> or <code>__</code> to get <strong>strong</strong> text:
+<pre><code>This **is** cool.
+This __is__ cool, too.
+</code></pre>
+</li>
+<li>Surround your text with <code>***</code> or <code>___</code> to get <strong><em>strong and emphasised</em></strong> text:
+<pre><code>This ***is*** cool.
+This ___is___ cool, too.
+</code></pre>
+</li>
+<li>But this example won't work as expected:
+<pre><code>***Hello** you*
+</code></pre>
+<p>This is a wontfix bug because it would make the source too complex.
+Use this instead:
+</p>
+<pre><code>***Hello*** *you*
+</code></pre>
+</li>
+</ul>
+</li>
+<li><p>inline Code</p>
+<p>You can produce inline code by surrounding it with backticks.</p>
+<pre><code>Use `rm -rf /` if you're a N00b.
+Use ``rm -rf /`` if you're a N00b.
+Use ```rm -rf /``` if you're a N00b.
+</code></pre>
+<p>Double and triple backticks can be used if the code itself contains backticks.</p>
+</li>
+</ul>
+<h2>Titles</h2>
+<p>Creating titles in smu is very easy. There are two different syntax styles. The
+first is underlining with at least three characters:</p>
+<pre><code>Heading
+=======
+
+Topic
+-----
+</code></pre>
+<p>This is very intuitive and self explaining. The resulting sourcecode looks like
+this:</p>
+<pre><code>&lt;h1&gt;Heading&lt;/h1&gt;
+&lt;h2&gt;Topic&lt;/h2&gt;
+</code></pre>
+<p>Use the following prefixes if you don't like underlining:</p>
+<pre><code># h1
+## h2
+### h3
+#### h4
+##### h5
+###### h6
+</code></pre>
+<h2>Links</h2>
+<p>The simplest way to define a link is with simple <code>&lt;&gt;</code>.</p>
+<pre><code>&lt;http://s01.de&gt;
+</code></pre>
+<p>You can do the same for E-Mail addresses:</p>
+<pre><code>&lt;yourname@s01.de&gt;
+</code></pre>
+<p>If you want to define a label for the url, you have to use a different syntax</p>
+<pre><code>[smu - simple mark up](http://s01.de/~gottox/index.cgi/proj_smu)
+</code></pre>
+<p>The resulting HTML-Code</p>
+<pre><code>&lt;a href=&quot;http://s01.de/~gottox/index.cgi/proj_smu&quot;&gt;smu - simple mark up&lt;/a&gt;&lt;/p&gt;
+</code></pre>
+<h2>Lists</h2>
+<p>Defining lists is very straightforward:</p>
+<pre><code>* Item 1
+* Item 2
+* Item 3
+</code></pre>
+<p>Result:</p>
+<pre><code>&lt;ul&gt;
+&lt;li&gt;Item 1&lt;/li&gt;
+&lt;li&gt;Item 2&lt;/li&gt;
+&lt;li&gt;Item 3&lt;/li&gt;
+&lt;/ul&gt;
+</code></pre>
+<p>Defining ordered lists is also very easy:</p>
+<pre><code>1. Item 1
+2. Item 2
+3. Item 3
+</code></pre>
+<p>Only the first number in a list is meaningful. All following list items are
+continously counted. If you want a list starting at 2, you could write:</p>
+<pre><code>2. Item 1
+2. Item 2
+2. Item 3
+</code></pre>
+<p>and get the following HTML which will render with the numbers 2, 3, 4:</p>
+<pre><code>&lt;ol start=&quot;2&quot;&gt;
+&lt;li&gt;Item 1&lt;/li&gt;
+&lt;li&gt;Item 2&lt;/li&gt;
+&lt;li&gt;Item 3&lt;/li&gt;
+&lt;/ol&gt;
+</code></pre>
+<h2>Code &amp; Blockquote</h2>
+<p>Use the <code>&gt; </code> as a line prefix for defining blockquotes. Blockquotes are
+interpreted as well. This makes it possible to embed links, headings and even
+other quotes into a quote:</p>
+<pre><code>&gt; Hello
+&gt; This is a quote with a [link](http://s01.de/~gottox)
+</code></pre>
+<p>Result:
+</p>
+<pre><code>&lt;blockquote&gt;&lt;p&gt;
+Hello
+This is a quote with a &lt;a href=&quot;http://s01.de/~gottox&quot;&gt;link&lt;/a&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+</code></pre>
+<p>You can define a code block with a leading Tab or with <strong>4</strong> leading spaces</p>
+<pre><code> this.is(code)
+
+ this.is(code, too)
+</code></pre>
+<p>Result:
+</p>
+<pre><code>&lt;pre&gt;&lt;code&gt;this.is(code)&lt;/code&gt;&lt;/pre&gt;
+&lt;pre&gt;&lt;code&gt;this.is(code, too)
+&lt;/code&gt;&lt;/pre&gt;
+</code></pre>
+<p>Please note that you can't use HTML or smu syntax in a code block.</p>
+<p>Another way to write code blocks is to use code fences:</p>
+<pre><code>```json
+{&quot;some&quot;: &quot;code&quot;}
+```
+</code></pre>
+<p>This has two advantages:</p>
+
+<ul>
+<li>The optional language identifier will be turned into a <code>language-</code> class name</li>
+<li>You can keep the original indentation which helps when doing copy &amp; paste</li>
+</ul>
+<h2>Tables</h2>
+<p>Tables can be generated with the following syntax:</p>
+<pre><code>| Heading1 | Heading2 |
+| -------- | -------- |
+| Cell 1 | Cell2 |
+</code></pre>
+<p>Aligning the columns make the input nicer to read, but is not necessary to get
+correct table output. You could just write</p>
+<pre><code>| Heading1 | Heading2 |
+| --- | --- |
+| Cell 1 | Cell2 |
+</code></pre>
+<p>To align the content of table cells, use <code>|:--|</code> for left, <code>|--:|</code> for right
+and <code>|:--:|</code> for centered alignment in the row which separates the header from
+the table body.</p>
+<pre><code>| Heading1 | Heading2 | Heading3 |
+| :------- | :------: | -------: |
+| Left | Center | Right |
+</code></pre>
+<h2>Other interesting stuff</h2>
+<ul>
+<li><p>to insert a horizontal rule simple add <code>- - -</code> into an empty line:</p>
+<pre><code>Hello
+- - -
+Hello2
+</code></pre>
+<p>Result:
+</p>
+<pre><code>&lt;p&gt;
+Hello
+&lt;hr /&gt;
+</code></pre>
+<pre><code>Hello2&lt;/p&gt;
+</code></pre>
+</li>
+<li><p>Any ASCII punctuation character may escaped by precedeing them with a
+backslash to avoid them being interpreted:</p>
+<pre><code>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[]^_`{|}~\
+</code></pre>
+</li>
+<li><p>To force a linebreak simple add two spaces to the end of the line:</p>
+<pre><code>No linebreak
+here.
+But here is
+one.
+</code></pre>
+</li>
+</ul>
+<h2>embed HTML</h2>
+<p>You can include arbitrary HTML code in your documents. The HTML will be
+passed through to the resulting document without modification. This is a good
+way to work around features that are missing in smu. If you don't want this
+behaviour, use the <code>-n</code> flag when executing smu to stricly escape the HTML
+tags.</p></content>
+ <link href="https://barf.bt.ht/markdown-examples"/>
+ <id>https://barf.bt.ht/markdown-examples</id>
+ <updated>2022-01-05T00:00:00Z</updated>
+ <published>2022-01-05T00:00:00Z</published>
+ </entry>
+</feed>
A build/index.html => build/index.html +124 -0
@@ 0,0 1,124 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>barf</title>
+ <link href="https://barf.bt.ht/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
+ <style>
+ * {
+ box-sizing: border-box;
+ }
+ body {
+ font-family: sans-serif;
+ line-height: 1.45;
+ margin: 0 auto;
+ max-width: 45rem;
+ padding: 0 15px;
+ }
+ hr {
+ background-color: grey;
+ border: 0;
+ height: 1px;
+ margin: 2rem 0;
+ }
+ nav {
+ margin: 2rem 0 0;
+ }
+ main {
+ hyphens: auto;
+ }
+ main p {
+ margin: 1rem;
+ }
+ h1,h2,h3,h4 {
+ margin: 2rem 0 0;
+ }
+ h1 {
+ margin-bottom: 0.5rem;
+ }
+ h1 + p {
+ margin: 0 0 1rem;
+ }
+ span.created {
+ display: block;
+ margin: 4px 15px;
+ }
+ img {
+ border: 1px solid lightgrey;
+ height: auto;
+ max-width: 100%;
+ width: auto;
+ }
+ blockquote {
+ background-color: linen;
+ border-left: 4px solid lightcoral;
+ margin: 2rem 0;
+ padding: 10px;
+ }
+ blockquote p {
+ margin: 0;
+ }
+ figure {
+ margin: 2rem 0;
+ }
+ figcaption {
+ color: slategrey;
+ }
+ code {
+ background: #eee;
+ padding: 0.3rem;
+ tab-size: 4;
+ }
+ pre {
+ background: #eee;
+ }
+ pre code {
+ background: none;
+ display: block;
+ overflow-x: auto;
+ padding: 0.3rem 0.6rem;
+ }
+ table {
+ border-collapse: collapse;
+ margin: 2rem 0;
+ text-align: left;
+ width: 100%;
+ }
+ tr {
+ border-bottom: 1px solid lightgrey;
+ }
+ tr:nth-of-type(odd) td {
+ background-color: #f8f8f8;
+ }
+ th,td {
+ padding: 6px;
+ }
+ footer {
+ border-top: 1px dashed grey;
+ margin: 2rem 0;
+ padding: 1rem 15px;
+ }
+ </style>
+</head>
+
+<nav>
+ <a href="/">Home</a><span> | </span><a href="/about">About</a><span> | </span><a href="/websites">Websites</a><span> | </span><a href="https://git.sr.ht/~bt/barf">Source Code</a>
+</nav>
+
+<main>
+<h1>barf</h1>
+<p><strong>barf is an extremely minimal blog generator.</strong></p>
+<p>The entire build script is less than 100 lines of shell.</p>
+<p>It could almost be called "suckless", but probably isn't. It was created for those focused on writing, not tinkering.</p>
+<p>You can learn more by reading the <a href="https://git.sr.ht/~bt/barf">official README</a>.</p>
+<p>You can also view the generated <a href="/atom.xml">Atom feed here</a></p>
+<hr />
+<span class='created'>2022-01-05 — <a href="markdown-examples/">Markdown Examples in barf</a></span>
+<footer role="contentinfo">
+ <span><a href="#">↑ Back to Top</a></span><br><br>
+ <small>
+ Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
+ The <a href="https://git.sr.ht/~bt/barf">code for this site</a> is <a href="https://git.sr.ht/~bt/barf/tree/master/item/LICENSE">MIT</a>.
+ </small>
+</footer><
\ No newline at end of file
A build/markdown-examples/index.html => build/markdown-examples/index.html +349 -0
@@ 0,0 1,349 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Markdown Examples in barf</title>
+ <link href="https://barf.bt.ht/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
+ <style>
+ * {
+ box-sizing: border-box;
+ }
+ body {
+ font-family: sans-serif;
+ line-height: 1.45;
+ margin: 0 auto;
+ max-width: 45rem;
+ padding: 0 15px;
+ }
+ hr {
+ background-color: grey;
+ border: 0;
+ height: 1px;
+ margin: 2rem 0;
+ }
+ nav {
+ margin: 2rem 0 0;
+ }
+ main {
+ hyphens: auto;
+ }
+ main p {
+ margin: 1rem;
+ }
+ h1,h2,h3,h4 {
+ margin: 2rem 0 0;
+ }
+ h1 {
+ margin-bottom: 0.5rem;
+ }
+ h1 + p {
+ margin: 0 0 1rem;
+ }
+ span.created {
+ display: block;
+ margin: 4px 15px;
+ }
+ img {
+ border: 1px solid lightgrey;
+ height: auto;
+ max-width: 100%;
+ width: auto;
+ }
+ blockquote {
+ background-color: linen;
+ border-left: 4px solid lightcoral;
+ margin: 2rem 0;
+ padding: 10px;
+ }
+ blockquote p {
+ margin: 0;
+ }
+ figure {
+ margin: 2rem 0;
+ }
+ figcaption {
+ color: slategrey;
+ }
+ code {
+ background: #eee;
+ padding: 0.3rem;
+ tab-size: 4;
+ }
+ pre {
+ background: #eee;
+ }
+ pre code {
+ background: none;
+ display: block;
+ overflow-x: auto;
+ padding: 0.3rem 0.6rem;
+ }
+ table {
+ border-collapse: collapse;
+ margin: 2rem 0;
+ text-align: left;
+ width: 100%;
+ }
+ tr {
+ border-bottom: 1px solid lightgrey;
+ }
+ tr:nth-of-type(odd) td {
+ background-color: #f8f8f8;
+ }
+ th,td {
+ padding: 6px;
+ }
+ footer {
+ border-top: 1px dashed grey;
+ margin: 2rem 0;
+ padding: 1rem 15px;
+ }
+ </style>
+</head>
+
+<nav>
+ <a href="/">Home</a><span> | </span><a href="/about">About</a><span> | </span><a href="/websites">Websites</a><span> | </span><a href="https://git.sr.ht/~bt/barf">Source Code</a>
+</nav>
+
+<main>
+<h1>Markdown Examples in barf</h1>
+<p>2022-01-05</p>
+<p>This following was lifted from <a href="https://github.com/karlb/smu">https://github.com/karlb/smu</a></p>
+<h1><code>smu</code> Syntax</h1>
+<p>smu was started as a rewrite of
+<a href="http://daringfireball.net/projects/markdown/">markdown</a> but became something
+more lightweight and consistent. It differs from <a href="https://commonmark.org/">CommonMark</a> in the following ways:</p>
+<ul>
+<li>No support for <em>reference style links</em></li>
+<li>Stricter indentation rules for lists</li>
+<li>Lists don't end paragraphs by themselves (blank line needed)</li>
+<li>Horizontal rules (<code><hr></code>) must use <code>- - -</code> as syntax</li>
+<li>Code fences have stricter syntax</li>
+</ul>
+<p>Patches that increase the CommonMark compatibility are welcome as long as they don't increase the code complexity significantly.</p>
+<p>This project is a fork of the <a href="https://github.com/gottox/smu">original smu</a> by
+<a href="https://eboland.de">Enno Boland (gottox)</a>. The main differences to the
+original smu are:</p>
+<ul>
+<li>Support for code fences</li>
+<li>Improved <a href="https://commonmark.org/">CommonMark</a> compatibility. E.g.
+<ul>
+<li>Code blocks need four spaces indentation instead of three</li>
+<li>Skip empty lines at end of code blocks</li>
+<li>Ignore single spaces around code spans</li>
+<li>Keep HTML comments in output</li>
+<li>Improved spec compliance for lists</li>
+<li>Nesting code block in blockquotes works</li>
+<li>"Empty" lines in lists behave identically, no matter how much whitespace they contain</li>
+<li>No backslash escapes in code blocks</li>
+<li>Use first number as start number for ordered lists</li>
+</ul>
+</li>
+<li>Added a simple test suite to check for compliance and avoid regressions</li>
+</ul>
+<h2>Inline patterns</h2>
+<p>There are several patterns you can use to highlight your text:</p>
+<ul>
+<li><p>Emphasis</p>
+
+<ul>
+<li>Surround your text with <code>*</code> or <code>_</code> to get <em>emphasised</em> text:
+<pre><code>This *is* cool.
+This _is_ cool, too.
+</code></pre>
+</li>
+<li>Surround your text with <code>**</code> or <code>__</code> to get <strong>strong</strong> text:
+<pre><code>This **is** cool.
+This __is__ cool, too.
+</code></pre>
+</li>
+<li>Surround your text with <code>***</code> or <code>___</code> to get <strong><em>strong and emphasised</em></strong> text:
+<pre><code>This ***is*** cool.
+This ___is___ cool, too.
+</code></pre>
+</li>
+<li>But this example won't work as expected:
+<pre><code>***Hello** you*
+</code></pre>
+<p>This is a wontfix bug because it would make the source too complex.
+Use this instead:
+</p>
+<pre><code>***Hello*** *you*
+</code></pre>
+</li>
+</ul>
+</li>
+<li><p>inline Code</p>
+<p>You can produce inline code by surrounding it with backticks.</p>
+<pre><code>Use `rm -rf /` if you're a N00b.
+Use ``rm -rf /`` if you're a N00b.
+Use ```rm -rf /``` if you're a N00b.
+</code></pre>
+<p>Double and triple backticks can be used if the code itself contains backticks.</p>
+</li>
+</ul>
+<h2>Titles</h2>
+<p>Creating titles in smu is very easy. There are two different syntax styles. The
+first is underlining with at least three characters:</p>
+<pre><code>Heading
+=======
+
+Topic
+-----
+</code></pre>
+<p>This is very intuitive and self explaining. The resulting sourcecode looks like
+this:</p>
+<pre><code><h1>Heading</h1>
+<h2>Topic</h2>
+</code></pre>
+<p>Use the following prefixes if you don't like underlining:</p>
+<pre><code># h1
+## h2
+### h3
+#### h4
+##### h5
+###### h6
+</code></pre>
+<h2>Links</h2>
+<p>The simplest way to define a link is with simple <code><></code>.</p>
+<pre><code><http://s01.de>
+</code></pre>
+<p>You can do the same for E-Mail addresses:</p>
+<pre><code><yourname@s01.de>
+</code></pre>
+<p>If you want to define a label for the url, you have to use a different syntax</p>
+<pre><code>[smu - simple mark up](http://s01.de/~gottox/index.cgi/proj_smu)
+</code></pre>
+<p>The resulting HTML-Code</p>
+<pre><code><a href="http://s01.de/~gottox/index.cgi/proj_smu">smu - simple mark up</a></p>
+</code></pre>
+<h2>Lists</h2>
+<p>Defining lists is very straightforward:</p>
+<pre><code>* Item 1
+* Item 2
+* Item 3
+</code></pre>
+<p>Result:</p>
+<pre><code><ul>
+<li>Item 1</li>
+<li>Item 2</li>
+<li>Item 3</li>
+</ul>
+</code></pre>
+<p>Defining ordered lists is also very easy:</p>
+<pre><code>1. Item 1
+2. Item 2
+3. Item 3
+</code></pre>
+<p>Only the first number in a list is meaningful. All following list items are
+continously counted. If you want a list starting at 2, you could write:</p>
+<pre><code>2. Item 1
+2. Item 2
+2. Item 3
+</code></pre>
+<p>and get the following HTML which will render with the numbers 2, 3, 4:</p>
+<pre><code><ol start="2">
+<li>Item 1</li>
+<li>Item 2</li>
+<li>Item 3</li>
+</ol>
+</code></pre>
+<h2>Code & Blockquote</h2>
+<p>Use the <code>> </code> as a line prefix for defining blockquotes. Blockquotes are
+interpreted as well. This makes it possible to embed links, headings and even
+other quotes into a quote:</p>
+<pre><code>> Hello
+> This is a quote with a [link](http://s01.de/~gottox)
+</code></pre>
+<p>Result:
+</p>
+<pre><code><blockquote><p>
+Hello
+This is a quote with a <a href="http://s01.de/~gottox">link</a></p>
+</blockquote>
+</code></pre>
+<p>You can define a code block with a leading Tab or with <strong>4</strong> leading spaces</p>
+<pre><code> this.is(code)
+
+ this.is(code, too)
+</code></pre>
+<p>Result:
+</p>
+<pre><code><pre><code>this.is(code)</code></pre>
+<pre><code>this.is(code, too)
+</code></pre>
+</code></pre>
+<p>Please note that you can't use HTML or smu syntax in a code block.</p>
+<p>Another way to write code blocks is to use code fences:</p>
+<pre><code>```json
+{"some": "code"}
+```
+</code></pre>
+<p>This has two advantages:</p>
+
+<ul>
+<li>The optional language identifier will be turned into a <code>language-</code> class name</li>
+<li>You can keep the original indentation which helps when doing copy & paste</li>
+</ul>
+<h2>Tables</h2>
+<p>Tables can be generated with the following syntax:</p>
+<pre><code>| Heading1 | Heading2 |
+| -------- | -------- |
+| Cell 1 | Cell2 |
+</code></pre>
+<p>Aligning the columns make the input nicer to read, but is not necessary to get
+correct table output. You could just write</p>
+<pre><code>| Heading1 | Heading2 |
+| --- | --- |
+| Cell 1 | Cell2 |
+</code></pre>
+<p>To align the content of table cells, use <code>|:--|</code> for left, <code>|--:|</code> for right
+and <code>|:--:|</code> for centered alignment in the row which separates the header from
+the table body.</p>
+<pre><code>| Heading1 | Heading2 | Heading3 |
+| :------- | :------: | -------: |
+| Left | Center | Right |
+</code></pre>
+<h2>Other interesting stuff</h2>
+<ul>
+<li><p>to insert a horizontal rule simple add <code>- - -</code> into an empty line:</p>
+<pre><code>Hello
+- - -
+Hello2
+</code></pre>
+<p>Result:
+</p>
+<pre><code><p>
+Hello
+<hr />
+</code></pre>
+<pre><code>Hello2</p>
+</code></pre>
+</li>
+<li><p>Any ASCII punctuation character may escaped by precedeing them with a
+backslash to avoid them being interpreted:</p>
+<pre><code>!"#$%&'()*+,-./:;<=>?@[]^_`{|}~\
+</code></pre>
+</li>
+<li><p>To force a linebreak simple add two spaces to the end of the line:</p>
+<pre><code>No linebreak
+here.
+But here is
+one.
+</code></pre>
+</li>
+</ul>
+<h2>embed HTML</h2>
+<p>You can include arbitrary HTML code in your documents. The HTML will be
+passed through to the resulting document without modification. This is a good
+way to work around features that are missing in smu. If you don't want this
+behaviour, use the <code>-n</code> flag when executing smu to stricly escape the HTML
+tags.</p>
+<footer role="contentinfo">
+ <span><a href="#">↑ Back to Top</a></span><br><br>
+ <small>
+ Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
+ The <a href="https://git.sr.ht/~bt/barf">code for this site</a> is <a href="https://git.sr.ht/~bt/barf/tree/master/item/LICENSE">MIT</a>.
+ </small>
+</footer><
\ No newline at end of file
A build/pages.tsv => build/pages.tsv +2 -0
@@ 0,0 1,2 @@
+pages/about.md About `barf`
+pages/websites.md Websites Built with `barf`
A build/posts.tsv => build/posts.tsv +1 -0
@@ 0,0 1,1 @@
+posts/markdown-examples.md Markdown Examples in barf
A build/websites/index.html => build/websites/index.html +121 -0
@@ 0,0 1,121 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Websites Built with `barf`</title>
+ <link href="https://barf.bt.ht/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
+ <style>
+ * {
+ box-sizing: border-box;
+ }
+ body {
+ font-family: sans-serif;
+ line-height: 1.45;
+ margin: 0 auto;
+ max-width: 45rem;
+ padding: 0 15px;
+ }
+ hr {
+ background-color: grey;
+ border: 0;
+ height: 1px;
+ margin: 2rem 0;
+ }
+ nav {
+ margin: 2rem 0 0;
+ }
+ main {
+ hyphens: auto;
+ }
+ main p {
+ margin: 1rem;
+ }
+ h1,h2,h3,h4 {
+ margin: 2rem 0 0;
+ }
+ h1 {
+ margin-bottom: 0.5rem;
+ }
+ h1 + p {
+ margin: 0 0 1rem;
+ }
+ span.created {
+ display: block;
+ margin: 4px 15px;
+ }
+ img {
+ border: 1px solid lightgrey;
+ height: auto;
+ max-width: 100%;
+ width: auto;
+ }
+ blockquote {
+ background-color: linen;
+ border-left: 4px solid lightcoral;
+ margin: 2rem 0;
+ padding: 10px;
+ }
+ blockquote p {
+ margin: 0;
+ }
+ figure {
+ margin: 2rem 0;
+ }
+ figcaption {
+ color: slategrey;
+ }
+ code {
+ background: #eee;
+ padding: 0.3rem;
+ tab-size: 4;
+ }
+ pre {
+ background: #eee;
+ }
+ pre code {
+ background: none;
+ display: block;
+ overflow-x: auto;
+ padding: 0.3rem 0.6rem;
+ }
+ table {
+ border-collapse: collapse;
+ margin: 2rem 0;
+ text-align: left;
+ width: 100%;
+ }
+ tr {
+ border-bottom: 1px solid lightgrey;
+ }
+ tr:nth-of-type(odd) td {
+ background-color: #f8f8f8;
+ }
+ th,td {
+ padding: 6px;
+ }
+ footer {
+ border-top: 1px dashed grey;
+ margin: 2rem 0;
+ padding: 1rem 15px;
+ }
+ </style>
+</head>
+
+<nav>
+ <a href="/">Home</a><span> | </span><a href="/about">About</a><span> | </span><a href="/websites">Websites</a><span> | </span><a href="https://git.sr.ht/~bt/barf">Source Code</a>
+</nav>
+
+<main>
+<h1>Websites Built with <code>barf</code></h1>
+<p>Send an email to brad [at] bt [dot] ht if you would like me to add your barf-generated website to this list.</p>
+<ul>
+<li><a href="https://bt.ht">https://bt.ht</a></li>
+</ul>
+<footer role="contentinfo">
+ <span><a href="#">↑ Back to Top</a></span><br><br>
+ <small>
+ Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
+ The <a href="https://git.sr.ht/~bt/barf">code for this site</a> is <a href="https://git.sr.ht/~bt/barf/tree/master/item/LICENSE">MIT</a>.
+ </small>
+</footer><
\ No newline at end of file
A => +7 -0
@@ 0,0 1,7 @@
<footer role="contentinfo">
<span><a href="#">↑ Back to Top</a></span><br><br>
<small>
Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
The <a href="https://git.sr.ht/~bt/barf">code for this site</a> is <a href="https://git.sr.ht/~bt/barf/tree/master/item/LICENSE">MIT</a>.
</small>
</footer>
\ No newline at end of file
A => +109 -0
@@ 0,0 1,109 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{TITLE}}</title>
<link href="https://barf.bt.ht/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
<style>
* {
box-sizing: border-box;
}
body {
font-family: sans-serif;
line-height: 1.45;
margin: 0 auto;
max-width: 45rem;
padding: 0 15px;
}
hr {
background-color: grey;
border: 0;
height: 1px;
margin: 2rem 0;
}
nav {
margin: 2rem 0 0;
}
main {
hyphens: auto;
}
main p {
margin: 1rem;
}
h1,h2,h3,h4 {
margin: 2rem 0 0;
}
h1 {
margin-bottom: 0.5rem;
}
h1 + p {
margin: 0 0 1rem;
}
span.created {
display: block;
margin: 4px 15px;
}
img {
border: 1px solid lightgrey;
height: auto;
max-width: 100%;
width: auto;
}
blockquote {
background-color: linen;
border-left: 4px solid lightcoral;
margin: 2rem 0;
padding: 10px;
}
blockquote p {
margin: 0;
}
figure {
margin: 2rem 0;
}
figcaption {
color: slategrey;
}
code {
background: #eee;
padding: 0.3rem;
tab-size: 4;
}
pre {
background: #eee;
}
pre code {
background: none;
display: block;
overflow-x: auto;
padding: 0.3rem 0.6rem;
}
table {
border-collapse: collapse;
margin: 2rem 0;
text-align: left;
width: 100%;
}
tr {
border-bottom: 1px solid lightgrey;
}
tr:nth-of-type(odd) td {
background-color: #f8f8f8;
}
th,td {
padding: 6px;
}
footer {
border-top: 1px dashed grey;
margin: 2rem 0;
padding: 1rem 15px;
}
</style>
</head>
<nav>
<a href="/">Home</a><span> | </span><a href="/about">About</a><span> | </span><a href="/websites">Websites</a><span> | </span><a href="https://git.sr.ht/~bt/barf">Source Code</a>
</nav>
<main>
A index.md => index.md +13 -0
@@ 0,0 1,13 @@
+# barf
+
+**barf is an extremely minimal blog generator.**
+
+The entire build script is less than 100 lines of shell.
+
+It could almost be called "suckless", but probably isn't. It was created for those focused on writing, not tinkering.
+
+You can learn more by reading the [official README](https://git.sr.ht/~bt/barf).
+
+You can also view the generated [Atom feed here](/atom.xml)
+
+---
A pages/about.md => pages/about.md +9 -0
@@ 0,0 1,9 @@
+# About `barf`
+
+barf is a minimal and suckless-inspired blog generator. It is a tweaked and slightly patched version of Karl Bartel's fantastic [blog.sh](https://github.com/karlb/karl.berlin).
+
+## Why?
+
+This project was created by me, [Bradley Taunt](https://bt.ht), out of frustration with overly complex and bloated blogging options. I tried *so many* "minimal" generators but each on ended up having some glaring issue or heavy reliance on dependencies.
+
+I wanted to have a system that I could easily replicate on any Linux machine. Something that didn't require me to download half the internet just to get up and running. I'm a sucker for keeping things simple.
A pages/websites.md => pages/websites.md +5 -0
@@ 0,0 1,5 @@
+# Websites Built with `barf`
+
+Send an email to brad [at] bt [dot] ht if you would like me to add your barf-generated website to this list.
+
+- [https://bt.ht](https://bt.ht)<
\ No newline at end of file
A posts/markdown-examples.md => posts/markdown-examples.md +254 -0
@@ 0,0 1,254 @@
+# Markdown Examples in barf
+
+2022-01-05
+
+This following was lifted from [https://github.com/karlb/smu](https://github.com/karlb/smu)
+
+`smu` Syntax
+============
+
+smu was started as a rewrite of
+[markdown](http://daringfireball.net/projects/markdown/) but became something
+more lightweight and consistent. It differs from [CommonMark](https://commonmark.org/) in the following ways:
+
+* No support for _reference style links_
+* Stricter indentation rules for lists
+* Lists don't end paragraphs by themselves (blank line needed)
+* Horizontal rules (`<hr>`) must use `- - -` as syntax
+* Code fences have stricter syntax
+
+Patches that increase the CommonMark compatibility are welcome as long as they don't increase the code complexity significantly.
+
+This project is a fork of the [original smu](https://github.com/gottox/smu) by
+[Enno Boland (gottox)](https://eboland.de). The main differences to the
+original smu are:
+
+* Support for code fences
+* Improved [CommonMark](https://commonmark.org/) compatibility. E.g.
+ * Code blocks need four spaces indentation instead of three
+ * Skip empty lines at end of code blocks
+ * Ignore single spaces around code spans
+ * Keep HTML comments in output
+ * Improved spec compliance for lists
+ * Nesting code block in blockquotes works
+ * "Empty" lines in lists behave identically, no matter how much whitespace they contain
+ * No backslash escapes in code blocks
+ * Use first number as start number for ordered lists
+* Added a simple test suite to check for compliance and avoid regressions
+
+Inline patterns
+---------------
+
+There are several patterns you can use to highlight your text:
+
+* Emphasis
+ * Surround your text with `*` or `_` to get *emphasised* text:
+ This *is* cool.
+ This _is_ cool, too.
+ * Surround your text with `**` or `__` to get **strong** text:
+ This **is** cool.
+ This __is__ cool, too.
+ * Surround your text with `***` or `___` to get ***strong and emphasised*** text:
+ This ***is*** cool.
+ This ___is___ cool, too.
+ * But this example won't work as expected:
+ ***Hello** you*
+ This is a wontfix bug because it would make the source too complex.
+ Use this instead:
+ ***Hello*** *you*
+
+* inline Code
+
+ You can produce inline code by surrounding it with backticks.
+
+ Use `rm -rf /` if you're a N00b.
+ Use ``rm -rf /`` if you're a N00b.
+ Use ```rm -rf /``` if you're a N00b.
+
+ Double and triple backticks can be used if the code itself contains backticks.
+
+
+Titles
+------
+
+Creating titles in smu is very easy. There are two different syntax styles. The
+first is underlining with at least three characters:
+
+ Heading
+ =======
+
+ Topic
+ -----
+
+This is very intuitive and self explaining. The resulting sourcecode looks like
+this:
+
+ <h1>Heading</h1>
+ <h2>Topic</h2>
+
+Use the following prefixes if you don't like underlining:
+
+ # h1
+ ## h2
+ ### h3
+ #### h4
+ ##### h5
+ ###### h6
+
+Links
+-----
+
+The simplest way to define a link is with simple `<>`.
+
+ <http://s01.de>
+
+You can do the same for E-Mail addresses:
+
+ <yourname@s01.de>
+
+If you want to define a label for the url, you have to use a different syntax
+
+ [smu - simple mark up](http://s01.de/~gottox/index.cgi/proj_smu)
+
+The resulting HTML-Code
+
+ <a href="http://s01.de/~gottox/index.cgi/proj_smu">smu - simple mark up</a></p>
+
+Lists
+-----
+
+Defining lists is very straightforward:
+
+ * Item 1
+ * Item 2
+ * Item 3
+
+Result:
+
+ <ul>
+ <li>Item 1</li>
+ <li>Item 2</li>
+ <li>Item 3</li>
+ </ul>
+
+Defining ordered lists is also very easy:
+
+ 1. Item 1
+ 2. Item 2
+ 3. Item 3
+
+Only the first number in a list is meaningful. All following list items are
+continously counted. If you want a list starting at 2, you could write:
+
+ 2. Item 1
+ 2. Item 2
+ 2. Item 3
+
+and get the following HTML which will render with the numbers 2, 3, 4:
+
+ <ol start="2">
+ <li>Item 1</li>
+ <li>Item 2</li>
+ <li>Item 3</li>
+ </ol>
+
+Code & Blockquote
+-----------------
+
+Use the `> ` as a line prefix for defining blockquotes. Blockquotes are
+interpreted as well. This makes it possible to embed links, headings and even
+other quotes into a quote:
+
+ > Hello
+ > This is a quote with a [link](http://s01.de/~gottox)
+
+Result:
+ <blockquote><p>
+ Hello
+ This is a quote with a <a href="http://s01.de/~gottox">link</a></p>
+ </blockquote>
+
+
+You can define a code block with a leading Tab or with __4__ leading spaces
+
+ this.is(code)
+
+ this.is(code, too)
+
+Result:
+ <pre><code>this.is(code)</code></pre>
+ <pre><code>this.is(code, too)
+ </code></pre>
+
+Please note that you can't use HTML or smu syntax in a code block.
+
+Another way to write code blocks is to use code fences:
+
+ ```json
+ {"some": "code"}
+ ```
+
+This has two advantages:
+* The optional language identifier will be turned into a `language-` class name
+* You can keep the original indentation which helps when doing copy & paste
+
+Tables
+------
+
+Tables can be generated with the following syntax:
+
+ | Heading1 | Heading2 |
+ | -------- | -------- |
+ | Cell 1 | Cell2 |
+
+Aligning the columns make the input nicer to read, but is not necessary to get
+correct table output. You could just write
+
+ | Heading1 | Heading2 |
+ | --- | --- |
+ | Cell 1 | Cell2 |
+
+To align the content of table cells, use `|:--|` for left, `|--:|` for right
+and `|:--:|` for centered alignment in the row which separates the header from
+the table body.
+
+ | Heading1 | Heading2 | Heading3 |
+ | :------- | :------: | -------: |
+ | Left | Center | Right |
+
+Other interesting stuff
+-----------------------
+
+* to insert a horizontal rule simple add `- - -` into an empty line:
+
+ Hello
+ - - -
+ Hello2
+
+ Result:
+ <p>
+ Hello
+ <hr />
+
+ Hello2</p>
+
+* Any ASCII punctuation character may escaped by precedeing them with a
+ backslash to avoid them being interpreted:
+
+ !"#$%&'()*+,-./:;<=>?@[]^_`{|}~\
+
+* To force a linebreak simple add two spaces to the end of the line:
+
+ No linebreak
+ here.
+ But here is
+ one.
+
+embed HTML
+----------
+
+You can include arbitrary HTML code in your documents. The HTML will be
+passed through to the resulting document without modification. This is a good
+way to work around features that are missing in smu. If you don't want this
+behaviour, use the `-n` flag when executing smu to stricly escape the HTML
+tags.<
\ No newline at end of file