Pandoc als Wiki-Engine

Installation

Mit Debian oder Ubuntu ist die Installation von Pandoc denkbar einfach:

apt-get install pandoc

Markdown

Markdown ist eine einfache Auszeichnungssprache, wie sie von Wikis und Blogs verwendet wird. Wie genau die Syntax ist, lässt sich in der Manpage nachlesen:

man 5 markdown
man 5 pandoc_markdown

Beispiel

mkdir -p ~/pandoc/wiki
cd ~/pandoc/wiki

vi index.md:

# Überschrift Level 1

## Überschrift Level 2

[Link nach www.failover.de](https://www.failover.de/)

![Ein Bild](images/einbild.png)

Etwas Code mit Syntax-Highlighting: `:(){ :|:&};:`{.bash} (Nicht ausführen, das ist eine [Forkbombe](https://de.wikipedia.org/wiki/Forkbomb))

Metadaten in YAML

Man kann zwar Metadaten direkt indie Markdown-Datei schreiben, es ist aber auch möglich, sie in einer extra Datei zu separieren:

vi index.yaml:

---
author: 'Michael Mende'
abstract: 'Man kann zwar Metadaten direkt in die Markdown-Datei schreiben, es ist aber auch möglich, sie in einer extra Datei zu separieren'
keywords: 'pandoc, html, yaml, markdown'
date: '2015-06-20'
...

HTML

Der Markdown-Quelltext lässt sich leicht in HTML umwandeln, pandoc -f markdown -t html5 index.md:

<h1 id="überschrift-level-1">Überschrift Level 1</h1>
<h2 id="überschrift-level-2">Überschrift Level 2</h2>
<p><a href="https://www.failover.de/">Link nach www.failover.de</a> <img src="images/einbild.png" alt="Ein Bild" /></p>

HTML mit Template

cat template.html

<!DOCTYPE html>
<html>
<head>
  <title>$title$</title>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <meta name="description" content="$abstract$" />
  <meta name="keywords" content="$keywords$" />
  <!-- Custom CSS -->
  <style type="text/css">
$highlighting-css$
  </style>
</head>
<body>
$body$
</body>
</html>

HTML-Output

pandoc -f markdown -t html5 --template template.html index.md index.yaml:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <meta name="description" content="Man kann zwar Metadaten direkt in die Markdown-Datei schreiben, es ist aber auch möglich, sie in einer extra Datei zu separieren" />
  <meta name="keywords" content="pandoc, html, yaml, markdown" />
  <!-- Custom CSS -->
  <style type="text/css">
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
  margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #40a070; }
code > span.fl { color: #40a070; }
code > span.ch { color: #4070a0; }
code > span.st { color: #4070a0; }
code > span.co { color: #60a0b0; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #06287e; }
code > span.er { color: #ff0000; font-weight: bold; }
  </style>
</head>
<body>
<h1 id="überschrift-level-1">Überschrift Level 1</h1>
<h2 id="überschrift-level-2">Überschrift Level 2</h2>
<p><a href="https://www.failover.de/">Link nach www.failover.de</a></p>
<figure>
<img src="images/einbild.png" alt="Ein Bild" /><figcaption>Ein Bild</figcaption>
</figure>
<p>Etwas Code mit Syntax-Highlighting: <code class="sourceCode bash"><span class="fu">:()</span><span class="kw">{</span> <span class="kw">:|:&amp;}</span>;<span class="kw">:</span></code></p>
</body>
</html>

Makefile

vi Makefile:

.SILENT:

INMD     := $(shell find * -type f -name "*.md")

PANDOC  := pandoc -f markdown -t html5 --template template.html -s --highlight-style kate

.PHONY: main html upload help

main: html

html: 
    $(info $@:) 
    for _in in ${INMD}; do \
        ${PANDOC} -o $${_in%.md}.html $$_in $${_in%.md}.yaml; \
    done

upload:
    rsync -auv -C --delete ./* yourhost.com:/var/www/html/your_path/

help :
    echo ""
    echo "make (main)   - builds all in current directory"
    echo "make html         - creates all html files"
    echo "make upload       - copy everything to your webserver"
    echo "make help         - this info"
    echo ""