1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh -e
workdir="$(readlink -f "$1")"
outdir="$workdir/public_html"
mkdir -p "$outdir/tmp"
mkdir -p "$outdir/assets"
cp "$HOME/.local/share/tinywiki/template.html" "$HOME/.local/share/tinywiki/style.css" "$outdir/assets"
cd "$workdir"
find . -name "*.md" | while read -r file; do
path=$(dirname $file)
name=$(basename $file | cut -f 1 -d '.')
title=$(grep title "$file" | cut -d":" -f 2- | cut -b 2-)
if [ "$title" = "" ]; then
title="$name"
fi
echo "["$title"]("$path/$name".html)" >> "$outdir/tmp/toc.md"
done
find . -name "*.md" ! -name "toc.md" | while read -r file; do
echo "Converting $file"
file=$(echo $file | cut -c 3-)
path=$(dirname $file)
name=$(basename $file | cut -f 1 -d '.')
path_to_root=$(realpath --relative-to="$outdir/$path" "$outdir")
escaped_path_to_root=$(printf '%s\n' "$path_to_root" | sed -e 's/[\/&]/\\&/g')
cp $workdir/$file $outdir/tmp
awk -v S="$(cat $outdir/tmp/toc.md)" '/\[\[toc\]\]/{$0=S}1' "$file" > "$outdir/tmp/$name.md"
grep -Po '\[.+\]\((?!https?:\/\/).*(?<!\.html|\.png|\.svg|\.jpg)\)' "$workdir/$file" | while read match; do
clean_match=$(echo $match | awk -F '(' ' {{print $2}} ' | cut -f 1 -d ')')
link=$clean_match.html
escaped_match=$(printf '%s\n' "$clean_match" | sed -e 's/[\/&]/\\&/g')
escaped_link=$(printf '%s\n' "$link" | sed -e 's/[\/&]/\\&/g')
sed -ie "s/$escaped_match/$escaped_link/" "$outdir/tmp/$name.md"
done
mkdir -p $outdir/$path
pandoc -s --template="$outdir/assets/template.html" -V home="$path_to_root/index.html" --css=$path_to_root/assets/style.css --highlight-style breezedark -f markdown+hard_line_breaks --katex $outdir/tmp/"$name".md -o $outdir/$path/$name.html
sed -i "s/https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/KaTeX\/0.11.1\/katex.min.css/$escaped_path_to_root\/assets\/css\/katex.min.css/g" "$outdir/$path/$name.html"
sed -i "s/https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/KaTeX\/0.11.1\/katex.min.js/$escaped_path_to_root\/assets\/js\/katex.min.js/g" "$outdir/$path/$name.html"
done
cd $workdir
rm -rf $outdir/tmp
echo DONE