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:
parent
b7cae1cb90
commit
4408c255d5
114
Show_Submission/author_title.pl
Executable file
114
Show_Submission/author_title.pl
Executable file
@ -0,0 +1,114 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
#===============================================================================
|
||||||
|
#
|
||||||
|
# FILE: author_title.pl
|
||||||
|
#
|
||||||
|
# USAGE: ./author_title.pl JSON_file YAML_file
|
||||||
|
#
|
||||||
|
# DESCRIPTION: Reads the JSON file generated as a new HPR show is uploaded
|
||||||
|
# via the submission form. Converts certain elements to a YAML
|
||||||
|
# structure which is written to a file for use by Pandoc when it
|
||||||
|
# generates a version of the notes used for local proof-reading.
|
||||||
|
#
|
||||||
|
# This function has been performed by 'jq' in the past, but with
|
||||||
|
# mixed success. Also 'yq' has been used experimentally with
|
||||||
|
# little success because of the wide variety of the input JSON
|
||||||
|
# data. This script has been written to try and achieve parsing,
|
||||||
|
# data extraction and YAML generation in a more controllable
|
||||||
|
# way.
|
||||||
|
#
|
||||||
|
# OPTIONS: ---
|
||||||
|
# REQUIREMENTS: ---
|
||||||
|
# BUGS: ---
|
||||||
|
# NOTES: 2024-10-18 Modified the YAML to include the field Pandoc is
|
||||||
|
# looking for: 'subtitle', This adds another header to the full
|
||||||
|
# notes, which allows another check to be carried out. Also
|
||||||
|
# using Pandoc template 'hpr_dev.html' which omits the '<base>'
|
||||||
|
# tag.
|
||||||
|
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||||
|
# VERSION: 0.0.3
|
||||||
|
# CREATED: 2023-10-13 22:37:36
|
||||||
|
# REVISION: 2024-10-18 16:17:14
|
||||||
|
#
|
||||||
|
#===============================================================================
|
||||||
|
|
||||||
|
use v5.16;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use feature qw{ postderef say signatures state try };
|
||||||
|
no warnings
|
||||||
|
qw{ experimental::postderef experimental::signatures experimental::try };
|
||||||
|
|
||||||
|
use JSON;
|
||||||
|
use YAML::Tiny;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Version number (Incremented by Vim)
|
||||||
|
#
|
||||||
|
our $VERSION = '0.0.3';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Script and directory names
|
||||||
|
#
|
||||||
|
( my $PROG = $0 ) =~ s|.*/||mx;
|
||||||
|
( my $DIR = $0 ) =~ s|/?[^/]*$||mx;
|
||||||
|
$DIR = '.' unless $DIR;
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Declarations
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Constants and other declarations
|
||||||
|
#
|
||||||
|
my $basedir = "$ENV{HOME}/HPR/Show_Submission";
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable Unicode mode
|
||||||
|
#
|
||||||
|
binmode STDOUT, ":encoding(UTF-8)";
|
||||||
|
binmode STDERR, ":encoding(UTF-8)";
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check arguments
|
||||||
|
#
|
||||||
|
die "Usage: $PROG JSON_file YAML_file\n" if ( scalar(@ARGV) != 2 );
|
||||||
|
my $json_file = shift;
|
||||||
|
my $yaml_file = shift;
|
||||||
|
|
||||||
|
die "Unable to find $json_file\n" unless ( -e $json_file );
|
||||||
|
|
||||||
|
#
|
||||||
|
# Read and parse the JSON
|
||||||
|
#
|
||||||
|
my $json = JSON->new->utf8;
|
||||||
|
|
||||||
|
open( my $jfile, "<:encoding(UTF-8)", $json_file )
|
||||||
|
or die "Unable to open $json_file\n";
|
||||||
|
my $json_text = <$jfile>;
|
||||||
|
close($jfile);
|
||||||
|
|
||||||
|
my $content = decode_json($json_text);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Construct the YAML (is 'subtitle' better?)
|
||||||
|
#
|
||||||
|
my $yaml = YAML::Tiny->new(
|
||||||
|
{ author => $content->{host}->{Host_Name},
|
||||||
|
title => $content->{episode}->{Title},
|
||||||
|
subtitle => $content->{episode}->{Summary},
|
||||||
|
summary => $content->{episode}->{Summary},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
#say Dumper(\$yaml);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Output the YAML
|
||||||
|
#
|
||||||
|
unless ( $yaml->write($yaml_file) ) {
|
||||||
|
warn "Problem writing the YAML to $yaml_file\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
exit;
|
||||||
|
|
||||||
|
# vim: syntax=perl:ts=8:sw=4:et:ai:tw=78:fo=tcrqn21:fdm=marker
|
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user