forked from HPR/hpr-tools
		
	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.
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | |
| 
 |