forked from HPR/hpr-tools
		
	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.
			
			
This commit is contained in:
		
							
								
								
									
										189
									
								
								Show_Submission/do_pandoc_assets
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										189
									
								
								Show_Submission/do_pandoc_assets
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,189 @@ | ||||
| #!/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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user