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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash
# Author: Jens Getreu
# apt install pandoc docbook-xsl-ns xsltproc
render () {
### parse args
#set -x
InPath="$1"
InFile="${InPath##*/}"
InFileExt="${InPath##*.}"
InBase="${InFile%.*}"
InDir="${InPath%/*}"
if [ "$InDir" = "$InPath" ] ; then
InDir="."
fi
OutPath="$2"
OutFile="${OutPath##*/}"
OutBase="${OutFile%.*}"
OutDir="${OutPath%/*}"
if [ "$OutDir" = "$OutPath" ] ; then
OutDir="."
fi
### Prepare
XmlPath="$OutDir/$OutBase.xml"
HtmlPath="$OutDir/$OutBase.html"
TemplatePath="$OutDir/template.db"
mkdir -p "$OutDir"
### Generate XML
# unfortunately the chain does not honor --number-section yet
if [ $InFileExt == 'xml' ]
then
cp "$InPath" "$XmlPath"
else
if ! pandoc -s -t docbook5 -o "$XmlPath" "$InPath"
then
echo Fatal error: Pandoc failed: \"$InPath\"
exit 1
fi
fi
# Workaround bug
# [Docbook5 Writer: produces invalid output when author is given ·
# Issue #6244 · jgm/pandoc](https://github.com/jgm/pandoc/issues/6244)
if grep -q '<author>' "$XmlPath" && ! grep -q '<personname>' "$XmlPath"
then
echo change
sed -i 's/<author>/<author><personname>/g' "$XmlPath"
sed -i 's/<\/author>/<\/personname><\/author>/g' "$XmlPath"
fi
### Validate
if ! xmlstarlet val --err \
--xsd /usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd \
"$XmlPath"
then
echo Fatal error: docbook file \"$XmlFile\" is not valid.
exit 1
fi
### Generate .html
# xsltproc also take parameters e.g. --stringparam use.extensions 0\
# this is only needed for html output
cp -r "$InDir/images/" "$OutDir"
cp "$InDir/docutils_basic.css" "$OutDir"
### Generate HTML
# Xsltproc also take parameters e.g. --stringparam use.extensions 0\
# Schema 1.79.1 does not render figure references correctly:
# /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/html/docbook.xsl\
# Use snapshot with UTF-8 in docbook.xsl instead
xsltproc --stringparam html.stylesheet docutils_basic.css --output "$HtmlPath" \
--stringparam section.autolabel 1 \
/usr/share/xml/docbook/stylesheet/docbook-xsl-ns/xhtml/docbook.xsl \
"$XmlPath" && \
rm "$XmlPath"
}
### Main
# usage:
# render FILE [FILE]
# render report.md ./rendition/report.html
if [[ -n "${2/[ ]*\n/}" ]] ; then
OutPath="$2"
else
OutPath="${1%.*}.html" # $2 is empty
fi
render "$1" "$OutPath"