You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.4 KiB
120 lines
2.4 KiB
4 years ago
|
#!/bin/sh
|
||
|
set -e
|
||
|
|
||
|
unset SKIP_FOOTER
|
||
|
unset SKIP_HEADER
|
||
|
unset SKIP_LIST
|
||
|
unset VERBOSE
|
||
|
unset PRINT_HELP
|
||
|
|
||
|
usage() {
|
||
|
printf "Usage: rivet [-o destdir] [-hovelf] srcdir\n"
|
||
|
printf "\t-h: prints this message\n"
|
||
|
printf "\t-o [destdir]: specifies the output direcotory to be [destdir]\n"
|
||
|
printf "\t-v: makes the script verbose\n"
|
||
|
printf "\t-e: skips prepending _header.html to .html files\n"
|
||
|
printf "\t-f: skips appending _footer.html to .html files\n"
|
||
|
printf "\t-l: skips the generation of .html file list\n"
|
||
|
exit 2
|
||
|
}
|
||
|
|
||
|
apply_header() {
|
||
|
tmpfile="tmpheadfile.tmp"
|
||
|
cp "$1" "$tmpfile"
|
||
|
sed "/<head>/r $headerfile" "$tmpfile" > "$1"
|
||
|
rm -f "$tmpfile"
|
||
|
}
|
||
|
|
||
|
apply_footer() {
|
||
|
tmpfoot="tmpfooter.tmp"
|
||
|
tmpfile="tmpfootfile.tmp"
|
||
|
cp "$footerfile" "$tmpfoot"
|
||
|
sed -i '1s/^/<footer> /' "$tmpfoot"
|
||
|
echo '</footer>' >> "$tmpfoot"
|
||
|
cp "$1" "$tmpfile"
|
||
|
sed "/<\/body/r $tmpfoot" "$tmpfile" > "$1"
|
||
|
rm -f "$tmpfile" "$tmpfoot"
|
||
|
}
|
||
|
|
||
|
convert() {
|
||
|
tmpfile="tmpconvfile.tmp"
|
||
|
infile="$1"
|
||
|
outfile="${infile%???}.html"
|
||
|
cp "$1" "$tmpfile"
|
||
|
# TODO: convert links to .md to .html
|
||
|
lowdown -s -Thtml -o "$outfile" "$tmpfile"
|
||
|
rm -f "$tmpfile" "$1"
|
||
|
}
|
||
|
|
||
|
# Check dependencies
|
||
|
if ! command -v lowdown > /dev/null; then
|
||
|
echo "lowdown is not installed"
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
destdir='dst'
|
||
|
# Get arguments using getopts
|
||
|
# rivet [src] [-vhelf] [-o dir]
|
||
|
# -o [dir]: set the destination directory, defaults to "dst"
|
||
|
# -v: verbose, sets x so it prints every line
|
||
|
# -h: prints usage
|
||
|
# -e: skip prepend header
|
||
|
# -l: skip article list
|
||
|
# -f: skip append footer
|
||
|
while getopts 'o:vhelf' c
|
||
|
do
|
||
|
case "$c" in
|
||
|
o) destdir=$OPTARG ;;
|
||
|
v) VERBOSE=true ;;
|
||
|
h) PRINT_HELP=true ;;
|
||
|
e) SKIP_HEADER=true ;;
|
||
|
l) SKIP_LIST=true ;;
|
||
|
f) SKIP_FOOTER=true ;;
|
||
|
*) ;;
|
||
|
esac
|
||
|
done
|
||
|
shift $((OPTIND - 1))
|
||
|
srcdir="$(basename "$1")"
|
||
|
headerfile=$srcdir/_header.html
|
||
|
footerfile=$srcdir/_footer.html
|
||
|
|
||
|
|
||
|
if [ "$PRINT_HELP" ]; then
|
||
|
usage
|
||
|
fi
|
||
|
if [ "$VERBOSE" ]; then
|
||
|
set -x
|
||
|
fi
|
||
|
|
||
|
if ! [ -d "$srcdir" ]; then
|
||
|
echo "Error: missing source direcotry"
|
||
|
usage
|
||
|
fi
|
||
|
|
||
|
mkdir -p "$destdir"
|
||
|
cp -r "$srcdir"/* "$destdir"
|
||
|
rm -f "$destdir"/_header.html "$destdir"/_footer.html
|
||
|
|
||
|
# Convert markdown files
|
||
|
find "$destdir" -name "*.md" |
|
||
|
while IFS="" read -r file; do
|
||
|
convert "$file"
|
||
|
done
|
||
|
|
||
|
# Prepend header
|
||
|
if ! [ "$SKIP_HEADER" ]; then
|
||
|
find "$destdir" -name "*.html" |
|
||
|
while IFS="" read -r file; do
|
||
|
apply_header "$file"
|
||
|
done
|
||
|
fi
|
||
|
# Append footer
|
||
|
if ! [ "$SKIP_FOOTER" ]; then
|
||
|
find "$destdir" -name "*.html" |
|
||
|
while IFS="" read -r file; do
|
||
|
apply_footer "$file"
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
exit
|