hpr-tools/Show_Submission/do_pandoc_assets
Dave Morriss 4408c255d5 Added two new scripts
Show_Submission/author_title.pl: Added the subtitle field taken from the
    JSON into the YAML

Show_Submission/do_pandoc_assets: New script to process Markdown assets
    files. Not in use.
2024-12-01 21:05:50 +00:00

190 lines
4.5 KiB
Bash
Executable File

#!/bin/bash -
#===============================================================================
#
# FILE: do_pandoc_assets
#
# USAGE: ./do_pandoc_assets shownumber
#
# DESCRIPTION: Runs Pandoc on any assets that need it. The assets are in the
# directory ~/HPR/Show_Submission/shownotes/hpr1234/ and the
# result is written to the 'uploads' directory to go to the HPR
# server.
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
# VERSION: 0.0.1
# CREATED: 2024-08-14 18:54:21
# REVISION: 2024-08-14 23:15:48
#
#===============================================================================
set -o nounset # Treat unset variables as an error
SCRIPT=${0##*/}
# DIR=${0%/*}
VERSION='0.0.1'
STDOUT="/dev/fd/2"
#
# Load library functions
#
LIB="$HOME/HPR/function_lib.sh"
[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
# shellcheck source=/home/cendjm/HPR/function_lib.sh
source "$LIB"
#
# Colour codes
#
define_colours
# {{{ Functions: -- _usage --
#=== FUNCTION ================================================================
# NAME: _usage
# DESCRIPTION: Report usage
# PARAMETERS: None
# RETURNS: Nothing
#===============================================================================
_usage () {
cat >$STDOUT <<-endusage
Usage: ./${SCRIPT} [-h] [-d] shownumber
Version: $VERSION
Runs Pandoc against assets for a particular show, catering for the case when
a host sends in external notes (referenced from the main notes) in Markdown
format rather than HTML.
For the moment the only format catered for is Markdown, in files with the
suffix 'md' or 'mkd'
Options:
-h Print this help
-d Select dry run mode
Arguments:
shownumber
Examples
./${SCRIPT} -h
./${SCRIPT} -d 2240
endusage
exit
}
# }}}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Sanity checks
#
JQ=$(command -v jq)
[ -n "$JQ" ] || { echo "Program 'jq' was not found"; exit 1; }
#
# Process options first
#
while getopts :dDh opt
do
case "${opt}" in
d) DRYRUN=1;;
h) _usage;;
?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
esac
done
shift $((OPTIND - 1))
#
# Default options if not provided
#
DRYRUN=${DRYRUN:-0}
#
# Check there's an argument after removing any options. Abort if not
#
if [[ $# -ne 1 ]]; then
_usage
fi
#
# Make the explicit show id, catering for leading zeroes (belt & braces)
#
# TODO: cater for 'hpr1234' as well as a plain number
printf -v SHOWID 'hpr%04d' "$1"
#
# Paths to files
#
# ------------------------------------------------------------------------------
# Main directory
BASENAME="$HOME/HPR/Show_Submission"
# JSON to YAML Perl script
# J2Y="$BASENAME/author_title.pl"
# [ -e "$J2Y" ] || { echo "Program '$J2Y' was not found"; exit 1; }
# The notes for all shows are here
SHOWNOTES="$BASENAME/shownotes"
# Notes for this show are here
SHOWDIR="$SHOWNOTES/$SHOWID"
# Assets which need Pandoc are here
ASSETDIR="$SHOWDIR/uploads"
# The incoming JSON from the upload form
JSONFILE="$SHOWDIR/shownotes.json"
#
# Check there are Markdown files in the asset directory and collect their
# names
#
declare -a MARKDOWN
mapfile -t MARKDOWN < <(find "$ASSETDIR" -type f -regextype posix-extended -regex '.*\.mk?d')
#
# Nothing found?
#
if [[ ${#MARKDOWN[@]} -eq 0 ]]; then
coloured 'red' "No Markdown files found"
exit 1
fi
# coloured 'cyan' "Markdown files found:"
# printf '%s\n' "${MARKDOWN[@]}"
#
# Process whatever markup we have, only catering for Markdown at present
#
for file in "${MARKDOWN[@]}"; do
coloured 'yellow' "Processing: $file"
OUTFILE="${file%.*}.html"
if [[ $DRYRUN -eq 0 ]]; then
#
# Build nice HTML, disabling the smart quotes and stuff, but using
# a local format definition and the HPR CSS. For now we just add
# a title from the JSON. We could give Pandoc a block of YAML with
# more attributes if we wished.
#
pandoc -f markdown-smart -t html5 --standalone \
--template=hpr.html5 -c https://hackerpublicradio.org/css/hpr.css \
--metadata title="$(jq -r '.episode.Title' "$JSONFILE")" --strip-comments \
-o "$OUTFILE" "${file}"
coloured 'green' "Wrote: $OUTFILE"
else
coloured 'yellow' "Dry run mode: Would have written $OUTFILE"
fi
done
exit
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker